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

Форум PHP

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

 

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

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

тема: При обновлении повторяеться операция!
 
 автор: Misterio   (26.04.2008 в 14:40)   письмо автору
 
 

Есть две страницы:


<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 одинаковых!
Вопрос: "Как сделать, что бы этого небыло!?" :)
Заранее спасибо!

   
 
 автор: sim5   (26.04.2008 в 15:01)   письмо автору
 
   для: Misterio   (26.04.2008 в 14:40)
 

Делать перенаправление после удачной оперции, чтобы сбросить GET, POST.

   
 
 автор: Misterio   (26.04.2008 в 16:40)   письмо автору
 
   для: sim5   (26.04.2008 в 15:01)
 

а по подробнее...

   
 
 автор: sim5   (26.04.2008 в 17:54)   письмо автору
 
   для: 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>"
;
}
?>

Выбирайте как вам нужно и используйте этот принцип.

   
 
 автор: Atheist   (26.04.2008 в 20:06)   письмо автору
 
   для: sim5   (26.04.2008 в 17:54)
 

Следующий вопрос будет про headers already sent by ...

   
 
 автор: sim5   (26.04.2008 в 20:23)   письмо автору
 
   для: Atheist   (26.04.2008 в 20:06)
 

Все возможно, но будем надеяться, что товарищ знает... )

   
 
 автор: Atheist   (26.04.2008 в 20:28)   письмо автору
 
   для: 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

   
 
 автор: sim5   (26.04.2008 в 20:33)   письмо автору
 
   для: Atheist   (26.04.2008 в 20:28)
 

Проверено - работает. ) Ну не разу еще не наблюдал глюков, возможно это есть на древних браузерах, не могу сказать.

   
 
 автор: Atheist   (26.04.2008 в 20:35)   письмо автору
 
   для: sim5   (26.04.2008 в 20:33)
 

Да, я тоже раньше так позволял себе писать, потому что видел, что работает. Но мне стало неуютно после того, как наткнулся на это в RFC.

   
 
 автор: sim5   (26.04.2008 в 20:43)   письмо автору
 
   для: 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);
?>

На всякий случай, что бы не было обвинений в мой адрес, судебные тяжбы дорогое удовольствие. ))

   
Rambler's Top100
вверх

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