Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]jak zapobiec ponownemu wysyłaniu po refresh
Forum PHP.pl > Forum > Przedszkole
Th0e
Witam! Oto mój skrypt:

  1. $nadawca = preg_replace("/[^a-zA-Z0-9]/", "", $_POST['nadawca']);
  2. $tresc = preg_replace("/[^a-zA-Z0-9]/", "", $_POST['tresc']);
  3. $tresc = wordwrap($tresc, 50, "\n", true);
  4. $adresat = $_POST['adresat'];
  5.  
  6.  
  7. if(!empty($nadawca) && !empty($adresat) && !empty($tresc)){
  8. mysql_query("INSERT INTO `pytania` (nadawca, tresc, odbiorca) VALUES('$nadawca','$tresc','$adresat')") or die("nie udało się wysłać! Spróbuj jeszcze raz!");
  9. $nadawca =null;
  10. header("Location: kontakt.php?co=wyslano");
  11. }



mimo że jest header - to po odświeżeniu strony wszystko jest wykonywane na nowo - czyli stringi są wysyłane do bazy. Nie wiem czemu się tak dzieje. do tej pory danie "[php][/php]header" załatwiało sprawę. Pozdrawiam.
luke18dg
Po Headerach wstawia się exit();, żeby wykonywanie skryptu zakończyło się w danym momencie, a nie dalej szło własnym życiem smile.gif
Tak wg, jeśli dobrze pamiętam mimo, że strona jest odświeżana to do niej jest dołączona POST. I w twoim skrypcie problemem możemy być, że nulujesz $nadawce a nie $_POST['nadawca'].
Th0e
niestety nadal nie działa.
Zauważyłem że powtarza tak zapytanie gdy już jest adres z końcówką co=wyslano

oto aktualny kod:

  1. $nadawca = preg_replace("/[^a-zA-Z0-9]/", "", $_POST['nadawca']);
  2. $tresc = preg_replace("/[^a-zA-Z0-9]/", "", $_POST['tresc']);
  3. $tresc = wordwrap($tresc, 50, "\n", true);
  4. $adresat = $_POST['adresat'];
  5.  
  6. if(!empty($nadawca) && !empty($adresat) && !empty($tresc)){
  7.  
  8. mysql_query("INSERT INTO `pytania` (nadawca, tresc, odbiorca) VALUES('$nadawca','$tresc','$adresat')") or die("nie udało się wysłać! Spróbuj jeszcze raz!");
  9. $_POST['nadawca'] = null;
  10. header("Location: kontakt.php?co=wyslano");
  11. }
  12.  
  13. if($_GET['co'] == "wyslano")
  14. {
  15. echo "<br>Pytanie zostało wysłane :)";
  16. }


wie ktośquestionmark.gif
może jest jakieś zapytanie które blokuje odświeżanie strony?

?
Damonsson
Coś musiałeś namieszać, niemożliwe, żeby po header nadal było można wysłać to samo zapytanie.

A jak zrobisz tak?
  1. header("Location: kontakt.php?co=wyslano");
  2. exit();


Sprawdź w ogóle czy ten header się wykonuje, bo może nie?
Th0e
Cytat(Damonsson @ 4.03.2013, 21:14:29 ) *
Coś musiałeś namieszać, niemożliwe, żeby po header nadal było można wysłać to samo zapytanie.

A jak zrobisz tak?
  1. header("Location: kontakt.php?co=wyslano");
  2. exit();


Sprawdź w ogóle czy ten header się wykonuje, bo może nie?



