1

我做了一个查询来做我的工作。但它确实有一些错误。

1)我在 mysql 表中有 6 个图像字段和一些其他字段

2)更新我使用带有6个文件上传文件并标记为image1 image2的html表单...

3)所以如果我只想更新第 5 张图片,我必须将新图片上传到以表格形式提交的 image5。

为了更新 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)但是当我尝试更新单个图像时(例如:想如果我想更新 image5)或者我从 image5 字段中选择一个文件,这个查询总是更新表中的第一个图像。

5)我知道为什么会这样。在我的 foreach 循环内的查询中,我只寻找不等于“”的 $values。然后增加 $i。所以它只增加了一次。所以它更新image1或者我想更新image5。

6)那么我怎样才能摆脱这个错误呢?

提前致谢。

4

2 回答 2

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;
于 2012-09-15T03:30:05.190 回答
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 ."'".', ';
}
...
...
于 2012-09-15T03:30:24.817 回答