Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Сохранение значения в поле формы

Сообщения:  [1-10]   [11-11] 

 
 автор: cheops   (12.04.2011 в 19:03)   письмо автору
 
   для: ruslanaxti   (12.04.2011 в 19:01)
 

Он не может видеть данные другого пользователя - сессия привязывается через cookie к конкретному компьютеру. Если другой посетитель не подделает cookie и не введет SID пользователя, заполнявшего форму, у него будет свой собственный набор данных в $_SESSION, никак не пересекающийся с набор данных параллельного пользователя.

PS Попробуйте заполнить $_SESSION в одном браузере и зайти на страницу в другом (браузеры должны быть разных типов, например, Opera и FireFox) - данные заполненные в одном браузере, не доступны в другом. Сессии специально для такого поведения и задумывались.

  Ответить  
 
 автор: ruslanaxti   (12.04.2011 в 19:01)   письмо автору
 
   для: cheops   (12.04.2011 в 18:37)
 

вы меня совсем не поняли? Кто то неправильно ввел данные и в сессия теперь хранятся данные введенные им. Следом заходит другой посетитель и он будет видеть данные введенные предыдущем посетителем. Вот как определить что это тот пользователь который ввел неправильные данные и его переадресовало с regist на index после чего отобразить ему эти данные и удалить эти переменные или это новый пользователь которому эти данные показывать не стоит

  Ответить  
 
 автор: cheops   (12.04.2011 в 18:37)   письмо автору
 
   для: ruslanaxti   (12.04.2011 в 18:26)
 

Да вы поступите проще, не помещайте в сессию фраз вида "Не правильно введен эл.адрес". Если введено ошибочное значение, просто передавайте какой-нибудь флаг вроде -1. Если значение в сессии равно этому значению, в value вставляйте пустое значение, а в обработчик фразу о том, что введено неправильное значение. Вам даже править будет удобнее, когда весь текст, относящийся к полям, у вас будет в районе формы, а не разбросан по двум и более файлам. Обрабатывать отдельно разношерстные сообщения об ошибках в сессии действительно проблематично - нужен какой-то единый признак.

  Ответить  
 
 автор: ruslanaxti   (12.04.2011 в 18:26)   письмо автору
 
   для: cheops   (12.04.2011 в 17:58)
 

ну это вроде двумерного массива. но мне сейчас нужно не это. нужно показать сессию если данные введены неверно, иначе не показывать. Сессия такая вещь что выводит данные всегда когда в ней они есть. А как различить что при вводе неправильных данных меня вернули со страницы regist на index и сессию показать нужно и что защел посетитель на index и ему сессию показывать не нужно.
Ведь у меня <input type="text" name="family" class="reg_form" value="<?php $_SESSION['family_error']; ?> и сессия показывается все время.

  Ответить  
 
 автор: cheops   (12.04.2011 в 17:58)   письмо автору
 
   для: ruslanaxti   (12.04.2011 в 17:44)
 

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

  Ответить  
 
 автор: ruslanaxti   (12.04.2011 в 17:44)   письмо автору
 
   для: cheops   (12.04.2011 в 16:52)
 

