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

Форум PHP

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

 

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

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

тема: ошибка при самопереадресации
 
 автор: Kaizer131   (03.01.2009 в 15:24)   письмо автору
 
 

Доброго времени суток !
Пытаюсь решить проблему повторного добавления записи при обновлении страницы, с помощью самопереадресации ,
При этом возникла ошибка :

Warning: Cannot modify header information - headers already sent by (output started at /home/globall0/public_html/cgi-bin/doing2.php:10) in /home/globall0/public_html/cgi-bin/doing2.php on line 28

перешерстил и форум и интернет, ничего подходящего не обнаружил (попадались только советы,типа : Необходимо убрать пробелы и пустые строки перед и после скрипта (это не помогло)), подскажитегде как устранить данную ошибку.
Вот код:
<head>
<meta http-equiv="Content-Type" content="text/html; UTF-8  " />

<title>Untitled Document</title>

</head>
<body>
<?php
if ($_REQUEST['doing']) {
print 
$_REQUEST['header']."<br />";
print 
$_REQUEST['message'];
}
$user="globall0_joomla";
$pass="nippon";
$db="globall0_Joomla";
$link=mysql_connect"localhost",$user,$pass );
if (! 
$link) die("Couldn`t connect to MySql");
mysql_select_db($db,$link) or die("ERROW Select db!".mysql_error());
$text $_POST["header"];
$message $_POST["message"];
mysql_query('SET NAMES UTF8'); 
mysql_query("INSERT INTO gost VALUES ('',NOW(),'$text','$message')");
$rnd=time();
Header("Location:http://www.Сдесь адрес скрипта.php");
exit;
  
$query =  $query 'SELECT * FROM `gost` ORDER BY id  DESC LIMIT 5';  
 
$result mysql_query($query);  
  while (
$row mysql_fetch_assoc($result)): 
  
?> 
<table bgcolor="#FF6633"  width="100%">
<tr bgcolor="#00CC33">
<td width="50%">
<td>
<div>
<h1>Дата:
 <?=$row['data']?> </h1>
 <h1>Имя: <?=$row['name']?> </h1>
 </div>
 <h1>Сообщение:<?=$row['message']?></h1>
 </div>
 </td>
 </td>
 </tr>
</table>
 <? endwhile; ?> 
<form method="post" action="doing2.php">
<input type="text" name="header">
<TEXTAREA NAME="message" ROWS="20" COLS="90">Ваше сообщение</TEXTAREA>
<input type="submit" name="doing" value="Сохранить" >

</body>
</html>

  Ответить  
 
 автор: sim5   (03.01.2009 в 15:42)   письмо автору
 
   для: Kaizer131   (03.01.2009 в 15:24)
 

До Header("Location:http://....) не должно быть вывода в браузер, а у вас имеется:
<head>
<meta http-equiv="Content-Type" content="text/html; UTF-8 " />
.....
поэтому и получаете ошибку.

  Ответить  
 
 автор: Kaizer131   (03.01.2009 в 16:10)   письмо автору
 
   для: sim5   (03.01.2009 в 15:42)
 

я уже ставил его до
<head>
<meta http-equiv="Content-Type" content="text/html; UTF-8 " />
все равно ошибка :(
Может не там его распологаю?

Вот варианты как я делал:
1
<?php
$rnd
=time();
Header("Location:http://www.global-live.net/cgi-bin/doing2.php");
exit;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; UTF-8  " />

<title>Untitled Document</title>

</head>
<body>

2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<?php
$rnd
=time();
Header("Location:http://www.global-live.net/cgi-bin/doing2.php");
exit;
?>

<head>
<meta http-equiv="Content-Type" content="text/html; UTF-8  " />

<title>Untitled Document</title>

</head>
<body>


3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php
$rnd
=time();
Header("Location:http://www.global-live.net/cgi-bin/doing2.php");
exit;
?>

<meta http-equiv="Content-Type" content="text/html; UTF-8  " />

<title>Untitled Document</title>

</head>
<body>

  Ответить  
 
 автор: sim5   (03.01.2009 в 16:33)   письмо автору
 
   для: Kaizer131   (03.01.2009 в 16:10)
 

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

PS. Хеопс, ну когда же на форуме появиться нумерация кода? Ну очень полезно это будет, остальное это уже сервис (можно за отд. плату :)).

  Ответить  
 
 автор: Kaizer131   (03.01.2009 в 16:44)   письмо автору
 
   для: sim5   (03.01.2009 в 16:33)
 

У меня при первом варианте выдаёт пустую страницу ...почему-то :(

  Ответить  
 
 автор: SteAlzzer   (03.01.2009 в 16:57)   письмо автору
 
   для: Kaizer131   (03.01.2009 в 16:44)
 

насколько помню... PHP - регистрозависимый язык... попробуй не Header(); , а просто header();

  Ответить  
 
 автор: Trianon   (03.01.2009 в 17:16)   письмо автору
 
   для: SteAlzzer   (03.01.2009 в 16:57)
 

Лишь бы ляпнуть.
Ну если вы чувствуете, что помните не на 100%, то почему советуете другим? Почему сами то не попробуете?!

  Ответить  
 
 автор: Николай2357   (03.01.2009 в 17:17)   письмо автору
 
   для: SteAlzzer   (03.01.2009 в 16:57)
 

Нет, работают оба варианта. Если пустая страница, то есть нотиса нет, то значит переадресация произошла. Нужно тот файл смотреть, куда переадресовано.
Упс, прошу прощения, ничего не переадресовано. Там хидер кривой просто.

  Ответить  
 
 автор: sim5   (03.01.2009 в 17:21)   письмо автору
 
   для: Kaizer131   (03.01.2009 в 16:44)
 

Хидер не занимается выводом той страницы, куда его попросили перейти, ему только перейти, а дальше хоть трава не расти. Разбирайтесь с кодом страницы, на которую идет перенаправление.

  Ответить  
 
 автор: Kaizer131   (03.01.2009 в 17:27)   письмо автору
 
   для: sim5   (03.01.2009 в 17:21)
 

Она должна перенаправлять на саму себя, но без повторного добавления записи в БД
сменил на нижний регистр, страница отображается , но после заполнения формы и нажатия на кнопку отправить , страница долго перегружается и процес "замирает" , добавление записи непроисходит (шкала загрузки страницы зависает в конце )

  Ответить  
 
 автор: sim5   (03.01.2009 в 17:30)   письмо автору
 
   для: Kaizer131   (03.01.2009 в 17:27)
 

Ну если на саму себя, то структура кода страницы в корне не верна - вы просто "зациклили" код страницы. У вас нет условий проверки, что произошел переход, да и вообще, не так нужно строить сам код. Подумайте сами, как все должно происходить в этом случае, и как найдете ответ на этот вопрос, правильно построите структуру кода.

  Ответить  
 
 автор: Николай2357   (03.01.2009 в 17:31)   письмо автору
 
   для: Kaizer131   (03.01.2009 в 17:27)
 

Так я и говорю. Вы ж зациклили страницу. Ухожу, ухожу )))) Не буду мешать.

  Ответить  
 
 автор: Kaizer131   (03.01.2009 в 17:55)   письмо автору
 
   для: Николай2357   (03.01.2009 в 17:31)
 

