2012-09-15 37 views
1

我做了一個查詢來完成我的工作。但它確實有一些錯誤。如何只更新從mysql表中選擇的字段

1)我有6個圖像場,並在MySQL表

2)一些其它字段更新我使用具有6個文件上傳日提交的,並標記爲image1的圖像2的HTML表單...

3)所以如果我想只更新第5張圖片,我必須將新圖片上傳到ima​​ge5格式。

更新MySQL表我做了這個查詢。

$image=array(
1 =>$_FILES['image1']['name'], 
2 =>$_FILES['image2']['name'], 
3 =>$_FILES['image3']['name'], 
4 =>$_FILES['image4']['name'], 
5 =>$_FILES['image5']['name'], 
6 =>$_FILES['image6']['name'], 
); 
$i=1; 
    $sql = "UPDATE salehotel "; 
    $sql .="SET"." "; 
foreach($image as $value){ 
    if(!$value==""){  
    $sql .= "`image".$i."`"."="."'". $value ."'".",". " "; 
    $i++; 
    } 

} 

$sql .=" 
     `name`='$name', 
     `status`='$status', 
     `type`='$type', 
     `location`='$location', 
     `price`='$price', 
     `description`='$description' 
    WHERE 
     `property_id`='$edit' 
     "; 

3)當我用它來更新所有6張圖片時,沒有錯誤,它更新了每一件事情。

4),但是當我嘗試更新單個圖像,(例如:想,如果我想更新圖像5)任我選擇從圖像5場一個文件,這個查詢總是更新表中的第一張圖像。

5)我知道爲什麼會發生。在我的查詢內foreach循環,我只看$值不等於「」。然後增加$ i。所以它只增加一次。所以它更新image1要麼我想更新image5。

6),所以我怎麼能得到這個錯誤的拼車?

感謝提前。

+2

變化的foreach()循環的for()循環,每次數到5的檢查,如果如果有一個文件 – 2012-09-15 03:18:06

+0

抱歉需要一些時間.. – Yasitha

回答

2
$_FILES['image2']['name']='zzzzzzzzzzzzzzzzzz'; 

$image=array(
1 =>$_FILES['image1']['name'], 
2 =>$_FILES['image2']['name'], 
3 =>$_FILES['image3']['name'], 
4 =>$_FILES['image4']['name'], 
5 =>$_FILES['image5']['name'], 
6 =>$_FILES['image6']['name'], 
); 


for ($i = 1; $i <= 6; $i++) { 
if(!empty($image[$i])){  
    $sql .= "`image".$i."`"."="."'". $image[$i] ."'".",". " "; 
    } 
} 

echo $sql; 
+0

這一個解決了我的問題。先生非常感謝您。 – Yasitha

1

你可以簡單地通過採取$i++;線,出if塊的做到這一點。

代碼的修改版本,與上面提到的修復和其他一些更正:

<?php 

$image=array(
    1 =>$_FILES['image1']['name'], 
    2 =>$_FILES['image2']['name'], 
    3 =>$_FILES['image3']['name'], 
    4 =>$_FILES['image4']['name'], 
    5 =>$_FILES['image5']['name'], 
    6 =>$_FILES['image6']['name'], 
); 
$i=1; 

$sql = 'UPDATE salehotel '; 
$sql .= 'SET '; 

foreach($image as $value) 
{ 
    if(!$value=='') 
     $sql .= '`image'.$i.'` ='."'". $value ."'".', '; 

    $i++; 
} 

$sql .=" 
     `name`='$name', 
     `status`='$status', 
     `type`='$type', 
     `location`='$location', 
     `price`='$price', 
     `description`='$description' 
    WHERE 
     `property_id`='$edit' 
     "; 

儘量不要使用雙引號,除非你有變量或其他雙引號內。

更好的解決方案將使用foreach循環的能力有一個key,像這樣:

<?php 

$image=array(
    1 =>$_FILES['image1']['name'], 
    2 =>$_FILES['image2']['name'], 
    3 =>$_FILES['image3']['name'], 
    4 =>$_FILES['image4']['name'], 
    5 =>$_FILES['image5']['name'], 
    6 =>$_FILES['image6']['name'], 
); 

$sql = 'UPDATE salehotel '; 
$sql .= 'SET '; 

foreach($image as $key=>$value) 
{ 
    if(!$value=='') 
     $sql .= '`image'.($key + 1).'` ='."'". $value ."'".', '; 
} 
... 
... 
相關問題