【问题标题】:PHP Simple Form ValidationPHP 简单表单验证
【发布时间】:2013-11-16 10:07:53
【问题描述】:

好的,我想要实现的是一个非常简单的表单验证,如下所示。

  1. 姓名:[必填,最小长度:2,最大长度:255]
  2. 电子邮件:[必填,最小长度:3,最大长度:255,有效的电子邮件格式]
  3. 出生日期:[可选,格式:dd/mm/yyyy]

但是,一旦我点击提交(无论字段为空还是填充),我都会在空白页面上显示所有回显的错误。

“姓名必须至少为 2 个字符姓名必须至少为 3 个字符无效的电子邮件电子邮件不能留空”

到目前为止我的代码:

index.php

<form method="post" action="confirm.php">
Name:<input type="text" name="name" />
email:<input type="text" name="email" />
DOB:<input type="date" name="dob" />
<input type="submit" value="submit" />
</form>

和

确认.php

<?php

$name = $_POST['$name'];
$email = $_POST['$email'];
$dob = $_POST['$dob'];

$namelen = strlen($email);
$emaillen = strlen($email);
$max = 255;
$minname = 2;
$minemail = 3;

if($namelen<$minname){
    echo"name must be at least 2 characters";
}
elseif($namelen>$max){
    echo"name must be less than 255 characters";
}

if(empty($name)){
    echo"name is required";
}
else{
    continue;
}

if($emaillen<$minemail){
    echo"email must be at least 3 characters";
}
elseif($emaillen>$max){
    echo"email must be less than 255 characters";
}

if(filter_var($email, FILTER_VALIDATE_EMAIL)){
    continue;
}
else{
    echo"invalid email";
}

if(empty($email)){
    echo"email cannot be left empty";
}
else{
    continue;
}

?>

非常感谢您的帮助,谢谢。

【问题讨论】:

  • 在检查了第一个和第二个错误之后,你还没有写任何东西让它停止。
  • 你想用这些continue; 语句达到什么目的?
  • 转发问题。
  • 如果该字段为空,则回显“something”,否则继续。
  • 检查第一个和第二个错误后如何让它停止?

标签: php validation


【解决方案1】:

您的代码中有以下内容:

$name = $_POST['$name'];
$email = $_POST['$email'];
$dob = $_POST['$dob'];

您基本上是在尝试访问未定义的索引。从键名中删除多余的$:

$name = $_POST['name'];
$email = $_POST['email'];
$dob = $_POST['dob'];

然后,在下面,你有一些这样的条件:

if(condition == true) {
    continue;
} else {
    // do something
}

其实没必要,你可以改成:

if(!condition) {
    // do something
}

此外,最好将错误消息推送到数组 ($errors) 中,然后循环遍历它并显示错误消息。它可能有助于更好地组织您的代码。

修改后的代码如下所示:

if(!empty($_POST)) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $dob = $_POST['dob'];

    $namelen = strlen($name);
    $emaillen = strlen($email);
    $max = 255;
    $minname = 2;
    $minemail = 3;

    if($namelen < $minname){
        $errors[] = "name must be at least 2 characters";
    } elseif($namelen > $max){
        $errors[] = "name must be less than 255 characters";
    }

    if($emaillen < $minemail){
        $errors[] = "email must be at least 3 characters";
    } elseif($emaillen > $max){
        $errors[] = "email must be less than 255 characters";
    }

    if(empty($name)){
        $errors[] = "name is required";
    }

    if(empty($email)){
        $errors[] = "email cannot be left empty";
    }

    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
        $errors[] = "invalid email";
    }

    echo "<ul>";
    foreach ($errors as $error) {
        echo "<li>$error</li>";
    }
    echo "</ul>";

}

它仍然可以改进,但是,这应该让你开始!

【讨论】:

    【解决方案2】:

    在检查第一个和第二个错误后,您还没有写任何东西让它停止。

    另外,continue 在if 语句中毫无意义(请参阅http://php.net/manual/en/control-structures.continue.php)。

    最后,页面是“空白”的,因为没有 HTML 输出,只有文本。您可能希望 redirect the user 回到带有错误消息的表单页面。

    【讨论】:

      【解决方案3】:
      $name = $_POST['$name'];
      $email = $_POST['$email'];
      $dob = $_POST['$dob'];
      

      错了,你必须使用

      $name = $_POST['name'];
      $email = $_POST['email'];
      $dob = $_POST['dob'];
      

      你也可以换行

      $namelen = strlen($email);
      

      到

      $namelen = strlen($name);
      

      【讨论】:

      • 非常感谢。你有鹰眼,我检查了几次,没有发现 $namelen
      【解决方案4】:

      检查 if(!empty($_POST[fieldname])) 然后重定向它,在 javascript 中显示字段为空的警报

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-15
        • 2011-05-18
        • 2010-10-18
        • 1970-01-01
        • 1970-01-01
        • 2013-05-19
        相关资源
        最近更新 更多