PHP&表单验证

PHP&表单验证,php,validation,Php,Validation,我有一个通过ajax提交的表单,我想返回一条空字段列表的消息 我已经把这些都做完了,但在PHP方面似乎真的很冗长 我怎样才能以一种不那么复杂的方式完成下面的工作 <?php if(empty($_POST["emailaddress"])){ $error = 'true'; $validation_msg = 'Country missing.'; if(empty($error_msg)){ $error_msg .= $validat

我有一个通过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);
}

?>

我建议使用php Zebra表单库。它允许您以面向对象的方式构建验证规则,并自动生成javascript来执行客户端验证


试着这样做:

$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);
}

它生成一个错误消息数组。如果数组中有任何内容,请将其内爆为字符串并返回。

一个很大的改进是使$error\u msg成为数组,这将删除If空的$error\u msg{}部分

然后使用以下命令添加错误消息:

$error_msg[] = $validation_msg;
然后,您可以在每次发现错误时删除$error='true',最后验证$error\u msg数组的内容:

怎么样

<?php
$array = new array{{"firstname","First Name"},{"lastname", "Last Name"}};
我现在没有访问PHP的权限,所以没有经过测试,但这个想法会奏效。代码可能需要调整$\u POST数组中的循环


由于您的代码非常重复,您应该考虑编写一个进行验证的函数:

$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);

谢谢,就帖子数据中的if而言,我是否仍然需要为每个表单项提供单独的if,这是最大的麻烦!每个条目都需要一个,是的。如果这是您经常做的事情,我建议您研究某种自动化——我最终编写了自己的验证代码,只需要一个配置文件。我确信有很多可用的代码也可以工作——jmotes建议一个。很好的一个——将与andrewsi的调整相结合!请注意,您可能需要添加一层验证,以删除不需要的任何潜在的$\u POST字段。。。只需将它们添加到if语句中,例如,如果提交按钮的值为空,或者您希望允许可选字段,则示例为if$key!='Submit'&&empty$val{这将从评估中删除提交字段
$error_msg = '';
foreach($_POST as $key => $val){
    if(empty($val)){ 
        $error = 'true'; 
        $error_msg .= $key." missing.\n"; 
    }
}     
$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);
   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;
    }    
}