Php表单 - 错误检查

时间:2011-06-24 09:34:49

标签: php forms webforms

我在线创建了一个表单,当用户点击提交时,我希望表单检查错误(即缺少字段)。目前我让表单逐个检查字段,一旦遇到错误,它将退出而不检查其余字段。有没有办法可以将检查错误的所有if语句合并为一个。

这是代码

 //Code to check that the Student Name field is completed
    if(empty($_POST['studentName'])) 
    {
    $studentNameError = "You did not enter the student name Wank";
    //echo "<h3> $studentNameError </h3>";
    exit();
    }
    //Code to check that the Tutor Name field is completed
    if(empty($_POST['tutorName'] ))
    {
    echo "<h3>You did not select a tutor name. Please go back and select your name from the tutors list</h3>";
    exit();
    }
    //Code to check that the Procedure field is completed
    if(empty($_POST['procedure'] ))
    {
    echo  "<h3>You did not select a procedure. Please go back and enter the name of the procedure which you undertook</h3>";
    exit();
    }
    //Code to check that the Grade field is completed
    if(empty($_POST['grade'] ))
    {
    echo "<h3>You did not select a grade. Please go back and select your grade from the drop down list</h3>";
    exit();
    }
    //Code to check that the Student Reflection field is completed
    if(empty($_POST['studentReflection'] ))
    {
    echo "<h3>The student did not enter any comments for this procedure. Student reflection is required for each procedure. Please go back and enter any comments</h3>";
    exit();
    }
    //Code to check if the tick box is checked that the tutor comment is entered

    if( !strlen($_POST['tutorComments']) && isset($_POST['alert'] ))
    {
        echo "<h3>You must enter a reason why you have clicked the alert box</h3>";
        exit();
    }

5 个答案:

答案 0 :(得分:0)

例如,您可以创建一个布尔变量来标记(如果有错误),如果它是真的则退出+将错误消息组合成一个

$error = false;
if(empty($_POST['studentName'])) 
{
$errorMessages[] = "You did not enter the student name Wank";
$error = true;
}
//Code to check that the Tutor Name field is completed
if(empty($_POST['tutorName'] ))
{
$errorMessages[] = "You did not select a tutor name. Please go back and select your name from the tutors list";
$error = true;
}
//Code to check that the Procedure field is completed
if(empty($_POST['procedure'] ))
{
$errorMessages[] = "You did not select a procedure. Please go back and enter the name of the      procedure which you undertook";
$error = true;
}
//Code to check that the Grade field is completed
if(empty($_POST['grade'] ))
{
$errorMessages[] ="You did not select a grade. Please go back and select your grade from the drop down list";
$error = true;
}
//Code to check that the Student Reflection field is completed
if(empty($_POST['studentReflection'] ))
{
$errorMessages[] = "The student did not enter any comments for this procedure. Student reflection is required for each procedure. Please go back and enter any comments";
$error = true;
}
//Code to check if the tick box is checked that the tutor comment is entered

if( !strlen($_POST['tutorComments']) && isset($_POST['alert'] ))
{
    $errorMessages[] = "You must enter a reason why you have clicked the alert box";
    $error = true;
}
if($error)
{
    echo("<h3>".implode('<br/>',$errorMessages)."</h3>");
    exit();
}

答案 1 :(得分:0)

有很多方法。从头到尾,这样的事情怎么样:

$textFieldsThatCannotBeEmpty = array(
    'studentName' => 'You did not enter the student name Wank',
    'tutorName' => 'You did not select a tutor name. Please go back and select your name from the tutors list',
    'procedure' => 'You did not select a procedure. Please go back and enter the name of the procedure which you undertook',
    'grade' => 'You did not select a grade. Please go back and select your grade from the drop down list',
    'studentReflection' => 'The student did not enter any comments for this procedure. Student reflection is required for each procedure. Please go back and enter any comments'
);

$errors = array();
// check text input fields
foreach($textFieldsThatCannotBeEmpty as $name => $errorMessage){
    if(empty($_POST[$name])){
        $errors[] = $errorMessage;
    }
}
// checkbox
if(!strlen($_POST['tutorComments']) && isset($_POST['alert'])){
    $errors[] = 'You must enter a reason why you have clicked the alert box';
}

if(count($errors) > 0){
    // form is invalid, print errors
    echo '<div class="errors">';
    foreach($errors as $e){
        echo '<h3>',htmlentities($e),'</h3>';
    }
    echo '</div>';
}else{
    // form is valid, let's go and do something with the submitted data
}

答案 2 :(得分:0)

将所有错误消息放入数组中,并循环遍历$ _POST。如果输入字段为空,则回显错误消息:

<?php
$errorMsgs = array(
  'studentName' => 'You did not enter a student name',
  ...
);

$errors = '';

foreach($_POST as $field)
{
  if(empty($field))
  {
    $errors .= $errorMsgs[$field] . '<br/>';
  }
}

if(strlen($errors))
{
  echo $errors;
  exit();
}

答案 3 :(得分:0)

这可以这样做(多种方式之一 - 真的取决于您对验证的确切要求):

<?php
$messages = array();
$errors = 0;

if (empty($_POST['studentName']))
{
    $messages['studentName'] = "You did not enter the student name Wank";
    $errors++;
}
if (empty($_POST['tutorName']))
{
    $messages['tutorName'] = "<h3>You did not select a tutor name. Please go back and select your name from the tutors list</h3>";
    $errors++;
}

if ($errors) {
    // we have some invalid data in one of the fields
    // display error messages (some feedback to user)
    foreach ($messages as $v) {
        echo $v, "\n";
    }
    exit();
}

// nope, we are fine
// do whatever else is required

答案 4 :(得分:0)

创建一个名为$status的变量,并将其初始化为0,在每次测试时分配给它1如果有错误,最后检查它是否等于1,否则退出脚本继续执行。或者更好地创建一个数组,并为每个测试分配0或1,依赖于测试(该字段不为空,分配一个其他零),稍后您可以向用户回显错误消息,指示缺少的字段。