Проверка ошибок, заполнения формы.

Рома

был тут
Проверка ошибок, заполнения формы.

У меня есть форма, в ней куча полей, у каждой своё имя. В конце кнопка "отправить", пользователь её жмет, а скрипт проверяет наличие ошибок заполнения:

<form method=post name=form action=action.php3>
<input type=text name=name>
<input type=password name=password>
<input type=password name=password2>
<input type=submit>
</form>

Два из полей имеют имена $password и $password2 (пароль и подтверждение пароля, вы наверняка видели подобное в каких-нибудь анкетах) скрипт (action.php3) смотрит:

if($password!=$password2)
{
нужно вернуться на предыдущую страницу, вверху написать "неправильно заполнено поле пароль"
}

Причем все заполненные поля должны остаться заполненными.

Я пробовал делать так:

$referer=getenv("HTTP_REFERER");
Header("Location:$referer");

но в таком случае форма становится незаполненной и нельзя написать в чем ошибка.


Тут наверное надо сделать какую-нибудь переменную, которая сначала будет пустой, а потом, при нахождении ошибки в нее запишется:"Неправилный пароль", но как тогда передать эту переменную назад, да при этом сохранить все заполненные поля???????

Пожалуйста кто может помогите!!!
 

Romantik

TeaM PHPClub
А пусть JavaScript на клиенте проверит равенство паролей и передаст тебе только ОДИН верный пароль.
 

leosha

Старожил PHPCLub
Нет, конечно же JS тут не годится. Вернее, как второстепенное средство подойдет.

А делается все просто - заполняем поля, нажимаем Submit, записываем все в Cookie (или, в сессию), если что-то неправильно - ссылку на первую страницу, а там в начале проверяется наличие Cookie нашего.. Если есть - вписываем данные.
Вообщем, смысл именно такой. Можно, например, не возиться с Cookie или сессиями, а просто передать со второй страницы на первую POST'ом все..
Можно и еще что-то придумать..
 

Romantik

TeaM PHPClub
На пустые поля и равенство двух паролей(Не сравнение в базе)
первоначальные проверки на клиенте лучше все таки JS. По крайней мере не будет юзера гонять на сервер и обратно.
Да, нельзя полагаться на JS(может быть отключен)
но по крайней мере на сервер прийдет более точные(необходимые) данные, которые тоже нужно проверить!
P.S. Если я правильно понял вопрос....
 

leosha

Старожил PHPCLub
угу. именно так. Я и говорю, JS - как дополнительное средство вполне уместен.
 

RomikChef

Guest
Я худею, дорогая редакция.

Реферер! Жаба-скрипт! Куки! Вы еще базу данных предложите и отправку данных на сервер Микрософт.
Я уже не говорю о том, что все три вещи могут быть отключены. Я просто поражаюсь, сколько сложных решений можно предложить для примитивной, в общем-то, проблемы.
Все, что надо (если хочешь сделать 100% надежный скрипт, не зависящий ни от каких настроек сервера и клиента и если ты пишешь на РНР, а не на SSI, Яваскрипте или голом HTML) - это сделать все в одном скрипте.
который выводит форму, потом вызывается как обработчик, проверяет данные, формирует сообщения об ошибках и выводит заполненную форму.
 

Рома

был тут
А можно поподробнее про куки

про сеткук и геткук я знаю, но как записать кук при нажатии на кнопку, ведь тогда мы сразу перейдем на другую страницу, а следовательно потеряем инфу из заполненных полей???
 

Рома

был тут
Я худею, дорогая редакция.

А можно поподробнее, хотя бы на уровне блоксхем, а то я чо то не сильно понял???
 

leosha

Старожил PHPCLub
Я худею, дорогая редакция - в этом зоопарке одни удавы.

Ромик, ты невнимательно читал мой ответ?

>Можно, например, не возиться с Cookie или сессиями, а просто передать со >второй страницы на первую POST'ом все..

Принципиально же это ничем не отличается от того, когда мы все делаем в одном скрипте.. Хотя, конечно, правильней делать так, чтобы форма вызывалась через $PHP_SELF.. Тут ты прав.

