PHP

Header(); работает не правильно

Пол дня возился с header не работал. P.S.(В php я новобранец). Так вот, поднял его на самый вверх страницы и тут он сработал. Но проблема в том, что он срабатывает слишком быстро. Понимаете, настолько быстро, что не только условие не выполняется но даже страница не открывается сразу редиректит. Кто знает в чем проблема? Я хотел, чтоб он редиректил только после выполнения условия. К примеру форма регистрации. Если требования форм выполнены и данные добавлены в БД, о чём про информирует пользователя сообщением, то редиректил на главную страницу для авторизации.
Нужен пример кода сюда.
Юрий Андрейченко
Юрий Андрейченко
32 978
Лучший ответ
Андрей Вернер Попробую залить сюда напрямую. Вот:

<?$a=header("Location: http://charviz/index.php");?>
<?include("setting.php");?>









<?

if($_POST['submit']){$insert=mysqli_query($connection, "INSERT INTO `jarvis` (`login`,`password`) VALUES('chuvak', 'chuvakov')");
echo"Добавлен";
sleep(1);
$a;
exit();}

?>
Твой header отсылает браузеру инструкцию перейти на указанный адрес. Естественно, счтраница не открывается, потому что ты сам делаешь ей редирект.
http://php.net/manual/en/function.header.php
header ничего не возвращает, зачем ты пытаешься присвоить переменной результат его работы?
А находиться он должен и правда ДО любого вывода информации на страницу, потому что если ты знаешь структуру HTTP, то помнишь, что сперва идут все заголовки, потом \n\n, а потом уже текст страницы. И находясь уже в странице, невозиожно отредактировать кусок, который уже отдан веб-серверу.
Леонид Калинин
Леонид Калинин
83 273
Андрей Вернер А как возможно, чтобы в input не мог пользователь ввести пробел или цифры или знаки препинания. trim использовал в условии if(){} но ведь эта функция обрабатывает уже принятые и введенные пользователем данные. JS использовать не могу так как уже для для функции использую php, могут сработать сразу JS и PHP. Пока JS будет показывать ошибки php уже все данные отправит на сервер.
header () - это функция которая устанавливвет HTTP заголовок (тот который сервер шлет браузеру перед телом страницы) тоесть как только ты отправил что то на вывод в браузер это уже тело и заголовки изменить не получится если ты сначала хотябы один символ отправишь на вывод а после решишь поменять заголовок поэтому php напишет notice
Чтобы этого избежать надо либо закрыть вывод включив его буферизвцию функциями ob_start() и ob_end_flush () они кстати умеют исправлять косяки говнокодеров и сначала шлют заголовки а потом тело в любом случае либо как это собственно и сделано во всех нормальных движках ничего не печатать на вывод во время работы скрипта и только потом отрендрить готовую страницу в таком случае конструкция if ($redirect)header ('Location:/') сработает совершенно корректно и не матерясь
Максим
Максим
59 848