Вместо 2-х файлов, один, с условием if($_POST!=false). Ваше мнение.

Гриша К.

Новичок
Вместо 2-х файлов, один, с условием if($_POST!=false). Ваше мнение.

Здравствуйте.
Хотелбы узнать ваше мнения по пводу такого вот метода.

Есть к примеру страница 'register.php', содержащая регистрационную форму, после нажатия на кнопку регистрация, данные методом POST, отправляются на страницу 'register_new.php'? там происходит проверка полей формы.

Чтобы не делать два файла, я решил сделать так:

делаю только один файл registr.php,
PHP:
if($_POST!=false)
{
/* Вызываю функции проверки полей и записи нового пользователя в БД */
}
else
/* Вывожу форму регистрации*/
Тоесть после нажатия кнопки отправить, данные отправляются на эту же страницу registr.php.

Практикуется ли в программировании такой метод работы, считается ли этонормальным и корректным.

-----------------------
И еще сразу хотел бы узнать ваше мнение, что вы думаете по пвоводу того, если к примеру пользователь не запонил хотя бы одно поле регистрационной формы (их все 4), то никаких сообщений ему не выводится, т.е. он нажимает, отправить, а форма не отправлятся.
 

VBart

Новичок
И еще сразу хотел бы узнать ваше мнение, что вы думаете по пвоводу того, если к примеру пользователь не запонил хотя бы одно поле регистрационной формы (их все 4), то никаких сообщений ему не выводится, т.е. он нажимает, отправить, а форма не отправлятся.
А вы сами то что думаете? Или после того как люди становятся программистами они перестают быть пользователями? Так вот я как пользователь, думаю, что таким веб-мастерам надо голову откручивать... (извините за резкость)
 

_RVK_

Новичок
Практикуется ли в программировании такой метод работы
Да, широко.

Только ты делаешь неправильно. А правильно так:

1. if (isset($_POST))....
еще правильнее:
2. if ($_SERVER['REQUEST_METHOD'] == 'POST')...

-~{}~ 09.03.06 20:54:

Да, еще совет. Включи отображение ошибок:
в php.ini
dislplay_errors = On;
error_reporting = E_ALL
 

Гриша К.

Новичок
_RVK_, спасибо, теперь смогу спокойно так делать. А то два два файла, кода немного (70 строк для 2-х файлов), лучше чтобы один.
Забыл я что-то про isset.

Решил так сделать

PHP:
echo 'REQUEST_METHOD = '.$_SERVER['REQUEST_METHOD'];
echo '<br> POST = '.isset($_POST)

if(isset($_POST)) 
{ 
/* Вызываю функции проверки полей и записи нового пользователя в БД */ 
} 
else 
/* Вывожу форму регистрации*/
Так вот заходя на эту страницу, учитывая то что кнопку отправитья не нажимал, получается так.

Код:
REQUEST_METHOD = GET // Все нормально
POST = 1 // Не совсем понимаю, почему true

if(isset($_POST)) //Соответсвенно это условие выполняется.
Если делать так if(!empty($_POST)), то нормально, но думаю как лучше так, или вот так
if ($_SERVER['REQUEST_METHOD'] == 'POST') или всетаки без разницы
 

VBart

Новичок
Моя думать, что $_POST создается всегда, в независимости от типа запроса.

-~{}~ 09.03.06 21:03:

_RVK_ на пару секунд опредил...
 

_RVK_

Новичок
Вообще то я первым примером приследовал цель напомнеить, про isset, но немного неудачно.
 

Гриша К.

Новичок
VBart, спасибо за разъяснение.

_RVK_, всеравно спасибо, вы меня и успокоили и новые варианты привели.

Последний вопрос?
А вот когда например пользователь нажимает на кнопку регистрации, но какое-то поле введено неправильно, то обычно над формой регистрации высвечивается сообщение об ошибке, а те поля которые были заполнены так и остаются (кроме пароля).
Это делается примерно так?
'<input type="text" name="email" value="'.$_POST['email'].'" maxlength="100">'

-~{}~ 09.03.06 21:42:

