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


Автор: ovxxx 29.6.2005, 09:48
Есть форма добавления анкеты для знакомств. Допустим не заполнили все обязательные поля.
Скрипт это видит и запускает опять ту же форму с предупреждением о незаполненных полях.
Но вот как сделать, чтобы те поля, которые пользователь все таки заполнил, во вновь загруженной форме оказались не пустыми, а сохранили предыдущие значения?
Я попробовал сделать так:
Код

if (!$name)
{
$name="";
}
echo("<div>Ваше имя:<input type=text value=".$name.">");

Но если полей много, то код становится нечитабельным не только для дизайнера но и для программиста. Да и к тому же форма начинает в браузере выводиться не вся а частями.
Можно ли сделать все это как то поизящнее? Чтобы скрипт был более понятным и надежным. smile

Автор: z-END 29.6.2005, 09:58
проверяем параметры если все гуд то ok==true
Код

if (!$ok){ ?>
Ваше имя: <input type=text value="<?=$name?>"><br />
Ваша фамилия: <input type=text value="<?=$surname?>"><br />
...
<?php } 

тогда, если были не введены все данные, то введенные будут оставться.

Автор: skalex 29.6.2005, 10:26
Не забываем, что если данные приходят методом POST, то их надо дергать из глобального массива $_POST. При настройке PHP register_globals off приведенные выше пример не заработает ...
Код
Ваше имя: <input type=text value="<?= $_POST['name'] ?>"><br />
Ваша фамилия: <input type=text value="<?= $_POST['surname'] ?>"><br />

Добавлено @ 10:32
ovxxx, имхо изящнее всего - написать класс для создания форм, который будет заниматься отрисовкой полей, клиентской и серверной валидацией и прочими вещами. Можно попробовать использовать готовые библиотеки (см. http://forum.vingrad.ru/index.php?showtopic=54923).

Автор: Bikutoru 29.6.2005, 12:14
Еще можно шаблон формы создать, его парсить и вставлять нужные значения полям
Mace, если написать класс, то дизайнеру там точно делать будет нечего smile

Автор: skalex 29.6.2005, 12:51
Цитата
Mace, если написать класс, то дизайнеру там точно делать будет нечего

Как это нечего ? В моем понимании такой класс не должен отрисовать форму полностью (уже готовой к выводу), а должен лишь предоставлять по требованию HTML-код открытия/закрытия формы и ее полей . Ну или что то в этом роде ... А верстальщик (не дизайнер) пусть компонует и оформляет это на странице.

Автор: Bikutoru 29.6.2005, 13:18
Но в любом случае потребуются шаблоны, содержащие что-то вроде

Код

<input type=text value="{InputValue}">

что не намного проще, чем
Код

<input type=text value="<?=$surname?>"><br />


Хотя, конечно, дизайн при таком раскладе менять будет проще, если это потребуется...

Автор: skalex 29.6.2005, 13:21
Неее ... Ну что-нить типа этого:

Код
{$form->open()}
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
 <td>name</td>
 <td>{$form->item('name')}</td>
</tr>
<tr>
 <td>email</td>
 <td>{$form->item('email')}</td>
</tr>
</table>
{$form->close()}

Автор: Bikutoru 29.6.2005, 14:12
Но ведь для
Код

{$form->item}

может потребоваться задание стилей, здесь тоже потребуются свои шаблоны... Или ты хочешь это делать при помощи класса?

Автор: skalex 29.6.2005, 14:44
Цитата
может потребоваться задание стилей, здесь тоже потребуются свои шаблоны... Или ты хочешь это делать при помощи класса?

Ну тут все зависит от того шаблонного движка, под который все это затачивать. Если делать не под шаблонный движок, а под обычный HTML, то в почему бы не передавать это методу в качестве параметра ?
Код

<?php echo $form->item('name', 'class="name_field"') ?>
<?php echo $form->item('name', 'style="border: 1px solid #CCC"') ?>

Автор: Bikutoru 29.6.2005, 15:25
Цитата
почему бы не передавать это методу в качестве параметра ?


Но ведь тогда мы переносим часть дизайна в скрипт, который должен бы отвечать за логику работы приложения... По-моему, при этом теряется смысл шаблонного движка...

Автор: skalex 29.6.2005, 15:57
Да там не скрипт в принципе, я просто написал как это может выглядеть в обычном HTML-шаблоне (без всяких движков). Но сама то форма создается в другом месте, там где ты описываешь логику.
А вызовы тех методов - это уже часть отображения. Потому как он возвращает готовый HTML-код поля с подстановкой всех необходимых аттрибутов.

В общем по разному тут можно судить. Я писал такой класс, и для меня он очень удобен.

Автор: Bikutoru 29.6.2005, 17:01
Цитата
В общем по разному тут можно судить. Я писал такой класс, и для меня он очень удобен.

Соглашусь, это и есть главный критерий smile

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