我正在尝试更新每个产品有3张图片的表格。我在查询周围添加了一个循环,如果我回显它,它会向我显示每个更新不同图像的3个查询,但是当我检查产品时,它会向我显示所有3个图像中的最后一个上传图像。 我已经理解了这个问题但无法找到解决方案。
查询输出。
update product_images set name= '4861Gold_chain.png',
images='upload/products/4861Gold_chain.png'
where product_id= 22
update product_images set name= '4675Necklaces_Diamond.png',
images= 'upload/products/4675Necklaces_Diamond.png'
where product_id= 22
update product_images set name= '23538charms_silver.png',
images= 'upload/products/23538charms_silver.png'
where product_id= 22
以下是完整的图像更新部件代码。
/*-----------------
IMAGE QUERY 2
------------------*/
if (isset($_FILES['files'])
|| ($_FILES["files"]["type"] == "image/jpeg"))
{
foreach($_FILES['files']['tmp_name'] as $key=> $tmp_name)
{
//echo $tmp_name."<br>";
echo 'number<br>';
echo $image_name= $_FILES["files"]["name"][$key];
$random_name= rand().$_FILES["files"]["name"][$key];
$folder="upload/products/" .$random_name;
move_uploaded_file($_FILES["files"]["tmp_name"][$key],
"upload/products/" . $random_name);
// print_r($_FILES);
echo $sql= "update product_images set name= '$random_name',
images= '$folder' where product_id= $id ";
if ($query_run= mysql_query($sql))
{
echo '<br>';
echo 'Done';
}
else
{
echo mysql_error();
}
}
}
/*-----------------
IMAGE QUERY 2- END
------------------*/
答案 0 :(得分:1)
基本上有两种方法可以解决这个问题。上传现有产品的新图像时,您可以:
第一点需要以某种方式识别每个产品图像以单独处理它。您必须在表product_images
中决定某些unique key。它可能是Image_id
以及Product_id
和Image_id
的组合。在第一种情况下,您必须为所有产品的所有图像生成唯一值,在第二种情况下,它足以分别为每个产品的图像编号。
答案 1 :(得分:1)
您正在执行的SQL查询,无法分别区分图像,并且它会考虑相同的图像/项目。
为了区分数据库和数据库,我建议保留一些索引字段。比如,如果您的每个产品都有3个图像要保存在数据库中,请尝试使用另一个名为“odr”的字段来设置重新排序&amp;每个产品分别区分3个图像。但如果您不必为每种产品单独考虑图像,那么就可以了。但它现在认真地帮助你保持sql查询非常简单来解决这个问题,否则sql查询可能会有点复杂。要保存每个产品的所有3张图像,请参阅以下解决方案:
<强>解决方案:强> 1)保留一个新的字段名称'odr':
update product_images set name= '4861Gold_chain.png',
images='upload/products/4861Gold_chain.png'
where product_id= 22 and odr=1
update product_images set name= '4675Necklaces_Diamond.png',
images= 'upload/products/4675Necklaces_Diamond.png'
where product_id= 22 and odr=2
update product_images set name= '23538charms_silver.png',
images= 'upload/products/23538charms_silver.png'
where product_id= 22 and odr=3
修改你的代码就像这样:
/*-----------------
IMAGE QUERY 2
------------------*/
if (isset($_FILES['files'])
|| ($_FILES["files"]["type"] == "image/jpeg"))
{
/*add a line here*/
/*for odr field*/
$odr=0;
foreach($_FILES['files']['tmp_name'] as $key=> $tmp_name)
{
/*add another line here*/
/*increment the odr*/
$odr=$odr+1;
//echo $tmp_name."<br>";
echo 'number<br>';
echo $image_name= $_FILES["files"]["name"][$key];
$random_name= rand().$_FILES["files"]["name"][$key];
$folder="upload/products/" .$random_name;
move_uploaded_file($_FILES["files"]["tmp_name"][$key],
"upload/products/" . $random_name);
// print_r($_FILES);
echo $sql= "update product_images set name= '$random_name',
images= '$folder' where product_id= $id and odr= $odr";
if ($query_run= mysql_query($sql))
{
echo '<br>';
echo 'Done';
}
else
{
echo mysql_error();
}
}
}
/*-----------------
IMAGE QUERY 2- END
------------------*/
2)如果你不想使用另一个新字段'odr',那么对于简化的sql代码你可以使用它,但是,这不推荐,因为它一次又一次地改变相同的字段(只有sql被简化为理解):
sql查询应该是:
update product_images set name= '4861Gold_chain.png',
images='upload/products/4861Gold_chain.png'
where product_id= 22 limit 3
//update all of the 3 images to these values
update product_images set name= '4675Necklaces_Diamond.png',
images= 'upload/products/4675Necklaces_Diamond.png'
where product_id= 22 limit 2
//update first 2 images, so last image will remain with the first value
update product_images set name= '23538charms_silver.png',
images= 'upload/products/23538charms_silver.png'
where product_id= 22 limit 1
//update only last image, so, first & second keeps their value to previous two value separately
并且您的案例代码应为:
/*-----------------
IMAGE QUERY 2
------------------*/
if (isset($_FILES['files'])
|| ($_FILES["files"]["type"] == "image/jpeg"))
{
/*add a line here*/
$i=3;
foreach($_FILES['files']['tmp_name'] as $key=> $tmp_name)
{
//echo $tmp_name."<br>";
echo 'number<br>';
echo $image_name= $_FILES["files"]["name"][$key];
$random_name= rand().$_FILES["files"]["name"][$key];
$folder="upload/products/" .$random_name;
move_uploaded_file($_FILES["files"]["tmp_name"][$key],
"upload/products/" . $random_name);
// print_r($_FILES);
echo $sql= "update product_images set name= '$random_name',
images= '$folder' where product_id= $id limit $i";
if ($query_run= mysql_query($sql))
{
echo '<br>';
echo 'Done';
}
else
{
echo mysql_error();
}
/*add another line here*/
$i=$i-1;
}
}
/*-----------------
IMAGE QUERY 2- END
------------------*/
我脑子里还有另一个解决方案,虽然我不打算在这里给出它,但是会使用一个带有select和amp;的sql子句的复杂sql。抵消,但我认为我在这里使用'odr'给出的第一个将是最好的,如果你可以添加一个新的字段odr。 并且不要忘记确保product_id字段不是主要/唯一(我想您知道)
答案 2 :(得分:0)
如果要上传多张图片,请使用<input type='file' name='images[]'>
然后你的php脚本应该使用索引来循环数组:
$_FILES["files"][$index]["type"]
php手册解释了所有内容:http://www.php.net/manual/en/features.file-upload.multiple.php
答案 3 :(得分:0)
如果要将产品的所有图像保存在一个ID中并想要使用该产品的所有图像,请保存由 *或任何特定字符串分隔的图像路径,并将字符串拆分为* < / strong>在html.n中显示图像时,将显示所有图像路径。