多次上传将图像名称放在同一个数据库行中

时间:2012-04-07 19:09:58

标签: php

嗨我有这个脚本工作得很好但现在我试图让它将3个图像的名称添加到我的数据库在同一个数据库行如果你上传3个图像$扩展名将显示3个图像的名称但我不知道如何将3个名称放入image1,images2,images3下的同一个数据库行中,任何人都知道如何做到这一点?我没有运气,我尝试了所有我知道的事情。

`$connection = mysql_connect("localhost", "????", "????");
mysql_select_db("????", $connection);
$uploaddir = "upload/";
$MaxSize = "600000";
$number_of_files = count($_FILES['userfile']);
for($i=0;$i<=$number_of_files;$i++) {
$filename_format = uniqid(Img_);
if (!$_FILES['userfile']['size'][$i] == 0)
{
if ($_FILES['userfile']['size'][$i] > $MaxSize)
{
echo "ERROR: file too big";
exit;}
$tempfile = $_FILES['userfile']['tmp_name'][$i];
$uploadfile = $_FILES['userfile']['name'][$i];
$extension = $_FILES['userfile']['type'][$i];
if (strstr($extension,"jpeg"))
{
$extension=".jpg";
}
elseif (strstr($extension,"gif"))
{
$extension=".gif";
}
elseif (strstr($extension,"png"))
{
$extension=".png";
}
else
{
echo "ERROR: Only gif/jpeg/png allowed.";
exit;
}
if(copy($tempfile, $uploaddir.$uploadfile))
{
echo "Copy Successfull!";
}
else
{
echo "ERROR: something happened trying to copy the temp file to the folder";
}
if(rename($uploaddir.$uploadfile,$uploaddir.$filename_format.$extension))
{
}else{
$query = "INSERT INTO photos (image1, image2, image3) VALUES ('WHAT TO PUT      HERE?','HERE','AND HERE')";  
$result = mysql_query($query);
echo " and renamed to $filename_format$extension";
}
}
else
{
echo "ERROR: Problem renaming the file.. $uploadfile";
}
}`.

2 个答案:

答案 0 :(得分:0)

这不是一个好的数据库设计。如果有人上传了四张图片怎么办?如果他们上传十个怎么办?这种方法使代码变得复杂,因为你必须处理同一个事物的多个列,并且还对你可以存储多少个值施加任意限制。

最好为每个上传的文件使用单独的数据库记录。如果要指示一组文件全部“一起”上传,请创建一个photo_groups表,其行代表一起上传的照片集,并使照片表中的每条记录都包含photo_groups表中记录的ID。这样,您就可以将多张照片记录与一个照片组相关联。

答案 1 :(得分:0)

你不应该在给定的行中放置可变数量的列(事实上,据我所知,对于大多数SQL来说都是不可能的。)

例如,如果您有一个包含附件的论坛帖子,您应该执行以下操作:

+---------------------------------------------+
| Table `forum_posts`                         |
+-----------+--------------+--------+---------+
| post_name | post_content | etc... | post_id |
+-----------+--------------+--------+---------+
| "Example  | "Blah blah   | ...    |    5    |
|  post"    |  blah..."    |        |         |
+-----------+--------------+--------+---------+

其中post_id是一个自动递增的主键(这基本上意味着此表中的每一行都有一个唯一的post_id),您应该将图像放在一个新表中,如下所示:

+----------------------------------------------+
| Table `forum_post_images`                    |
+------------+------------+---------+----------+
| image_url  | image_name | post_id | image_id |
+------------+------------+---------+----------+
| image1.png | "Lol!"     |   10    |     1    |
+------------+------------+---------+----------+
| image2.jpg | "asdf"     |   1     |     2    |
+------------+------------+---------+----------+
| image3.gif | "Example"  |   3     |     3    |
+------------+------------+---------+----------+

在这里,每个图像都有一个唯一的ID(以防万一我们需要它),以及它所属的帖子的id。现在,您可以执行两个单独的查询来加载论坛帖子及其附加图像:

SELECT * FROM `forum_posts` WHERE `post_id` = 5;

SELECT * FROM `forum_post_images` WHERE `post_id` = 5;

这将在两个查询中返回帖子信息和附加到它的图像。您可以使用相同的方法为特定应用程序修改此类设计。

相关问题