【发布时间】:2015-11-26 13:54:09
【问题描述】:
我在保存 PHP 会话变量时遇到了问题。这是一个注册表单,当用户按下提交时,用户会被发送到registrationprocess.php。 registrationprocess.php 站点要么接受输入(稍后将在数据库中处理它),要么如果输入未被接受为有效,它会将用户发送回注册表单。它保存了注册表输入,因此用户不必重新输入所有内容。现在,当用户输入错误的内容时,他们应该会收到一条错误消息,告诉他们他们做错了什么。并且该错误消息变量不会保存。
我创建了 2 个新页面来缩小问题范围。它们被称为处理输入的“sessiontest1.php”和处理处理的“sessiontest2.php”。
sessiontest1.php:
<?php
session_start();
$sessionid = session_id();
echo "Sessie ID: $sessionid";
?>
<!DOCTYPE html>
<html>
<body>
<div id="text">
<p style="font-size:150%"><b>Sessiontest1</b></p>
<?php
$firstname = "";
$firstnameErr = "";
$firstname = input($_POST["firstname"]);
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$_SESSION["firstname"] = input($_POST["firstname"]);
if (!preg_match("/^[a-zA-Z]+$/",$firstname)) {
$_SESSION["firstnameErr"] = "*Alleen letters toegestaan";
}
}
function input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$test1 = "Test1";
$_SESSION["test"] = $test1;
$_SESSION["test2"] = "Test2";
?>
sessiontest2.php:
<?php
session_start();
$sessionid = session_id();
echo "Sessie ID: $sessionid";
?>
<!DOCTYPE html>
<html>
<body>
<h2>Sessiontest 2</h2>
<?php
$firstname = "";
$firstnameErr = "";
#$_SESSION["firstname"] = $firstname = input($_POST["firstname"]);
#$firstnameErr = $_SESSION["firstnameErr"];
function input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
if (!preg_match("/^[a-zA-Z]+$/",$_POST["firstname"])) {
#header('Location: registreer.php');
echo $_SESSION["firstnameErr"];
echo $firstnameErr;
echo "Pregmatch werkt";
#debug
}
else {
unset($_SESSION["firstname"]);
#unset($_SESSION["firstnameErr"]);
}
?>
<br>
<?php echo "Voornaam variable" . $firstname;?><br>
<?php echo "Voornaam session variable" . $_SESSION["firstname"];?><br>
<?php echo "Voornaam post variable" . $_POST["firstname"];?><br>
<?php echo "FirstnameErr variable" . $firstnameErr;?><br>
<?php echo "FirstnameErr session variable" . $_SESSION["firstnameErr"];?> <br>
<?php echo $_SESSION["test"];?><br>
<?php echo $_SESSION["test2"];?><br>
<?php print_r($_SESSION);?>
</body>
</html>
现在,如果我在输入表单中输入“King”,“sessiontest2.php”将返回:
赛西 ID:j998drlj5449e4d969rft8il72
会话测试 2
Voornaam 变量
Voornaam 会话变量
Voornaam post variableKing
FirstnameErr 变量
FirstnameErr 会话变量
测试1
测试2
数组([firstnameErr] => [test] => Test1 [test2] => Test2)
如果我在输入表单中输入“123”,“sessiontest2.php”将返回:
赛西 ID:j998drlj5449e4d969rft8il72
会话测试 2
赛前准备工作
Voornaam 变量
Voornaam 会话变量
Voornaam 后变量123
FirstnameErr 变量
FirstnameErr 会话变量
测试1
测试2
数组([firstnameErr] => [test] => Test1 [test2] => Test2)
所以它似乎没有保存任何必要的会话变量,但同时它确实保存了 test1 和 test2 会话变量。
为什么不保存必要的会话变量(firstname 和 firstnameErr)?任何帮助表示赞赏!
这里是 phpmyinfo(): http://i.stack.imgur.com/W5pZo.png
【问题讨论】:
-
刚刚发现如果我将 '' 作为表单上的操作,然后使用 'header('Location: sessiontest2.php') ;'在 'if ($_SERVER["REQUEST_METHOD"] == "POST")' 到达 sessiontest2.php 之后,它确实保存了必要的变量。我想知道为什么会这样,也许有人知道?
标签: php variables session save