PHP&表单验证
我有一个通过ajax提交的表单,我想返回一条空字段列表的消息 我已经把这些都做完了,但在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
<?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;
}
}