PHP表单验证无法正常运行

时间:2018-02-15 14:09:27

标签: php validation

我刚刚开始学习PHP并且已经遇到了我的第一个恼人的障碍。

我只是创建一个简单的注册表单,但是当字段为空时,验证似乎没有通知错误,并重定向到下一页。 我用die检查了验证码;只是为了确保它能够运行,而且确实如此,但由于某种原因,它没有采取任何措施。

我确定可能会有更多关于此问题的问题,我无法找到适合我案例的答案。

感谢您阅读和/或回答的时间! (:

index.php:

<html>
<?php require 'validation.php'; ?>

<div class="container" >
<form class="reg-table" method="post" action="<?php echo htmlspecialchars('welcome.php');?>">

  <div class="form-group">
        <label for="firstName"> First Name : </label>
        <input type="text" class="form-control" name="firstName">
        <span class="error"><?php echo $firstNameErr;?></span>
    </div>

validation.php:

    <?php

    $firstNameErr = "";
    $firstName = "";


    if ($_SERVER["REQUEST_METHOD"] == "POST") {

if (empty($_POST["firstName"])) {
        $firstNameErr = "Name is required";
      } else {
        $firstName = $_POST["firstName"];
      }

welcome.php:

<html>
<?php require 'validation.php';
$firstNameErr = "";
$firstName = "";?>
<body>
Welcome <?php echo $_POST["firstName"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?> 
</body>
</html>

4 个答案:

答案 0 :(得分:0)

您正在welcome.php中立即覆盖值:

<?php require 'validation.php';
$firstNameErr = "";
$firstName = "";?>

这相当于:

<?php 
    require 'validation.php';
    $firstNameErr = "";
    $firstName = "";

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        if (empty($_POST["firstName"])) {
            $firstNameErr = "Name is required";
        } else {
            $firstName = $_POST["firstName"];
        }
    }
    $firstNameErr = "";
    $firstName = "";?>

此外,welcome.php中没有特殊字符,因此您不需要该功能。

答案 1 :(得分:0)

问题在于welcome.php。您正在require之后清除变量。

<html>
    <?php require 'validation.php'; ?>

    <body>
        Welcome <?php echo $_POST["firstName"]; ?><br>
        Your email address is: <?php echo $_POST["email"]; ?> 
    </body>
</html>

会做的伎俩。

答案 2 :(得分:0)

首先,我认为

htmlspecialchars('welcome.php')

这可能会导致问题。如果验证代码与表单所在的地址相同,则可以将此参数留空(action =&#39;&#39;)。

更重要的是,我认为你做了一件非常简单的事情。将表单的操作属性更改为空后,您只需在表单所在的同一页面上处理该表单即可。例如:

if(isset($_POST['YOUR-SUBMIT-NAME-HERE']))
    require 'validation.php';
else
    require 'your-form.php';

但为了使它在未来更加美观且易于更新,您可以阅读一些关于PHP中良好实践处理表单的教程,并对AJAX感兴趣。祝你好运和欢呼!

答案 3 :(得分:-1)

问题是,在welcome.php验证表单之前,您要重定向到index.php

由于您希望在index.php页面中显示错误,因此在验证成功之前,您不应允许表单离开当前页面。因此,表单操作应指向当前页面(index.php)。您可以通过设置action="."来完成此操作。然后,如果没有验证问题,请在index.php文件中提供一些验证并重定向到welcome.php页面。

// ... Other index.php logic ...

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (empty($_POST["firstName"])) {
        $firstNameErr = "Name is required";
    } else {
        // Redirect to the welcome page.
        header('location: welcome.php?firstName='.$_POST['firstName']);
    }
}

// ... Other index.php logic ...