Форум сетевых администраторов
Показаны 7 сообщений на этой странице

Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- PHP (http://netadmin.ws/forum/forumdisplay.php?forumid=6)
-- Cannot add header...и кнопка назад (http://netadmin.ws/forum/showthread.php?threadid=9335)


Помещено Revers 10-08-2004 в 20:03:

Cannot add header...и кнопка назад

Подскажите плиз!
уже совсем запарился.
проблема мне кажеться известная.
Вообщем скрипт добавляет информацию, в базу данных,
и переводит автоматически на другую страницу.
с помощью следующей строки:
echo '<script>window.location="show.php"</script>';
отображаеться нужная страница, все ок.
Но когда нажимаеш кнопку "Назад"
то скрипт опять добавляет информацию, и автоматически
переводит на эту же страницу.
и так можно добавить их одинаковых сколько хочеш .

Насколько я знаю этого глюка не будет если использовать
header("Location: show.php")
но если я использую эту функцию, то выскакивает ошибка
Cannot add header information - headers already sent by..

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

echo'<form name="myform" method="GET" action="use.php">';

но передвинуть функцию header() выше формы я никак не могу.
иначе никто этой формы и не увидит.

Подскажите как тут быть
а то уже все что знал перепробовал.

Вот кот страницы на которой находиться форма.

<?
echo'<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body bgcolor="7FB7F5">';

echo'<form name="myform" method="GET" action="use.php">';
echo'<p><b> Enter text:</b></p>';
echo'<textarea name="text" rows=10 cols=80></textarea><br><br>';
echo'<input type="submit" name="send" value="Send"><br><br>';
echo'</form>';
echo'<hr width="100%" color="ffffff">';

$msqlbase=mysql_connect("localhost","root") or die ("NOT");
mysql_select_db("base") or die ("NOT");
mysql_query("INSERT INTO table (name) VALUES ('$text')") or die("SORRY, invalid query");
mysql_close($msqlbase);

if (isset($send)){
// echo '<script>window.location="show.php"</script>';

header("Location: show.php");
}

?>


Помещено he][es 10-08-2004 в 21:13:

Revers а что слабо текст страницы в переменную засунуть?

PHP:


$body 
= "<html>
<head>
<META http-equiv=\"Content-Type" 
content=\"text/html; charset=windows-1251\">
</head>
<body bgcolor=\"7FB7F5\">"
;

if (isset(
$_POST['text'])) {
 
$msqlbase=mysql_connect("localhost","root") or die ("NOT");
mysql_select_db("base") or die ("NOT");
mysql_query("INSERT INTO table (name) VALUES ('$text')") or die("SORRY, invalid query");
mysql_close($msqlbase);
header("Location: show.php");
} else {
print 
$body;
}


? и выводить где надо... тогда и хэдер можно послать когда угодно... только это не решит твоей проблемы! Если ты вернешься назад, браузер спросит "Послать данные?" да->добавит в БД, нет выдаст форму...

__________________
Админ - вождь Апачей...


Помещено rio 11-08-2004 в 08:32:

можно сделать так : в принципе есле поле "text" уникальное то тогда :

PHP:


if(!isset($step) or step = "")
{
echo
'<form name="myform.php?step=2" method="GET" action="use.php">';
echo
'<p><b> Enter text:</b></p>';
echo
'<textarea name="text" rows=10 cols=80></textarea><br><br>';
echo
'<input type="submit" name="send" value="Send"><br><br>';
echo
'</form>';
echo
'<hr width="100%" color="ffffff">';
} else {
  if(
mysql_affected_rows(mysql_query("SELECT * FROM table where text='".$text."'")) <= 0)
{
   
mysql_query("INSERT INTO table (name) VALUES ('$text')"); 
header("Location: show.php"); 
} else {
   
header("Location: myform.php"); 
}

}


по идее , должно сработать (не прверял)

__________________
Ковчег построили дилетанты, а профессионаллы построили "Титаник" - не бойтесь спрашивать то , чего вы не знаете , а так же делать то - чего не умеете !


Помещено zerkms 11-08-2004 в 08:49:

привет всем....

с такой проблемой сталкиваются многие....

по-хорошему все твои проблемы Revers решаются вот так:

чтобы не было "headers already sent by...." у тебя должен быть header.php, который содержит все теги <html><body>.... и подлкючаться к каждой странице ДО вывода любой информации.

чтобы не отправлялась инфа повторно и не предлагалось повторно отправить данные через POST - нужно в него добавить:

_____________
header ('Cache-Control: private, pre-check=0, post-check=0, max-age=0');
header ('Expires: 0');
header ('Pragma: no-cache');
_____________

выбор за тобой - что ты сделаешь, но я бы не стал юзать тот бред, который предложил he][es - уж извини...


Помещено Revers 11-08-2004 в 19:11:

Спасибо за советы!

мне подсказали что здесь может помочь функция ob_start()
я попробовал и все здорово получилось.

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


Помещено lord 13-08-2004 в 08:03:

1. проверка получаешь ты данные после сабмита или просто выводишь форму.
2.Вывел форму, заполнил форму, Submit
3. Если получил данные, то занес в базу и сделал Location

Зачем тебе ob_start() ?


Помещено Искатель 13-08-2004 в 16:21:

---------------
Зачем тебе ob_start() ?
---------------
Ð_то ему нужно для того что бы выводить хедеры в любой части кода...

см. 1-ый пост сначала у него идут echo для вывода html кода, а потом!!!
if (isset($send)){
// echo '<script>window.location="show.php"</script>';

header("Location: show.php");
}
такой огород без об_старт просто напросто не заработает...

__________________
http://faq.pp.ru/read_mee/


Формат времени GMT. Текущее время 10:24.
Показаны 7 сообщений на этой странице

Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.