【问题标题】:Upload Multiple images to mysql database上传多张图片到mysql数据库
【发布时间】:2017-11-16 22:21:20
【问题描述】:

我对 PHP 比较陌生。我需要一键将多张图片上传到数据库。这是代码。我知道我必须添加一个 foreach 循环来单独浏览每个图像(单独插入图像),但我似乎无法找到插入每个循环的正确位置。任何答案将不胜感激。

<?php

    error_reporting( ~E_NOTICE ); // avoid notice

    require_once 'dbconfig.php';

    if(isset($_POST['btnsave']))
    {
        $carname = $_POST['car_name'];// car name
        $carmodel = $_POST['car_model'];// car model
        $caramount = $_POST['car_amount'];// car amount

        $imgFile = $_FILES['car_image']['name'];
        $tmp_dir = $_FILES['car_image']['tmp_name'];
        $imgSize = $_FILES['car_image']['size'];


        if(empty($carname)){
            $errMSG = "Please Enter Name of the Car.";
        }
        else if(empty($carmodel)){
            $errMSG = "Please Enter Model Number of the car.";
        }
        else if(empty($caramount)){
            $errMSG = "Please Enter the cost of the car.";
        }
        else if(empty($imgFile)){
            $errMSG = "Please Select Image File.";
        }
        else
        {

            $upload_dir = 'user_images/'; // upload directory

            $imgExt = strtolower(pathinfo($imgFile,PATHINFO_EXTENSION)); // get image extension

            // valid image extensions
            $valid_extensions = array('jpeg', 'jpg', 'png', 'gif'); // valid extensions

            // rename uploading image
            $carpic = rand(1000,1000000).".".$imgExt;

            // allow valid image file formats
            if(in_array($imgExt, $valid_extensions)){            
                // Check file size '5MB'
                if($imgSize < 5000000)                {
                    move_uploaded_file($tmp_dir,$upload_dir.$carpic);
                }
                else{
                    $errMSG = "Sorry, your file is too large.";
                }
            }
            else{
                $errMSG = "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";        
            }
        }


        // if no error occured, continue ....
        if(!isset($errMSG))
        {
            $stmt = $DB_con->prepare('INSERT INTO tbl_cars(carName,carModel,carAmount,carPic) VALUES(:cname, :cmodel, :camount, :cpic)');
            $stmt->bindParam(':cname',$carname);
            $stmt->bindParam(':cmodel',$carmodel);
            $stmt->bindParam(':camount',$caramount);
            $stmt->bindParam(':cpic',$carpic);
            if($stmt->execute())
            {
                $successMSG = "new record succesfully inserted ...";
                header("refresh:5;car_display.php"); // redirects image view page after 5 seconds.
            }
            else
            {
                $errMSG = "error while inserting....";
            }
        }
    }
?>

我知道我需要为每个循环添加一个简单的循环,执行失败了。 谁来救救我

这是上传的 HTML 位

 <tr>
        <td><label class="control-label">Car Img.</label></td>
        <td><input class="input-group" type="file" name="car_image" multiple="multiple" accept="image/*" /></td>

【问题讨论】:

  • 你有答案,一个循环来迭代每个和所有图像,检查它的大小,更改它的名称,无论你打算执行什么操作,然后插入数据库。实际上,您可以创建图像数组并循环图像。
  • 是的,我知道,我似乎无法正确执行它。请记住,我对 php 非常陌生。
  • 没有人会救你...$_FILES 在有多个文件时看起来会有所不同。你的&lt;input type="file"&gt; 在你的&lt;form&gt; (很高兴看到你的 HTML) 中怎么样?提交表单时尝试了print_r($_FILES)?我敢打赌,您可以通过尝试并搜索一下而不是要求“拯救”您来找到自己的答案,您是新人,但看起来还不错。
  • 我试过了,但失败了。这个论坛是为了互相帮助。我已经添加了 html sn-p。

标签: php mysql database


【解决方案1】:

您需要在 html 中指定它将是一个文件数组 然后在你的php中调用foreach,基本上post会是一个数组。

我的示例未使用 PDO 或适用于您的示例,但它正在上传多个文件。

PHP:

<?php
if(isset($_FILES['files'])){
    $errors= array();
    foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){
        $file_name = $key.$_FILES['files']['name'][$key];
        $file_size =$_FILES['files']['size'][$key];
        $file_tmp =$_FILES['files']['tmp_name'][$key];
        $file_type=$_FILES['files']['type'][$key];  
        if($file_size > 2097152){
            $errors[]='File size must be less than 2 MB';
        }       
        $query="INSERT into upload_data (`USER_ID`,`FILE_NAME`,`FILE_SIZE`,`FILE_TYPE`) VALUES('$user_id','$file_name','$file_size','$file_type'); ";
        $desired_dir="user_data";
        if(empty($errors)==true){
            if(is_dir($desired_dir)==false){
                mkdir("$desired_dir", 0700);        // Create directory if it does not exist
            }
            if(is_dir("$desired_dir/".$file_name)==false){
                move_uploaded_file($file_tmp,"user_data/".$file_name);
            }else{                                  //rename the file if another one exist
                $new_dir="user_data/".$file_name.time();
                 rename($file_tmp,$new_dir) ;               
            }
            mysql_query($query);            
        }else{
                print_r($errors);
        }
    }
    if(empty($error)){
        echo "Success";
    }
}
?>

HTML

<form action="yourphpfile.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="files[]" multiple="" />
    <input type="submit"/>
</form>

【讨论】:

  • 很高兴能帮上忙。
  • 是正确的方式,你还必须考虑@dtz所说的它没有使用PDO,所以我建议寻找使用PDO,Prepared Statements,以避免SQL注入。
猜你喜欢
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 2017-01-29
  • 2013-05-06
  • 2014-10-21
相关资源
最近更新 更多