如何在单个表中更新具有不同值的相同ID?

时间:2013-08-19 06:26:04

标签: php html mysql database

我正在尝试更新每个产品有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 个答案:

答案 0 :(得分:1)

基本上有两种方法可以解决这个问题。上传现有产品的新图像时,您可以:

  1. 查找现有图片并逐一更新或
  2. (最好)删除旧图像并插入新图像。它更简单,但仅作为一组使用图像(无个人访问)。
  3. 第一点需要以某种方式识别每个产品图像以单独处理它。您必须在表product_images中决定某些unique key。它可能是Image_id以及Product_idImage_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中显示图像时,将显示所有图像路径。