Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Dwie takie same wartości w tablicy
Forum PHP.pl > Forum > Przedszkole
Guest
Witam!
Mam rejestrację z walidacja napisaną w php. Niestetu walidacja nie chroni przed wpisanem do bazy tych samych danych. W efekcie gdy wypełni się formularz i kliknie 5 razy na przycisk wyślij to 5 rekordów takich samych zostanie dodanych do bazy. Mój kod php to:
  1. <?
  2.  
  3. //jesli byl wyslany formularz przechodzimy do obsługi danych
  4. if(isset($_POST['wyslij']))
  5. {
  6. //Obrabiamy wszystkie zmienne przekazane metodą POST
  7. foreach ($_POST AS $klucz => $wartosc)
  8. {
  9. $wartosc= trim($wartosc);//usuwamy białe znaki
  10. $wartosc= stripslashes($wartosc);
  11. $wartosc=htmlspecialchars($wartosc, ENT_QUOTES);
  12. $_POST[$klucz]=$wartosc;
  13. }
  14. $login=$_POST['login'];
  15. $haslo=$_POST['haslo'];
  16. $email=$_POST['email'];
  17.  $blad_txt='';
  18. $blad=false;
  19. //sprawdzamy czy jest wypełnine pole login
  20. if(strlen($login)<2){
  21. $blad_txt.='<div>Podaj swój <b>login</b></div>';
  22. $blad=true;
  23. }
  24. //sprawdzamy czy jest podane haslo
  25. if(strlen($haslo)<2){
  26. $blad_txt.='<div>Podaj swoje <b>hasło</b></div>';
  27. $blad=true;
  28. }
  29. //sprawdzamy czy jest podany prawidłowy adres e-mail
  30. if(!preg_match('|^[_a-z0-9.-]*[a-z0-9]@[_a-z0-9.-]*[a-z0-9].[a-z]{2,3}$|e', $email)){
  31. $blad_txt.='<div>Podaj prawidłowy adres <b>e-mail</b></div><br/>';
  32. $blad=true;
  33. }
  34. if(!$blad)
  35. {
  36. //poprawne dane - robmy z nimi co trzeba (zapisujemy do bazy danych itp.)
  37. include("config.php"); 
  38. $result= mysql_query("insert into t_user values ('$id','$login','$haslo','$email')");
  39. echo "<div>Wpisane dane zostały dodane do bazy! 
  40. Kliknj <a href=\"index.php\">tutaj</a><br/><br/></div>";
  41. }
  42. else
  43. {
  44. //cos jest zle – wyświetlamy stosowne komunikaty
  45. echo $blad_txt;
  46. }
  47. }
  48. else
  49. {
  50. //wypelniamy zmienne pustymi danymi jesli formularz nie został jeszcze wysłany
  51. $login='';
  52. $haslo='';
  53. $email='';
  54. }
  55. //wyswietlamy formularz
  56. echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">
  57. Twój login: <input class="standard" style="margin-right: 50px;" type="text" name="login" value="'.$login.'" /><br/>
  58. Twoje hasło: <input class="standard" style="margin-right: 50px;" type="text" name="haslo" value="'.$haslo.'" /><br/>
  59. Twój e-mail: <input class="standard" style="margin-right: 50px;" type="text" name="email" value="'.$email.'" /><br/>
  60. <input class="submit" type="submit" style="margin-right: 50px;" name="wyslij" value="Wyślij" /> 
  61. </form>';
  62. ?>


Z góry dziękuję za pomoc
em1X
Ok, a gdzie pytanie? Czego nie umiesz/nie rozumiesz?
Guest
Chodzi mi o to żeby nie można było zarejestrować dwóch takich samych loginów smile.gif
jastu
Przed wprowadzeniem danych / rejestracją nowego użytkownika sprawdzasz SELECT`em czy nie ma takiego loginu w kolumnie tabeli.Powodzenia
Yacho
a nie lepiej w JS zdisablowac button po nacisnieciu ?

cos w stylu (nie znam js pisze tak sobie z palca wiec neich ktos poprawi :
Kod
OnSubmit:document.getElementBiID("mojbutton").disabled=true


to moze dosc brutalne ale swoje zadanie spełni smile.gif
Foxx
Ale może przecież wejść ktoś inny za jakiś czas i powtórzyć login. Chyba najlepszy jest jednak SELECT.
Poza tym, chyba po udanej rejestracji można uzytkownika przenieść gdzieś gdzie nie będzie już formularza rejestracji, a tym bardziej formularza rejestracji z przed chwilą zarejestrowanymi danymi...
mike
Najlepszy nie jest SELECT, bo to jest zbędne zapytanie do bazy.
Najlepszym wyjściem w tej sytuacji jest założenie na pole z loginem klucza UNIQUE.
Baza sama wykona za nas sprawdzenie przy próbie wstawienia.

Tutaj o tym pisałem: Ponowny zapis do bazy po odświeżeniu strony
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.