Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Warning: Cannot modify header information - headers already sent by
 
 автор: hornet   (24.10.2007 в 19:55)   письмо автору
 
 

Вопрос такой:
Как перейти на новую страницу из php?
Через header не получается! Пишет следующее:

Warning: Cannot modify header information - headers already sent by (output started at z:\home\microlab\www\reg.php:14) in z:\home\microlab\www\reg.php on line 218

Я так понимаю, что если один раз послал сообщение, то второй раз нельзя? или я не прав? Подскажите!

   
 
 автор: sim5   (24.10.2007 в 19:58)   письмо автору
 
   для: hornet   (24.10.2007 в 19:55)
 

Вы скорее всего ниразу не отправили. Перед передачей заголовков не должно быть вывода в браузер - ничего, даже пробела на странице с кодом.

   
 
 автор: hornet   (24.10.2007 в 20:12)   письмо автору
 
   для: sim5   (24.10.2007 в 19:58)
 

Привиду пример из кода, потом что я не понял как можно тогда сделать подругому:
<?php
if (!empty($_POST['creat'])) {
$p=$_POST['pas'];
$rep=$_POST['repas'];
$l=$_POST['login'];
$c=$_POST['company'];
$fio=$_POST['fio'];
$phon=$_POST['phon'];
$fax=$_POST['fax'];
$mail=$_POST['mail'];
$adress=$_POST['adress'];
$link = mysql_connect("microlab","root","");
if ($link) {
$sql = "Select * from users where login='$l'";
$result = mysql_db_query("microlab",$sql,$link);
$num_rows = mysql_num_rows($result);
if ($num_rows==0) {
$ch=0;}
else {
$ch=1;}}

if ($c<>"" AND $fio<>"" AND $phon<>"" AND $mail<>"" AND $l<>"" AND $p<>"" AND $rep<>"" AND $p==$rep AND $ch==0) {
$check=1;}
else {
$check=2;}
}
else {
$check=3;}
switch ($check)
{
case "1":
$link = mysql_connect("microlab","root","");
if ($link) {
$sql="Insert into users (login,password) values('$l','$p')";
mysql_db_query("microlab",$sql,$link);
$sql="Insert into userchar (company,contact,phon,fax,mail,adress) values('$c','$fio','$phon','$fax','$mail','$adress')"; mysql_db_query("microlab",$sql,$link);
$sql="Select * from users where login='$l'";
$result = mysql_db_query("microlab",$sql,$link);
$array = mysql_fetch_array($result,MYSQL_NUM);
$znac=$array[0];
if (!isset($id['start'])) {
$_SESSION['id']=$znac;
$_SESSION['auth']=0;
}
}
mysql_close($link);
header('Location: http://microlab/enter.php');

//require("registration/ankenter.php");
break;
case "2":
require_once("registration/ankreg.php");
break;
case "3":
require_once("registration/ankreg.php");
break;}
?>

В общем это reg.php в нее подгружается ankreg.php, которая содержит форму с полями для заполнения. Далее в ankreg.php происходит заполнение полей и проверка на JS заполнение полей и отправка на reg.php где происходит запись в БД и от сюда я хочу вызвать новую страницу enter.php где будет предложено ввести свой логин и пароль. Вопрос: как можно это сделать!! Если я использую require_once то он подгружает в reg.php enter.php, enter.php, а она в свою очередь подгружат форму для заполнения формы для входа!!!

   
 
 автор: sim5   (24.10.2007 в 20:21)   письмо автору
 
   для: hornet   (24.10.2007 в 20:12)
 

Зачем так много писать. Если header('Location: http://microlab/enter.php'); - это 218 строка, то где остальные строки? Или ошибка не из этого файла?
Вы можете прописать header('Location: url') где угодно, главное чтобы перед ним не было вывода в браузер - пустой строки или пробела даже перед <?
Это первая из причин ошибок связанных с передачей заголовков.

   
 
 автор: xD3MoN1   (25.10.2007 в 00:25)   письмо автору
 
   для: hornet   (24.10.2007 в 19:55)
 

Вариант 1 - ява-скрипт,
вариант 2 -
echo '<meta http-equiv="refresh; content=0">

   
 
 автор: cheops   (25.10.2007 в 12:03)   письмо автору
 
   для: hornet   (24.10.2007 в 19:55)
 

Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.

http://www.softtime.ru/group/id_group=12

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования