2015-11-26 2 views
0

У меня возникла проблема с сохранением переменной сеанса 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

+0

Просто понял, что если я ставлю «Как действие на форму, а затем использовать заголовок (' Location: sessiontest2.php');" после того, как «если ($ _SERVER [» REQUEST_METHOD «] ==» POST «)«, чтобы добраться до sessiontest2.php это сохранить необходимые переменные. Интересно, почему это, хотя, может быть, кто-то знает? – DrD

ответ

1

Использование session_start() перед использованием сессии

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

session_start() один раз в каждом файле вы получаете доступ к переменной $ _SESSION.

+0

Вы можете видеть, что я начала сессии на обеих страницах, и я также проверить идентификатор сеанса, сделав его видимым. Он корректно обрабатывает переменные сессии, за исключением тех Err кроме. – DrD

-1

Вы можете проверить форму с помощью Ajax запроса, просто добавьте отправки формы обработчик.

+0

Спасибо за совет, но я пока не знаю, Ajax. Я все еще учусь (делать это как хобби) и, прежде чем я учусь Ajax Я должен научиться SQL. Это должно быть возможно с нормальной PHP, если я правильно, поэтому я хотел бы, чтобы работать. Кроме того, это будет очень ценный урок для меня, как только я выяснить, почему это не будет работать! ;) Если никто не знает, что не так я буду перестраивать весь шаг за шагом сценария, чтобы выяснить, когда переменная сеанса останавливается сохранения. – DrD

0

Я наконец понял вопрос. В тот момент я нажимаю представить в форме, он будет идти в sessiontest2.php и просто взять с собой переменных _POST. Весь код, который я написал в sessiontest1.php не был использован на входе формы в данный момент форма ввода Представлен уже был перемещен ко второй странице. Именно поэтому тестовые переменные сессии сделал работу, theywere письменное перед формой представления, и поэтому необходимые переменные сессии не работают, как форма ввода никогда не был записан в этих переменных. Итак, убедитесь, что код структурирован в такой скорости, что вы не пытаетесь обрабатывать материал/записи вниз Когда код уже перешел к следующей странице.