Непонятки с формами на Php
<?
global $text;
global $prov;
print "
<center><h4>ГОСТЕВАЯ КНИГА</h4></center>
";
@mysql_connect("localhost","web","") or die("Could not connect to MYSQL server!");
@mysql_select_db("guest") or die("Could not select company database!");
print "<form method=post>";
print "<textarea name=text rows=3 cols=40 Value=\"Введите сообщение...\">";
print "</textarea>";
print "<input type=hidden name=prov value=\"1234567890\">";
print "<input type=submit value=Отправить>";
print "</form>";
if ($prov=="1234567890") {
$query1="INSERT INTO guest VALUES('$text')";
mysql_query($query1) or die("mysql_error!");
$query2="SELECT*FROM guest";
$result=mysql_query($query2) or die("mysql_error!");
while ($row=mysql_fetch_array($result)):
print $row['text'];
print "
";
endwhile;
}
mysql_close();
?>
Вообщем проблема такая: Когда я пытаюсь обновить страницу, выскакивает сообщение IE: "Не удаётся обновить страницу без повторной отправки данных. Нажмите соответствующую кнопку для повторной отправки данных или отмените операцию для возврата к открываемой странице."
Когда я нажимаю ПОВТОР, то в происходит повторная отправка данных и в БД записывается то, что было введено раньше...
Подскажите пожалуйста, как этого избежать... Необходимо, чтобы при обновлении страницы никаких сообщений не выводилось и чтобы гостевуха нормально работала...
global $prov;
print "<center><h4>ГОСТЕВАЯ КНИГА</h4></center>";
@mysql_connect("localhost","web","")
or die("Could not connect to MYSQL server!");
@mysql_select_db("guest")
or die("Could not select company database!");
print "<form method=post action=thisfile.php>";
print "<textarea name=text rows=3 cols=40 Value=\"Введите сообщение...\">";
print "</textarea>";
print "<input type=hidden name=prov value=\"addrecord\">";
print "<input type=submit value=Отправить>";
print "</form>";
if ($prov=="addrecord") {
$query1="INSERT INTO guest VALUES('$text')";
mysql_query($query1) or die("mysql_error!");
header("Location: thisfile.php");
exit;
}
$query2="SELECT*FROM guest";
$result=mysql_query($query2) or die("mysql_error!");
while ($row=mysql_fetch_array($result)) {
print $row['text'];
print "
";
}
mysql_close();
Вот так:
Я изменил:
<?
global $text;
global $prov;
print "<center><h4>ГОСТЕВАЯ КНИГА</h4></center>";
@mysql_connect("localhost","web","") or die (mysql_error());
@mysql_select_db("guest") or die(mysql_error());
?>
<form method ="post" action="forum.php">
<input type = "hidden" name = "prov" value = "addrecord">
<textarea name="text" rows="3" cols="40" Value="Введите сообщение..."></textarea>
<input type="submit" value="Отправить">
</form>
<?
if ($prov=="addrecord") {
$query1="INSERT INTO guest VALUES('$text')";
mysql_query($query1) or die(mysql_error());
header ("Location: forum.php");
exit;
}
$query2="SELECT*FROM guest";
$result=mysql_query($query2) or die(mesql_error());
while ($row=mysql_fetch_array($result)) {
print $row['text'];
print "
";
}
mysql_close();
?>
В результате, после отправки формы выдаётся такая ошибка:
Warning: Cannot modify header information - headers already sent by (output started at z:\home\footstats.ru\www\forum.php:5) in z:\home\footstats.ru\www\forum.php on line 22
Подскажите, пожалуйста, что означает эта ошибка?
перед header() не должно быть никаких выводов типа print и echo:
global $prov;
@mysql_connect("localhost","web","")
or die("Could not connect to MYSQL server!");
@mysql_select_db("guest")
or die("Could not select company database!");
if ($prov=="addrecord") {
$query1="INSERT INTO guest VALUES('$text')";
mysql_query($query1) or die("mysql_error!");
header("Location: thisfile.php");
exit;
}
print "<center><h4>ГОСТЕВАЯ КНИГА</h4></center>";
print "<form method=post action=thisfile.php>";
print "<textarea name=text rows=3 cols=40 Value=\"Введите сообщение...\">";
print "</textarea>";
print "<input type=hidden name=prov value=\"addrecord\">";
print "<input type=submit value=Отправить>";
print "</form>";
$query2="SELECT*FROM guest";
$result=mysql_query($query2) or die("mysql_error!");
while ($row=mysql_fetch_array($result)) {
print $row['text'];
print "
";
}
mysql_close();
И не забудь проверить передавыаемые переменные на наличие неправильных символов. А то эксплоит зашлют, маргнуть не успеешь.
Ок. Спасибо большое... Вроде всё работает...
Только не могли бы вы объяснить смысл header() и для чего он нужен?
1. заголовок
2. тело дукомента
в заголовке передается код ответа, кукисы, тип документа и т.п.
заголовок от тела отделяется ПУСТОЙ СТРОКОЙ.
в теле передается сам документ (например HTML)
так вот, PHP Должен отправит заголовок серверу до того, как ты начнешь что-то выводить в тело:
Вот пример:
Date: Thu, 13 Jan 2005 11:10:50 GMT
Server: Apache/1.3.28 (Unix) PHP/4.3.4RC1
X-Powered-By: PHP/4.3.4RC1
Connection: close
Content-Type: text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<TITLE>CodeNet - все для программиста.</TITLE>
чтобы сделать редирект, нужно послать следущий заголовок, а тело документа оставить пустым:
Location: /document.html
так вот если сделать print "test" то получится следующее
Date: Thu, 13 Jan 2005 11:10:50 GMT
Server: Apache/1.3.28 (Unix) PHP/4.3.4RC1
X-Powered-By: PHP/4.3.4RC1
Connection: close
Content-Type: text/html
test
Location: /document.html
и функция выдаст warning, что заголовок уже отправлен, и функция header ничего дописать к нему не может!