Как "запомнить" выбранные значения формы в PHP?

если пользователь не проходит проверку формы, то, чтобы сделать это проще для них, мы можем сделать это:

if(isset($_POST['submit'])) {
    $email = $_POST['email'];
    //....
}

<input type="text" name="phone" value="<?php echo $phone; ?>" />
<input type="text" name="email" value="<?php echo $email; ?>" />
...

таким образом, в этом случае, если пользователь не проходит проверку, потому что они ввели электронную почту, но не номер телефона, то, когда страница обновляется после отправки и предупреждает их о недостающем телефоне, электронная почта (которую они заполнили) уже будет на своем месте и не потребует от пользователя перепечатать это.

но как я могу "запомнить" значения, выбранные пользователем для select, radio а входы флажков?

3 ответов


он работает так же, но для этого потребуется еще немного работы:

<select name="whatever">
  <option value="Apple">Apple</option>
  <option value="Banana" selected="selected">Banana</option>
  <option value="Mango">Mango</option>
</select>
Banana is selected here.

<input type="checkbox" name="fruits[]" value="banana" /> Banana
<input type="checkbox" name="fruits[]" value="mango" checked="checked" /> Mango
<input type="checkbox" name="fruits[]" value="apple" checked="checked" /> Apple
Mango and Apple are checked here

Так что в основном вы добавляете selected="selected" или checked="checked" в соответствующие поля при создании форма.

другой вариант будет использовать что-то вроде jQuery, чтобы сделать эти выборы после загрузки страницы и готовности к манипуляции DOM. Таким образом, вы можете легко поместить все изменения в одном месте, не уродуя код. Конечно, теперь есть недостаток, который вам нужно будет загрузить jQuery и ваш пользователям потребуется JS one.


вот пример кода.

<?php
$options = array('option1' => 'Option 1', 'option2' => 'Option 2', 'option3' => 'Option 3');
$myselect = 'option2';
?>
<select name="myselect">
<?php 
foreach($options as $key => $value) {
    echo sprintf('<option value="%s" %s>%s</option>', $key, $key == $myselect ? 'selected="selected"' : '', $value);
}
?>
</select>

Если вы делаете такие вещи регулярно, это намного аккуратнее в функции или вы даже можете создать помощник класса формы.

вот основная функция выбора:

<?php
function form_select($name, $options, $selected) {
    $html = sprintf('<select name="%s">', $name);
    foreach($options as $key => $value) {
        $html .= sprintf('<option value="%s"', $key);
        if ($selected == $key)
            $html .= ' selected="selected"';
        $html .= sprintf('>%s</option>', $value);
    }
    $html .= '</select>';
    return $html;
}

затем вы можете создать любой выбор, просто позвонив:

echo form_select('myselect', $options, $selected);

вы можете easiliy сделать функцию обрабатывать дополнительные атрибуты, такие как стиль, класс и идентификатор.


<input type="radio" name="xxxx" <?php if ($xxx == 'VALUE') echo "checked=\"checked\""; ?>" />

аналогично с опцией в select