![]() |
Показаны 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)
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");
}
?>
Revers а что слабо текст страницы в переменную засунуть?
$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;
}
__________________
Админ - вождь Апачей...
можно сделать так : в принципе есле поле "text" уникальное то тогда :
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");
}
}
__________________
Ковчег построили дилетанты, а профессионаллы построили "Титаник" - не бойтесь спрашивать то , чего вы не знаете , а так же делать то - чего не умеете ! 
привет всем....
с такой проблемой сталкиваются многие....
по-хорошему все твои проблемы 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 - уж извини...
Спасибо за советы!
мне подсказали что здесь может помочь функция ob_start()
я попробовал и все здорово получилось.
и проще всего, мне кажеться.
правда еще мне говорили что с этой функцией надо быть осторожным.
1. проверка получаешь ты данные после сабмита или просто выводишь форму.
2.Вывел форму, заполнил форму, Submit
3. Если получил данные, то занес в базу и сделал Location
Зачем тебе ob_start() ?
---------------
Зачем тебе 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.