在我的上传表单上,我有多个链接和用户文件。我希望能够插入与该表行上的图像匹配的链接/url,到目前为止,我尝试过的方法还没有奏效。我已经将链接和用户文件放入图像上传的数组中。
在我的控制器中,您将能够看到我为模型测试的内容。
我想知道什么是最好的,以便当用户在插入数据库时选择图像时,url/链接输入的输入将与图像文件名匹配
提前谢谢。如果你决定投反对票,你能告诉我为什么欢呼吗!
横幅表单
<?php echo Modules::run('admin/common/header/index');?><?php echo Modules::run('admin/common/column_left/index');?>
<div id="content">
<div class="container-fluid">
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<div class="panel panel-default">
<div class="panel-heading clearfix">
<div class="pull-right">
</div>
</div>
<div class="panel-body">
<?php echo $error;?>
<?php echo form_open_multipart('admin/design/banners/do_upload');?>
<table>
<thead>
<tr>
<td>Link</td>
<td>Image</td>
</tr>
</thead>
<tbody>
<tr>
<td><input type="text" name="link[]" placeholder="url"></td>
<td><input type="file" name="userfile[]" size="20" multiple="multiple" /></td>
</tr>
<tr>
<td><input type="text" name="link[]" placeholder="url"></td>
<td><input type="file" name="userfile[]" size="20" multiple="multiple" /></td>
</tr>
</tbody>
</table>
<input type="submit" value="upload" />
</form>
</div>
</div>
</div>
</div>
</div>
</div>
控制器
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Banners extends MX_Controller {
public function __construct() {
parent::__construct();
}
public function index() {
$data['error'] = '';
$this->load->view('design/banner_form.tpl', $data);
}
public function do_upload() {
$files = $_FILES;
$file_loop = count($_FILES['userfile']['name']);
for($i = 0; $i < $file_loop; $i++) {
$_FILES['userfile']['name'] = $files['userfile']['name'][$i];
$_FILES['userfile']['type'] = $files['userfile']['type'][$i];
$_FILES['userfile']['tmp_name'] = $files['userfile']['tmp_name'][$i];
$_FILES['userfile']['error'] = $files['userfile']['error'][$i];
$_FILES['userfile']['size'] = $files['userfile']['size'][$i];
$this->upload->initialize($this->file_config());
if ($this->upload->do_upload() == FALSE) {
$data['error'] = $this->upload->display_errors();
$this->load->view('design/banner_form.tpl', $data);
} else {
/*
|
| Model Function Here For Tesing Only
| Will make proper model function when issue sorted.
|
*/
$upload_infos = $this->upload->data();
foreach ($upload_infos as $upload_info) {
$data = array(
'image' => $upload_info['file_name'],
//'link' => $this->input->post('link')
);
}
$this->db->insert('banner_image', $data);
return $this->load->view('design/banner_list.tpl', $data);
}
}
}
private function file_config() {
$config = array();
$config['upload_path'] = './upload/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '3000';
$config['overwrite'] = TRUE;
return $config;
}
}
在我看来,
因为链接和图像在数组中,我不得不做一个额外的count($_POST['link']);
对于链接和图像,我必须这样做$filename = $files['userfile']['name'][$i];
成功是其中的一部分。
在阅读了更多 php 手册后,我花了一段时间才弄清楚,现在这段代码适用于多个上传也。
类上传扩展CI_Controller {
function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
}
function index()
{
$this->load->view('design/banner_form.tpl', array('error' => ' ' ));
}
function do_upload() {
$files = $_FILES;
$file_loop = count($_FILES['userfile']['name']);
for($i= 0; $i < $file_loop; $i++) {
$_FILES['userfile']['name'] = $files['userfile']['name'][$i];
$_FILES['userfile']['type'] = $files['userfile']['type'][$i];
$_FILES['userfile']['tmp_name'] = $files['userfile']['tmp_name'][$i];
$_FILES['userfile']['error'] = $files['userfile']['error'][$i];
$_FILES['userfile']['size'] = $files['userfile']['size'][$i];
$this->upload->initialize($this->file_config());
if (!$this->upload->do_upload()) {
$error = array('error' => $this->upload->display_errors());
$this->load->view('design/banner_form.tpl', $error);
} else {
$data_count = count($_POST['link']);
$url = $_POST['link'][$i];
$filename = $files['userfile']['name'][$i];
$this->db->set('link', $url);
$this->db->set('image', $filename);
$this->db->insert('banner_image');
$this->load->view('design/banner_list.tpl');
}
}
}
private function file_config() {
$config = array();
$config['upload_path'] = './upload/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '0';
$config['overwrite'] = TRUE;
return $config;
}
}