如何从同一类中的另一个方法检索最后插入的 id?
Posted
技术标签:
【中文标题】如何从同一类中的另一个方法检索最后插入的 id?【英文标题】:How to retrieve the last inserted id from another method inside same class? 【发布时间】:2019-10-24 23:11:22 【问题描述】:我在Home
类中有两个方法,分别称为addProperty
和uploadImages
。
我从 jquery dropzone 调用 uploadImages()
方法来发布图像,并调用 addProperty()
将表单输入插入数据库。
我想将最后插入的 Id 从 addProperty
方法传递给 uploadImages
以将图像详细信息保存到数据库中。
Home.php(控制器)
<?php if(!defined('BASEPATH')) exit('No direct script access allowed');
class Home extends CI_Controller
/**
* This is default constructor of the class
*/
public function __construct()
parent::__construct();
$this->load->model('property_model');
/**
* Index Page for this controller.
*/
public function index()
$data = array('title'=> 'Vierra Property Broker', 'main_content'=>'home');
$this->load->view('template', $data);
/**
* Loaading the submit property form.
*/
public function listProperty()
$data = array('title'=> 'Vierra Property Broker - Submit your Property', 'main_content'=>'submit_property');
$this->load->view('template', $data);
function addProperty()
$this->load->library('form_validation');
//$this->form_validation->set_rules('prop_title','Villa Title','trim|required|max_length[128]');
// $this->form_validation->set_rules('prop_status','Status','trim|required');
//$this->form_validation->set_rules('prop_type','Type','trim|required');
//$this->form_validation->set_rules('prop_price','Price','trim|required|numeric');
//$this->form_validation->set_rules('prop_sqft','Sqft','trim|required|numeric');
$this->form_validation->set_rules('prop_rooms','Rooms','trim|required|numeric');
$this->form_validation->set_rules('prop_address','Address','trim|required|max_length[200]');
$this->form_validation->set_rules('prop_owner_phone','Mobile Number','required|min_length[10]');
$this->form_validation->set_rules('prop_owner_name','Owner Name','required|min_length[5]');
$this->form_validation->set_rules('prop_owner_email','Owner Email','required|valid_email');
//$this->form_validation->set_rules('prop_detailed_info','Detailed Info','trim|required|max_length[2000]');
//$this->form_validation->set_rules('prop_status','Current Status','trim|required');
if($this->form_validation->run() == FALSE)
$this->listProperty();
else
$prop_title = ucwords(strtolower($this->security->xss_clean($this->input->post('prop_title'))));
$prop_status = ucwords(strtolower($this->security->xss_clean($this->input->post('prop_status'))));
$prop_type = ucwords(strtolower($this->security->xss_clean($this->input->post('prop_type'))));
$prop_price = $this->security->xss_clean($this->input->post('prop_price'));
$prop_sqft = $this->security->xss_clean($this->input->post('prop_sqft'));
$prop_rooms = $this->security->xss_clean($this->input->post('prop_rooms'));
$prop_address = $this->security->xss_clean($this->input->post('prop_address'));
$prop_owner_name = $this->security->xss_clean($this->input->post('prop_owner_name'));
$prop_owner_email = $this->security->xss_clean($this->input->post('prop_owner_email'));
$prop_owner_phone = $this->security->xss_clean($this->input->post('prop_owner_phone'));
$prop_detailed_info = $this->security->xss_clean($this->input->post('prop_detailed_info'));
$prop_current_status = $this->security->xss_clean($this->input->post('prop_current_status'));
//$userInfo = array('email'=>$email, 'password'=>getHashedPassword($password), 'roleId'=>$roleId, 'name'=> $name,
//'mobile'=>$mobile, 'createdBy'=>$this->vendorId, 'createdDtm'=>date('Y-m-d H:i:s'));
$propertyInfo = array('title'=>$prop_title, 'status'=>$prop_status, 'type'=>$prop_type, 'price'=>$prop_price,
'sqft'=>$prop_sqft, 'rooms'=>$prop_rooms, 'address'=>$prop_address, 'name'=>$prop_owner_name,
'email'=>$prop_owner_email, 'phone'=>$prop_owner_phone, 'detailedInfo'=>$prop_detailed_info,
'currentStatus'=>$prop_current_status);
$this->load->model('property_model');
$result = $this->property_model->addNewProperty($propertyInfo);
if($result > 0)
//$propertyImgUpload = uploadImages($result);
$this->session->set_flashdata('success', 'Thank you for submiting your property with us!, Our team will contact you shortly');
else
$this->session->set_flashdata('error', 'Submission of property failed, Contact wasim@vpd.ae');
redirect('/submit-property');
function uploadImage($propertyid)
if (!empty($_FILES))
$count_img = count($_FILES['file']['name']);
foreach($_FILES['file']['tmp_name'] as $key => $value)
$tempFile = $_FILES['file']['tmp_name'][$key];
$fileName = $_FILES['file']['name'][$key];
$targetPath = 'property-images/';
$targetFile = $targetPath . $fileName ;
if(move_uploaded_file($tempFile, $targetFile))
$response = "Success";
else
$response = "Failed";
?>
addProperty.js(Jquery 验证和发布 dropzone 图像到 uploadImages() 方法
/**
* File : addUser.js
*
* This file contain the validation of add user form
*
* Using validation plugin : jquery.validate.js
*
* @author Sarath Chandran
*/
$(document).ready(function()
$("#error_msg").hide();
var addPropertyForm = $("#property-form");
var validator = addPropertyForm.validate(
rules:
//prop_title : required : true ,
//prop_status : required : true, selected : true ,
//prop_type : required : true, selected: true ,
prop_rooms : required : true, selected: true ,
prop_address : required : true ,
prop_owner_name : required : true ,
//prop_detailed_info : required : true ,
prop_owner_email : required : true, email : true ,
prop_owner_phone : required : true, digits : true ,
//prop_price : required : true, digits : true ,
//prop_sqft : required : true, digits : true
,
messages:
//prop_title : required : "Please enter title of villa" ,
//prop_status : required : "Please select status", selected : "Please select atlease one option" ,
//prop_type : required : "Please select type of villa", selected : "Please select atlease one option" ,
prop_rooms : required : "Please select bed rooms", selected : "Please select atlease one option" ,
prop_address : required : "Please enter address of villa",
prop_owner_name : required : "Please enter name of owner",
prop_owner_email : required : "Please enter email of owner", email : "Please enter valid email",
prop_owner_phone : required : "Please enter phone of owner", digits : "Please enter valid phone no",
//prop_price : required : "Please enter price of villa", digits : "Please enter price in digits",
//prop_detailed_info : required : "Please enter detailed information",
//prop_sqft : required : "Please enter size of villa", digits : "Please enter size in Sqft"
,
)
Dropzone.autoDiscover = false;
$("div#myDropzone").dropzone(
url: 'image-upload',
addRemoveLinks: true,
paramName: "file",
maxFiles:11,
autoProcessQueue: false,
uploadMultiple: true,
acceptedFiles: "image/*",
maxFilesize: 1,
parallelUploads: 10,
init: function ()
var myDropzone = this;
$("#property-form").submit(function (e)
$(window).scrollTop(0);
//e.preventDefault();
if ( $("#property-form").valid() )
myDropzone.processQueue();
);
this.on('sending', function(file, xhr)
// Append all form inputs to the formData Dropzone will POST
//alert("Data is sending");
);
this.on("complete", function (file)
if (this.getUploadingFiles().length === 0 && this.getQueuedFiles().length === 0)
//alert("Completed Upload");
$("#property-form").submit();
);
);
);
submit_property.php(查看)
<div class="content-area-7 submit-property">
<div class="container">
<div class="row">
<div class="col-md-12">
<!-- <div id="error_message" class="notification-box"></div> -->
</div>
<?php
$this->load->helper('form');
$error = $this->session->flashdata('error');
if($error)
echo '<div class="notification-box">'.$error.'</div>';
$success = $this->session->flashdata('success');
if($success)
echo '<div class="notification-box">'.$success.'</div>';
?>
<div id="error_msg" class="alert alert-danger wow fadeInRight delay-01s" role="alert" style="visibility: visible; animation-name: fadeInRight;">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<strong>Oops!</strong>, Please fix the following errors and submit again
</div>
<div class="col-md-12">
<div class="submit-address">
<form name = "property-form" action="<?php echo base_url() ?>list-property" method="post" id="property-form">
<div class="main-title-2">
<h1><span>Tell Me</span> Something About Your Property</h1>
</div>
<div class="search-contents-sidebar mb-30">
<div class="form-group">
<label>Property Title</label>
<input class="input-text" name="prop_title" id="prop_title" placeholder="Property Title">
<?php echo form_error('prop_title'); ?>
</div>
<div class="row">
<div class="col-md-6 col-sm-6">
<div class="form-group">
<label>Status</label>
<select class="form-control required" id="prop_status" name="prop_status">
<option value="">Select</option>
<option value="Sale">For Sale</option>
<option value="Rent">For Rent</option>
</select>
</div>
</div>
<div class="col-md-6 col-sm-6">
<div class="form-group">
<label>Type</label>
<select class="form-control required" id="prop_type" name="prop_type">
<option value="">Select</option>
<option value="Modern">Modern</option>
<option value="Traditional">Traditional</option>
<option value="Arabic">Arabic</option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-md-3 col-sm-6">
<div class="form-group">
<label>Price (Dirham)</label>
<input class="input-text" name="prop_price" id="prop_price" placeholder="AED">
<?php echo form_error('prop_price'); ?>
</div>
</div>
<div class="col-md-3 col-sm-6">
<div class="form-group">
<label>Sqft</label>
<input class="input-text" name="prop_sqft" id="prop_sqft" placeholder="SqFt">
<?php echo form_error('prop_sqft'); ?>
</div>
</div>
<div class="col-md-3 col-sm-6">
<div class="form-group">
<label>Bed Rooms</label>
<select class="form-control required" name="prop_rooms" id="prop_rooms">
<option value="">Select</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
</div>
</div>
<!-- <div class="col-md-3 col-sm-6">
<div class="form-group">
<label>Bathroom</label>
<select class="selectpicker search-fields" name="1">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
</select>
</div>
</div> -->
</div>
</div>
<div class="main-title-2">
<h1><span>Location</span></h1>
</div>
<div class="row mb-30 ">
<div class="col-md-6 col-sm-6">
<div class="form-group">
<label>Address</label>
<input class="input-text" id="prop_address" name="prop_address" placeholder="Address">
</div>
<?php echo form_error('prop_address'); ?>
</div>
</div>
<div class="main-title-2">
<h1><span>Contact</span> Details</h1>
</div>
<div class="row">
<div class="col-md-4 col-sm-4">
<div class="form-group">
<label>Name</label>
<input class="input-text" name="prop_owner_name" id="prop_owner_name" placeholder="Name">
<?php echo form_error('prop_owner_name'); ?>
</div>
</div>
<div class="col-md-4 col-sm-4">
<div class="form-group">
<label>Email</label>
<input class="input-text" name="prop_owner_email" id="prop_owner_email" placeholder="Email">
<?php echo form_error('prop_owner_email'); ?>
</div>
</div>
<div class="col-md-4 col-sm-4">
<div class="form-group">
<label>Contact No</label>
<input class="input-text" name="prop_owner_phone" id="prop_owner_phone" placeholder="Phone">
<?php echo form_error('prop_owner_phone'); ?>
</div>
</div>
</div>
<div class="main-title-2">
<h1><span>Upload</span> Photos Of Villa </h1>
</div>
<div id="myDropzone" class="dropzone dropzone-design mb-10">
<div class="dz-default dz-message" data=""><span>Drop files here to upload</span></div>
</div>
<div class="main-title-2">
<h1><span>Detailed</span> Information</h1>
</div>
<div class="row mb-30">
<div class="col-md-12">
<div class="form-group">
<textarea class="input-text" id="prop_detailed_info" name="prop_detailed_info" placeholder="Detailed Information"></textarea>
</div>
<?php echo form_error('prop_detailed_info'); ?>
</div>
</div>
</div>
<div class="col-md-12">
<input type="submit" class="btn button-sm button-theme" value="Submit" />
</div>
<script src="<?php echo base_url('assets/frontend/js/addProperty.js'); ?>"></script>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
Property_model.php(模型)
<?php if(!defined('BASEPATH')) exit('No direct script access allowed');
/**
* Class : User_model (User Model)
* User model class to get to handle user related data
* @author : Kishor Mali
* @version : 1.1
* @since : 15 November 2016
*/
class Property_model extends CI_Model
/**
* This function is used to get the user listing count
* @param string $searchText : This is optional search text
* @return number $count : This is row count
*/
function propertyListingCount($searchText = '')
$this->db->select('BaseTbl.propertyid, BaseTbl.title, BaseTbl.status, BaseTbl.type, BaseTbl.price, BaseTbl.phone');
$this->db->from('tbl_properties as BaseTbl');
if(!empty($searchText))
$likeCriteria = "(BaseTbl.email LIKE '%".$searchText."%'
OR BaseTbl.name LIKE '%".$searchText."%'
OR BaseTbl.phone LIKE '%".$searchText."%')";
$this->db->where($likeCriteria);
$this->db->where('BaseTbl.currentStatus', 0);
$query = $this->db->get();
return $query->num_rows();
/**
* This function is used to get the user listing count
* @param string $searchText : This is optional search text
* @param number $page : This is pagination offset
* @param number $segment : This is pagination limit
* @return array $result : This is result
*/
function propertyListing($searchText = '', $page, $segment)
$this->db->select('BaseTbl.propertyid, BaseTbl.title, BaseTbl.status, BaseTbl.type, BaseTbl.price, BaseTbl.phone');
$this->db->from('tbl_properties as BaseTbl');
if(!empty($searchText))
$likeCriteria = "(BaseTbl.email LIKE '%".$searchText."%'
OR BaseTbl.name LIKE '%".$searchText."%'
OR BaseTbl.phone LIKE '%".$searchText."%')";
$this->db->where($likeCriteria);
$this->db->where('BaseTbl.currentStatus', 0);
$this->db->order_by('BaseTbl.propertyid', 'DESC');
$this->db->limit($page, $segment);
$query = $this->db->get();
$result = $query->result();
return $result;
/**
* This function is used to add new property to system
* @return number $insert_id : This is last inserted id
*/
function addNewProperty($propertyInfo)
$this->db->trans_start();
$this->db->insert('tbl_properties', $propertyInfo);
$insert_id = $this->db->insert_id();
$this->db->trans_complete();
return $insert_id;
function addPropertyImgs($propertyImgs)
$this->db->trans_start();
$this->db->insert('tbl_property_images', $propertyImgs);
$insert_id = $this->db->insert_id();
$this->db->trans_complete();
return $insert_id;
?>
我想将图像详细信息插入到名为 tbl_property_images 的表中
-
文件上传工作
表单输入也成功插入
问题:
我需要使用propertyid
将图像详细信息插入到表中,propertyid
是我们从addProperty
方法中的$result
变量中获得的最后插入的id。
【问题讨论】:
出于好奇。需要exit('No direct script access allowed');
的部分吗?
不需要那个??
我不知道。这就是我问的原因
我不太了解你的代码,但是如果你需要在 add 属性中保存一个 Id,只需将其设置为“home”类的属性,这样你就可以使用它了来自同一类中的 uploadimage 方法。
尝试改进格式,以便于阅读。
【参考方案1】:
解决方案 1 创建一个插入记录并返回插入记录的 id 的过程。
解决方案 2 创建一个将所有数据插入各个表并返回成功或失败的过程。
【讨论】:
以上是关于如何从同一类中的另一个方法检索最后插入的 id?的主要内容,如果未能解决你的问题,请参考以下文章
如何从同一个类中的另一个构造函数调用抽象类的构造函数(方法重载)[重复]