几天来我一直在寻找答案,如何将多张照片上传到数据库而不会使系统超载,并决定最好的方法是将多张照片上传到新创建的目录(通过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');
换句话说,您将永远不会收到“文件已存在”的警告,因为冲突检查从根本上被破坏了。