【发布时间】:2017-10-22 03:19:48
【问题描述】:
我正在使用 Blue-imp 文件上传来上传文件。我创建了一个 cusomUploadHandler 如下,以允许将其他数据持久保存到数据库中,如下所示:(我从一些在线教程中获得了代码 - 但现在找不到)
class CustomUploadHandler extends UploadHandler {
protected function initialize() {
$this->db = new mysqli(
$this->options['db_host'],
$this->options['db_user'],
$this->options['db_pass'],
$this->options['db_name']
);
parent::initialize();
$this->db->close();
}
protected function handle_form_data($file, $index) {
$file->title = @$_REQUEST['title'][$index];
$file->description = @$_REQUEST['payroll_type'];
}
protected function handle_file_upload($uploaded_file, $name, $size, $type, $error,
$index = null, $content_range = null) {
$file = parent::handle_file_upload(
$uploaded_file, $name, $size, $type, $error, $index, $content_range
);
if (empty($file->error)) {
$sql = 'INSERT INTO `'.$this->options['db_table']
.'` (`name`, `size`, `type`, `title`, `description`)'
.' VALUES (?, ?, ?, ?, ?)';
$query = $this->db->prepare($sql);
$query->bind_param(
'sisss',
$file->name,
$file->size,
$file->type,
$file->title,
$file->description
);
$query->execute();
$file->id = $this->db->insert_id;
}
return $file;
}
protected function set_additional_file_properties($file) {
parent::set_additional_file_properties($file);
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$sql = 'SELECT `id`, `type`, `title`, `description` FROM `'
.$this->options['db_table'].'` WHERE `name`=?';
$query = $this->db->prepare($sql);
$query->bind_param('s', $file->name);
$query->execute();
$query->bind_result(
$id,
$type,
$title,
$description
);
while ($query->fetch()) {
$file->id = $id;
$file->type = $type;
$file->title = $title;
$file->description = $description;
}
}
}
public function delete($print_response = true) {
$response = parent::delete(false);
foreach ($response as $name => $deleted) {
if ($deleted) {
$sql = 'DELETE FROM `'
.$this->options['db_table'].'` WHERE `name`=?';
$query = $this->db->prepare($sql);
$query->bind_param('s', $name);
$query->execute();
}
}
return $this->generate_response($response, $print_response);
}
}
我的问题是当有多个文件上传时,CustomUploadHandler 被多次调用并且它没有将描述中的数据提交到数据库。只有最后一条记录被正确保留。这是表单的 HTML:
<form id="fileupload" action="/assets/plugins/jquery-file-upload/server/php/UploadHandler.php" method="POST" enctype="multipart/form-data">
<!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
<div class="row fileupload-buttonbar">
<div class="col-lg-7">
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn green fileinput-button">
<i class="fa fa-plus"></i>
<span>
Add files...
</span>
<input type="file" name="files[]" multiple="">
</span>
<!-- The global file processing state -->
<span class="fileupload-process">
</span>
</div>
<!-- The global progress information -->
<div class="col-lg-5 fileupload-progress fade">
<!-- The global progress bar -->
<div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100">
<div class="progress-bar progress-bar-success" style="width:0%;">
</div>
</div>
<!-- The extended global progress information -->
<div class="progress-extended">
</div>
</div>
</div>
<!-- The table listing the files available for upload/download -->
<div class="well">
<table role="presentation" class="table clearfix" >
<tbody class="files">
</tbody>
</table>
</div>
</form>
每个文件标题都被正确保留,但是当有多个文件上传时,下拉选择选项会丢失。选择框如下所示:
<select id="payroll_type" class="form-control" name="payroll_type">
<option name="payroll_variations" value="">Select File Type</option>
<option name="payroll_variations" value="Payroll Variations">Payroll Variations</option>
<option name="starters" value="Starters">Starters</option>
<option name="leavers" value="Leavers">Leavers</option>
<option name="ss_changes" value="Master Data Changes">Master Data Changes</option>
</select>
唯一保存了描述的文件是队列中的最后一个。所有以前的文件都将丢失在各自的选择选项中选择的值。
抱歉,我不知道如何更好地解释这一点。
提前致谢。
【问题讨论】:
标签: jquery database file-upload blueimp