2013-08-20 20 views
0

我正在嘗試更新同一個product_id的3張圖片。我有一個不同的product_table和Product_images表。 product_images表有5個字段; image_id,product_id,名稱,圖像,ord。我正在嘗試更新任何特定product_id的圖像。我之前面臨的問題是,它爲所有這三個「圖像」設置了相同的「圖像」,這就是爲什麼我添加了'ord'域並解決了這個問題。現在我有一個新問題。我無法理解在哪裏寫 更新圖像'查詢。如果我在for循環中編寫它,那麼它會運行'Update Query'6次,如果我在for循環外寫它,那麼它無法找到$ ord []變量。 請告訴方法來解決這個問題。 下面給出了我正在處理的代碼的一部分。什麼是更新三張相同ID的圖像的邏輯?

/* 
* ------------------- 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 
--------------------*/ 

回答

2

都在做回聲語句的賦值首先是非常不好的風格(使得它很難讀)

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

更好:

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

第二件事:

對於您的for聲明,您使用$i=1;。 請注意,PHP的數組索引從0開始,所以這應該是$i=0;(不要忘記改變條件)。 應該是這樣的:

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

,並在您for聲明有這樣的:

{) 

認爲這應該只是

{ 

關於你UPDATE聲明:

你的站點中有一個輸入錯誤tement:

$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]"; 

(和和ord =缺失之間的空間)

接下來,使用$order_id[$i],但你把它用在了對後不重新定義$i -循環。在循環結束之前,您必須先使用$i = 0;,然後再使用$i++;

如果要替換現有圖像,並不能絕對確保新舊圖像的數量是相同的(或照顧這個不知),你應該寧願做在現有圖像DROP,然後INSERT新的。

此外,您的foreach語句定義$鍵爲'tmp_name'代表,但在你的代碼使用 $ _FILES [ 「文件」] [ 「名稱」] [$關鍵] 或 $ _FILES [ 「文件」] [ 「tmp_name」] [$ key] (他們故意不同嗎?) 其實應該是 $ _FILES [「files」] [$ key] 因爲$ key是當前文件的名字。