【问题标题】:How to upload file in mysql using PHP? [duplicate]如何使用 PHP 在 mysql 中上传文件? [复制]
【发布时间】:2021-07-07 05:53:01
【问题描述】:

这是我的代码:

<?php
    include ('navbar.php');
?>
<form class = "container m-5" method = "POST" action = "upload.php" encytype = "multipart/form-data">
<input class = "form-control w-25" type = "file" name = "file">
<button class = "btn" type = "submit" name = "Upload">Upload</button>
</form>

<?php
include'connect.php';
$statusMsg = '';

// File upload path
$targetDir = "image";
$fileName = $_FILES["file"]["name"];
$targetFilePath = $targetDir . $fileName;
$fileType = pathinfo($targetFilePath,PATHINFO_EXTENSION);

if(isset($_POST["submit"]) && !empty($_FILES["file"]["name"])){
    // Allow certain file formats
    $allowTypes = array('jpg','png','jpeg','pdf');
    if(in_array($fileType, $allowTypes)){
        // Upload file to server
        if(move_uploaded_file($_FILES["file"]["tmp_name"], $targetFilePath)){
            // Insert image file name into database
            $insert = $db->query("INSERT into userid (FileName) VALUES ('".$fileName."'");
            if($insert){
                $statusMsg = "The file ".$fileName. " has been uploaded successfully.";
            }else{
                $statusMsg = "File upload failed, please try again.";
            } 
        }else{
            $statusMsg = "Sorry, there was an error uploading your file.";
        }
    }else{
        $statusMsg = 'Sorry, only JPG, JPEG, PNG, GIF, & PDF files are allowed to upload.';
    }
}else{
    $statusMsg = 'Please select a file to upload.'; 
}

// Display status message
echo $statusMsg;
?>

我收到的唯一消息是这个

注意:未定义索引:C:\xampp\htdocs\Project\upload.php 中的文件 第 15 行请选择要上传的文件。

我的数据库中什么也没有显示

【问题讨论】:

  • 您在检查 $fileName = $_FILES["file"]["name"]; 是否存在之前获取它。只需将这些行移到您的 if(isset($_POST["submit"]) &amp;&amp; !empty($_FILES["file"]["name"])) 中即可。并将isset($_POST["submit"])更改为isset($_POST["Upload"])(这是提交按钮的名称)
  • @MagnusEriksson 很好地抓住了提交按钮的名称,甚至没看到。

标签: php html mysql input


【解决方案1】:

首先检查文件是否设置

if(isset($_FILES["file"])) {
    include'connect.php';
    $statusMsg = '';

    // File upload path
    $targetDir = "image";
    // ...
}

您似乎也在这里缺少/

$targetDir = "image/";   // <-- here
$targetFilePath = $targetDir . $fileName;

既然你这样做了

if(isset($_POST["submit"]) && !empty($_FILES["file"]["name"])) {

然后,您可以在if 语句中移动位于 HTML 下的 php 代码,在这种情况下,您无需检查文件 是否已设置,因为 empty() 也涵盖isset()

if(isset($_POST["Upload"]) && !empty($_FILES["file"]["name"])) {
    include'connect.php';
    $statusMsg = '';

    // File upload path
    $targetDir = "image/";
    $fileName = $_FILES["file"]["name"];
    $targetFilePath = $targetDir . $fileName;
    $fileType = pathinfo($targetFilePath,PATHINFO_EXTENSION);

    // Allow certain file formats
    $allowTypes = array('jpg','png','jpeg','pdf');
    
    //...
}

注意:正如 @MagnusEriksson 在 cmets 中所指出的,您的按钮名称是 Upload,因此您应该在 isset() 函数中检查它。

【讨论】:

  • 注意:未定义变量:第 29 行 C:\xampp\htdocs\Project\upload.php 中的 db 致命错误:未捕获的错误:在 C:\ xampp\htdocs\Project\upload.php:29 堆栈跟踪:#0 {main} 在第 29 行的 C:\xampp\htdocs\Project\upload.php 中抛出我得到了这个错误我已经在我的 if 语句之外插入了 $insert
【解决方案2】:

试试这个代码。

您的代码中有 2 个错字。

  1. 表单属性应该是enctype 而不是encytype

  2. 更改提交按钮名称,例如 Upload

  3. 将输入类型文件名更改为其他名称,例如filename

     <form class = "container m-5" method = "POST" action = "upload.php" enctype="multipart/form-data">
     <input class = "form-control w-25" type = "file" name = "filename">
     <button class = "btn" type = "submit" name = "Upload">Upload</button>
     </form>
    
     <?php
     include'connect.php';
     $statusMsg = '';
    
     // File upload path
    
     if(isset($_POST["Upload"]) && !empty($_FILES["filename"]["name"])){
         $targetDir = "image/";
         $fileName = $_FILES["filename"]["name"];
         $targetFilePath = $targetDir . $fileName;
         $fileType = pathinfo($targetFilePath,PATHINFO_EXTENSION);
         // Allow certain file formats
         $allowTypes = array('jpg','png','jpeg','pdf');
         if(in_array($fileType, $allowTypes)){
             // Upload file to server
             if(move_uploaded_file($_FILES["filename"]["tmp_name"], $targetFilePath)){
                 // Insert image file name into database
                 $insert = $db->query("INSERT into userid (FileName) VALUES ('".$fileName."'");
                 if($insert){
                     $statusMsg = "The file ".$fileName. " has been uploaded successfully.";
                 }else{
                     $statusMsg = "File upload failed, please try again.";
                 } 
             }else{
                 $statusMsg = "Sorry, there was an error uploading your file.";
             }
         }else{
             $statusMsg = 'Sorry, only JPG, JPEG, PNG, GIF, & PDF files are allowed to upload.';
         }
     }else{
         $statusMsg = 'Please select a file to upload.'; 
     }
    
     // Display status message
     echo $statusMsg;
     ?>
    

【讨论】:

  • "请选择要上传的文件。"是我尝试上传文件时可见的内容,我的数据库没有任何反应,消息永远不会改变。
  • 你用我的代码替换了吗?
  • 是的,我仔细阅读并复制了它。顺便说一句,它现在可以工作了,但问题是文件没有保存在我的数据库中。
  • 请检查插入查询和数据库连接。我不知道你的表结构和字段名称。
  • 是的,它现在正在工作,非常感谢:)
猜你喜欢
  • 2011-10-15
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多