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

Гриша К.

Новичок
uliss, что-то я непонял что вы имеете ввиду, немогли бы вы пояснить.

_RVK_, вот попробовал, щас, да действительно такое сообщениея появляется, т.е. мне надо делать header, но как же мне тогда сделать сообщение о том, что регистрация прошла успешно.

ВОт посмотрите пожалуйста:
Есть страница register.php, после нажатия кнопки отправить на эту страницу передаются значени методом $_POST['var'], после этого я делаю сразуже редирект к примеру на ту же страницу, например так header("Location: ...?register=yes"), и только тогда я выдаю сообщение о том, что пользователь зарегестрирован.
Правильно ли я вас понял?

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

но знать все это тебе не помешает
Согласен с вами и спасибо за такие подробные разяъснения. Значение RFC не не понятно, не со времен думаю узнаю.
 

_RVK_

Новичок
Гриша К.
Ты правльно понял. Отображать ошибки можно по разному. Можно их передавать тектом в сессии. Можно передовать коды, а сами сообщения брать из глобального массива. То есть принять за правило делать Location после отправки, и уже отталкиваясть от этого, строить логику своего приложения. Еще раз повторю, отходить от правил можно. Это не догма. Но лучше стараться делать правильно, пусть это сначала кажется чуть сложнее.
начение RFC не не понятно,
RFC это собрание стандартов и спецификаций всех технологий интернета. Это то, от чего должны отталкиваться и чему следовать все разработчики для WEB/

-~{}~ 09.03.06 23:55:

Кстати, предвидя желание, после этого использовать сессии, где не попадя, рекомндую почитать это. Специально не даю прямой ссылки на статью про сессии, потому что там все стоит прочитать, а про сессии сам найдешь :)
 

Гриша К.

Новичок
_RVK_, спасибо за направление меня в правильное русло, так сказать. RFC добавил в избранное, в раздел программирование. : )

Спасибо за ссылку faq, уже попадал на нее, помогла при установке Mysql. Про сесси там читал, но всегда как-то через строчку. Распечатаю на бумаге и прочитаю подробно.

Я тогда оставлю все так как есть, результат об успешной регистрации будет выводиться, после отправки формы и + добавлю header, т.е. получатся у меня будет грузиться содержание страницы 2 кб, а потом будет срабатывать header, потому что недоверяю я как-то редиректам и вдруг он не сработает, тогда пользовательувидет сообщение об успешной регистрации всеравно.
 

Гриша К.

Новичок
_RVK_, вы наверное предполагаете, что я буду до header() выводить резултат к примеру используя echo 'resultat';

Посмотрите пожалуйста как я делаю, перед header() я лиш определяю переменнын со значениями, а вывод результата делаю ниже.
Я уже увидел, что когда я пытался пере header сделать какой-то вывод, то ничего не получалось.

Так как я делаю ниже, я вобщем-то ничего не меняю в текущем коде, а лиш добовляю header(). Правильно ли так будет, если так оставлю то это будет нормально?

Пример.
PHP:
<?php
include('config.php');

if ($_SERVER['REQUEST_METHOD']=='POST') {

 //.... Проверка полей формы

$reg_result = register($username, $email, $passwd);
if ($reg_result === true) {
$_SESSION['valid_user'] = $username;
$reg_result = 'Регистрация прощла успешно';
header('Location: http:/'.$_SERVER['HTTP_HOST'].'/register=true')
}


include('templates/header.html');

$template->set_filenames(array(
	'body' => 'register_body.tpl')
		);

	$template->assign_block_vars('register',array(
                                ....
		'VALUE_EMAIL' => $email)
		);

$template->pparse('body');

include('templates/footer.html');
?>
------------------
У мен сначала ничего не получалось, потому что я пытался делать так:
PHP:
<?php
include('config.php');
include('header.php');

if ($_SERVER['REQUEST_METHOD']=='POST') {
//...
echo 'регистрация прощла успешно';
header('Location: http:/'.$_SERVER['HTTP_HOST'])
}

include('footer.html');
?>
 

Vladson

Сильнобухер
После header() лучше сделать exit() а в самом header если я конечно не ошибаюсь можно смело юзать относительные пути...
 

Гриша К.

Новичок
Vladson, тут как раз получается если после header я сделаю exit, то содержание то выводиться не будет.
Я вот все думаю, что будет если header не сработает, то тогда у меня отобразиться содержание страницы об успешной регистрации всеравно.
Или я зря волнуюсь по поводу этого, всет так делают. Ну както ведь нужно предусмотреть вариант, елси header не сработал.
Может я загоняюсь.

В header('Location: register.php?register=true') можно сделать так у все будет работать. Но как-то я боюсь так использовать, я не знаю детально принцип работы этой функции.

Пример из http://php.rinet.ru/manual/ru/function.header.php
<?php
header("Location: http://www.example.com/"); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */
exit;
?>
Как же всетаки будет корректно. Я имею в виду, можно ли после header не ставить exit; а выводить содержание (2 кб в моем случае).
 

_RVK_

Новичок
я не знаю детально принцип работы этой функции
Эта функция посылает браузеру заголовок HTTP, "с просьбой" запросить другую страницу. Не сработать это не может.

exit нужно делать всегда, ибо отсылая заголовок Location ты переходишь на другую страницу. Смысла что-то делать ниже уже нет.
 

Mich

Продвинутый новичёк
После получений Location браузер перестает загружать страницу, так что можно выводить все что угодно, но пользователь этого не увидит (хотя на сервере скрипт отработает полностью). Это не столь очевидно, поэтому лучше писать exit(), т.к. именно это ожидают большинство программеров после вывода Location.
 

Гриша К.

Новичок
Mich, спасибо за разъяснение.
Все _RVK_ вы меня успокоили. Значит нет смысла предусматривать если hedaer() не сработате, потому что он может не сработать к примеру тогда когда и session_start() не сработает, а если такое происходит, то это проблемы с php к примеру. Спасибо большое вам.
Я щас еще раз читал, PHPFAQ, там пишется что session_start(); тоже посылает http заголовки, поэтому раньше у меня не получалось, когда я ставил session-start; после вывода.

Тогда вот такой вараинт думаю будет как раз правильным.

PHP:
<?php 
include('config.php'); 


if ($_SERVER['REQUEST_METHOD']=='POST') { 

 //.... Проверка полей формы 

$reg_result = register($username, $email, $passwd); 
if ($reg_result === true) { 
session_start;
$_SESSION['valid_user'] = $username; 
header('Location: http:/'.$_SERVER['HTTP_HOST'].'/register=true')
exit; 
} 

//Дальше примерно так
include('header.php'); 

if (!empty($_GET['register'])) {
echo 'Регистрация прошла успешно. Ложитесь спать.';
}

include('footer.html'); 
?>
----------------
Еще раз спасибо вам _RVK_, потому что вы мне столько рассказали правильного, вы очень помогли. : )
-----
 
Сверху