У меня возникла проблема с сохранением переменной сеанса PHP. Это форма регистрации, когда пользователь нажимает кнопку отправки, пользователь отправляется на registrationprocess.php. Сайт registrationprocess.php либо примет вход (и позже обработает его в базе данных), либо отправит пользователя обратно в регистрационную форму, если вход не принят как действительный. Он сохраняет вход регистрационной формы, поэтому пользователям не нужно повторно указывать все. Теперь, когда пользователи вводят что-то неправомерно, они должны получить сообщение об ошибке, которое сообщает им, что они сделали неправильно. И эта переменная сообщения об ошибке не будет сохранена.PHP session variable не будет сохранять
Я создал 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' вернет это:
Sessie ID: j998drlj5449e4d969rft8il72
Sessiontest 2
Voornaam переменная
Voornaam переменная сеанса
Voornaam сообщение variableKing
FirstnameErr переменная
FirstnameErr переменная сеанса
Тест1
Test2
Array ([firstnameErr] => [тест] => Test1 [test2] => TEST2)
А если ввести '123' в форме ввода, «sessiontest2.PHP «возвратит это:
Session ID: j998drlj5449e4d969rft8il72
TestСессия 2
Pregmatch работы
имя переменной
Имя сеанса переменной
названию variable123
FirstnameErr переменная
FirstnameErr переменная сеанса
Test1
Test2
Array ([firstnameErr] => [тест] => Test1 [test2] => Test2)
Так это не кажется, чтобы сохранить какой-либо из необходимых переменных сеанса, но в то же время он делает сохранить test1 и test2 переменные сессии.
Почему это не спасёт необходимые переменные сессии (имя и firstnameErr)? Любая помощь приветствуется!
Вот phpmyinfo(): http://i.stack.imgur.com/W5pZo.png
Просто понял, что если я ставлю «Как действие на форму, а затем использовать заголовок (' Location: sessiontest2.php');" после того, как «если ($ _SERVER [» REQUEST_METHOD «] ==» POST «)«, чтобы добраться до sessiontest2.php это сохранить необходимые переменные. Интересно, почему это, хотя, может быть, кто-то знает? –
DrD