【问题标题】:PHP session variable won't savePHP会话变量不会保存
【发布时间】: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


【解决方案1】:

在使用会话之前使用session_start()

<?php
session_start();
$test = testing;
$_SESSION["firstnameErr"] = $test;
?>

session_start() 在您访问 $_SESSION 变量的每个文件中执行一次。

【讨论】:

  • 您可以看到我在两个页面上都启动了会话,并且我还通过使其可见来检查会话 ID。它正确处理会话变量,除了 Err 变量。
【解决方案2】:

我终于找到了问题所在。当我在表单上按下提交时,它会转到 sessiontest2.php 并带上 _POST 变量。我在 sessiontest1.php 中编写的整个代码没有用于表单输入,因为在提交表单输入的那一刻,它移到了第二页。这就是会话测试变量起作用的原因,它们是在表单提交之前编写的,这就是为什么必要的会话变​​量不起作用的原因,因为表单输入从未写入这些变量中。因此,请确保代码的结构不会在代码已经移至下一页时尝试处理/写下内容。

【讨论】:

    【解决方案3】:

    您可以使用 ajax 查询验证表单, 只需添加一个表单提交处理程序。

    【讨论】:

    • 感谢您的提示,但我还不知道 ajax。我仍在学习(将其作为一种爱好),在学习 ajax 之前,我必须学习 SQL。如果我是正确的,应该可以使用普通的 php,所以我希望它能够工作。此外,一旦我弄清楚它为什么不起作用,这对我来说将是非常宝贵的一课! ;) 如果没有人知道出了什么问题,我将逐步重建整个脚本以找出会话变量何时停止保存。
    猜你喜欢
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2012-11-17
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2023-01-23
    相关资源
    最近更新 更多