0

ajax を介して送信するフォームがあり、空のフィールドのリストのメッセージを返したいと考えています。

私はそれをすべてやり遂げてほこりを払いましたが、物事のPHP側では本当に長く巻き上げられているようです.

複雑でない方法で以下を行うにはどうすればよいですか?

<?php

if(empty($_POST["emailaddress"])){    
    $error = 'true';
    $validation_msg = 'Country missing.';
    if(empty($error_msg)){
        $error_msg .= $validation_msg;
    } else{
        $error_msg .= '\n' . $validation_msg;
    }    
}

if(empty($_POST["password"])){    
    $error = 'true';
    $validation_msg = 'Country missing.';
    if(empty($error_msg)){
        $error_msg .= $validation_msg;
    } else{
        $error_msg .= '\n' . $validation_msg;
    }    
}

if(empty($_POST["firstname"])){    
    $error = 'true';
    $validation_msg = 'First name missing.';
    if(empty($error_msg)){
        $error_msg .= $validation_msg;
    } else{
        $error_msg .= '\n' . $validation_msg;
    }    
}

if(empty($_POST["lastname"])){    
    $error = 'true';
    $validation_msg = 'Last name missing.';
    if(empty($error_msg)){
        $error_msg .= $validation_msg;
    } else{
        $error_msg .= '\n' . $validation_msg;
    }    
}

if($error){
    header('HTTP/1.1 500 Internal Server Error');
    header('Content-Type: application/json');
    die($error_msg);
}

?>
4

7 に答える 7

4

$_POST配列をループする

$error_msg = '';
foreach($_POST as $key => $val){
    if(empty($val)){ 
        $error = 'true'; 
        $error_msg .= $key." missing.\n"; 
    }
}     
于 2012-09-13T15:37:04.097 に答える
2

php Zebra Form ライブラリの使用をお勧めします。オブジェクト指向の方法で検証ルールを構築し、クライアント側の検証を行うための JavaScript を自動的に生成することができます。

http://stefangabos.ro/php-libraries/zebra-form/

于 2012-09-13T15:33:20.230 に答える
2

次のようなことを試してください:

$error_msg = array()

if(empty($_POST["lastname"])){    
    $error_msg[] = 'Last name missing.';
}

.... 

if($error_msg){
    header('HTTP/1.1 500 Internal Server Error');
    header('Content-Type: application/json');
    die(implode("\n", $error_msg);
}

エラーメッセージの配列を生成します。配列に何かがある場合は、それを文字列に分解して返します。

于 2012-09-13T15:33:32.890 に答える
0

大きな改善点の 1 つは、パーツ$error_msgを削除する配列を作成することif (empty($error_msg)) {}です。

$error_msg = array();

次に、次を使用してエラー メッセージを追加します。

$error_msg[] = $validation_msg;

次に$error = 'true'、エラーを見つけるたびに削除し、最後に$error_msg配列の内容を確認します。

if(count($error_msg) > 0){
于 2012-09-13T15:33:38.617 に答える
0

どうですか

<?php
$array = new array{{"firstname","First Name"},{"lastname", "Last Name"}};

次に、配列をループします

if(empty($_POST[$array[i][0])){               $error = 'true';           $validation_msg .= $array[i][1] ' missing.' . "\n";

私は今PHPにアクセスできないのでテストしていませんが、アイデアはうまくいきます。コードの微調整が必​​要な場合があります

于 2012-09-13T15:36:46.823 に答える
0

あなたのコードはかなり反復的であるため、検証を行う関数を書くことを考える必要があります:

$msgStack = array();

function validate($field, $msg, $msgStack) {
    if(empty($field)) {    
        $error = 'true';
        $msgStack[] = $msg;
    }
}

そしてそれを次のように呼び出します

validate($_POST['firstname'], 'Firstname is empty', $msgStack);

そして、次のようなすべてのメッセージを出力します

echo implode(PHP_EOL, $msgStack);
于 2012-09-13T15:38:04.413 に答える
0
   if(empty($_POST["emailaddress"]) || empty($_POST["password"]) ||
   empty($_POST["firstname"]) || empty($_POST["lastname"]) ){    
    $error = TRUE;
    if ( empty($_POST["emailaddress"]) )
      $field = 'Email Address';
   else  if ( empty($_POST["password"]) )
      $field = 'Password';
   else  if ( empty($_POST["firstname"]) )
      $field = 'First Name';
   else 
      $field = 'Last Name';

    $validation_msg = $field . ' missing.';
    if(empty($error_msg)){
    $error_msg .= $validation_msg;
    } else{
    $error_msg .= '\n' . $validation_msg;
    }    
}
于 2012-09-13T15:38:39.747 に答える