1

ユーザーが必要に応じて情報を編集できるフォームがあります。このフォームの一部として、ユーザーは最大 5 種類の証明を挿入できます。すべての証明は別のテーブルに保存されます。

Table: Proof

proofid - primary key
banid - foreign key -> links to banlist table which stores all other information
proof - the link to which contains the proof
type - the type of proof (image, demo, league, ...)
number - the index number of the proof (0 up to 4)

証明項目を更新または挿入する次のコードもあります。各フィールドをループし、配列で現在選択されている項目が空でないかどうかを確認します。true の場合、$i が、選択された禁止 ID のすべての番号を格納する配列内にあるかどうかを確認します。

banid 237 の場合、配列は次のようになります。Array ( [0] => [1] => 1 )

これは事実上、最初のプルーフ フィールドは空ですが、2 番目のプルーフ フィールドは空ではなく、テーブルにレコードが存在することを示しています。

for($i = 0; $i < 5; $i++)
{
    $proof = $checkprooflist[$i];
    $prooftype = $checkprooftypelist[$i];

    if (!empty($proof))
    {                       
        if(!in_array($i, $proofnumberlist))
        {
            $query2 = "INSERT INTO proof (banid, proof, type, number) VALUE ($id, '$proof', '$prooftype', $i)";
            $result2 = mysql_query($query2);
        }
        else
        {
            $query2 = "UPDATE proof SET proof = '$proof', type = '$prooftype' WHERE number = $i AND banid = $id";
            $result2 = mysql_query($query2);
        }
    }           
}

しかし、私が抱えている問題は、上記の配列では、行if(!in_array($i, $proofnumberlist))が false を返すため、$i = 0 のときに if ステートメントに入らないことです。

他のすべての値 ($i = 1、...) などでは機能しますが、$i = 0 の場合は機能しません。

読んでいただきありがとうございます。あなたが私に与えることができる助けに感謝します。

ジョン。

4

3 に答える 3

3

$strictのパラメータを使用する必要がありますin_array()。これは3番目のパラメータです(デフォルト= false)。

型のジャグリングにより、空の文字列は0などに等しくなる可能性があります。この$strictパラメーターは、型もテストするようにします。

if (!in_array($i, $proofnumberlist, true))
于 2012-05-15T02:34:41.040 に答える
2

一方、をin_array使用すると、チェック全体を回避できますINSERT ... ON DUPLICATE KEY UPDATE

これにより、コードが少し明確になります。http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.htmlを参照してください

于 2012-05-15T02:38:20.607 に答える