2013-06-13 5 views
0

Вот мой код http://pastebin.com/DtK8MMtU , когда пользователь нажимает кнопку «Следующий поворот», $ _POST ["turnOver"] становится установленным. Затем скрипт переходит в этот раздел

if (isset($_POST["turnOver"])) { 
       $_SESSION["state"] = 0; 
       unset($_SESSION["rolls"]); 
       unset($_SESSION["bet"]); 
       unset($_SESSION["nextTurn"]); 
       $_SESSION["turnNumber"]++; 
       unset($_POST["turnOver"]);  
} 

По этой строке unset($_POST["turnOver"]); я хочу этот блок выполняется только один раз после нажатия кнопки «Далее поворота» пользователя, но это выполняется каждый раз, когда пользователь обновился страница (я видел это по $ _SESSION [» turnNumber "], его все время увеличивается на странице обновления). Кроме того, здесь $ _POST var_dump от xdebug:

array (size=1) 
    'turnOver' => string ''... (length=9) 

Это значит, что оно установлено?

+0

Вы не можете этого сделать. Тем не менее, вы можете проверить, не '' '_SESSION [" state "]' не равно 0, и если оно уже оно, не выполняйте. Когда вы UNSET это только для остальной части исполнения скрипта PHP. Значение, если вы попытаетесь получить доступ к '$ _POST [" turnOver "] после этого, тогда он потерпит неудачу, когда вы удалите его из массива, но он будет повторно отправлен при каждом обновлении. – h2ooooooo

+0

Вы можете включить случайное число с каждой законной почтой. Сохраните это число в переменной сеанса. Убедитесь, что указанное число не совпадает с указанным номером. Если это то же самое, это обновление браузера. – Drew

ответ

2

Если пользователь обновляет страницу, они будут каждый раз отправлять значение POST turnOver. Отмена сообщения будет влиять только на остальную часть этой страницы.

Лучшее, что нужно сделать, это установить значение сеанса и установить, что в первый раз, когда отправляется turnOver, проверьте на это.

+1

На самом деле, просто задумываясь здесь: не мог ли он отправить заголовок 302 ('header (« Location: thisurl.php »);') и избежать всей проблемы с освещением? – h2ooooooo

+0

@ h2ooooooo Хорошая точка. Хорошая практика - перенаправлять после публикации, чтобы предотвратить подобное. – Jim

+0

В качестве альтернативы, он может хранить уникальный ключ формы в сеансе, учитывать только форму, представленную при согласовании, и генерировать новый ключ формы при приеме представления. Это регулярно используется для предотвращения дублирования материалов. –

2

Вы сказали

Я видел это по $ _SESSION [ "turnNumber"] значение, его все время растет я обновить страницу

Это нормальный Бовуар, поскольку вы выполняете

$_SESSION["turnNumber"]++; 

, который будет продолжать добавлять 1 при каждом обновлении. Более того перед линией

unset($_POST["turnOver"]);  

Ваш $_POST["turnOver"] фактически установлен, так что если вы попытаетесь var_dump перед командой в отключенном() вы увидите его в качестве набора.

+0

так, даже если я не установлен ($ _ POST ["turnOver"]), он устанавливается автоматически, когда я обновляю страницу, даже если я не нажимаю кнопку, которая ее устанавливает? –

+0

Да, если вы обновите данные, вы будете переназначать данные, а $ _POST ["turnOver"] будет доступен в столбце после того, как вы фактически выполните unset() – Fabio

Смежные вопросы