честно говоря я не понял как ее применить! Мне ж главное нужно если данные неверны сессию показать иначе нет. А как префикс в этом поможет :-(

  Ответить  
 
 автор: cheops   (12.04.2011 в 16:52)   письмо автору
 
   для: ruslanaxti   (12.04.2011 в 16:51)
 

Да тут нет никакой хитрости, просто используйте вместо $_POST['family'] - $_POST['prefix']['family']

  Ответить  
 
 автор: ruslanaxti   (12.04.2011 в 16:51)   письмо автору
 
   для: cheops   (12.04.2011 в 16:32)
 

скажите пожалуйста, как применять префикс формы, я с этим не сталкивался. может быть у вас есть какой нибудь пример применения префикса.

Я думал в начале сделать скрипт, который бы проверял:

if(переход со страницы regist){ показать сессию }

else { не показывать }

но $_SERVER['PHP_SELF'] $_SERVER['REQUEST_URI'] $_SERVER['SCRIPT_NAME'] страницу перехода не показывают так как использую header()

Возможно префиксы мне помогут. Буду очень благодарен!

  Ответить  
 
 автор: cheops   (12.04.2011 в 16:32)   письмо автору
 
   для: ruslanaxti   (12.04.2011 в 16:01)
 

А чем этот вариант не нравится?

PS Понятно, что встает проблема очистки сессии, но если у вас отдельные страницы формы и обработчика, то пожалуй по другому и не реализовать, разве что на странице обработчика создавать HTML-форму состоящую полностью из скрытых полей и передавать значения через неё.
PPS Для таких задач лучше ввести префикс для сессии, т.е хранить данные не в корне массива $_SESSION, а в $_SESSION['prefix'], где prefix уникален для каждой из форм.

  Ответить  
 
 автор: ruslanaxti   (12.04.2011 в 16:01)   письмо автору
 
   для: ruslanaxti   (12.04.2011 в 15:54)
 

мой примитивный скрипт такой

страница index

(если однажды неправильно ввести данные, то они сохраняются в сессии и при последующем посещении страницы index они будут появляться, что мне не нужно. Как же определить, что скрипт неренаправил меня с regist и показывать ошибки или иначе их показывать не стоит?)


<form action="city.php" method="post">
<div class="reg_caption">Регистрация</div>

<div class="reg_font">Фамилия</div>
<div><input type="text" name="family" class="reg_form" value="<?php $_SESSION['family_error']; ?>"/><span class="reg_error"><?php echo $_SESSION['family_error']; ?></span></div>

<div class="reg_font">Имя</div>
<div><input type="text" name="name" class="reg_form" value="<?php $_SESSION['name_error']; ?>"/><?php echo $_SESSION['name_error']; ?></div>

<div class="reg_font">Пол</div>
<div id="align-left"><select name="pol" class="reg_form">
<option value="">Пол</option>
<option value="Мужской">Мужской</option>
<option value="Женский">Женский</option>
</select></div>

<div class="reg_font">Место жительства</div>
<div><input type="text" name="live_city" class="reg_form" value="<?php $_SESSION['live_city_error']; ?>"/><?php echo $_SESSION['live_city_error']; ?></div>

<div class="reg_font">Адрес электронной почты</div>
<div><input type="text" name="login" maxlength="20" class="reg_form" value="<?php $_SESSION['login_error']; ?>"/><?php echo $_SESSION['login_error']; ?></div>

<div class="reg_font">Пароль</div>
<div><input type="password" name="password" value="" maxlength="20" class="reg_form"/><?php echo $_SESSION['password_error']; ?></div>

<div class="reg_font">Повторите пароль</div>
<div><input type="password" name="password2" value="" maxlength="20" class="reg_form"/><?php echo $_SESSION['password2_error']; ?></div>

<div class="reg_regist"><center>
<input type="submit" class="reg_input_sendregist" name="sendregist" value="Присоединится"/></center></div>
</form>



страница regist

// Проверка на регулярные выражения
if(!preg_match("/[а-я]/i",$_POST['name'])){
$_SESSION['name_error']="Не правильно введено имя";
$error=true;
} else { $_SESSION['name']=$_POST['name']; }

if(!preg_match("/[а-я]/i",$_POST['family'])){
$_SESSION['family_error']="Не правильно введена фамилия";
$error=true;
} else { $_SESSION['family']=$_POST['family']; }

if(!preg_match("/[а-я]/i",$_POST['pol'])){
$_SESSION['pol_error']="Не правильно введен пол";
$error=true;
} else { $_SESSION['pol']=$_POST['pol']; }

if(!preg_match("/[а-я\\._ -]/i",$_POST['live_city'])){
$_SESSION['live_city_error']="Не правильно введен город";
$error=true;
} else { $_SESSION['live_city']=$_POST['live_city']; }

if(!preg_match("/[0-9a-z\\._ -]/i",$_POST['login'])){
$_SESSION['login_error']="Не правильно введен эл.адрес";
$error=true;
} else { $_SESSION['login']=$_POST['login']; }

if(!preg_match("/[0-9a-zA-Z\\. -]/",$_POST['password'])){
$_SESSION['password_error']="Не правильно введен пароль<br/>[0-9a-zA-Z.-]";
$error=true;
} else { $_SESSION['password']=$_POST['password']; }

if(!preg_match("/[0-9a-zA-Z\\. -]/",$_POST['password2'])){
$_SESSION['password2_error']="Не правильно введен пароль<br/>[0-9a-zA-Z.-]";
$error=true;
} else { $_SESSION['password2']=$_POST['password2']; }



}

if($error==true){

$_SESSION['error']='error';
header("Location: index.php");
exit;
}

  Ответить  

Сообщения:  [1-10]   [11-11] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования