我正在尝试更新相同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是当前文件的名称。