php - PHP如何更新数据库表中不同列中上传的多个文件
问题描述
我有一个 HTML 表单来上传两个 PDF 文件。我能够成功地将一个文件上传到一列,但不确定如何将每个 PDF 文件上传到数据库表的不同列。下面是我的代码:
if(isset($_POST["submit"])){
$errors = array();
$uploadedFiles = array();
$extension = array("pdf");
$bytes = 5024;
$KB = 5024;
$totalBytes = $bytes * $KB;
$UploadFolder = "UploadFolder";
$counter = 0;
foreach($_FILES["files"]["tmp_name"] as $key=>$tmp_name){
$temp = $_FILES["files"]["tmp_name"][$key];
$vendor_blicense = $_FILES["files"]["name"][$key];
if(empty($temp))
{
break;
}
$counter++;
$UploadOk = true;
if($_FILES["files"]["size"][$key] > $totalBytes)
{
$UploadOk = false;
array_push($errors, $vendor_blicense." file size is larger than the 5 MB.");
echo '<script>alert("File size is larger than the 5 MB...")</script>';
}
$ext = pathinfo($vendor_blicense, PATHINFO_EXTENSION);
if(in_array($ext, $extension) == false){
$UploadOk = false;
array_push($errors, $vendor_blicense." is invalid file type. Only PDF");
echo '<script>alert("Invalid file type. Only pdf")</script>';
}
if($UploadOk == true){
if(file_exists($UploadFolder."/".$vendor_blicense) == true){
$vendor_blicense1 = uniqid().$vendor_blicense;
$success = mysqli_query($kone,$query);
$preparedStatement = $kone->prepare("UPDATE table SET vendor_blicense = :vendor_blicense WHERE vendor_id = '$send_id'");
$preparedStatement->execute([ ':vendor_blicense' => $vendor_blicense1 ]);
move_uploaded_file($temp,$UploadFolder."/".$vendor_blicense1);
array_push($uploadedFiles, $vendor_blicense1);
}
else{
$preparedStatement = $kone->prepare("UPDATE table SET vendor_blicense = :vendor_blicense WHERE vendor_id = '$send_id'");
$preparedStatement->execute([ ':vendor_blicense' => $vendor_blicense ]);
move_uploaded_file($temp,$UploadFolder."/".$vendor_blicense);
array_push($uploadedFiles, $vendor_blicense);
}
}
}
}
?>
<input type="file" id="files" name="files[]" accept=".pdf">
<input type="file" id="files2" name="files[]" accept=".pdf">
<input name="submit" type="submit" value="Submit">
```
如何获取每个输入“file”和“files2”的名称和 PDF 文件并提交到数据库上的不同列和服务器上的 Uploadfolder?我有这样的查询: UPDATE hobber_vendor SET vendor_blicense = :vendor_blicense AND vendor_btax = :vendor_btax WHERE vendor_id = '$send_id' 我想更新 vendor_btax 以存储来自“files2”的文件名,并将文件上传到 move_uploaded_file($ temp,$UploadFolder."/".$vendor_btax); array_push($uploadedFiles, $vendor_tax);
解决方案
因此,经过所有研究、故障排除和遵循我的每一行代码。能够通过首先将我的 HTML 代码更改为以下来解决此问题:
<input type="file" id="files" name="files['license']" accept=".pdf">
<input type="file" id="files2" name="files['tax']" accept=".pdf">
<input name="submit" type="submit" value="Submit">
然后我得到每个输入的值并将其分配给数据库中的每一列。此外,我声明了uniqid()
我的 foreach 循环外部以重复使用,以防用户尝试上传与服务器上具有相同路径名的文件。下面是我完整的 PHP 代码:
if(isset($_POST["submit"])){
$errors = array();
$uploadedFiles = array();
$extension = array("pdf");
$bytes = 5024;
$KB = 5024;
$totalBytes = $bytes * $KB;
$UploadFolder = "UploadFolder";
$random = uniqid();
foreach($_FILES["files"]["tmp_name"] as $key=>$tmp_name){
$temp = $_FILES["files"]["tmp_name"][$key];
$filer = $_FILES["files"]["name"][$key];
$vendor_blicense = $_FILES["files"]["name"]["license"];
$vendor_btax = $_FILES["files"]["name"]["tax"];
if(empty($temp))
{
break;
}
$counter++;
$UploadOk = true;
if($_FILES["files"]["size"]["license"] > $totalBytes)
{
$UploadOk = false;
array_push($errors, $vendor_blicense." file size is larger than the 5 MB.");
echo '<script>alert("File size is larger than the 5 MB...")</script>';
}
if($_FILES["files"]["size"]["tax"] > $totalBytes)
{
$UploadOk = false;
array_push($errors, $vendor_btax." file size is larger than the 5 MB.");
echo '<script>alert("File size is larger than the 5 MB...")</script>';
}
$ext = pathinfo($vendor_blicense, PATHINFO_EXTENSION);
if(in_array($ext, $extension) == false){
$UploadOk = false;
array_push($errors, $vendor_blicense." is invalid file type. Only PDF");
echo '<script>alert("Invalid file type. Only pdf")</script>';
}
$ext = pathinfo($vendor_btax, PATHINFO_EXTENSION);
if(in_array($ext, $extension) == false){
$UploadOk = false;
array_push($errors, $vendor_btax." is invalid file type. Only PDF");
echo '<script>alert("Invalid file type. Only pdf")</script>';
}
if($UploadOk == true){
if(file_exists($UploadFolder."/".$filer)){
$filer1 = $random.$filer;
$vendor_blicense1 = $random.$vendor_blicense;
$vendor_btax1 = $random.$vendor_btax;
$success = mysqli_query($kone,$query);
$preparedStatement = $kone->prepare("UPDATE table SET vendor_blicense = :vendor_blicense, vendor_btax = :vendor_btax, vendor_tax_check = :vendor_tax_check,vendor_bstage = :vendor_bstage WHERE vendor_id = '$send_id'");
$preparedStatement->execute([ ':vendor_blicense' => $vendor_blicense1, ':vendor_btax' => $vendor_btax1, ':vendor_tax_check' => $vendor_tax_check, ':vendor_bstage' => $vendor_bstage]);
move_uploaded_file($temp,$UploadFolder."/".$filer1);
array_push($uploadedFiles, $filer1);
}
else{
$preparedStatement = $kone->prepare("UPDATE table SET vendor_blicense = :vendor_blicense, vendor_btax = :vendor_btax, vendor_tax_check = :vendor_tax_check, vendor_bstage = :vendor_bstage WHERE vendor_id = '$send_id'");
$preparedStatement->execute([':vendor_blicense' => $vendor_blicense, ':vendor_btax' => $vendor_btax, ':vendor_tax_check' => $vendor_tax_check, ':vendor_bstage' => $vendor_bstage]);
move_uploaded_file($temp,$UploadFolder."/".$filer);
array_push($uploadedFiles, $filer);
}
}
}
if($counter>0){
if(count($errors)>0)
{
echo "<b>Errors:</b>";
echo "<br/><ul>";
foreach($errors as $error)
{
echo "<li>".$error."</li>";
}
echo "</ul><br/>";
}
if(count($uploadedFiles)>0){
echo "successfully uploaded";
}
$kone->close();
}
}
else{
echo '<script>alert("Please, Select file(s) to upload!")</script>';
echo "<center>Please, Select file(s) to upload!</center>";
}
}
}
推荐阅读
- javascript - 变量外部事件函数
- node.js - 环境的文件特定 TypeScript 注释,例如浏览器或节点
- angular - 如何使用一个组件上的按钮将项目从集合中删除到另一个?
- regex - 有没有办法在同一个正则表达式中重用正则表达式子表达式(非连续)?
- java - 输入错误。即使在接受新输入后仍使用旧输入
- spring - 防止组件扫描进行单元测试
- sql - SQL中分组时间序列的最小值和最大值
- django - 如何计算外键中的项目?
- linux - 搜索文件夹中的所有子文件夹时,获取“ [:if-then:意外运算符”
- javascript - PHP - 安全地允许用户保存 html