Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzenie formularza z bazą
Forum PHP.pl > Forum > Po stronie przeglądarki
Skie
Witam,
Mam prosty formularz rejestracyjny na stronie, którego pola są sprawdzane za pomocą JS. I schodki zaczynają się w przypadku sprawdzania nicka usera. Nie mam zielonego pojęcia jak wprowadzić do mojego skryptu funkcję która by sprawdzała czy dany nick istniaje już w bazie danych czy też nie. Jak Wy rozwiązaliście ten problem?
vokiel
Np sprawdzając w bazie czy jest już taki login zwykłym selectem (SELECT `ID` FROM `USERS` WHERE `LOGIN`=$login;), albo poprzez insert i sprawdzenie wyniku działania: jeśli wstawił - takigo loginu nie było, a jeśli nie - to sprawdzenie czy pojawił się błąd typu 'Duplicate entry for key...' (oczywiście musisz mieć założony unikat na kolumne login)

Jeśli sprawdzasz formularz javascriptem, to możesz użyć ajaxa, który po opuszczeniu pola z loginem sprawdzi czy już taki jest w bazie.
webasek
Metodą najlepszą jest użycie ajaxa jednak jeśli nie umiesz to wczytaj do tablicy w js nicki z twojej tabeli a potem przeszukaj tabelę w js za pomocą prostego for i if. Jednak mało efektywna taka funkcja przy dużej liczbie userów.
Skie
Myślałem nad tym by zrobić to w taki sposób:
Ajaxem uruchomić plik PHP, który sprawdziłby czy dany nick jest już w bazie. Jeżeli tak to tworzyłby niewidoczny div o zawartości true, albo jeżeli nie to zawartość byłaby false. Potem Ajax by sprawdzał zawartość tego div'a i generował odpowiedni komunikat. Czy jest to dobre wyjście?
mike
Hmm, czyli
ajax sprawdza bazę -> generuje diva -> sprawdza jego zawartość -> wyświetla komunikat
lub
ajax sprawdza bazę -> wyświetla komunikat
?

To teraz sam pomysl co lepsze tongue.gif
Skie
No tak, ale jak pobrać do Ajaxa wynik działania PHP inaczej niż przez stworzenie niewidocznego diva? ;p

I dokładnie rzecz biorąc to byłoby tak:
Ajax otwiera plik PHP -> [PHP] sprawdza dostępność nicka -> [PHP] generuje diva o zawartości true/false -> [AJAX] pobiera zawartość diva -> [AJAX] wyświetla odpowiedni komunikat
vokiel
Po prostu:
Ajax otwiera plik PHP -> [PHP] sprawdza dostępność nicka i zwraca true/false -> [AJAX] (funkcja zwrotna js) wyświetla odpowiedni komunikat w zależności od tego co zwraca PHP
Trojan
Właśnie zrobiłem sobie taki formularz u mnie wygląda to tak (tak jak napisał vokiel ):
  1. <script type="text/javascript">
  2.  
  3.      //bez tego niedziała na IE :/
  4.      var ObiektXMLHttp = false;
  5.      if (window.XMLHttpRequest){
  6.      ObiektXMLHttp = new XMLHttpRequest();
  7.            }else if(window.ActiveXObject){
  8.            ObiektXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
  9.            }
  10.  
  11.      //Sprawdzanie Loginu (1-login zajety) (0-login wolny)
  12.      function sprawdz(wartosc){
  13.            if(ObiektXMLHttp){
  14.                  //pobieranie danych
  15.                  ObiektXMLHttp.open("GET", 'sprawdz.php?wartosc='+wartosc);
  16.                  
  17.                  ObiektXMLHttp.onreadystatechange = function(){
  18.                        if(ObiektXMLHttp.readyState == 4){
  19.                              var i = ObiektXMLHttp.responseText;
  20.                              //gdy dane pobrane
  21.                              if(parseFloat(i) == 1){
  22.                              alert('Login '+wartosc+' zajęty');
  23.                                    }else if(parseFloat(i) == 0){
  24.                                    alert('Login '+wartosc+' wolny');
  25.                                    }
  26.                        }
  27.                  }
  28.                  ObiektXMLHttp.send(null);
  29.            }
  30.      }
  31.      
  32. </script>
  33.      
  34. <input name="login" type="text" onblur="sprawdz(this.value);">

  1. <?php
  2. //zawartosc pliku sprawdz.php
  3.  
  4. $wartosc = $_GET['wartosc'];
  5.  
  6. $db_baza = '******';
  7. $db_user = '******';
  8. $db_pass = '******';
  9. $db_host = '******';
  10.  
  11. $polaczenie = mysql_connect($db_host, $db_user, $db_pass);
  12. mysql_select_db($db_baza);
  13.  
  14. $czy_isnieje = mysql_num_rows(mysql_query("SELECT (`nick`) FROM `users` WHERE `nick` LIKE '$wartosc'"));
  15. echo $czy_isnieje;
  16. mysql_close($polaczenie);
  17. ?>


mam nadzieje ze pomogłem (o ile problem nie został już rozwiązany)
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.