0

我正在尝试更新一个包含每个产品 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
                            ------------------*/
4

4 回答 4

1

基本上有两种选择可以解决这个问题。为现有产品上传新图片时,您可能会:

  1. 找到现有的图像并一一更新它们或
  2. (最好)删除旧图像并插入新图像。它更简单,但只能将图像作为一组使用(不能单独访问)。

第一点需要以某种方式识别每个产品图像以单独处理。您必须决定表中的一些唯一键product_images。它可能是和Image_id的组合。在第一种情况下,您必须为所有产品的所有图像生成唯一值,在第二种情况下,分别为每个产品的图像编号就足够了。Product_idImage_id

于 2013-08-19T08:11:59.197 回答
1

您正在执行的 sql 查询,无法单独区分图像,并且它被认为是相同的图像/项目。

为了从数据库中区分数据,我建议保留一些索引字段。比如说,如果您的每个产品有 3 个图像要保存在数据库中,请尝试使用另一个名为“odr”的字段来为每个产品分别设置重新排序和区分 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 & offset 的 sql 子句使用一个有点复杂的 sql,但我认为我在这里给出的第一个使用 'odr' 将是最好的对你来说,如果你可以添加一个新的字段 odr。并且不要忘记确保 product_id 字段不是主要/唯一的(我想你知道)

于 2013-08-19T09:36:22.547 回答
0

如果您想将产品的所有图像保存在一个 id 中并希望使用该产品的所有图像,则保存以* 或任何特定字符串分隔的图像路径,并在以 html 显示图像时用 * 分割字符串。 n 因此将显示所有图像路径。

于 2013-08-19T06:47:40.900 回答
0

如果您要上传多张图片,请使用<input type='file' name='images[]'>

然后,您的 php 脚本应使用索引循环遍历数组:

$_FILES["files"][$index]["type"]

php手册解释了这一切:http ://www.php.net/manual/en/features.file-upload.multiple.php

于 2013-08-19T06:33:23.630 回答