在 Codeigniter 的同一控制器中将 $data 值从一个函数传递到另一个函数
Passing $data value from onefunction to another within same controller in Codeigniter
我在控制器中有 2 个函数。
- 连接到表单并进行验证。
- 图片上传回调函数
这只会在数据库中插入一张图片的路径。如果我从回调函数中回显 print_r,它会显示所有图像,但从验证函数中只显示一个图像。
// Some Validation
} else {
$this->fileupload_check();
$data['uploadedimage'] = $this->upload->data();
$image_name = $data['uploadedimage']['file_name'];
//echo '<pre>';
//print_r($this->upload->data());
$data['uploadedimage'] = $image_name;
$this->load->model('admin/model_users');
if($query = $this->model_users->insert_property_details($data)) {
redirect('dashboard/property-successfully-posted');
}
并回调图片上传:
public function fileupload_check() {
$number_of_files = sizeof($_FILES['uploadedimages']['tmp_name']);
$files = $_FILES['uploadedimages'];
for($i=0;$i<$number_of_files;$i++) {
if($_FILES['uploadedimages']['error'][$i] != 0) {
$this->form_validation->set_message('fileupload_check', 'At least 1 image needs to be uploaded in jpeg, png or gif format only.');
return FALSE;
}
}
$this->load->library('upload');
$config['upload_path'] = FCPATH . 'uploads/';
$config['allowed_types'] = 'gif|jpg|png';
for ($i = 0; $i < $number_of_files; $i++) {
$_FILES['uploadedimage']['name'] = $files['name'][$i];
$_FILES['uploadedimage']['type'] = $files['type'][$i];
$_FILES['uploadedimage']['tmp_name'] = $files['tmp_name'][$i];
$_FILES['uploadedimage']['error'] = $files['error'][$i];
$_FILES['uploadedimage']['size'] = $files['size'][$i];
$this->upload->initialize($config);
if ($this->upload->do_upload('uploadedimage')) {
$data['uploadedimage'] = $this->upload->data();
$image_name = $data['uploadedimage']['file_name'];
$data['uploadedimage'] = $image_name;
} else {
$this->form_validation->set_message('fileupload_check', $this->upload->display_errors());
return FALSE;
}
}
return TRUE;
}
我试图将 'Callback image upload' 函数的值传递给验证函数,但它只传递一张图像,而不是所有图像都被选中。
试试这个编码...
public function fileupload_check() {
$Error_bool = TRUE;
$Error = '';
$number_of_files = sizeof($_FILES['uploadedimages']['tmp_name']);
$files = $_FILES['uploadedimages'];
for($i=0;$i<$number_of_files;$i++) {
if($_FILES['uploadedimages']['error'][$i] != 0) {
$Error_bool = FALSE;
$Error = 'At least 1 image needs to be uploaded in jpeg, png or gif format only.';
}
}
$this->load->library('upload');
$config['upload_path'] = FCPATH . 'uploads/';
$config['allowed_types'] = 'gif|jpg|png';
for ($i = 0; $i < $number_of_files; $i++) {
$_FILES['uploadedimage']['name'] = $files['name'][$i];
$_FILES['uploadedimage']['type'] = $files['type'][$i];
$_FILES['uploadedimage']['tmp_name'] = $files['tmp_name'][$i];
$_FILES['uploadedimage']['error'] = $files['error'][$i];
$_FILES['uploadedimage']['size'] = $files['size'][$i];
$this->upload->initialize($config);
if ($this->upload->do_upload('uploadedimage')) {
$data['uploadedimage'] = $this->upload->data();
$image_name = $data['uploadedimage']['file_name'];
$data['uploadedimage'] = $image_name;
} else {
$Error_bool = FALSE;
$Error = $this->upload->display_errors();
}
}
if($Error_bool == FALSE) {
$this->form_validation->set_message('fileupload_check', $Error);
return FALSE;
} else {
return TRUE;
}
}
最简单的方法是创建一个 session
并在其中发送 $data
并在另一个函数中访问该会话。
如果你想销毁会话,你可以在之后销毁会话
我不得不对其进行一些更改才能使其正常工作,
- 我直接将整个回调函数代码包含在 FORM 函数中,并完全删除了回调函数。
这也有助于另一件事。早些时候,在表单验证错误的情况下,图像被上传到上传文件夹,但现在他们没有。
- 我不得不对 do_upload 做一些小改动(通过添加 $i 和 implode),这有助于我在数据库行中插入多个图像路径。
完整脚本可在
处找到
我在控制器中有 2 个函数。
- 连接到表单并进行验证。
- 图片上传回调函数
这只会在数据库中插入一张图片的路径。如果我从回调函数中回显 print_r,它会显示所有图像,但从验证函数中只显示一个图像。
// Some Validation
} else {
$this->fileupload_check();
$data['uploadedimage'] = $this->upload->data();
$image_name = $data['uploadedimage']['file_name'];
//echo '<pre>';
//print_r($this->upload->data());
$data['uploadedimage'] = $image_name;
$this->load->model('admin/model_users');
if($query = $this->model_users->insert_property_details($data)) {
redirect('dashboard/property-successfully-posted');
}
并回调图片上传:
public function fileupload_check() {
$number_of_files = sizeof($_FILES['uploadedimages']['tmp_name']);
$files = $_FILES['uploadedimages'];
for($i=0;$i<$number_of_files;$i++) {
if($_FILES['uploadedimages']['error'][$i] != 0) {
$this->form_validation->set_message('fileupload_check', 'At least 1 image needs to be uploaded in jpeg, png or gif format only.');
return FALSE;
}
}
$this->load->library('upload');
$config['upload_path'] = FCPATH . 'uploads/';
$config['allowed_types'] = 'gif|jpg|png';
for ($i = 0; $i < $number_of_files; $i++) {
$_FILES['uploadedimage']['name'] = $files['name'][$i];
$_FILES['uploadedimage']['type'] = $files['type'][$i];
$_FILES['uploadedimage']['tmp_name'] = $files['tmp_name'][$i];
$_FILES['uploadedimage']['error'] = $files['error'][$i];
$_FILES['uploadedimage']['size'] = $files['size'][$i];
$this->upload->initialize($config);
if ($this->upload->do_upload('uploadedimage')) {
$data['uploadedimage'] = $this->upload->data();
$image_name = $data['uploadedimage']['file_name'];
$data['uploadedimage'] = $image_name;
} else {
$this->form_validation->set_message('fileupload_check', $this->upload->display_errors());
return FALSE;
}
}
return TRUE;
}
我试图将 'Callback image upload' 函数的值传递给验证函数,但它只传递一张图像,而不是所有图像都被选中。
试试这个编码...
public function fileupload_check() {
$Error_bool = TRUE;
$Error = '';
$number_of_files = sizeof($_FILES['uploadedimages']['tmp_name']);
$files = $_FILES['uploadedimages'];
for($i=0;$i<$number_of_files;$i++) {
if($_FILES['uploadedimages']['error'][$i] != 0) {
$Error_bool = FALSE;
$Error = 'At least 1 image needs to be uploaded in jpeg, png or gif format only.';
}
}
$this->load->library('upload');
$config['upload_path'] = FCPATH . 'uploads/';
$config['allowed_types'] = 'gif|jpg|png';
for ($i = 0; $i < $number_of_files; $i++) {
$_FILES['uploadedimage']['name'] = $files['name'][$i];
$_FILES['uploadedimage']['type'] = $files['type'][$i];
$_FILES['uploadedimage']['tmp_name'] = $files['tmp_name'][$i];
$_FILES['uploadedimage']['error'] = $files['error'][$i];
$_FILES['uploadedimage']['size'] = $files['size'][$i];
$this->upload->initialize($config);
if ($this->upload->do_upload('uploadedimage')) {
$data['uploadedimage'] = $this->upload->data();
$image_name = $data['uploadedimage']['file_name'];
$data['uploadedimage'] = $image_name;
} else {
$Error_bool = FALSE;
$Error = $this->upload->display_errors();
}
}
if($Error_bool == FALSE) {
$this->form_validation->set_message('fileupload_check', $Error);
return FALSE;
} else {
return TRUE;
}
}
最简单的方法是创建一个 session
并在其中发送 $data
并在另一个函数中访问该会话。
如果你想销毁会话,你可以在之后销毁会话
我不得不对其进行一些更改才能使其正常工作,
- 我直接将整个回调函数代码包含在 FORM 函数中,并完全删除了回调函数。
这也有助于另一件事。早些时候,在表单验证错误的情况下,图像被上传到上传文件夹,但现在他们没有。
- 我不得不对 do_upload 做一些小改动(通过添加 $i 和 implode),这有助于我在数据库行中插入多个图像路径。
完整脚本可在