PHP会话变量won';救不了

PHP会话变量won';救不了,php,variables,session,save,Php,Variables,Session,Save,我在保存PHP会话变量时遇到了一个问题。这是一个注册表单,当用户按submit时,用户将被发送到registrationprocess.php。registrationprocess.php站点将接受输入(稍后将在数据库中进行处理),或者如果输入无效,它会将用户发送回注册表。它保存了注册表输入,因此用户不必重新键入所有内容。现在,当用户输入错误的内容时,他们应该会收到一条错误消息,告诉他们他们做错了什么。并且该错误消息变量将不会保存 我已经创建了两个新页面来缩小问题的范围。它们分别称为处理输入的

我在保存PHP会话变量时遇到了一个问题。这是一个注册表单,当用户按submit时,用户将被发送到registrationprocess.php。registrationprocess.php站点将接受输入(稍后将在数据库中进行处理),或者如果输入无效,它会将用户发送回注册表。它保存了注册表输入,因此用户不必重新键入所有内容。现在,当用户输入错误的内容时,他们应该会收到一条错误消息,告诉他们他们做错了什么。并且该错误消息变量将不会保存

我已经创建了两个新页面来缩小问题的范围。它们分别称为处理输入的“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";

?>

会话测试1

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>

会议测试2








现在,如果我在输入表单中输入'King','sessiontest2.php'将返回以下内容:

会话ID:j998drlj5449e4d969rft8il72

会议测试2

沃纳姆变量

Voornaam会话变量

沃纳姆邮政编码

FIRSTNAMERR变量

FIRSTNAMERR会话变量

测试1

测试2

数组([firstnameErr]=>[test]=>Test1[test2]=>test2)

如果我在输入表单中输入'123',sessiontest2.php'将返回:

会话ID:j998drlj5449e4d969rft8il72

会议测试2

预赛

沃纳姆变量

Voornaam会话变量

Voornaam post变量123

FIRSTNAMERR变量

FIRSTNAMERR会话变量

测试1

测试2

数组([firstnameErr]=>[test]=>Test1[test2]=>test2)

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

为什么它不保存必要的会话变量(firstname和firstnameErr)?感谢您的帮助

这是phpmyinfo():

在使用会话之前使用
会话\u start()

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


session\u start()在访问$\u session变量的每个文件中执行一次。

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

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

您可以看到我在两页上启动了会话,并且通过使其可见来检查会话ID。它正确地处理会话变量,除了错误变量。谢谢你的提示,但我还不知道ajax。我还在学习(把它作为一种爱好),在学习ajax之前,我必须先学习SQL。如果我是正确的,那么使用普通php应该是可能的,所以我希望它能够工作。此外,一旦我弄明白为什么它不起作用,这对我来说将是一个非常宝贵的教训!;)如果没有人知道出了什么问题,我将一步一步地重新构建整个脚本,以确定会话变量何时停止保存。我只想知道如果我将“”作为操作放在表单上,然后使用“header('Location:sessiontest2.php');”在“if($\u SERVER[“REQUEST\u METHOD”]==“POST”)”之后,它会保存必要的变量以访问sessiontest2.php。我想知道为什么,也许有人知道?