PHP&表格验证

时间:2012-09-13 15:29:51

标签: php validation

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

?>

7 个答案:

答案 0 :(得分:4)

循环遍历$_POST数组

$error_msg = '';
foreach($_POST as $key => $val){
    if(empty($val)){ 
        $error = 'true'; 
        $error_msg .= $key." missing.\n"; 
    }
}     

答案 1 :(得分:2)

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

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

答案 2 :(得分: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);
}

它会生成一系列错误消息。如果数组中有任何内容,请将其内嵌到字符串中并返回该字符串。

答案 3 :(得分:0)

我需要做一个很大的改进$error_msg数组,这会删除if (empty($error_msg)) {}部分。

$error_msg = array();

然后使用以下方法添加错误消息:

$error_msg[] = $validation_msg;

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

if(count($error_msg) > 0){

答案 4 :(得分: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,所以没有经过测试,但这个想法会起作用。代码可能需要调整

答案 5 :(得分: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);

答案 6 :(得分: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;
    }    
}