Как запазвате стойност във форма при грешка?

azsym

New member
За php.
Ако имате форма с 2 полета. Първото трябва да е мин 10 символа, второто минимум 15.
Ако някой сложи в първото 3 символа, във второто 16. След това скрипта проверява дължината и как да се върна на страницата като полетата са си с написаното преди това?
Сайта ползва само едит хтмл темплет, като различните php страници го рендират и изписват евентуални грешки на определено с %s място. При това положение се получава празен форм и съобщение за грешка.
 
Re: Как запазвате стойност във форма при грешка?

Иво, това ще работи само ако обработката е в същия скрипт, който показва и грешката. Ако конкретната реализация са я направили с отделни скриптове - виждал съм и такива - няма да покаже нищо...

С други думи, за да покажеш грешните стойности в полетата, трябва:

1. Обработката да става в същия ПХП скрипт и като value да сложиш получената грешна стойност.

или

2. Ако е с различни скриптове, да осигуриш предаване на грешните параметри към страницата, която показва формата, и отново да ги покажеш като value.
 
Re: Как запазвате стойност във форма при грешка?

2. Ако е с различни скриптове, да осигуриш предаване на грешните параметри към страницата, която показва формата, и отново да ги покажеш като value.

как става тoва предаване между страниците - с урл-то ли (query string)?
 
Re: Как запазвате стойност във форма при грешка?

Ако използваш $_SESSION няма да има значение в един или повече скриптове си реализирал обработката.
В скрипта с формата слагаш
PHP:
echo '<input type="text" name="input1" value="'.((isset($_SESSION['input1'])) ? $_SESSION['input1'] : '').'"/>';
а в обработващия скрипт правиш
PHP:
$_SESSION['input1']=$_REQUEST['input1'];
естествно не забравяш и в двата скрипта да започнеш със session_start() и както вече беше отбелязано да ескейпнеш стойностите, че някой ще те напомпи с гадости.
 
Re: Как запазвате стойност във форма при грешка?

Моят съвет е да валидираш формата направо на ниво HTML. Примерно на всеки елемент слагаш атрибут required, което ще рече задължителен. След това добавяш и атрибут pattern със стойност регулярен израз. Така изобщо няма да опираш до скриптове за валидацията. Пример:

Код:
<input type="text" name="inp1" pattern="[0-9A-Za-z]{10,}" required />

Това е за пример минимум 10 символа, правиш си и за 15.
 
Последно редактирано:
Re: Как запазвате стойност във форма при грешка?

Моят съвет е да валидираш формата направо на ниво HTML. Примерно на всеки елемент слагаш атрибут required, което ще рече задължителен. След това добавяш и атрибут pattern със стойност регулярен израз. Така изобщо няма да опираш до скриптове за валидацията. Пример:

Код:
<input type="text" name="inp1" pattern="[0-9A-Za-z]{10,}" required />

Това е за пример минимум 10 символа, правиш си и за 15.
А ако pattern и required се премахнат чрез помощта на firebug?То обикновен потребител няма да го направи,но някой хакер...
 
Re: Как запазвате стойност във форма при грешка?

А ако pattern и required се премахнат чрез помощта на firebug?То обикновен потребител няма да го направи,но някой хакер...

Освен това тези неща са валидни само при браузери разбиращи HTML5.

Palex, предложението ти е много лоша практика.

Предтави си, че си отворил два таба на браузера с конкретната форма? Ще стане супер глупаво като получиш грешки още преди да си изпратил формата😉
 
Re: Как запазвате стойност във форма при грешка?

при мен проблема е, че се опитвам да направя (може би) една мешавица.
Имам следното
един темплет хтмл с 2 форми. Форма1 за търсене, Форма2 за добавяне (с кап1а). В темплета има няколко %s и с printf се показва от всеки php скрипт.

Ако някой търси, Ф1 праща инфото на search.php, който обаче връща резултата като няколко чек кутийки но във Ф2, чрез printf и заместване на %s и зареждане на темплета, като сега сме на страница search.php.
Това е така защото на всеки от резултатите може да се праща съобщение и там е нужна капча. Ако всичко е избрано както трябва: избран поне една кутийка, майл и капча, add/send.php скрипта праща мейла, и вече сме страница add/send.php.

Ако обаче нещо липсва, грешките се изписват, темплета се презарежда но вече намам резултата от търсенето, като пак сме на страница add/send.php.

Въпроса е как да покажа резултата пак ако има проблем.
 
Re: Как запазвате стойност във форма при грешка?

Моят съвет е да валидираш формата направо на ниво HTML. Примерно на всеки елемент слагаш атрибут required, което ще рече задължителен. След това добавяш и атрибут pattern със стойност регулярен израз. Така изобщо няма да опираш до скриптове за валидацията.
....

да, и ако едитна html-а на страницата, като нямаш валидации отзад и ще ти се сипе много здраво.

при мен проблема е, че се опитвам да направя .....

т.е.
проблема е че имаш 2 форми;
2рата зависи от 1вата;
ако 2рата файлне с валидация, губиш информацията от 1вата форма ?
 
Re: Как запазвате стойност във форма при грешка?

Не съм казвал, че не трябва да има валидация отзад!

До колкото разбрах, проблемът е, че не се пазят данните след fail на някоя от формите. Е, по моя начин ще се пазят. Изключение правят потребителите със стари браузъри, но това си е техен проблем.
 
Re: Как запазвате стойност във форма при грешка?

Честно казано решението на Cloxy е добро, особено ако се сложи и някакъв JS, който да казва: "Браузърът Ви е стар, имате грешка, сега попълвайте на ново. Ако ползвахте нов браузър, щеше да се запази това, което сте попълвали до момента." 🙂
 
Re: Как запазвате стойност във форма при грешка?

Принципно сайта ще работи коректно САМО с джаваскрипт. Ако някой си го е изключил, проблема е негов.
Т.е. може би нещо между варианта на клокси (за първи път името без грешка тука 😉 ) + малко джаваскрипт ще бъде решение.
Утре ще помисля, ако някой има идея да казва. А скоро ще го пусна тука за ревю.
 

Back
Горе