2 Рома: я не знаю как это на уровне блоксхем, но выглядеть это может так:
У тебя всего один скрипт. <FORM ACTION=<? echo $PHP_SELF; ?>>
Когда вызываем его первый раз, проверяем что ничего не заполнено и рисуем форму.
Когда субмитят форму, смотрим что и как там заполнено. Если неправильно - опять рисуем форму, и значения подставляем, которые ввели нам...
Т.е. нигде ничего специально сохранять не надо. Все остается.
 

Рома

был тут
и всё-таки ещё один вопрос

ну сделал я так

<FORM ACTION=<? echo $PHP_SELF; ?>>
<input type=text name=name>
<input type=password name=password>
<input type=password name=password2>
<input type=submit>
</form>

а где в таком случае писать скрипт проверяющий на наличие ошибок?
до или после формы, а может в другом файле или где???

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

RomikChef

Guest
и еще один

Что происходит, когда юзер нажимает субмит?
Где выполняется РНР скрипт?
Что раньше делать - определять переменную или выводить ее?
Что одевают вперед - трусы или штаны?

Если ты сможешь ответить на все эти вопросы, то сможешь ответить и на свой.

Еще я тебе посоветую забыть весь этот бред про блок-схемы и спецификации и просто открыть глаза.

Кстати, какую спецификацию ты собирался читать? Дай адресок, я прочту и тебе потом своими словами расскажу.
Очень интересно, в какой спецификации описано, как думать головой и решать задачки в два действия.
 

leosha

Старожил PHPCLub
Вообщем, так:

скрипт состоит грубо говоря из ТРЕХ частей.

Первая часть - рисуем форму. В экшене ссылаемся сами на себя. Т.е. - $PHP_SELF (можно и просто имя своего скрипта указать).

Вторая: Проверяем правильность заполнения полей. Если не правильно - переходим к части три, если правильно - обрабатываем данные.

Третья: смотрим что неправильно заполнено, и опять рисуем форму, с указанием того, что надо исправить. Когда рисуем форму, в качесте value указываем то, что было введено перед этим. Т.е. вот так:
echo "<input type=text name=name value=$name>";

В принципе, третья и первая часть объединяются в одну, но смысл от этого не меняется.
 

RomikChef

Guest
Рома, не слушай его.

Леша, ты прости, но но смысл меняется Две формы - это вообще ни в какие ворота не лезет. И не надо голову дурить человеку.
Если выводить две формы, так он мог и в двух файлах делать.

1. Если поступили данные, проверяем их.
Если есть ошибки, формируем сообщение об ошибке и выводим на экран. Если ошибок нет, обрабатываем данные и локейшеном уходим туда, куда надо по заполнении формы.
2. рисуем форму, с value-ми
3. Все.

Валуе надо обязательно брать в кавычки.
Примечание. Лучше разделять РНР и HTML. Чобы не геморроиться с десятью типами кавычек и воспользоваться прелестями колор-кодинга, я бы настоятельно рекомендовал вместо
echo "<input type=text name=name value=$name>";
писать
<input type=text name=name value="<? echo $name; ?>">
 

RomikChef

Guest
Как интересно

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

Рома

был тут
Я понимаю, и наверняка там можно найти то что мне нужно, только весь вопорс в том как долго я это буду искать и как долго переводить:)))
 

Рома

был тут
А тогда вот какой вопрос:

у меня скрипт имеет имя script.phtml, я пишу:

$oshibka="";
if($page==registration)
{
$oshibka;
<form method=post action=script.phtml?page=proverka>
<input name=name>
<input name=password>
<input name=password2>
</form>
}

далее

if($page==proverka)
{
$wrongpass="Неверный пароль";
if($password!=$password2)
{
перейти к script.phtml?page=registration&name=$name&ohibka=$wrongpass
}
if($password==$password2)
{
перейти к странице с сообщением об удачной регистрации
}
}

Так вот как в данном случае сделать этот "переход к ...".
И вообще правильно ли я понял то что вы мне тут объясняли???
 
Сверху