Php 上载同一表中的多个文件时出错

Php 上载同一表中的多个文件时出错,php,mysql,Php,Mysql,我在数据库中上传图像时遇到了这个问题。当我插入查询时,一次单击就有3行。这是一个HTML文件: <form action="my_parser.php" method="post" enctype="multipart/form-data"> <input type="file" name="file_array[]"> <input type="file" name="file_array[]"> <input type="file" nam

我在数据库中上传图像时遇到了这个问题。当我插入查询时,一次单击就有3行。这是一个HTML文件:

 <form action="my_parser.php" method="post" enctype="multipart/form-data"> 
 <input type="file" name="file_array[]">
 <input type="file" name="file_array[]">
 <input type="file" name="file_array[]">
  <input type="submit" value="Upload all files"> 
 </form> 

这是我的PHP代码:

<?
include "../include/config.php";

?>

<?
 if(isset($_FILES['file_array'])){
    $id = $_REQUEST['id'];
     $name_array = $_FILES['file_array']['name'];
     $tmp_name_array = $_FILES['file_array']['tmp_name'];
     $type_array = $_FILES['file_array']['type'];
     $size_array = $_FILES['file_array']['size'];
     $error_array = $_FILES['file_array']['error']; 
     $image1 = $name_array[0];

        for($i = 0; $i < count($tmp_name_array); $i++){
         if(move_uploaded_file($tmp_name_array[$i], 
            "test_uploads/".$name_array[$i])){ 
            echo $name_array[$i]." upload is complete<br>";

            $add = mysql_query("insert into nn values ('        ','$image1','','')");

             echo "<img src='test_uploads/$image1'>";
             } else
              { echo "move_uploaded_file function failed for ".$name_array[$i]."<br>"; 
            }
             } 
            } 
            ?>


让我们把这个清理一下

让我们设置数据库连接。对于本例,我们将转到
mysqli
。然后我们将处理移动文件,并将文件路径存储在数据库中

$conn = new mysqli('host', 'user', 'pass', 'db');

if(isset($_FILES['file_array'])):
    $id = isset($_REQUEST['id']) ? $_REQUEST['id'] : false;
    if($id):
        $file_array = $_FILES['file_array'];
        for($i = 0; $i < count($file_array['tmp_name']); $i++):
            if(move_uploaded_file($file_array['tmp_name'][$i], 'test_uploads/'.$file_array['name'][$i])):
                $stmt = $conn->prepare("insert into nn values('', ?, '', '')");
                $stmt->bind_param('s', $file_array['name'][$i]);
                if($stmt->execute()):
                    echo $file_array['name'][$i].' has been uploaded successfully.';
                else:
                    echo 'Failed to upload '.$file_array['name'][$i].'. Please check the file and try again!';
                    return false;
                endif;
            endif;
        endfor;
    endif;
endif;
$conn=newmysqli('host','user','pass','db');
如果(isset($\u FILES['file\u array']):
$id=isset($\请求['id'])$_请求['id']:false;
如果($id):
$file\u array=$\u FILES['file\u array'];
对于($i=0;$iprepare(“插入nn值(“”、“”、“”、“”)、“”);
$stmt->bind_param('s',$file_数组['name'][$i]);
如果($stmt->execute()):
echo$file_数组['name'][$i].'已成功上载。“;
其他:
echo“未能上载“.$file\u数组['name'][$i]”。请检查该文件并重试;
返回false;
endif;
endif;
endfor;
endif;
endif;
没有理由创建所有这些混乱的变量。我们已经转移到目前受支持的MySQLI,并且我们使用了一个准备好的语句来确保映像的名称不是可能对我们的应用程序有害的恶意内容

资源


这看起来非常不安全,因为您的用户参数不安全。您不应该将
$\u POST
数据直接放入查询中。这造成了巨大的灾难。另外,
mysql\u query
是一个过时的接口,不应该使用,它正在从PHP中删除。一个现代的替代品。像这样的指南解释了最佳实践。