Как я могу сохранить значение во вводе текста после того, как отправление произойдет?

Я хочу проверить форму, чтобы удостовериться, что пользователь пишет на имя и фамилию.

Если пользователь пишет только в своей фамилии, форма должна показать снова с сообщением об ошибке около поля фамилии, но значение имени должно все еще быть там.

Я не знаю, как сделать это, hehe. Я - просто PHP программист новичка.

Вот то, что я имею до сих пор:

<html>
<head>
</head>

<body>
    <form action="formprueba.php" method="get">
        <dl>
            <dt>Last Name:</dt>
            <dd><input type="text" value="" name="name" />
                <?php if((isset($_GET['name'])) && ($_GET['name'] == "")){
                    echo "Please write a correct name.";
                }
                ?>
            </dd>                

            <dt>Last Name:</dt>
            <dd><input type="text" value="" name="lastname" />
                <?php if((isset($_GET['lastname'])) && ($_GET['lastname'] == "")){
                    echo "Please write a correct last name.";
                }
                ?>
            </dd>

            <br />                
            <dt>
                <input type="submit" value="enviar" />
            </dt>
            <input type="hidden" name="enviado" value="j"/>
        </dl>
    </form>
</body>

Кроме того, я уверен, что эта проверка ужасна, если бы у Вас есть несколько минут, я был бы действительно выпускником, если кто-то может показать мне более эффективный способ проверить (не используя сторонние дополнения).

Спасибо ТАК.

5
задан 19 February 2010 в 12:53
поделиться

7 ответов

Поместите нужную переменную в поле "значение" вашего тега ввода, как это :

<input type="text" value="<?php echo htmlspecialchars($_GET['lastname']); ?>" name="lastname" />

И важно указать как минимум символы HTML, которые кто-то может вставить (by htmlspecialchars).

15
ответ дан 18 December 2019 в 11:55
поделиться

Если вы делаете что-то вроде

<input type="text" value="" name="lastname" value="<?php echo $_GET['lastname'];?>" />

никогда не забывайте проверять/эскейпить значение, которое вы отображаете, используя, например, htmlentities(). В противном случае вы будете открыты для совершенно тривиальных атак инъекции javascript!

1
ответ дан 18 December 2019 в 11:55
поделиться

Если пользователь вводит только свое последнее имя, форма должна снова отобразиться с сообщением об ошибке рядом с последним name , но значение name все равно должно быть .

Просто получите их значение из $ _ GET (метод формы, который вы используете)

<input type="text" value="" name="lastname" value="<?php echo $_GET['lastname'];?>" />

и так далее ....

Вы должны также использовать htmlspecialchars работает по соображениям безопасности.

Дополнительная информация здесь.

2
ответ дан 18 December 2019 в 11:55
поделиться

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

Кажется, это полностью зависит от браузера, например для меня это сработало в Safari, но не в Firefox ...

0
ответ дан 18 December 2019 в 11:55
поделиться

Это невозможно напрямую. Предположительно, модель домена включает связанные с Клиентом объекты, такие как адреса, заказы и т.д. Для этого следует использовать образец спецификации .

public class CustomerCanBeDeleted
{

    public bool IsSatisfiedBy(Customer customer)
    {
        // Check that related objects are null and related collections are empty
        // Plus any business logic that determines if a Customer can be deleted
    }
}

Отредактировано для добавления:

Возможно, наиболее простым методом было бы создание хранимой процедуры, которая выполняет эту проверку, и вызов ее перед удалением. Можно получить доступ к команде IDbCommand из NHibernate ( ISession.Connection.CreateCommand () ), чтобы вызов был агностическим.

См. также ответы на этот вопрос .

-121--3153447-

Из объекта Geocoder можно вызвать метод getStartLocation (double, double, int) . Он возвращает список объектов Address с методом getLocality () .

Geocoder gcd = new Geocoder(context, Locale.getDefault());
List<Address> addresses = gcd.getFromLocation(lat, lng, 1);
if (addresses.size() > 0) {
    System.out.println(addresses.get(0).getLocality());
}
else {
   // do your stuff
}
-121--688374-

Рекомендуется выполнять проверки на стороне сервера. Похоже, ваш подход верен. Вы можете просто сохранить флаг, который скажет вам в конце страницы погоду или не проверка была успешной.

Пример

$ flag = ture;

<?php if((isset($_GET['lastname'])) && ($_GET['lastname'] == "")){
       echo "Please write a correct last name.";
       $flag="false";
}
?>

затем в нижней части страницы if ($ flag = = true) echo «form submit»;

О сохранении ценности один из людей правильно упомянул добавление ценности к вашему входному тэгу

value="<?php echo $_GET['lastname'];?>"

Надеюсь, это поможет.

0
ответ дан 18 December 2019 в 11:55
поделиться

Это зависит от вашей архитектуры. Четыре общих архитектурных шаблона источника данных можно найти в Martin Fowler Patterns of Enterprise Application Architecture :

  • Table Data Gateway

    Объект, выполняющий роль шлюза к таблице базы данных. Один экземпляр обрабатывает все строки в таблице.

  • Шлюз данных строк

    Объект, который действует как шлюз для одной записи в источнике данных. На строку приходится один экземпляр.

  • Активная запись

    Объект, переносящий строку в таблицу или представление базы данных, инкапсулирующий доступ к базе данных и добавляющий логику домена к этим данным.

  • Data Mapper

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

Дополнительные узоры:

-121--4817473-

Рассматривали ли Вы возможность использования библиотеки реляционного отображения объектов, например Доктрина или Пропел ?

-121--4817474-

Можно использовать javascript на стороне клиента - таким образом можно сохранить переход к серверу.

Однако недостаток в том, что вы действительно можете выполнять только базовую проверку, так как пользователю нельзя доверять (конечно, для мер безопасности). Можно, по крайней мере, «пометить» недопустимые узоры перед выполнением дорогостоящей поездки на сервер.

0
ответ дан 18 December 2019 в 11:55
поделиться

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

-2
ответ дан 18 December 2019 в 11:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: