我试过这里的线程数量是这样的,但到目前为止没有人帮我,或者我在这里想念一些东西。
所以我有一个带有三个输入字段的表单..我知道我可以在一个字段上使用multiple
但我需要这样。这是简单的版本(删除了一些字段,以便在此处发布更紧凑的源代码)
HTML部分:
<form class="form-horizontal" name="form-horizontal" action="" method="post" role="form" enctype="multipart/form-data" >
<div class="form-group">
<label class="control-label col-sm-2" for="upload_one">Upload_one: </label>
<div class="col-sm-10">
<input type="file" class="form-control" name="file[]" id="upload_one">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="upload_two">Upload_two:</label>
<div class="col-sm-10">
<input type="file" class="form-control" name="file[]" id="upload_two">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="upload_three">Upload_three: </label>
<div class="col-sm-10">
<input type="file" class="form-control" name="file[]" id="upload_three" multiple>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-4">
<input type="submit" name="add" value="Add New Lesson" class="btn btn-primary btn-block">
</div>
</div>
</form>
PHP部分
if (isset($_POST["add"])) {
$pdo = Database::connect();
$msg = "";
$permitted = array('application/vnd.ms-excel', 'application/pdf', 'application/msword', 'image/gif', 'image/jpeg', 'image/jpg', 'image/png', 'image/bmp');
if (count($_FILES["file"]) > 0) {
$folderName = "uploads/";
$sql = "INSERT INTO upload ( upload_one, upload_two, upload_three, upload_size, upload_type )
VALUES ( :upload_one, :upload_two, :upload_three, :upload_size, :upload_type )";
$stmt = $pdo->prepare($sql);
foreach (array_keys($_FILES) as $file) {
for ($i = 0; $i < count($_FILES[$file]["name"]); $i++) {
if ($_FILES[$file]["name"][$i] <> "") {
if ($permitted) {
$fileSize = $_FILES[$file]["size"][$i];
$fileType = $_FILES[$file]["type"][$i];
$fileName = $_FILES[$file]["name"][$i];
$tmpName = $_FILES[$file]["tmp_name"][$i];
$ext = substr(strrchr($fileName, "."), 1);
$_FILES[$file]["name"][$i] = rand(10000, 990000) . '-' .$fileName;
$filepath = $folderName . $_FILES[$file]["name"][$i];
if (!move_uploaded_file($tmpName, $filepath)) {
$emsg .= "Error while uploading file - <strong>" . $_FILES[$file]["name"][$i] . "</strong>. Please try again. <br>";
} else {
$smsg .= "The file <strong>" . $_FILES[$file]["name"][$i] . "</strong> is added successfully. <br>";
try {
$stmt->bindValue(":upload_one", $_FILES[$file]["name"][$i], PDO::PARAM_STR);
$stmt->bindValue(":upload_two", $_FILES[$file]["name"][$i], PDO::PARAM_STR);
$stmt->bindValue(":upload_three", $_FILES[$file]["name"][$i], PDO::PARAM_STR);
$stmt->bindValue(":upload_size", $fileSize, PDO::PARAM_STR);
$stmt->bindValue(":upload_type", $fileType, 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"][$i] . "</strong> isn't permitted. <br>";
}
}
}
$msg .= (strlen($smsg) > 0) ? successMessage($smsg) : "";
$msg .= (strlen($emsg) > 0) ? errorMessage($emsg) : "";
} }
else {
echo '';
}
当我点击Add按钮时,它将保存一行中的每个输入字段,并且该输入的文件是三次。例如:
`input file_1` have doc1.docx
`input file_2` have doc2.docx
`input file_3` have doc3.docx
您可以看到每个文件如何为每个输入文件保存3次,而不是每个文件只在其列中保存一个..
答案 0 :(得分:2)
尝试使用提交代码:
{
$pdo = Database::connect();
$msg = "";
$permitted = array('application/vnd.ms-excel', 'application/pdf', 'application/msword', 'image/gif', 'image/jpeg', 'image/jpg', 'image/png', 'image/bmp');
if (count($_FILES["file"]) > 0)
{
$folderName = "uploads/";
$sql = "INSERT INTO upload ( upload_one, upload_two, upload_three, upload_size, upload_type )
VALUES ( :upload_0, :upload_1, :upload_2, :upload_size, :upload_type )";
$stmt = $pdo->prepare($sql);
foreach (array_keys($_FILES) as $file)
{
for ($i = 0; $i < count($_FILES[$file]["name"]); $i++)
{
if ($_FILES[$file]["name"][$i] <> "")
{
if ($permitted)
{
$fileSize = $_FILES[$file]["size"][$i];
$fileType = $_FILES[$file]["type"][$i];
$fileName = $_FILES[$file]["name"][$i];
$tmpName = $_FILES[$file]["tmp_name"][$i];
$ext = substr(strrchr($fileName, "."), 1);
$_FILES[$file]["name"][$i] = rand(10000, 990000) . '-' .$fileName;
$filepath = $folderName . $_FILES[$file]["name"][$i];
if (!move_uploaded_file($tmpName, $filepath)) {
$emsg .= "Error while uploading file - <strong>" . $_FILES[$file]["name"][$i] . "</strong>. Please try again. <br>";
} else {
$smsg .= "The file <strong>" . $_FILES[$file]["name"][$i] . "</strong> is added successfully. <br>";
try {
$stmt->bindValue(":upload_".$i, $_FILES[$file]["name"][$i], PDO::PARAM_STR);
$stmt->bindValue(":upload_size", $fileSize, PDO::PARAM_STR);
$stmt->bindValue(":upload_type", $fileType, PDO::PARAM_STR);
} catch (Exception $ex) {
$emsg .= "<strong>" . $ex->getMessage() . "</strong>. <br>";
}
}
} else {
$emsg .= "This file <strong>" . $_FILES[$file]["name"][$i] . "</strong> isn't permitted. <br>";
}
}
}
$msg .= (strlen($smsg) > 0) ? successMessage($smsg) : "";
$msg .= (strlen($emsg) > 0) ? errorMessage($emsg) : "";
}
$stmt->execute();
$result = $stmt->rowCount();
if ($result > 0) {
// file uplaoded successfully.
} else {
// failed to insert into database.
}
}
else
{
echo '';
}
}