В РНР я не мостак, хотя вовсе не дурак,
Я же только изучаю, я ж ещё не так,не сяк,
Коль страницу я зациклил, понимаю, мой косяк.
Только как мне в скором ритме,
Все наладить...головняк...

  Ответить  
 
 автор: sim5   (03.01.2009 в 18:14)   письмо автору
 
   для: Kaizer131   (03.01.2009 в 17:55)
 

Для чего делается перенаправление (в данном случае на саму себя)? Первый случай, это сбросить GET/POST данные как защита от повторной записи в базу. Второй случай, это какой либо поэтапный прием данных от пользователя. И в том и во втором случае нужно опредлять, что произошел переход на страницу, и если он произошел, то выполнять действия определенные этим переходом. Для первого случая, это будет просто сигналом того, что данные от формы успешно получены и добавлены в базу, поэтому что-то можно сообщить пользователю по этому поводу и завершить работу скрипта.
Когда нужно выводить форму пользователю? Естественно только в двух случаях - первый, это первичная загрузка страницы, и второй, при ошибках ввода в форму. Зная о том, что перенаправлению не должен предшествовать никакой вывод в браузер пользователя, логично разделить обработку формы и условий перехода от вывода в браузер.
Вот теперь, зная что вы должны сделать, сядьте и без всякой спешки, подумайте, как все это связать в кучу.

  Ответить  
 
 автор: Николай2357   (03.01.2009 в 18:14)   письмо автору
 
   для: Kaizer131   (03.01.2009 в 17:55)
 

Вы возьмите принт реквеста
И поставьте в нужном месте.
Да и теги <head>,<body>
Быть должны пониже вроде...
На чтоб страница Ваша
Не болталась как ка****
перед хидером локашен
if поставьте - только нашим.
Вот и будет лепота.
А не эта суета...

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

  Ответить  
 
 автор: Kaizer131   (03.01.2009 в 18:47)   письмо автору
 
   для: Николай2357   (03.01.2009 в 18:14)
 

Начинаю собирать в кучу,
в целом все выглядит так, на странице отображаются пять последних записей из БД, под ними форма, данные из которой записываются в БД. Самопереадресация нужна для недопущения повторного добавления записи

  Ответить  
 
 автор: Николай2357   (03.01.2009 в 18:49)   письмо автору
 
   для: Kaizer131   (03.01.2009 в 18:47)
 

Послушайте sim5. Он дело говорит.

  Ответить  
 
 автор: nek-v   (04.01.2009 в 17:58)   письмо автору
 
   для: Kaizer131   (03.01.2009 в 15:24)
 

Ну а что мешает делать переадресацию/обновление с помощью meta тегов?

  Ответить  
 
 автор: Kaizer131   (07.01.2009 в 08:01)   письмо автору
 
   для: nek-v   (04.01.2009 в 17:58)
 

а это как ?

  Ответить  
 
 автор: Николай2357   (07.01.2009 в 08:29)   письмо автору
 
   для: Kaizer131   (07.01.2009 в 08:01)
 

<meta http-equiv='refresh' content='0;url=http://www.global-live.net/cgi-bin/doing2.php'>
но это Вам вряд ли поможет.

  Ответить  
 
 автор: Kaizer131   (07.01.2009 в 13:27)   письмо автору
 
   для: Николай2357   (07.01.2009 в 08:29)
 

работает, все сделал но без мета тегов, а описанный вами метод знаю, просто не использовал её т.к это неподходит к моей задаче

  Ответить  
Rambler's Top100
вверх

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