1

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

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

用户向 self 提交 POST -> php 在同一页面上进行验证,如果它很好,我会直接访问thankYou.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>
4

4 回答 4

1

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

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

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

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

更新

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

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

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

于 2013-10-14T21:28:56.323 回答
0

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

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

于 2013-10-14T21:20:22.163 回答
0

基本上你检查一个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'];
};
?>
于 2013-10-14T21:21:51.193 回答
0

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

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

于 2013-10-14T21:45:10.783 回答