php - 在服务器上上传多张图片

标签 php mysql sql mysqli

我试图编写一个有助于上传图像的表单,在对这个网站进行了一些研究后,我有了这个脚本,但是它只上传单个图像,而我希望在服务器文件夹上上传多个图像并将它们的路径存储在数据库表

<form action="insertimages.php" method="post" enctype="multipart/form-data">
<div class="form-group">
<label class="col-md-3 control-label">Upload Image:</label>
<div class="col-md-8">
<input class="form-control" name="file" id="file" value="" type="file" multiple required>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label"></label>
<div class="submit">
<input class="btn btn-primary" value="Save " type="submit" name="submit">
</div>  
</div>
</form>

insertimages.php页面的代码是

$con=mysqli_connect("localhost","root","","db");
// Check connection
if (mysqli_connect_errno()) 
    {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 2000000)
&& in_array($extension, $allowedExts))  
    {
        if ($_FILES["file"]["error"] > 0) 
            {
                echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
            } 
        else 
            {
                if (file_exists("images/" . $_FILES["file"]["name"])) 
                    {
                        echo $_FILES["file"]["name"] . " already exists. ";
                    } 
                else 
                    {

                        $imagepath = "images/" . $_FILES["file"]["name"];
                        move_uploaded_file($_FILES["file"]["tmp_name"], $imagepath);
                        $sql="INSERT INTO images(image,studentid) VALUES ('".$imagepath."','".$_SESSION['insert_id']."')";
                        if (!mysqli_query($con,$sql)) 
                            {
                                die('Error: ' . mysqli_error($con));
                            }
                    }
            }
            header("Location: index.php");
    } 
else    
    {
        echo "Invalid file";
    }

?>

任何人都可以纠正错误并帮助我

最佳答案

您只有 1 个图像,因为您只在服务器中插入 1 个图像,因此您需要像这样循环文件:

if(isset($_FILES["myfile"]))
{

    $ret = array();

    $error =$_FILES["myfile"]["error"];
    //You need to handle  both cases
    //If Any browser does not support serializing of multiple files using FormData() 
    if(!is_array($_FILES["myfile"]["name"])) //single file
    {
        $fileName = $_FILES["myfile"]["name"];
        move_uploaded_file($_FILES["myfile"]["tmp_name"],$output_dir.$fileName);
        $ret[]= $fileName;
    }
    else  //Multiple files, file[]
    {
      $fileCount = count($_FILES["myfile"]["name"]);
      for($i=0; $i < $fileCount; $i++)
      {
        $fileName = $_FILES["myfile"]["name"][$i];
        move_uploaded_file($_FILES["myfile"]["tmp_name"][$i],$output_dir.$fileName);
        $ret[]= $fileName;
      }

    }
    echo json_encode($ret);
 }

注意这是来自多 uoploader 的示例代码,如您在这一行中看到的:if(!is_array($_FILES["myfile"]["name"]))

验证 $_file 是否为数组。如果它是一个数组这是将图像上传到服务器的循环:

for($i=0; $i < $fileCount; $i++)
      {
        $fileName = $_FILES["myfile"]["name"][$i];
        move_uploaded_file($_FILES["myfile"]["tmp_name"][$i],$output_dir.$fileName);
        $ret[]= $fileName;
      }

正如您所看到的,此示例中没有任何 msql 插入,因此不要忘记根据此示例调整您自己的代码。您的代码应如下所示:

<?php
$con=mysqli_connect("localhost","root","","db");
    // Check connection
    if (mysqli_connect_errno()) 
        {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }
    //Replace $mysqli with your $con then. $con->query($sql);   
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);

    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/jpg")
    || ($_FILES["file"]["type"] == "image/pjpeg")
    || ($_FILES["file"]["type"] == "image/x-png")
    || ($_FILES["file"]["type"] == "image/png"))
    && ($_FILES["file"]["size"] < 2000000)
    && in_array($extension, $allowedExts))  
        {
            if ($_FILES["file"]["error"] > 0) 
                {
                    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
                } 
            else 
                {
                    if (file_exists("images/" . $_FILES["file"]["name"])) 
                        {
                            echo $_FILES["file"]["name"] . " already exists. ";
                        } 
                    else 
                        {
                           if(!is_array($_FILES["file"]["name"])) //single file
                           {
                                $imagepath = "images/" . $_FILES["file"]["name"];
                                move_uploaded_file($_FILES["file"]["tmp_name"], $imagepath);
                                $sql="INSERT INTO images(image,studentid) VALUES ('".$imagepath."','".$_SESSION['insert_id']."')";
                                if (!mysqli_query($con,$sql)) 
                                    {
                                        die('Error: ' . mysqli_error($con));
                                    }
                            }else  //Multiple files, file[]
                            {
                              $fileCount = count($_FILES["file"]["name"]);
                              for($i=0; $i < $fileCount; $i++)
                              {
                                $fileName = $_FILES["file"]["name"][$i];
                                move_uploaded_file($_FILES["file"]["tmp_name"][$i],$imagepath);
                                $ret[]= $fileName;
                                $sql="INSERT INTO images(image,studentid) VALUES ('".$imagepath."','".$_SESSION['insert_id']."')";
                                    if (!mysqli_query($con,$sql)) 
                                    {
                                        die('Error: ' . mysqli_error($con));
                                    }
                              }

                            }

                            }
                        }
                }
                header("Location: index.php");
        } 
    else    
        {
            echo "Invalid file";
        }

    ?>

关于php - 在服务器上上传多张图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26300066/

相关文章:

javascript - PHP 简单 HTML DOM 解析器不将 alt 标签显示为文本

php - 如何将 LIKE %% 应用于变量?

php - Codeigniter 中仅更新一行

mysql - MySQL 查询的奇怪结果

sql - 提示 `CHECK` 的语法

php - 在 Controller 中应用函数后, View 不显示相同的内容

php - 如何使用日期作为新列名

java - 使用 Criteria api 查找半径内的坐标

sql - 为什么在同一个查询中一个表会被别名两次?

如果特定日期不存在,MySQL 查询将针对属性返回零