我对如何在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-register
post操作验证并通过传递验证消息重定向到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");