更新三个相同ID的图像的逻辑是什么


What is the logic to update three images of same ID?

我正在尝试更新相同product_id的3个映像。我有一个不同的product_table和product_images表。product_images表有5个字段;image_id,product_id,name,images,ord。我正在尝试更新任何特定product_id的图像。我之前面临的问题是,它为所有三个"图像"设置了相同的"图像",这就是为什么我添加了"ord"字段,它解决了这个问题。现在我有一个新问题。我不知道在哪里写作"更新图像"查询。如果我把它写在for循环内部,那么它会运行"更新查询"6次;如果我在for循环外部写它,那么它无法找到$ord[]变量。请告诉我解决这个问题的方法。下面是我正在处理的代码部分。

/*
 * ------------------- IMAGE-QUERY Test 002 --------------------
 */
if (isset ( $_FILES ['files'] ) || ($_FILES ["files"] ["type"] == "image/jpeg"))
{
    $i = 1;
    /*
     * ----------------------- Taking Current Order_id ------------------------
     */
    // $order_sql= "select MAX(ord) from product_images";
    $order_sql = "SELECT ord from product_images where product_id=$id";
    $order_sql_run = mysql_query ( $order_sql );
    echo mysql_error ();
    for($i = 1; $i <= $order_fetch = mysql_fetch_array ( $order_sql_run ); $i ++)
        // while ($order_fetch=     mysql_fetch_array($order_sql_run))
        {)
        echo 'ID ' . $order_id [$i] = $order_fetch [(ord)];
    }
    /*
     * ----------------------- Taking Current Order_id ------------------------
     */
    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 );
        echo '<br>';
        echo $sql = "update product_images set name= '$random_name',images= '$folder' where product_id=$id andord=$order_id[$i]";
        if ($query_run = mysql_query ( $sql )) {
            echo '<br>';
            echo 'Done';
        }
        else {
            echo mysql_error ();
        }
        // $i=$i+1;
    }
}

 /*-------------------
IMAGE-QUERY Test 002
--------------------*/

首先,在echo语句中进行赋值是非常糟糕的风格(使其难以读取)

echo 'ID ' . $order_id [$i] = $order_fetch [(ord)];

更好:

$order_id [$i] = $order_fetch [(ord)];
echo 'ID ' . $order_id [$i];

第二件事:

您使用$i=1;作为for语句。请注意,在PHP中,数组的索引以0开头,因此应该是$i=0;(不要忘记更改条件)。应该是这样的:

for($i = 0; $i < $order_fetch = mysql_fetch_array ( $order_sql_run ); $i ++)

在你的for语句中有这样一个:

{)

认为应该只是

{

关于您的UPDATE声明:

您的对账单中有一个打字错误:

$sql = "update product_images set name= '$random_name',images= '$folder' where product_id=$id andord=$order_id[$i]";

应该是

$sql = "update product_images set name= '$random_name',images= '$folder' where product_id=$id and ord=$order_id[$i]";

(和之间的空格=缺失)

接下来,使用$order_id[$i],但在for循环中使用$i后,不要重新定义它。在使用$i = 0;之前,您必须在某个地方执行它,然后在循环结束时执行$i++;

如果你想替换现有的图像,并且不绝对确定新旧图像的数量是否相同(或者以某种方式处理好这一点),你应该对现有图像执行DROP,然后对新图像执行INSERT

此外,foreach语句将$key定义为'tmp_name'的表示,但在您使用的代码中$_FILES["文件"]["名称"][$key]或$_FILES["FILES"]["tmp_name"][$key](它们是故意不同的吗?)实际上应该是$_FILES["文件"][$key]因为$key是当前文件的名称。