Как вы публикуете содержимое формы на той странице, на которой оно находится? - PullRequest
0 голосов
/ 24 января 2009

В Yahoo или Google и на многих веб-сайтах, когда вы заполняете форму и если в вашей форме есть ошибки, она перенаправляется на ту же страницу. Обратите внимание, что данные в форме остаются без изменений. Я имею в виду данные в текстовых полях остается прежним. Я попытался & lsaquo; form action = "(та же страница здесь)" method = "post or get" & rsaquo; Он перенаправляется на страницу, но содержимое формы очищается. Я хочу, чтобы данные отображались.

Вы знаете, насколько утомительным будет для пользователя, если ему придется снова заполнить всю форму, если он просто забудет установить флажок принять условия. Нужна помощь!

Ответы [ 8 ]

2 голосов
/ 24 января 2009

Вы должны сделать это самостоятельно. Когда страница будет опубликована, вы получите доступ ко всем значениям формы, введенным пользователем через $ POST ['...']. Затем вы можете заново заполнить поля формы этими данными.

1 голос
/ 24 января 2009

Вот модифицированная версия того, что я использую для очень простых веб-сайтов, где мне не нужна / не нужна целая структура для выполнения работы.

function input($name, $options = array()) {
    if(!isset($options['type'])) $options['type'] = 'text';

    $options['name'] = $name;

    if(isset($_POST[$name]) && $options['type'] != 'password') {
        $options['value'] = htmlspecialchars($_POST[$name]);
    }

    $opts = array();    
    foreach($options as $key => $value) {
        $opts[] = $key . '="' . $value . '"';
    }

    return '<input ' . implode(' ', $opts) . '/>';
}

(у меня есть несколько похожих функций для <select> и <textarea> и т. Д.)

Когда вы создаете поля, вы можете сделать что-то вроде:

First Name: <?=input('first_name')?>
Last Name: <?=input('last_name')?>
Password: <?=input('password', array('type' => 'password'))?>

Если вы обрабатываете свои формы на той же странице, что и сама форма, они будут автоматически заполняться при возникновении ошибок. Большинство фреймворков, тем не менее, делают все это для вас (и гораздо лучше, чем приведенный выше код), я лично предлагаю CakePHP или CodeIgniter.

1 голос
/ 24 января 2009

многие фреймворки делают эту работу за вас, так что не тратьте свое время на ручную работу

1 голос
/ 24 января 2009

Если вы поместите свою форму и обработку данных формы в один и тот же сценарий, вы можете легко распечатать данные, уже введенные в форму, например:

$valid = false;
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['name']) && $_POST['name'] == 'Hugo') {
        $valid = true;
    } else {
        echo '<p>Seriously, you have to enter "Hugo"!</p>';
    }
    // more data processing
    if ($valid) {
        echo '<p>Everything’s fine!</p>';
    }
}
if (!$valid) {
    echo '<form action="" method="post">';
    echo '<p>Please enter "Hugo": <input type="text" name="name" value="', (isset($_POST['name']) ? htmlspecialchars($_POST['name']) : ''), '"></p>';
    echo '<p><input type="submit"></p>';
    echo '</form>';
}

Ну, это не хороший пример, но так оно и работает.

1 голос
/ 24 января 2009

Это не делается автоматически. Они получают значения из post / get, а затем назначают значения, введенные пользователем в шаблон. То, что вы видите, это HTML, сгенерированный из скрипта, который обрабатывает пользовательские значения.

0 голосов
/ 24 января 2009

Если вы используете систему шаблонов или фреймворка (я включил движок Smarty в несколько моих проектов), вы обычно можете настроить шаблоны, чтобы они автоматически заполняли поля значениями, если они обнаруживают, что значение $_POST[$variable] соответствующее их поле установлено.

Что касается паролей, насколько я понимаю (я могу ошибаться): это соглашение, которое сводит к минимуму количество времени, которое пароль отправляется по проводной связи, следовательно, сокращает окно для любого, кто может прослушивать подобрать текст. Хорошая практика - оставлять поля пароля пустыми, вот и все.

0 голосов
/ 24 января 2009

Вы можете использовать два подхода (они не являются взаимоисключающими):

  • Используйте JavaScript, чтобы помочь пользователю до , когда он отправит форму. Таким образом, вы сохраняете туда-обратно на сервер. Что вы просили:
  • В форме заполните атрибуты value полей данными, отправленными обратно с сервера. Например: вы отправляете поле name, которое вы получаете как $ _POST ['name'] в PHP (при условии, что вы использовали method='post'. Если вы отправите данные обратно и измените это поле, добавив value='<?php $_POST['name']; ?>, вы должны получить данные обратно.
0 голосов
/ 24 января 2009

Вам нужно будет проверить данные в том же файле, и если они верны, вы перенаправите их в правильное местоположение. Затем вы можете использовать информацию $ _POST или $ _GET, которую опубликовал пользователь, и он сможет исправить ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...