2

タイトルと私が達成しようとしていることに関連して、これが理にかなっていることを願っています。

入力するフィールドを 1 ~ 30 個表示するフォームがあります。フィールドの数は、前の段階でユーザーが決定します (常に同じ数になるとは限りません)。

ユーザーが入力するフィールドが 5 つある場合、すべてのフィールドにデータが含まれている必要があります。15 フィールドまたは 30 フィールドを設定した場合も同様です。

私ができるようにしたいのは、フォーム内の POST 変数をループして、それらがすべて設定されていることを確認し、データをデータベースに挿入するか、エラーを表示することです。

ネストされた if ステートメントを含む 30 個の if ステートメントを実行するつもりでした。

if ($numberOfFields == 1){
    if (!$_POST["field1_text"]){$error = 1;}
};

if ($numberOfFields == 2){
    if (!$_POST["field1_text"]){$error = 1;}
    if (!$_POST["field2_text"]){$error = 1;}
};

しかし、これは非常に長い道のりのようで、誰かが提案や指針を持っているかどうか疑問に思っていました.

私はこのようなものがうまくいくかどうか疑問に思っていました:

for ($q = 1; $q <= $numberOfFields; $q ++){
    if (!$_POST["field'".$q."'_text"]){
        $error = 1;
    }   
}

しかし、$q を使用して変数/フィールド名を参照するとエラーが発生します。これは [$q] でしょうか、それとも何か別のものでしょうか?

答えを見つけるのに苦労していますが、おそらく正しい質問をしていませんが、助けていただければ幸いです。

ありがとう

4

2 に答える 2

4

foreacha の代わりに aを使用して、次のように実行できますfor

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    $error = false;
    foreach($_POST as $key => $value)
    {
        if(strpos($key, 'field') === 0)
        {
            if($value == '')
            {
                $error = true;
                break;
            }
        }
    }

    if($error)
    {
        // not all fields have a value - show message
    }
}

連結された数値で入力名を手動で入力する代わりに、フォームで入力配列を使用すると、はるかに簡単になります。例:

<input type="text" name="field[]" />
<input type="text" name="field[]" />
<input type="text" name="field[]" />

PHP 側では、単純にそれらをループします。

foreach($_POST['field'] as $field)
{
    if($field == '')
    {
        // error - doesn't have a value
    }
}
于 2013-01-08T19:12:04.423 に答える
3

これを使って:

for ($q = 1; $q <= $numberOfFields; $q++){
    if (!$_POST["field".$q."_text"]){
        $error = 1;
    }   
}

あなた自身のコードでは、奇妙な余分なものがありました '

于 2013-01-08T19:10:08.050 に答える