0

フォームに 8 つの入力フィールドがあり、それらが空かどうかを確認する必要があります。これらのうち 4 つはテキスト フィールドで、残りの 4 つはリスト ボックスです。ユーザーがフォームを送信するとき、4 つのテキスト ボックスに入力する必要があります。5 番目のフィールドは、はい/いいえの選択です。このフィールドでの選択が「いいえ」の場合、残りの 3 つを空白のままにすることができます。ただし、5 番目のフィールドでの選択が「はい」の場合は、リスト ボックスを使用して最後の 3 つも選択する必要があります。

最初の 4 つ (テキストボックス) を「mandatory-text1」、「mandatory-text2」、「mandatory-text3」、「mandatory-text4」、Yes/No 選択リスト ボックスを「yes-no」、およびオプションの選択肢と呼びましょう。 「a」、「b」、「c」。

それで:

必須テキスト 1、必須テキスト 2、必須テキスト 3、必須テキスト 4 が空白の場合、処理中の php は中止されます。

ただし、必須テキスト 1、必須テキスト 2、必須テキスト 3、および必須テキスト 4 がすべて入力されている場合、次のチェックは、はい/いいえに「はい」または「いいえ」が含まれているかどうかを確認することです。

  • いいえが含まれている場合、a、b、および c は必ず空白のままにする必要があります。
  • はいの場合は、a、b、c (リスト ボックス) を必ず選択する必要があります。

私の PHP の習熟度では、ここまで到達することができました。

    if ((mandatory-text1 || mandatory-text2 || mandatory-text3 == "") OR (yes-no == "Yes" AND (!(a || b || c  == ""))) {
    echo "blah" ;
    exit();
    }
    else {
    //do some stuff
    }

このコードを試すと、すべてのテキスト フィールドが入力されている場合でも「何とか」メッセージが表示され、はい/いいえは「はい」であり、a、b、およびc が選択されました。

最初に単純な「||」で試してみました すべてのフィールドで問題なく動作します。つまり、フィールドの1つでも空白のままにすると、「何とか」メッセージが表示されます。また、はい-いいえとa、b、cをチェックしてみましたが、それもうまくいきます。つまり、はい-いいえに「はい」がある場合、a、b、cフィールドが空白の場合は何とかなります。

しかし、次のステップに進む前に、すべての条件を満たす必要があります。私がここSOで読んだ投稿は、私が今いる段階に私をもたらしました. しかし、私のプロジェクトに必要なレベルに達したものはありませんでした。

ロジックのヒントをいただければ幸いです。

4

4 に答える 4

1

次のように、フィールド タイプごとに関数またはコード ブロックを使用して、より読みやすい方法でコントロールを再設計できます。

<?php


function checkFields( $data )
{
    // List of field to check
    $fields = array( 'mandatory-text1', 'mandatory-text2', 'mandatory-text3', 'mandatory-text4', 'a', 'b', 'c' );

    foreach ($fields as $field )
    {
        switch( $field )
        {
            case 'mandatory-text1':
            case 'mandatory-text2':
            case 'mandatory-text3':
            case 'mandatory-text4':
                if ( $data[$field] == '' )
                {
                     return false;
                }
            break;


            case 'a':
            case 'b':
            case 'c':
                if ( $data['yes-no'] == 'yes' && $data[$field] == '' )
                {
                    return false;
                }
                elseif( $data['yes-no'] == 'no' && $data[$field] != '' )
                {
                    return false;
                }
            break;
        }
    }

    // If we have not returned false so far, then all is clear
    return true;
}

// Usage :
if( checkFields( $_POST ) )
{
    // every thing is ok
}
else
{
    // bad submission
}
?>

ここでは主に 2 つのことを避ける必要があります。

  • 長い AND / OR ステートメント
  • スマエコントロールで自分を繰り返す
于 2013-08-06T11:22:29.060 に答える
0

私が正しく理解していれば、このようなことがうまくいくはずです。変数名にダッシュを使用しないでください。

if ($mandatory1 && $mandatory2 && $mandatory3 && $mandatory4)
{
    if ($choice == "Y" && $a && $b && $c)
    {
        // do whatever
    }
    elseif ($choice == "N" && !$a && !$b && !$c)
    {
        // do something else
    }
}
else
{
    // submission incorrect
}
于 2013-08-06T11:16:15.720 に答える