PHP 如何在重定向到我自己时维护我的变量,以便在我通过时我在回击时不会收到消息


PHP how do I maintain my variables on a redirect to myself so that when I pass through I don't get a message when I hit back

几年前我在大学里学到了这一点,现在我实际上必须做这样的事情来工作。我正在筛选我以前的家庭作业,我希望我更整洁。

我正在创建一个注册页面。

用户提交 POST 给自己 -> php 在同一页面上验证如果它很好我定向到谢谢.php页面并清除所有变量。如果不好,我会重定向到自己,并用我的错误答案填充表单。我是否需要启动会话并将所有变量存储在会话中或其他内容?我省略了一些代码。使阅读速度更快

<?php
    //connect to database.....
    //Extracting the data
    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {
     $pageValid = true;
     $fName         = $_POST['fName'];
     $lName         = $_POST['lName'];
    };
        //validate $fname $lname etc $pageValid = true if it's all good
        if ($_SERVER['REQUEST_METHOD'] == 'POST'){
        if ($pageValid  == true){
            //insert into sql
        header('Location: thankyou.php');
        exit;
        } else  {  
        //if page is not valid redirect come back here
        header('Location: register.php');
        exit;
    };
} //<!--End of ($_SERVER['REQUEST_METHOD'] == 'POST')

?>
<!DOCTYPE html>
<html lang="en">
<head>header...</head>
<body>
<div id="form"  class="col-md-12">
<form id="form1" name="form1" method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
<table class="table"><tr>
<td width="200"><label for="firstName">First Name:</label></td>
<td>
<input name="fName" type="text" id="register" 
value="<?php 
//$fName I want to add the value of $fName here after it gets redirected
?>" size="25" maxlength="50" /> *
 <?php print $fNameError;?>          
</td>
</tr>
</table>
</body>
</html>

fName可以用$_REQUEST['fName']填充

您始终可以使用$_POST(或使用 GET 方法对表单$_GET)检索每个帖子输入的值

在这两种情况下,您都可以检索访问数组$_REQUEST的输入值。在此处查找文档

使用会话是一个非常糟糕的主意:当您的用户开始从多个选项卡访问您的 Web 应用程序时,它会给您带来很多麻烦。这也是一个问题,因为它需要您在处理表单后清除会话,或者用户下次使用表单时可能会出现意外结果(例如,输入字段自动且无法解释地填充,无需用户输入)。

更新

不鼓励在会话中存储表单输入,原因至少有两个:

  • 会话在同一用户同时打开的所有页面之间共享。假设您在选项卡中打开表单,然后提交表单时出现一些错误;Web 应用程序将重新打开表单,并使用会话中的数据填充表单。现在,打开具有相同表单的第二个选项卡:会话仍然相同,因此表单将使用第一个表单中的数据填充。提交时有一些错误:您将更改两个表单的数据

  • $_REQUEST POST 期间填充项目,并在下一个请求时自动清理这些项目;会话不是,而是在整个会话中保留。这意味着您的代码将需要明确清除它们,否则即使没有表单提交,您也会冒着找到具有旧值的表单输入的风险

是的,将数据存储在 $_SESSION 变量中是个好主意。

例如$_SESSION["lname"] = $_POST["lname"];.请注意,您需要启动会话,检查输入有效性等。

基本上你检查是否存在一个POST变量:

<?php
if( isset( $_POST['fName'] ) )
{
  // the form has been submitted, do something
}
?>

如果您的表单数据显示在接收POST数据的页面上,则不必使用会话变量。

编辑

如果要填充一些 $_SESSION 变量,则可以将所有 POST 数据填充到会话数组中

<?php
if( isset( $_POST['fName'] ) )
{
  $_SESSION['posted'] = $_POST;
}
?>

或者,如果您验证 POST 数据并希望仅使用有效输入填充会话:

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
  $_SESSION['formData'] = array();
  $_SESSION['formData']['pageValid'] = true;
  $_SESSION['formData']['fName'] = $_POST['fName'];
  $_SESSION['formData']['lName'] = $_POST['lName'];
};
?>

您不需要在出现错误时重定向回表单...表单是在同一脚本中构建的,因此只需让它呈现脚本的其余部分即可。您只需要对有效的注册数据进行重定向。

基本上,摆脱PHP的"其他"部分。