我在保存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
答案 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查询验证表单, 只需添加一个表单提交处理程序。