0

我正在尝试更新 3 个相同 product_id 的图像。我有一个不同的 product_table 和 Product_images 表。product_images 表有 5 个字段;image_id、product_id、名称、图像、排序。我正在尝试更新任何特定 product_id 的图像。我之前面临的问题是它为所有三个“图像”设置了相同的“图像”,这就是我添加“ord”文件的原因,它解决了这个问题。现在我有一个新问题。我无法理解在哪里编写更新图像的查询。如果我将它写在 for 循环中,那么它会运行 'Update Query' 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
--------------------*/
4

1 回答 1

2

首先,在 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]";

(and 和 ord 之间的空格=缺失)

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

如果您想替换现有图像并且不确定新旧图像的数量是否相同(或以某种方式处理此问题),您应该DROP先对现有图像执行然后INSERT新图像。

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

于 2013-08-20T12:50:18.270 回答