几年前我在大学里学到了这一点,现在我实际上必须做这样的事情来工作。我正在筛选我以前的家庭作业,我希望我更整洁。
我正在创建一个注册页面。
用户提交 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的"其他"部分。