Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]jak zapobiec ponownemu wysyłaniu po refresh
Th0e
post
Post #1





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 16.09.2012

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
luke18dg
post
Post #2





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 26.03.2011
Skąd: Dąbrowa Górnicza

Ostrzeżenie: (0%)
-----


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'].

Ten post edytował luke18dg 3.03.2013, 20:53:39
Go to the top of the page
+Quote Post
Th0e
post
Post #3





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 16.09.2012

Ostrzeżenie: (0%)
-----


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?

?

Ten post edytował Th0e 4.03.2013, 19:40:32
Go to the top of the page
+Quote Post
Damonsson
post
Post #4





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Damonsson 4.03.2013, 21:15:02
Go to the top of the page
+Quote Post
Th0e
post
Post #5





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 16.09.2012

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post
Damonsson
post
Post #6





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


A podaj ścieżkę bezwzględną w Location
Go to the top of the page
+Quote Post
Th0e
post
Post #7





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 16.09.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Damonsson
post
Post #8





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


  1. header("Location: htt p://adrestwojejstrony.pl/kontakt.php?co=wyslano");


Ten post edytował Damonsson 4.03.2013, 21:59:08
Go to the top of the page
+Quote Post
Th0e
post
Post #9





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 16.09.2012

Ostrzeżenie: (0%)
-----


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

Ten post edytował Th0e 5.03.2013, 15:25:11
Go to the top of the page
+Quote Post
-Gość-
post
Post #10





Goście







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']
Go to the top of the page
+Quote Post
com
post
Post #11





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


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

Ten post edytował com 5.03.2013, 22:42:51
Go to the top of the page
+Quote Post
Th0e
post
Post #12





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 16.09.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 11:12