Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как запомнить данные введенные в форме


Автор: krulik 28.2.2006, 12:55
Короче говоря все видели (и многие делали) формы на которых пользователь должен заполнить разные поля и потом после нажатия кнопки все данные проверяются скриптом. В случае нахождения ошибки (наприме не заполненно поле какоенибудь) пользователю возвращают к форме но данные которые он заполнял уже введены в поля.
Ну к примеру есть вот такя простенькая форма:
Код

<form name=form1>
<input type="text" name="text1"><br>
<input type="text" name="text2"><br>
<select name="MySel"><option value="1" >111</option>
                 <option value="2" >222</option>
                 <option value="3" >333</option>
                 <option value="4" >444</option>
<select><br>
<input type="checkbox" name="cbC">Тут текст какойто<br>
<textarea cols="30" rows="2" name="ta" ></textarea><br>
<input type="submit">
</form>

Мне нужно чтобы в случае незаполнения какихто полей чтобы юзер вернулся на форму и все поля которые он уже заполнял были заполненны его данными.
Решил я эту проблеу следующим образом:
Код

function fill($formName,$obj,$type)
{
    if (isset($_GET[$obj]) && ($_GET[$obj]!=''))
    {
        switch ($type)
        {
            case 'select':  { //выбираем нужный OPTION
                                return "<script>".$formName.".".$obj."[".($_GET[$obj]-1)."].selected=true;</script>";
                                break;
                            }
            case 'checkbox':{ //провеям текущее значение CHECKBOX-a
                                if ($_GET[$obj]=='on') {return 'checked';}
                                                  else {return '';}
                                break;
                            }
            default: { return ($_GET[$obj]); } // по умолчанию возращаються значения для TEXT и TEXTAREA
        }
    }
}


В функции еще не дописал для RADIO элементов. Немного поясню:
Код

$formName - имя формы (оно мне понадобилось для того чтобы выбрать нужный элемент в SELECT
$obj - имя объекта для которого хотим вернуть введенные значения
$type - используется для определения типа элемента. Может принимать значения select и checkbox. По умолчанию возвращает для text и textarea

Ну и сама форма имеет следующий вид:
Код

form action="<?php echo $PHP_SELF ?>" name=form1>
<input type="text" name="text1" value="<?php print fill('','text1','');?>"><br>
<input type="text" name="text2" value="<?php print fill('','text2','');?>"><br>
<select name="MySel"><option value="1" >111</option>
                     <option value="2" >222</option>
                     <option value="3" >333</option>
                     <option value="4" >444</option>
<select><br>
<?php print fill('form1','MySel','select');?>
<input type="checkbox" name="cbC" <?php print fill('','cbC','checkbox');?>>Тут текст какойто<br>
<textarea cols="30" rows="2" name="ta" onclick="this.select()"><?php print fill('','ta','');?></textarea><br>
<input type="submit">
</form>

http://krulik.jino-net.ru/1 Вот только там всякие alert-ы выскакивают не в тему smile . Это от этапа отладки осталось.
Кто мне скажет насколько рационален такой метод. И как можно еще решить поставленную задачу. smile
ЗЫ: только пишите ответы на язке понятном для новичка. smile

Автор: Ciber SLasH 28.2.2006, 20:55
Цитата(krulik @ 28.2.2006, 12:55 Найти цитируемый пост)
И как можно еще решить поставленную задачу. smile

Я бы решил эту задачу на клиенте с помощью JavaScript.

Автор: krulik 1.3.2006, 09:07
Ciber SLasH, а можно поподробнее. Если РНР я хоть както знаком то с JS не очень покачто. Я так понимаю что обработки будут быстрее выполнятся через JS чем каждый раз запрос на сервер посылать. Или я не прав? Может тогда эту тему перенести в JS и там мне кто то раскажет как из адреса вытянуть переданные параметры!

И еще вопрос есть. Например в моем примере (который више) когда нажимаешь на сабмит то понятное дело адресная строка выглядит вот примерно так _http://localhost/krulik/index.php?text1=sd&text2=sd&MySel=3&cbC=on&ta=
Можно ли сделать вот такую штуку. Чтобы при некоретных данных пользовательвозвращался к форме ввода. И все заполненные им поля были заполнены (эт я реализовал выше). Но вот можно ли чтобы после этого адрес принял вот такой вид _http://localhost/krulik/index.php. ТОбишь убрать оттуда все переданные параметры!

Автор: CTAPbIuMABP 1.3.2006, 10:55
можно вообще их не совать в адресную строку а написать

Код

<form action="<?php echo $PHP_SELF ?>" name=form1 METHOD=POST>


тогда все переменные будутпередаватся через post и в твоем коде все $_GET надо будет заменить на $_POST

Автор: Ciber SLasH 1.3.2006, 14:40
krulik посмотри тему: http://forum.vingrad.ru/index.php?showtopic=51826

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)