PHP会话变量不会保存

时间:2015-11-26 13:54:10

标签: php variables session save

我在保存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>

现在,如果我进入&#39; King&#39;在输入表单中,&#39; sessiontest2.php&#39;将返回此:

Sessie ID:j998drlj5449e4d969rft8il72

Sessiontest 2

Voornaam变量

Voornaam会话变量

Voornaam post variableKing

FirstnameErr变量

FirstnameErr会话变量

测试1

的Test2

数组([firstnameErr] =&gt; [test] =&gt; Test1 [test2] =&gt; Test2)

如果我进入&#39; 123&#39;在输入表单中,&#39; sessiontest2.php&#39;将返回此:

Sessie ID:j998drlj5449e4d969rft8il72

Sessiontest 2

Pregmatch werkt

Voornaam变量

Voornaam会话变量

Voornaam post variable123

FirstnameErr变量

FirstnameErr会话变量

测试1

的Test2

数组([firstnameErr] =&gt; [test] =&gt; Test1 [test2] =&gt; Test2)

所以它似乎没有保存任何必要的会话变​​量,但同时它确实保存了test1和test2会话变量。

为什么不保存必要的会话变​​量(firstname和firstnameErr)?任何帮助表示赞赏!

这是phpmyinfo(): http://i.stack.imgur.com/W5pZo.png

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

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