-----------------
Я раньше все свои формы проверял javascriptom, потом кто-то подключился к моей форме, и наделал мне пустых сообщений (заказов), в базе муть всякая записалась. Тогда-то я и догнал, что полюбому нужно проверять сначало при помощи php все, я уж потом как угодно.
 

VBart

Новичок
Это делается примерно так?
Примерно да.

Тогда-то я и догнал, что полюбому нужно проверять сначало при помощи php все, я уж потом как угодно.
Наверное такой учебник по PHP, где об этом не было сказано - надо еще поискать. Так что мой совет - читайте книжки. =)
 

Гриша К.

Новичок
VBart, спасибо за разяснение.

Ну вот так вот думаю будет правильно.
PHP:
    $email = '';
if(!empty($_POST)) {
    $email = $_POST['email'];
}

echo '<input type="text" name="email" value="'.$email.'" maxlength="100">';
Наверное такой учебник по PHP, где об этом не было сказано - надо еще поискать. Так что мой совет - читайте книжки. =)
Книжки-то у меня есть, только я читал их кусками, торопился, поэтому, не все нужное знал. Ну щас я уже вроде все основы прочитал, все попробовал, ну за год работы, так что теперь это понимаю. Книжки читать нужно обяхательно.
 

_RVK_

Новичок
а те поля которые были заполнены так и остаются
Это делается примерно так?
'<input type="text" name="email" value="'.$_POST['email'].'" maxlength="100">'
Не совсем. То есть это самый простой вариант, но имеющий массу недостатков. Все дело в том, что после отправки формы, нужно всегда делать редирект (Отправлять заголовок Location). Об этом говорит RFC 2616. Так же, этого поведения ожидают большенство браузеров, неадекватно реагируя на попытку обновить страницу, сформированную отправленной формой.

Так что, этот вариант приемлем, но все же является неправильным.
 

Гриша К.

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

Гриша К.

Новичок
_RVK_, спасибо, только что увидел сообщение. А не могли бы вы пояснить примером.

-~{}~ 09.03.06 22:06:

VBart, я подумал, что вы имеете ввиду, что примерно так, потому что не предусмотрен тот вариант, то если переменной нету, то будет выводится сообщение (ошибка) об этом. И вот предусмторел (всегда примерно так делаю).
Но выходит что и этот вариант неправильный.
Привидите пожалуйста пример правильного варианта.
 

_RVK_

Новичок
всегда примерно так делаю
И это верно.

Но лучше так:
PHP:
$_POST['var'] = isset($_POST['var']) ? $_POST['var'] : '';
Насчет примера. Вот замечательная тема. http://phpclub.ru/talk/showthread.php?s=&threadid=61053

Еще раз хочу заметить, что твой пример не является неверным. Так делают многие, но он имеет массу недостатков, на которые можно наплевать, но можно и решить.
 

Гриша К.

Новичок
_RVK_, спасибо огромное.
Лучше сокращать недостатки до минимума.
Я кстати таким ведь образом проверяю переменные get, а с post'om не додумался.

Тему по ссылке прочитал, но что то я там запутался.
И не понимаю, зачем нужен header после отправки. Вот у меня если пользователь нажмет обновить на странице с результатом, ничего у него повторно не запишется в БД, выдастся сообщение, что такой пользователь уже есть.
Так как у меня форма не сложная (e-mail, имя, пароль, подтверждение) буду делать так как есть.
 

uliss

Новичок
Если на форме присутствует кнопка submit :) (а это бывает часто) - <input type="submit" name="submit" value="Send" /> - я делаю вот так
PHP:
if(isset($_POST['submit'])){
    do_smth();
}
else
    print_form();
 

_RVK_

Новичок
И не понимаю, зачем нужен header после отправки
Я уже сказал. Об этом говорит RFC, можешь почитать. Этого документа нужно прислушиваться. В результате неследования этим стандартам ты получаешь сообщение браузера при обновлении страницы, странные сообщения типа "Эта страница была сформированна..." при нажатии кнопки Back... И так далее. Может в твоем случае пренебрежение стандартами и оправданно, но знать все это тебе не помешает :)
 
Сверху