1

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

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

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

我的代码:

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 代码:显示来自数据库的链接(用于检索的 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>";


?>

感谢所有帮助!谢谢!

注意:数据库中的“文件”列是“blob”的数据类型。

4

1 回答 1

1

“@Fred,是的,这是一个目录问题。修复此问题后,我能够成功链接页面并查看它。如果您将您的两个建议总结为答案,我会将您的回复标记为正确答案。谢谢你!”

正如我在评论中所说:

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

有两个query()使用实例。

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

对于路径问题,评论中也说明了该文件夹的路径未正确编入索引。


脚注:

您目前对 SQL 注入持开放态度。最好使用准备好的声明。

于 2017-01-06T18:09:08.940 回答