我对如何在php中实现post/redirect/get模式有点困惑。我看到一些回答说,在提交表单后只需添加header函数;我已经这样做了,但是在验证输入字段是否为空时,它不会打印任何内容,尽管我在运行代码后添加了header函数。我根本找不到整合的方法,所以我无论如何都在问。

<?php

require '../BACKEND/DB/DB_CONN.php';

if(isset($_POST['submit-register'])) {

    if(empty($_POST['email'])) {
        echo 'Email cannot be nothing.';
    }

    header("Location: index.php");
    die();
}

if(isset($_POST['submit-login'])) {

    if(empty($_POST['loginUser'])) {
        echo 'Field Empty.';
    }

    header("Location: index.php");
    die();

}

?>

<div class="forms">
        <form method="post" action="index.php" role="form" class="forms-inline register ">
        <h4>Register</h4>
            <input type="text" name="email" placeholder="Email Address" autocomplete="off" />
            <input type="text" name="username" placeholder="Username" autocomplete="off" />
            <input type="password" name="password" placeholder="Password" autocomplete="off" />
            <input type="submit" name="submit-register" value="Register" role="button" name="login-btn" />
        </form>
        <form method="post" action="index.php" role="form" class="forms-inline login ">
        <h4>Login</h4>
            <input type="text" name="loginUser" placeholder="Username" />
            <input type="password" name="loginPass" placeholder="Password" />
            <input type="submit" name="submit-login" value="Register" role="button" />
        </form>
    </div>

我当时在写代码,但是当我发现它不起作用时,我在问如何解决这个问题,以及如何安全地实现post/redirect/pattern,我知道它起作用了。

最佳答案

请参阅submit-registerpost操作验证并通过传递验证消息重定向到index.php。您需要从header方法传递消息。
在prg模式中,当您执行包含数据的post操作时,但是当您重定向并在post之后执行get以维护prg时,您必须将数据传递到最后一个目的地get url。
在您的代码中,请看我所做的两种方法,第一种是将消息传递到索引,而第二种是在验证中发生错误时不传递prg。

//PRG..........................................
if(isset($_POST['submit-register'])) {

    if(empty($_POST['email'])) {
        echo 'Email cannot be nothing.';
        $msg = "Email cannot be nothing";
    }

    header("Location: index.php?msg=$msg");
    //Get your this message on index by $_GET //PRG

}
//Not full PRG with no passing data to destination.........................
if(isset($_POST['submit-login'])) {

    if(empty($_POST['loginUser'])) {
        echo 'Field Empty.';
    }
    else{
        header("Location: index.php");
    }

}

注意页眉方法之前不应该在页面上打印任何内容。这意味着头方法之前没有回声。
请看第一个是prg,第二个也是prg,但不能将数据传递到目的地。
header("Location: index.php?msg=$msg");

07-24 18:17