|
|
|
| Доброго времени суток !
Пытаюсь решить проблему повторного добавления записи при обновлении страницы, с помощью самопереадресации ,
При этом возникла ошибка :
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>
|
| |
|
|
|
|
|
|
|
для: Kaizer131
(03.01.2009 в 15:24)
| | До Header("Location:http://....) не должно быть вывода в браузер, а у вас имеется:
<head>
<meta http-equiv="Content-Type" content="text/html; UTF-8 " />
.....
поэтому и получаете ошибку. | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: Kaizer131
(03.01.2009 в 16:10)
| | Правильно 1, и, если более нет вывода перед пердачей заголовка, то проблем не будет.
PS. Хеопс, ну когда же на форуме появиться нумерация кода? Ну очень полезно это будет, остальное это уже сервис (можно за отд. плату :)). | |
|
|
|
|
|
|
|
для: sim5
(03.01.2009 в 16:33)
| | У меня при первом варианте выдаёт пустую страницу ...почему-то :( | |
|
|
|
|
|
|
|
для: Kaizer131
(03.01.2009 в 16:44)
| | насколько помню... PHP - регистрозависимый язык... попробуй не Header(); , а просто header(); | |
|
|
|
|
|
|
|
для: SteAlzzer
(03.01.2009 в 16:57)
| | Лишь бы ляпнуть.
Ну если вы чувствуете, что помните не на 100%, то почему советуете другим? Почему сами то не попробуете?! | |
|
|
|
|
|
|
|
для: SteAlzzer
(03.01.2009 в 16:57)
| | Нет, работают оба варианта. Если пустая страница, то есть нотиса нет, то значит переадресация произошла. Нужно тот файл смотреть, куда переадресовано.
Упс, прошу прощения, ничего не переадресовано. Там хидер кривой просто. | |
|
|
|
|
|
|
|
для: Kaizer131
(03.01.2009 в 16:44)
| | Хидер не занимается выводом той страницы, куда его попросили перейти, ему только перейти, а дальше хоть трава не расти. Разбирайтесь с кодом страницы, на которую идет перенаправление. | |
|
|
|
|
|
|
|
для: sim5
(03.01.2009 в 17:21)
| | Она должна перенаправлять на саму себя, но без повторного добавления записи в БД
сменил на нижний регистр, страница отображается , но после заполнения формы и нажатия на кнопку отправить , страница долго перегружается и процес "замирает" , добавление записи непроисходит (шкала загрузки страницы зависает в конце ) | |
|
|
|
|
|
|
|
для: Kaizer131
(03.01.2009 в 17:27)
| | Ну если на саму себя, то структура кода страницы в корне не верна - вы просто "зациклили" код страницы. У вас нет условий проверки, что произошел переход, да и вообще, не так нужно строить сам код. Подумайте сами, как все должно происходить в этом случае, и как найдете ответ на этот вопрос, правильно построите структуру кода. | |
|
|
|
|
|
|
|
для: Kaizer131
(03.01.2009 в 17:27)
| | Так я и говорю. Вы ж зациклили страницу. Ухожу, ухожу )))) Не буду мешать. | |
|
|
|
|
|
|
|
для: Николай2357
(03.01.2009 в 17:31)
| | В РНР я не мостак, хотя вовсе не дурак,
Я же только изучаю, я ж ещё не так,не сяк,
Коль страницу я зациклил, понимаю, мой косяк.
Только как мне в скором ритме,
Все наладить...головняк... | |
|
|
|
|
|
|
|
для: Kaizer131
(03.01.2009 в 17:55)
| | Для чего делается перенаправление (в данном случае на саму себя)? Первый случай, это сбросить GET/POST данные как защита от повторной записи в базу. Второй случай, это какой либо поэтапный прием данных от пользователя. И в том и во втором случае нужно опредлять, что произошел переход на страницу, и если он произошел, то выполнять действия определенные этим переходом. Для первого случая, это будет просто сигналом того, что данные от формы успешно получены и добавлены в базу, поэтому что-то можно сообщить пользователю по этому поводу и завершить работу скрипта.
Когда нужно выводить форму пользователю? Естественно только в двух случаях - первый, это первичная загрузка страницы, и второй, при ошибках ввода в форму. Зная о том, что перенаправлению не должен предшествовать никакой вывод в браузер пользователя, логично разделить обработку формы и условий перехода от вывода в браузер.
Вот теперь, зная что вы должны сделать, сядьте и без всякой спешки, подумайте, как все это связать в кучу. | |
|
|
|
|
|
|
|
для: Kaizer131
(03.01.2009 в 17:55)
| | Вы возьмите принт реквеста
И поставьте в нужном месте.
Да и теги <head>,<body>
Быть должны пониже вроде...
На чтоб страница Ваша
Не болталась как ка****
перед хидером локашен
if поставьте - только нашим.
Вот и будет лепота.
А не эта суета...
Чесно говоря не так просто понять, чего вы хотите добится этим кодом, но блоки нужно делить на логический и "графический". То есть сначала дайте отработать скрипту, а потом делайте вывод. | |
|
|
|
|
|
|
|
для: Николай2357
(03.01.2009 в 18:14)
| | Начинаю собирать в кучу,
в целом все выглядит так, на странице отображаются пять последних записей из БД, под ними форма, данные из которой записываются в БД. Самопереадресация нужна для недопущения повторного добавления записи | |
|
|
|
|
|
|
|
для: Kaizer131
(03.01.2009 в 18:47)
| | Послушайте sim5. Он дело говорит. | |
|
|
|
|
|
|
|
для: Kaizer131
(03.01.2009 в 15:24)
| | Ну а что мешает делать переадресацию/обновление с помощью meta тегов? | |
|
|
|
|
|
|
|
для: nek-v
(04.01.2009 в 17:58)
| | а это как ? | |
|
|
|
|
|
|
|
для: Kaizer131
(07.01.2009 в 08:01)
| |
<meta http-equiv='refresh' content='0;url=http://www.global-live.net/cgi-bin/doing2.php'>
| но это Вам вряд ли поможет. | |
|
|
|
|
|
|
|
для: Николай2357
(07.01.2009 в 08:29)
| | работает, все сделал но без мета тегов, а описанный вами метод знаю, просто не использовал её т.к это неподходит к моей задаче | |
|
|
|