|
|
|
| Как известно, если открыта сессия, то при нажатии кнопки назад или выполнении JS-команды history.go(-1) введённые перед отправкой формы значения input-боксов (текст, чекбоксы, радиокнопки) сбрасываются. Если же не открывать сессию, то при откате по истории назад введённые значения сохраняются... А возможно ли как-то заставить их не сбиваться и при открытой сессии ? Просто есть форма с огромным кол-вом полей ввода и обработчик. Обработчик проверяет введённые значения полей на соответствие форматам и если хоть одно поле заполнено неверно, то выводится сообщение об ошибке и кнопка Назад. | |
|
|
|
|
|
|
|
для: DDK
(30.01.2006 в 14:58)
| | Нельзя ничего обработать по команде отката.
Значения полей запоминаются принудительно при загрузке страницы и всегда подставляются в идентификаторы value элемента.
Например:
<input type="text" name="text1" value="<?php print $value1; ?>"> | |
|
|
|
|
|
|
|
для: XPraptor
(30.01.2006 в 15:01)
| | Вы не поняли вопрос. | |
|
|
|
|
|
|
|
для: DDK
(30.01.2006 в 15:41)
| | Да нет, вопрос я понял правильно. Вы сам принцип неправильно понимаете.
Не нужно делать никаких дополнительных страниц, на которых предупреждать о неправильности данных и тем более никаких откатов назад.
Вы должны на этой странице, где заполняется форма, написать ошибки и заполнить поля уже переданными данными, для возможности их исправления. Поэтому все значения пишутся сразу и первая загрузка, просто инициализирует пустые значения для всех полей, а потом уже полученные от пользователя при заполнении. | |
|
|
|
|
|
|
|
для: DDK
(30.01.2006 в 15:41)
| | Просто страница должна ссылаться сама на себя. Если данные правильные - обрабатываем их и редиректимся. Неправильные - вот она форма, вот они данные.
Ради интереса, можете стереть имя и пароль при ответе: этот форум именно так и работает. | |
|
|
|
|
|
|
|
для: Loki
(30.01.2006 в 16:40)
| | Да нет же... мы всё же говорим о разных концах разных палок. Имя и пароль в примере этого форума вставляются в поля ещё на стадии генерации страницы скриптом и берутся из сессионных переменных. Хотите встречный пример ? - Сотрите сейчас имя и пароль, но напишите в поле ввода сообщения какой-нибудь текст. А теперь отправьте это сообщение. Когда загрузится страница с ошибкой о том, что не введено имя не идите по ссылкам, которые там предложены (Вернуться в тему, бла бла бла...), а нажмите просто кнопку "Назад" в браузере. Ага ! Текст сообщения-то не сохранился, неправда ли ? А почему ? А потому, что сессия открыта. А вот если бы сессии не было (не было бы в скрипте session_start() ), то текст сообщения при откате на страницу назад сохранился бы в поле ввода сообщения. Или я опять не прав и не знаю, о чём говорю, господа ?!... | |
|
|
|
|
|
|
|
для: DDK
(30.01.2006 в 17:11)
| | Ну, правда, этот форум - плохой пример для моего вопроса, т.к. тут ещё и кеширование напроч отключено Мета-тегом. | |
|
|
|
|
|
|
|
для: DDK
(30.01.2006 в 17:15)
| | Вы опять не понимаете принципа.
Неважно есть сессии или нет их, не может быть на странице никакого "назад".
Всегда только в эту страницу и ни вперед ни назад.
вот код страницы с первой строки:
<?php
global $ar_reg, $printstring;
$printstring="";
$ar_reg["textlogin"]="";
$ar_reg["textpassword"]="";
if(isset($_POST["sbm_send"]) && !empty($_POST["sbm_send"]))
{
$ar_reg["textlogin"]=$_POST["textlogin"];
$ar_reg["textpassword"]=$_POST["textpassword"];
//проверяем правильность
if(правильно){
header("Location: index.php");
}else{
//неправильно
$printstring="Вы не верно заполнили поле...<br>\n";
}
}
?>
<html>
<body>
Вот тут и будет строка о том что не так заполнено, но значения в полях остануться те что юзер ввел или пустые если первый заход на эту страницу
<?php print $printstring; ?>
<form name="form_register" action="" method="post">
Enter login:<br>
<input type="text" name="textlogin" value="<?php print $ar_reg["textlogin"]; ?>"><br>
Enter login:<br>
<input type="text" name="textpassword" value="<?php print $ar_reg["textpassword"]; ?>"><br>
<input type="submit" name="sbm_send" value="send><br>
</form> | |
|
|
|
|
|
|
|
для: DDK
(30.01.2006 в 17:15)
| | гм... а я и забыл как тут сделано:)
я имел ввиду как раз то, что говорит XPraptor | |
|
|
|
|
|
|
|
для: Loki
(30.01.2006 в 17:37)
| | Так... хорошо... сейчас буду объяснять на пальчиках :) Уважаемые, попробуйте у себя на локалях выполнить вот такой скрипт:
<?
//session_start();
if(!isset($_GET['do'])) {
echo "Введём любой текст в textarea и нажмём-ка мы кнопку Отправить !
<form action='".$_SERVER['PHP_SELF']."?do' method='post'>
<textarea name='sometext'></textarea>
<br><input type='submit' value='Отправить'>
</form>";
} else {
echo "А теперь вернёмся на страницу назад по событию history.go(-1)<br>
и посмотрим, сохранился ли введённый в textarea текст...
<br><input type='Button' value='< Назад' onclick='history.go(-1);'>";
}
?>
|
А потом выполните этот же скрипт, но раскомментировав вызов функции session_start()... Ага ?! | |
|
|
|
|
|
|
|
для: DDK
(30.01.2006 в 17:50)
| | Так не пользуйтесь таким способом. Вам же сказали: поместите форму и обработчик в один файл. Если данные прошли проверку - включаем обработчик. Если нет - выводим форму с заполненными полями. | |
|
|
|
|
|
|
|
для: Loki
(30.01.2006 в 18:13)
| | Так... ладно... Может тов. Хеопс что скажет. На последок: у меня в скрипте в зависимости от значения переменной сессии загружается та или иная форма. По-этому не могу не открывать сессию как не крути. Я уже думал над таким вариантом. | |
|
|
|
|
|
|
|
для: DDK
(30.01.2006 в 18:20)
| | Да есть такое дело, поэтому и не вводим сессии на форуме и в счётчике - если используете сессии, то что вводит пользователь следует сохранять в сессии и выводить при возврате - геморой, но зато комар носа не подточит. | |
|
|
|
|
|
|
|
для: cheops
(30.01.2006 в 18:26)
| | Да, я начал было именно так и делать (загонять всё в сессии), но правда, уж больно это геморрно :( Ну что ж, придётся всё-таки так и делать... | |
|
|
|
|
|
|
|
для: DDK
(30.01.2006 в 18:28)
| | Вам никто не мешает в зависимости от сессии отобразить ту или иную форму, на принципе и работе указанного мною примера это никак не отразится.
<?php
if($_SESSION["какая то"]=чег то){
?>
<form name=form1>
</form>
<?php
}elseif($_SESSION["какая то"]=чег то){
?>
<form name=form2>
</form>
<?php
}
?> | |
|
|
|
|
|
|
|
для: DDK
(30.01.2006 в 18:28)
| | Хеопс посоверовал самый лучший вариант!
Всё просто по тупому, зато работает на все 100% | |
|
|
|