Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] problem z odświeżaniem - po każdym kliknięciu
Forum PHP.pl > Forum > Przedszkole
kristoff
cześć. utworzyłem formularz który po wciśnieciu "prześlij" przesyła zmienne do samego siebie (action=ten_sam_plik). W pliku tym dolączone są instrukcje mysql dzięki czemu dane ze zmiennych przesyłane są bazy danych tworząc nowe rekordy. Mój problem polega na tym ze gdy kliknie się na przycisk "odśwież" przeglądarki to do bazy dopisywany jest kolejny taki sam rekord. Co zrobić aby te zmienne sie czyściły i w zwiazku z tym nie były dopisywane takie same kolejne rekordy? Wstawiłem do meta:
  1. <META HTTP-EQUIV="Expires" CONTENT="0">
  2. <META HTTP-EQUIV="Cache-Control" CONTENT="no-store, no-cache, must-revalidate">
  3. <META HTTP-EQUIV="Pragma" CONTENT="no-cache">


oraz na końcu skryptu wstawilem unset($opis); ale nic to nie daje, przy każdym wcisnięciu "odśwież" dopisuje do bazy kolejne identyczne rekordy.
no_face
Dodaj if'a sprawdzajacego dane przy dodaniu do bazy, po dodaniu wyczysc zmienne, to powinno pomoc.
kristoff
wkleję może kod tego pliku bo szczerze mówiąc nie wiem co bym tu mógl jeszcze zmienić zeby rozwiazac problem, może ktoś podpowie

  1. <?php
  2. include("header.php");
  3. header1();
  4. ?>
  5.  
  6. <form method=post action="form.php">
  7. <textarea name="opis"></textarea>
  8. <select name="kraj">
  9. <option></option>
  10. <?php
  11. include("polaczenie.php");
  12. baza();
  13. $result=mysql_query("select panstwo from panstwa");
  14. while($wiersz=mysql_fetch_row($result))
  15. echo "<option>" . $wiersz[0] . "</option>";
  16. ?>
  17. </select>
  18. <input type="text" name="kraj2"/>
  19. <input type=submit value="wyślij"/>
  20. </form>
  21.  
  22.  
  23. <?php
  24. $kraj=addslashes(htmlspecialchars($_POST['kraj']));
  25. $kraj2=addslashes(htmlspecialchars($_POST['kraj2']));
  26. $opis=addslashes(htmlspecialchars($_POST['opis']));
  27.  
  28. if($kraj<>"" AND $kraj2=="" AND $opis<>"") {
  29. if($nowy_rekord=mysql_query("insert into dane values('NULL', '$kraj', '$opis')")) 
  30. echo "wprowadzono nowy rekord";
  31. else echo "nie można było wprowadzić danych";
  32.  
  33. mysql_query("insert into panstwa values('$kraj')");
  34. }
  35.  
  36. if($kraj=="" AND $kraj2<>"" AND $opis<>"") {
  37. if($nowy_rekord=mysql_query("insert into dane values('NULL', '$kraj2', '$opis')")) 
  38. echo "wprowadzono nowy rekord";
  39. else echo "nie można było wprowadzić danych";
  40.  
  41. mysql_query("insert into panstwa values('$kraj2')");
  42. }
  43.  
  44. if($kraj<>"" AND $kraj2<>"" AND $opis<>"") {
  45. if($nowy_rekord=mysql_query("insert into dane values('NULL', '$kraj2', '$opis')")) 
  46. echo "wprowadzono nowy rekord";
  47. else echo "nie można było wprowadzić danych";
  48.  
  49. mysql_query("insert into panstwa values('$kraj2')");
  50. }
  51.  
  52. if(($kraj=="" AND $kraj2=="") || $opis=="") 
  53. echo "uzupełnij wszystkie wymagane dane";
  54.  
  55.  
  56. unset($kraj);
  57. unset($kraj2);
  58. unset($opis);
  59. ?>
  60. </body>
  61. </html>
mario
Na poczatek zainicjuj puste zmienne $_SESSION['formularz'] oraz $_SESSION['sprawdzam'].

Przy wyslaniu formularza:

zakoduj np. w md5 tablice $_POST i zapisz ja do zmiennej $_SESSION['sprawdzam'].

Sprawdz czy nie doszlo do odswiezenia strony: porownaj zmienna $_SESSION['formularz'] ze zmienna $_SESSION['sprawdzam']. Jezeli jest to pierwszy submit, lub dane sa rozne od poprzednio wprowadzonych (czyli nie doszlo do odswiezenia strony) porownanie tych zmiennych bedzie sie roznic, i mozesz wrzucac do bazy. Jezeli porownanie zmiennych bedzie identyczne doszlo do odswiezenia strony i wtedy nie wrzucasz do bazy.

Powyslaniu formularza:

wyczysc zmienna $_SESSION['sprawdzam']. W sesji bedziesz miec ustawiona zmienna $_SESSION['formularz'] dzieki czemu po ponownym wyslaniu form'a skrypt Ci wykona powyzsze czynnosci, czyli sprawdzi czy nie doszlo do odswiezenia strony.

Pisalem to na szybko, mam nadzieje ze Ci to pomoze w napisaniu swojego antyflood'owego zabezpieczenia 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.