Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP] Jak zabezpieczyć wysyłanie formularza?
Forum PHP.pl > Forum > Przedszkole
osa2t
Witam,

Mam problem w wysyłaniem formularza, wywołanie samego skryptu poprzez wpisanie go w przeglądarce powoduje wywołanie funkcji INSERT i wstawienie danych do MySQL. Wstawione dane w SQL są oczywiście puste, nie wiem jak uniknąć przypadkowych INSERTów do SQL gdy uruchamiam sam skrypt, odświeżam stronę czy też wybieram przycisk „przejdź do poprzedniej strony” w oknie przeglądarki. Jak można zabezpieczyć wysyłanie skryptu. Kod poniżej



  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  2.  
  3. </head>
  4.  
  5.  
  6. <form action="" method="post" name="dodawanie_posta2">
  7.  
  8. Nazwa nowego działu:
  9. <br>
  10. <input type="text" name="nazwa_dzialu" />
  11. <br><br>
  12.  
  13.  
  14. Hasło:
  15. <br>
  16. <input type="password" name="haslo2" />
  17. <br><br>
  18.  
  19.  
  20. <input type="submit" value="Wyslij">
  21. </form>
  22. </body>
  23. </html>

  1. <?
  2. require("login.php");
  3. $nazwa_dzialu=$_POST['nazwa_dzialu'];
  4. mysql_connect('localhost',$username,$password);
  5. @mysql_select_db($database) or die("Nie znaleziono bazy danych");
  6. $query = "INSERT INTO dzial VALUES (' ', '$nazwa_dzialu', NOW(), '')";
  7. mysql_query($query);
  8. ?>



Jak widać w kodzie samo wstawianie danych i wysłanie ich do SQL mam w tym samym skrypcie, jeżeli zorbie to w dwóch plikach i zamienie action=" " na <form action="wysyłka.php" method="post" name="dodawanie_posta2"> w bardzo małym stopniu rozwiązuje problem, bo strona z formularzem przy wywołaniu nie wysyła INSERTA do SQL ale po wysłaniu danych inputem WYŚLIJ, chciałbym powrócić automatycznie do strony formularza a nie pozostać na pustej stronie z INSEREM. Bardzo proszę o pomoc w rozwiązaniu problemu.

Pozdrawiam,
potreb
  1. <input type="submit" name='submit' value="Wyslij">

  1. if(isset($_POST['submit'])) {
  2. require("login.php");
  3. $nazwa_dzialu=$_POST['nazwa_dzialu'];
  4. mysql_connect('localhost',$username,$password);
  5. @mysql_select_db($database) or die("Nie znaleziono bazy danych");
  6. $query = "INSERT INTO dzial VALUES (' ', '$nazwa_dzialu', NOW(), '')";
  7. mysql_query($query);
  8. }


W tym samym pliku. Możesz dodać na końcu header('location: strona.php'); aby przekierowało cię z powrotem do formularza lub do innej strony.
osa2t
Dzięki za pomoc ale jak rozwiązać problem bez przekierowania? Jak zabezpieczyć formularz?
potreb
Możesz dać wartość unique dla jakiegoś pola w tabeli wtedy skrypt za cholerę nie doda powtarzającego się rekordu np dla pola nazwa działu.

Wnioskuje że twoje zabezpieczenie polega na tym aby nie dodawało pustego rekordu, dałem ci odpowiedź co do tego względu, że po wysłaniu formularza dodaje rekord a następnie powraca do formularza.
krzysiekk
moze tak
  1. <?
  2. if($_POST['send']==1){
  3. if(empty($_SESSION['uniq'])){
  4. print'INSERT';
  5. $_SESSION['uniq']=$_POST['uniq'];}
  6. else{print'Formularz juz byl wyslany';}
  7.  
  8. }
  9. else{
  10.  
  11. $t = time();
  12. ?>
  13. <form method=post action="" method="post">
  14. <input type="hidden" name="send" value="1">
  15. <input type="hidden" name="uniq" value="<? print $t;?>">
  16. <input type="text" name="imie" value="">Imie
  17. <input type="submit" value="Wyslij">
  18.  
  19. </form>
  20.  
  21. <?
  22. }
  23.  
  24. ?>
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-2024 Invision Power Services, Inc.