私は10列のデータベースを持ち、それぞれがイメージ名を含むように設定されています。PHP入れ子のFORループトラブルシューティング
himage1、himage2、himage3、等...
ユーザは画像がないことを示すために、個々にこれらの画像のいずれかを削除することができ、対応する列の値を「NA」に設定されています。
しかし、以降「himage4」からのフィールドは「ナ」であり、かつユーザーが「himage1」を削除し、その行は次のようになりますことを意味し、3枚の画像があると言う:
himage1 =「NAを、himage2 = "... img2.jpg"、himage3 = "... im3.jpg"、himage4 = 'na'、himage5 = 'na'など...
これは問題を引き起こします。私は、表示するように設定されている画像の数を制御する別の列「hnumimage」を持っています。
しかし、 'hnumimage'が2の場合、この例では画像が2つしかないので、画像を表示するために使用するループは空白でも 'himage1'を表示しようとします。
このため、フィールドが「na」であるかどうかを検出し、次のいずれかのフィールドに有効なイメージがあるかどうかを確認する関数を作成しようとしています。その場合は、そのイメージ値を前方に移動します。関数が実行された後
したがって、上記の例では、それは次のようになります。
himage1 = "... img2.jpg"、himage2 = "... im3.jpg" を、himage3 = '私は2つのネストされたループを使用していますが、関連するロジックに問題があります。
for ($i = 1; $i <= 10; $i++) {
// IF IMAGE FIELD IS NA
if ($rs_home_delete_select_array[ 'himage' . $i ] == na) {
//CHECK FOLLOWING IMAGES
for ($o = $i + 1; $o <= 10; $o++) {
// IF FOUND IMAGE VALUE
if ($rs_home_delete_select_array[ 'himage' . $o ] != na) {
// MOVE THAT VALUE FORWARD, and CLEAR OLD FIELD
$vCurrImgVal = $rs_home_delete_select_array[ 'himage' . $o ];
$sql_arrange_img = "UPDATE tblhome SET himage" . $i . " = '" . $vCurrImgVal . "', himage" . $o . " = 'na' WHERE hid = 1";
$rs_arrange_img = mysqli_query($vconn_db, $sql_arrange_img);
}
}
}
これは機能しますが、1回だけです。
上記の例のようになります。
himage1 = "... img3.php"、himage2 = 'ナ'、himage3 = 'ナ'、himage4 = 'ナ'、など
内側のループは 'himage1'と 'himage2'をスワップしますが、その後 'himage1'と 'himage3'を比較して 'himage3'に置き換え、他のフィールドはすべて空白にします。
これは、2つの値が正常にスワップされた後でも実行されている内部ループとして識別されているため、スワップ成功時に内部ループを切り離そうとしましたが、外側ループがまだ機能していないようです。
私は何かが不足していることを知っています。私はしばらくこのことに固執しています。
この問題に関わる論理と秩序に関するいくつかの洞察は非常に高く評価されます。
このテーブルは正規化されていない、あなたの文字列の値を引用するとよいでしょう。別のテーブルに画像を保存しておけば、この問題に直面することはありません。 –