2017-01-04 9 views
1

[Submit]ボタンをクリックすると、複数のエラーを含める必要があります。ユーザーが必要なフィールドをすべて満たしていない場合は、エラーが私のフォームの上部に表示されます 現在、送信ボタンを押したとき、エラーは「コメント」行を指していて、「コメント」エラーのみが表示されましたすべてのフィールドを検証して、エラーメッセージをPHPのContact Formに表示します。

私が使用 - それらの$error=$error."<br/> or $error.="<br />どれも私のすべてのフィールドを持つと、エラーメッセージを表示するには、どのように予想

として働いていますか?フィールドは、空になっているので、好きなら マイコードは、すべての

<?php 
if ($_POST["submit"]) { 
    if($_POST['email']) { 
     $error="<br/>Please enter your Email address"; 
    } 

    if($_POST['dest']) { 
     $error.="<br/>Please enter your Destination Name "; 
    } 

    if($_POST['dcity']) { 
     $error.="<br/>Please enter your Departure City "; 
    } 

    if($_POST['name']) { 
     $error.="<br/>Please enter your Name "; 
    } 

    if($_POST['cnum']) { 
     $error.="<br/>Please enter your Contact Number"; 
    } 

    if($_POST['adults']) { 
     $error.="<br/>Please enter Number Of Adults"; 
    } 

    if($_POST['child']) { 
     $error.="<br/>Please enter Number Of Children"; 
    } 

    if($_POST['comment']) { 
     $error.="<br/>Please enter Your Comments "; 
    } 

    if ($error){ 
     $result='<div class="alert alert-danger"><strong>There were error(s) in your form:</strong>' .$error.' </div>'; 
    } 
} 
?> 

答えて

2

まず下に示されている、あなたが適切にチェックする必要があります:

if(empty($_POST['email'])) { 

あなたのコードが実際に反対のことをやっている、現在の状態が一致しています変数がtrueの場合(-ish)いずれにしても、自分自身を警告から救うためには、empty()または!empty()を使用してください。そうでない場合は、isset()など - 存在していてもいなくてもよい変数を直接テストするのではなく、

次のいずれかを実行する必要があります。エラーをプールするために配列を使用します。$error = []; ... $error[] = 'This error'; - または.=と連結しようとする前に空の文字列$error = '';を定義します。現時点では、コードはemailフィールドが設定されていない場合にのみエラー変数を定義します。配列を使用すると、<br />連結の手間も省けます。ただimplode('<br />', $error)


編集:あなたはすべてのことの繰り返しチェックし、冗長なコードを取り除く、そして、あなたの可能性抽象的な事柄ビット、それが簡単に将来的にあなたのアプリケーションを拡張するために作成し、このような何かをしたい場合:

ここで何が起こっている
$err_msgs = [ 
    'email' => 'your Email address', 
    'dest' => 'your Destination Name', 
    'dcity' => 'your Departure City', 
    'name' => 'your Name', 
    'cnum' => 'your Contact Number', 
    'adults' => 'Number Of Adults', 
    'child' => 'Number Of Children', 
    'comment' => 'your Comments', 
]; 

$errors = []; 

foreach($err_msgs as $key => $msg) { 
    if (empty($_POST[$key])) { 
     $errors[] = 'Please enter ' . $msg; 
    } 
} 

if (count($errors) > 0) { // OR: if (!empty($errors)) { 
    $result = '<div class="alert alert-danger"><strong> 
       There were error(s) in your form:</strong><br />' 
       . implode('<br />', $errors) 
       . ' </div>'; 
} 

私たちはキーがあなたのフォームフィールドの名前と同一で、キー/メッセージのペアとして配列内のすべての期待フィールドとそのユニークなエラーメッセージを定義します。その後、配列をループして空のフィールドをチェックし、すべてのエラーメッセージを1つの場所に生成し、配列に追加します。最後に、$errors配列にメッセージがある場合は、それらを出力します。

0

ベストソリューション: 空の文字列を割り当てます:$error = ''; これを連結します。私。

if($_POST['some_key']){ 
    $error .= 'this is an error'; 
} 
//... 
if($error != '') { 
    echo $error; 
} 

私はあなたが原因の場合に会った問題だと思う:電子メールはその後連結するものを$errorので、存在する場合

を。

しかし、いつものように、私たちはこのようなものを検証する:人々はちょうど間隔されている場合は、あなたのチェックに細心であることのため

if(isset($_POST['some_key']) && empty(trim($_POST['some_key']) { 
    //put error string here 
} 
+1

クレジットを。単純な 'if(empty($ _ POST ['field']))'とは対照的に、あなたの小切手に何が起こっているのかの説明を追加したいかもしれません。 –

関連する問題