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

一个很大的改进是我制作$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 回答