目前我有这个文件上传表单
<form class="form-horizontal" action="" method="post" role="form" enctype="multipart/form-data">
<div class="form-group">
<label class="control-label col-sm-2" for="upload_sheet">sheets:</label>
<div class="col-sm-10">
<input type="file" class="form-control" id="file" name="file" id="upload_sheet">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-4">
<input type="submit" name="add" value="Add New" class="btn btn-primary btn-block">
</div>
</div>
</form>
这是php部分
if (count($_FILES["file"]) > 0) {
$folderName = "uploads/";
$sql = "INSERT INTO document_upload ( upload_sheet, upload_size, upload_type, document_path)
VALUES ( :upload_sheet, :upload_size, :upload_type, :document_path)";
$stmt = $pdo->prepare($sql);
if ($permitted) {
$fileSize = $_FILES['file']['size'];
$fileType = $_FILES['file']['type'];
$fileName = $_FILES['file']['name'];
$tmpName = $_FILES['file']['tmp_name'];
$ext = substr(strrchr($fileName, "."), 1);
$randName = rand(10000, 990000) . '-' .$fileName;
$filepath = $folderName . $randName;
if (!move_uploaded_file($tmpName, $filepath)) {
$emsg .= "Error while - <strong>" . $_FILES["file"]["name"] . "</strong> is uploaded. Please try again. <br>";
} else {
$smsg .= "The file <strong>" . $_FILES["file"]["name"] . "</strong> is added successfully. <br>";
/* * ****** insert into database starts ******** */
try {
$stmt->bindValue(":upload_sheet", $randName, PDO::PARAM_STR);
$stmt->bindValue(":upload_size", $fileSize, PDO::PARAM_STR);
$stmt->bindValue(":upload_type", $fileType, PDO::PARAM_STR);
$stmt->bindValue(":document_path", $filepath, PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->rowCount();
if ($result > 0) {
// file uplaoded successfully.
} else {
// failed to insert into database.
}
} catch (Exception $ex) {
$emsg .= "<strong>" . $ex->getMessage() . "</strong>. <br>";
}
}
} else {
$emsg .= "This file <strong>" . $_FILES["file"]["name"] . "</strong> isn't permitted. <br>";
}
这是完美的工作,我可以添加新的文件到数据库。我的问题是,我如何在该表单上为文件添加第二个<input>
,以及为了从同一表单上的两个输入字段上传两个文件,我需要在php部分更改什么?
对于您的表单部分:您可以在输入标记的末尾添加多个,如下所示:
<input type="file" class="form-control" id="file" name="file" id="upload_sheet" multiple>
<input type="file" class="form-control" id="file" name="file2" id="upload_sheet2" multiple>
更改第二个输入的name和id,使其唯一。
然后,用户可以选择超过1个文件,并将它们添加到上传中。
自HTML5 以来支持多个
对于PHP中的两种不同输入,您可以更改第一个if语句
if (count($_FILES["file"]) > 0 || count($_FILES["file2"]) > 0) {
//your logic/uploading
}
|=或者如果它是必需的,那么这两个字段都有文件,那么&=AND
您只需添加html标签,如:
<input type="file" class="form-control" id="file2" name="file2" >
POST时请确保具有不同的"name"属性,因为PHP使用它来识别表单中的数据。
然后在PHP中,只需使用访问文件
$_FILES['file2']['name']
附带说明,确保html元素只有一个"id",以避免歧义。(表单中的file元素有2个id字段)。希望这能有所帮助!
HTML(文件列表):
<input type="file" class="form-control" name="files[]" id="upload_sheet_0">
<input type="file" class="form-control" name="files[]" id="upload_sheet_1">
...
这种结构也很适合通过点击添加更多的文件。提示:JavaScript:.append('<input name="files[]" />')
PHP:
foreach($_FILES['files'] AS $file) {
handleUpload($file); // contains your upload-logic
}