将文件上传内容正确保存到 MySQL 数据库以检索为 link

properly save file upload contents to MySQL DB to retrieve as a link

我正在尝试构建一个将文件信息保存到 MySQL 数据库 table 的上传组件。我的第一个问题是每次用户上传文件时,都会将两个条目添加到数据库中。

我的下一个问题是我要抓取上传的文件并将其显示为 link 供用户单击以在新选项卡中查看。现在,上传保存文件的服务器目录路径。当我去点击文件时,我收到一条错误消息,说找不到目录路径。

我最大的问题是 link 查看上传的问题。然后,如果有人对复式输入问题也有建议,那也将不胜感激。

我的代码:

HTML: 文件上传功能 - 成功上传所有变量两次...

  <form id="sgFileUpload" action='sg_addupload.php' target='hiddenFrame' method="POST" enctype="multipart/form-data">

<fieldset id='uploadBtnField'>

  <input type="hidden" name="MAX_FILE_SIZE" value="50000000"/> 

  <input type='hidden' name='sgRef' id='sgRef' value='<?php echo $sgref ?>'>

  <input type='file' name='searchFile' id='searchFile' multiple>

  <input type='submit' name='startUpload' id='startUpload' value='Upload'>


</fieldset>

</form> <!-- End Form Input -->

我的PHP:文件上传到数据库

if(isset($_POST['sgRef'])) {

$sgref=$_POST['sgRef'];

}

$fileName = $_FILES['searchFile']['name'];

    $fSize = $_FILES['searchFile']['size'];
    $fType = $_FILES['searchFile']['type'];

    $target = "../bms/uploads/";        
    $fileTarget = $target.$fileName;    
    $tempFileName = $_FILES["searchFile"]["tmp_name"];
    //$docType = $_POST['docType']; 
    $result = move_uploaded_file($tempFileName,$fileTarget);

if ($result) {

  //run DB Connection code...

  //Writes the information to the database
        $sql="INSERT sg_uploads(sgref,file,type,size,content,doctype) VALUES('$sgref','$fileName','$fType','$fSize','$fileTarget','Other')";

        $conn->query($sql);

        if($conn->query($sql)) {
            echo 'Your file <html><b><i>'.$fileName.'</i></b></html> has been successfully uploaded!';
        } else {
            //Gives an error if its not
            echo "Sorry, there was a problem uploading your file.";
        }


        //Free the result variables. 
         $sql->free();


         $result->free();


        //Close the Database connection.
         $conn->close();


    }//End If Statement.

PHP 代码:从数据库显示 links(PHP 检索代码成功)

    <?php
while ($row = $result->fetch_array()) {

              echo "<tbody>";
              echo "<tr>";
              echo "<td>" . "<a href=".$row['content']."' >".$row['file']."</a>". "</td>";
              echo "<br/>";
              echo "<br/>";
              }//end while.
              echo "</tr>";
              echo "</tbody>"; 

$filename = $row[0];
    echo "<p></p>";


?>

感谢所有帮助!谢谢!

注意:数据库中的 'file' 列是 'blob' 的数据类型。

"@Fred, yes it was a directory issue. Upon fixing this issue, I was able to successfully link the the page and view it. If you summarize your two suggestions as an answer, I will mark your response as the correct answer. Thank you!"

正如我在评论中所说:

重复的条目是由$conn->query($sql); if($conn->query($sql))

引起的

其中使用了两个 query() 实例。

您可以只使用条件语句并省略 $conn->query($sql);

对于路径问题,评论中也指出文件夹的路径未正确编入索引。


脚注:

您目前可以接受 SQL 注射。最好使用准备好的语句。