【问题标题】:Uploading and querying images [duplicate]上传和查询图像[重复]
【发布时间】:2021-07-22 04:00:21
【问题描述】:

我目前正在尝试将图像从我的 HTML 表单上传到 MySQL BLOB 列。

这是我的 HTML 代码的当前相关代码(输入文件类型只是一个占位符,我当然会将其更改为必须的。这些值是表格数据形式,但我将其浓缩为更容易阅读)

                    <form method="post" action="inspectionprocessing.php">
                    <input type="text" name ="unit" value="">
                    <input type="text" name ="notes" value="">
                    <input type="file" name ="media">   
                <input type="submit" value="Submit Inspections" name="submit">
                    </form>

这是插入 MySQL 的代码。

         //Establishing variables
     $unitNumber = $_POST["unit"];
     $unitNotes = $_POST ["notes"];
     $unitMedia = $_POST ["media"];

         // Create connection
     $con = mysqli_connect($host, $username, $password); 
     // Check connection
     if (!$con) {
     die("Connection failed: " . mysqli_connect_error());
                }
     echo ""; 
     
        //Query database
     $sql = "INSERT into inspect.building_1 (Unit, Notes, Media) values ('$unitNumber','$unitNotes', '$unitMedia')";
     $inspection = mysqli_query($con, $sql);

这是显示来自数据库的信息的代码

    $sql = "SELECT * FROM inspect.building_1 "; 
$apartments = mysqli_query($con, $sql); 
while($apartment = mysqli_fetch_assoc($apartments)){
    echo "<tr>";
    echo "<td>" . $apartment ["Unit"] . "</td>";
    echo "<td>" . $apartment ["Notes"] . "</td>";
    echo "<td>" . $apartment ["Media"] . "</td>";
    echo "<td>" . $apartment ["Date"] . "</td>";
    echo "<td>" . $apartment ["InspectionID"] . "</td>";

总之,我正在寻找 HTML 代码以将多个图像上传到数据库中一个 InspectionID 下的表中。我需要数据库来存储图像并将它们显示在单独的页面上。我对文件路径完全开放,但我需要所有必要的代码——我是第一次在这里做这一切的初学者。非常感谢您的帮助!

如果您想知道它的外观,请提供图片。

注意:数据库连接一切正常,我只需要图像方面的帮助

【问题讨论】:

  • 马上我可以看到您的表单标签丢失了enctype="multipart/form-data",您在上传文件时需要用到它
  • 顺便说一句,您的代码对 SQL 注入是开放的,因为它没有使用准备好的语句或参数化查询。请参阅stackoverflow.com/questions/60174/… 了解更多信息。
  • 警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDOMySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your dataEscaping is not enough!
  • “但我需要所有必要的代码” - 这不是这个网站的真正运作方式。我们可以帮助您解决现有代码的问题,但我们不是来为您编写的。 manual 有一个关于在 PHP 中处理上传的非常好的教程,并附有适当的解释。我建议你从那里开始。

标签: php html mysql sql


【解决方案1】:

我马上就可以看到您的表单标签丢失了enctype="multipart/form-data",这是您在上传文件时需要的。

<form method="post" enctype="multipart/form-data" action="inspectionprocessing.php">

您可以直接从上传的数据中获取 blob 数据。它不会是 $_POST 变量,而是 $_FILES 变量。在inspectionprocessing.php 中有这样的东西:

 $unitMedia = file_get_contents($_FILES['media']["tmp_name"]);

此外,强烈建议您验证上传的图片实际上是一张图片,是否太大等。您可以在此处查看一些验证内容:https://www.w3schools.com/php/php_file_upload.asp

此外,最好练习使用准备好的语句进行 MySQL 插入和更新,以防止 SQL 注入。现在就开始养成这个习惯吧! https://www.w3schools.com/php/php_mysql_prepared_statements.asp

【讨论】:

    【解决方案2】:

    您必须将enctype="multipart/form-data" 添加到您的表单中,以便您的表单可以接受检索文件 其次,您无法使用 $_POST 超级全局检索数据,您必须使用 $_FILES 超级全局 这是代码

        <form class="forms-sample" method="POST" enctype="multipart/form-data"> 
              <div class="form-group">
                  <label for="media">Media Image</label>
                  <input type="file"  name="media">
              </div>
        </form>
        
        $unitMedia = $_FILES['media']['name'];
        $unitMedia_temp = $_FILES['media']['tmp_name'];
    
    
        move_uploaded_file($unitMedia_temp, "img/$unitMedia");
    

    如果您想将图像插入数据库,您可以使用$unitMedia 插入它 这就是我要说的,希望对你有所帮助

    【讨论】:

      猜你喜欢
      • 2016-09-14
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 2015-08-06
      • 2012-10-25
      • 2011-12-30
      • 1970-01-01
      • 2014-03-21
      相关资源
      最近更新 更多