2012-09-15 38 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 ."'".', '; 
} 
... 
... 
相关问题