几天来我一直在寻找答案,如何将多张照片上传到数据库而不会使系统超载,并决定最好的方法是将多张照片上传到新创建的目录(通过php创建)中并存储目录链接在数据库中。我正在研究的是一种基本上可以创建新的唯一页面的表单。这个独特的页面具有一组独特的照片,因此,每次生成页面时我都需要生成一个文件夹,并将路径链接上传到数据库!我怎么做???

这是我的HTML:

<form method="post" action="test.php" enctype="multipart/form-data">
  <p>File:</p>
  <input type="file" name="file[]" id="file" >
  <input type="submit" value="Upload">
</form>


这是我到目前为止的PHP(我希望:/)应该在正确的轨道上:

<?php
  //Connect to DB
  $conn = mysql_connect ('localhost', 'root', 'root');
  if (!$conn){
    die("Could Not Connect to MySQL!");
  }
  if(!mysql_select_db("test")){
    die("Could Not Open Database:" . mysql_error());
  }
  echo "<p>Connected</p>";

  //Upload Files
  foreach ($_FILES['file']['name'] as $f => $name) {
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $name);
    $extension = end($temp);

    if ((($_FILES["file"]["type"][$f] == "image/gif")
    || ($_FILES["file"]["type"][$f] == "image/jpeg")
    || ($_FILES["file"]["type"][$f] == "image/jpg")
    || ($_FILES["file"]["type"][$f] == "image/png"))
    && ($_FILES["file"]["size"][$f] < 2000000)
    && in_array($extension, $allowedExts))
    {
      if ($_FILES["file"]["error"][$f] > 0){
        echo "Return Code: " . $_FILES["file"]["error"][$f] . "<br>";
      } else {
        if (file_exists("uploads/" . $name)){
          echo "<p>File Already Exists</p>";
        } else {
          //create new directory folder within /uploads

          //move the files you upload into the new folder.
          move_uploaded_file($_FILES["file"]["tmp_name"][$f], "upload/" . uniqid() . "_" . $name);
          //send the file path to the database.
          mysql_query("INSERT INTO test (idtest,testing) VALUES (','{$filepath}'");
        }
      }
    } else {
      $error =  "Invalid file";
    }
  }
?>


对于那些好奇的人,这是我的数据库列:

|| idtest (AI, INT) || testing (varchart(50)) ||


任何帮助都非常感谢!一直在干我!先感谢您!

最佳答案

鉴于您是在move_command中即时生成随机的文件名,因此绝对没有办法为数据库操作保留该随机/唯一名称。您生成随机名称,使用它,然后将其丢弃。

你必须做

$filename = "upload/" . uniqid() . ....
move_uploaded_file(..., $filename);
mysql_query(".... $filename");


如果您尝试简单地在查询中复制文件名生成逻辑,则会得到两个完全不同的,彼此没有关系的随机名称。

另外,您的file_exist()测试完全没有意义。您正在将上传的文件移动到一个随机名称,但是正在测试原始客户端文件名,

例如

file_exists('kittens.jpg');
move_uploaded_file(..., 'uploads/kittens-345234523452345.jpg');


换句话说,您将永远不会收到“文件已存在”的警告,因为冲突检查从根本上被破坏了。

09-20 22:09