1

私は自分の仕事をするために質問をしました。しかし、それはいくつかのエラーで動作します。

1)mysqlテーブルに6つの画像フィールドと他のいくつかのフィールドがあります

2)更新するには、6つのファイルをアップロードしてimage1image2..としてラベル付けされた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をインクリメントします。したがって、1回だけ増分しました。したがって、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'
      ";

内部に変数やその他の二重引用符がない限り、二重引用符を使用しないようにしてください。

より良い解決策はkey、次のように foreach ループ機能を使用して を使用することです。

<?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 に答える