0k. oto aktualny kod:

  1. $nadawca = preg_replace("/[^a-zA-Z0-9]/", "", $_POST['nadawca']);
  2. $tresc = preg_replace("/[^a-zA-Z0-9]/", "", $_POST['tresc']);
  3. $tresc = wordwrap($tresc, 50, "\n", true);
  4. $adresat = $_POST['adresat'];
  5.  
  6.  
  7. if(!empty($nadawca) && !empty($adresat) && !empty($tresc)){
  8.  
  9. mysql_query("INSERT INTO `pytania` (nadawca, tresc, odbiorca) VALUES('$nadawca','$tresc','$adresat')") or die("nie udało się wysłać! Spróbuj jeszcze raz!");
  10. $_POST['nadawca'] = null;
  11. header("Location: kontakt.php?co=wyslano");
  12. exit();
  13. }
  14.  
  15. if($_GET['co'] == "wyslano")
  16. {
  17. echo "<br>Pytanie zostało wysłane :)";
  18. }


nadal jest tak samo. to znaczy jak napiszemy coś za pierwszym razem i weźmiemy f5 to nic. ale jeśli jest już końcówka adresu wysłano. znowu coś napiszemy i wyślemy to potem po f5 ciągle się to ostatnie będzie wysyłać.
Damonsson
A podaj ścieżkę bezwzględną w Location
Th0e
Cytat(Damonsson @ 4.03.2013, 21:28:58 ) *
A podaj ścieżkę bezwzględną w Location

a co to jest? adres po wysłaniu mam taki: kontakt.php?co=wyslano
Damonsson
  1. header("Location: htt p://adrestwojejstrony.pl/kontakt.php?co=wyslano");
Th0e
Cytat(Damonsson @ 4.03.2013, 21:58:21 ) *
  1. header("Location: htt p://adrestwojejstrony.pl/kontakt.php?co=wyslano");



  1. if(!empty($nadawca) && !empty($adresat) && !empty($tresc)){
  2.  
  3. mysql_query("INSERT INTO `pytania` (nadawca, tresc, odbiorca) VALUES('$nadawca','$tresc','$adresat')") or die("nie udało się wysłać! Spróbuj jeszcze raz!");
  4. $_POST['nadawca'] = null;
  5. header("Location: ht tp://nagrywamy.fwl.pl/kontakt.php?co=wyslano");
  6. exit();
  7. }
  8.  
  9. if($_GET['co'] == "wyslano")
  10. {
  11. echo "<br>Pytanie zostało wysłane :)";
  12. }

(napisalem ht tp zamiast http bo inaczej tworzył się link i jakieś cuda wyskakiwały smile.gif W pliku mam http)

bez zmian.

~~~
może jest inny sposób niż header?

f5
Gość
Cytat(Th0e @ 5.03.2013, 18:47:53 ) *
może jest inny sposób niż header?


Przekierowanie jest prawidłowym działaniem w tym wypadku. Masz włączone raportowanie błędów? Coś mi się wydaje, że header nie działa, gdyż coś już jest wcześniej wysłane do przeglądarki. Możesz ewentualnie jeszcze sprawdzać przed zapisem czy nie przekazano parametru z $_GET['wyslano']
com
wrzuć
  1. unset($nadawca);
  2. unset($adresat);
  3. unset($tresc);

lub
  1. unset($_POST['nadawca']);

a warunku daj
  1. if(!isset($_GET['co']) && !empty($nadawca) && !empty($adresat) && !empty($tresc))
wink.gif
Th0e
Cytat(com @ 5.03.2013, 22:38:12 ) *
wrzuć
  1. unset($nadawca);
  2. unset($adresat);
  3. unset($tresc);

lub
  1. unset($_POST['nadawca']);

a warunku daj
  1. if(!isset($_GET['co']) && !empty($nadawca) && !empty($adresat) && !empty($tresc))
wink.gif


dzięki pomogło - właśnie wpadłem na to samo, żeby zablokować wysyłanie posta, gdy już jest $GET['co']

nadal po f5 wyskakuje czy wyslac ponownie formularz, ale nie wysylaja sie nowe rekordy. Sprawdzę czy gdyby formularz był w innym pliku co skrypt wysyłający to by coś zmieniło.

Temat do zamknięcia pozdrawiam smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.