|
|
|
| Есть две страницы:
<html>
<head>
<title></title>
</head>
<body>
<h3>-----</h3>
<center><img src="photo.JPG" style="border:1px solid red" width='680' height='500' alt="studencheski" border=0></center>
<?php
$file = fopen("add.txt","a");
readfile("add.txt");
fclose($file);
?>
<form action="index_add.php" name="add" onsubmit="add()" method="GET">
---: <br><input type="text" name="nick"><br>
----:<br><TEXTAREA name="koment"></TEXTAREA>
<input type="submit" value="----">
</form>
</body>
</html>
|
и
<html>
<head>
<title></title>
</head>
<body>
<center><img src="photo.JPG" style="border:1px solid red" width='680' height='500' alt="studencheski" border=0></center>
<?php
$file = fopen("add.txt","a");
if($file){
fwrite ( $file, "----------------------");
fwrite ( $file, '<br>');
fwrite ( $file, '<table width="300px"><tr><td style="background-color: #CCCCCC">');
fwrite ( $file, '<font color=red>');
fwrite ( $file, $_GET['nick']);
fwrite ( $file, '</font>');
fwrite ( $file, '</td></tr>');
fwrite ( $file, '<br>');
fwrite ( $file, '<tr><td style="background-color: #000000">');
fwrite ( $file, '<font color=#FFFFFF>');
fwrite ( $file, $_GET['koment']);
fwrite ( $file, '</font>');
fwrite ( $file, '</td></tr></table>');
fwrite ( $file, '<br>');
fwrite ( $file, "----------------------");
fwrite ( $file, '<br>');
fwrite ( $file, '<br>');
fclose($file);
}
?>
<form action="index.php" name="add" method="GET">
<?php
$nick = $_GET['nick'];
print "---- $nick, ----------------------------!"
?>
<input type="submit" value="---">
</form>
</body>
</html>
|
После того как на первой (index.php) комментируешь и нажимаешь сабмит, то по переходу на страницу (index_add.php) выводиться сообщение "Спасибо ---,ваш ком. добавлен!"
Загвостка в том, что если нечайно обновить вторую страницу, когда отправил запрос, то выводиться 2 одинаковых!
Вопрос: "Как сделать, что бы этого небыло!?" :)
Заранее спасибо! | |
|
|
|
|
|
|
|
для: Misterio
(26.04.2008 в 14:40)
| | Делать перенаправление после удачной оперции, чтобы сбросить GET, POST. | |
|
|
|
|
|
|
|
для: sim5
(26.04.2008 в 15:01)
| | а по подробнее... | |
|
|
|
|
|
|
|
для: Misterio
(26.04.2008 в 16:40)
| | Ну а что тут может быть продробного, принцип прост - после принятия формы, если все ОК, сохраняем данные и переправляем пользователя на другую страницу, например:
<?
header('location: check.php');
?>
|
где выдаем результат пользователю. Либо можно делать перенаправление на ту же самую страницу, но уже передавая параметр в url, проверяя который, выполянять соответсвтвующие операции, например:
<?
//определяем сообщение об успешном принятии формы
$ok = isset($_GET['ok']) ? true : false;
//определяем значение полей формы
$var1 = isset($_POST['var1']) ? $_POST['var1'] : '';
$var2 = isset($_POST['var2']) ? $_POST['var2'] : '';
if ($ok) {
//форма принята на ОК, завершение
echo "Выше сообщение принято";
//и т.п..
} else {
if (isset($_POST["complete"])) {
//проверяем получение формы
if ($var1 && $var2) {
//ошибок нет, сохраняем $var1, $var2
//и делаем перенапраление на себя
header('location: main.php?ok=1');
} else $error = "ERROR"; //иначе устанавливаем ошибку
}
//выводим форму по умолчанию и ошибках
if ($error) print "<p>".$error."</p>";
print "<form action=\"main.php\" method=\"post\">
<input type=\"text\" name=\"var1\" value=".$var1."><br>
<input type=\"text\" name=\"var2\" value=".$var2."><br>
<input type=\"submit\" name=\"complete\" value=\"Send\">
</form>";
}
?>
|
Выбирайте как вам нужно и используйте этот принцип. | |
|
|
|
|
|
|
|
для: sim5
(26.04.2008 в 17:54)
| | Следующий вопрос будет про headers already sent by ... | |
|
|
|
|
|
|
|
для: Atheist
(26.04.2008 в 20:06)
| | Все возможно, но будем надеяться, что товарищ знает... ) | |
|
|
|
|
|
|
|
для: sim5
(26.04.2008 в 20:23)
| | > sim5 (26.04.2008 в 17:54)
<?php
header('location: check.php');
?>
|
Кстати, по RFC 1945 адрес может быть только абсолютный:
> 10.11 Location
> The Location response-header field defines the exact location of the resource that was identified by the Request-URI. For 3xx responses, the location must indicate the server's preferred URL for automatic redirection to the resource. Only one absolute URL is allowed.
> Location = "Location" ":" absoluteURI | |
|
|
|
|
|
|
|
для: Atheist
(26.04.2008 в 20:28)
| | Проверено - работает. ) Ну не разу еще не наблюдал глюков, возможно это есть на древних браузерах, не могу сказать. | |
|
|
|
|
|
|
|
для: sim5
(26.04.2008 в 20:33)
| | Да, я тоже раньше так позволял себе писать, потому что видел, что работает. Но мне стало неуютно после того, как наткнулся на это в RFC. | |
|
|
|
|
|
|
|
для: Atheist
(26.04.2008 в 20:35)
| | А я ничего менять не буду, пока не отвалится. ) Хотя (для автора поста), пропишем рекомендации из тутора:
Примечание: HTTP/1.1 требует абсолютного URI в качестве аргумента для Location: включая схему, имя хоста и абсолютный путь, но некоторые клиенты принимают относительные URI. Как правило вы можете сами использовать $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] и dirname() для создания абсолютного URI из относительного:
<?
header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/".$relative_url);
?>
|
На всякий случай, что бы не было обвинений в мой адрес, судебные тяжбы дорогое удовольствие. )) | |
|
|
|