Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzanie dostępności loginu w bazie przez ajax
Forum PHP.pl > Forum > XML, AJAX > AJAX
dominser
Witam wszystkich. Mam taki mały problem, ponieważ próbuję sprawdzić dostępność nazwy użytkownika w bazie bez przeładowania strony. Próbowałem już wielu rozwiązań które znalazłem w sieci ale one działają mi tylko pod IE a np. ;pod chromem już nie. Proszę o pomoc, nakierujcie mnie jak ja to mogę zrobić.
Z góry wielkie dzięki
Damonsson
Pokaż to co działa Ci w IE.
dominser
Oto kod pliku testowego z formularzem i JavaScript'em
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  3. <title>rejestracja nowego użytkownika</title>
  4. <script type="text/javascript">
  5. function $(id) {
  6. return document.getElementById(id);
  7. }
  8. function sprawdz_dane() {
  9. var login = $("login").value;
  10. var email = $("email").value;
  11. var zapytanie = "NewUser.php?login="+login+"&email="+email;
  12. advAJAX.get({
  13. url : zapytanie,
  14. onSuccess : function(obj) {
  15. if(obj.responseText == "login") {
  16. alert("Użytkownik o takim loginie jest już w bazie danych");
  17. $("login").style.border='1px solid red';
  18. $("email").style.border='1px solid #7F9DB9';
  19. }
  20. if(obj.responseText == "email") {
  21. alert("Ten e-mail isntieje już w bazie danych");
  22. $("login").style.border='1px solid #7F9DB9';
  23. $("email").style.border='1px solid red';
  24. }
  25. if(obj.responseText == "OK")
  26. $("registerForm").submit();
  27. }
  28. });
  29. }
  30. <script type="text/javascript" src="js/advajax.js"></script>
  31. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  32. </head>
  33. <form action="register3.php" method="POST" id="registerForm" name="registerForm">
  34. <tr><td class="napis">Login:</td>
  35. <td><input type="text" name="login" id="login"></td></tr>
  36. <tr><td class="napis">Hasło:</td>
  37. <td><input type="password" name="Haslo"></td></tr>
  38. <tr><td class="napis">Powtórz hasło:</td>
  39. <td><input type="password" name="Haslo2"></td></tr>
  40. <tr><td class="napis">E-mail:</td>
  41. <td><input type="text" name="email" id="email"></td></tr>
  42. <tr><td colspan="2" style="text-align: center;">
  43. <input type="submit" onClick="sprawdz_dane();" value="Zarejestruj mnie..."/>
  44. </td></tr>
  45. </form>
  46. </body>
  47. </html>

a następnie kod sprawdzający w bazie
  1. $mysql_host = '\';
  2. $mysql_login = '\';
  3. $mysql_haslo = '\';
  4. $mysql_baza = '\';
  5.  
  6. // połączenie z bazą danych
  7. $polaczenie = mysql_connect($mysql_host, $mysql_login, $mysql_haslo) or die('Błąd: nie udało się nawiązać połączenia z bazą danych.');
  8. // połączenie ze schematem bazy danych
  9. mysql_select_db($mysql_baza) or die('Błąd: nie udało się wybrać schematu bazy danych.');
  10. $login = mysql_escape_string($_GET['login']);
  11. $email = mysql_escape_string($_GET['email']);
  12. $query = "SELECT uid FROM user WHERE username='".$login."';";
  13. $result = mysql_query($query);
  14. $row = mysql_fetch_array($result);
  15. if($row['uid']!='0')
  16. echo 'login';
  17. else {
  18. $query = "SELECT uid FROM user WHERE mail='".$email."';";
  19. $result = mysql_query($query);
  20. $row = mysql_fetch_array($result);
  21. if($row['uid']!='0')
  22. echo 'email';
  23. else echo 'OK';
  24. }
  25.  

Próbowałem już wielu rozwiązań i nie mogę sobie poradzić
Co ja robię nie tak?questionmark.gif?
valkirek
Jakieś błędy masz w konsoli? Nie znam na tyle js ale pierwsze co mi nie pasuje to:
  1. function $(id)

Pierwszy raz widzę taką nazwę funkcji. Poza tym nie:

  1. var login = $("login").value();

a
  1. var login = $("#login").value();


Sprawdzaj po kolei czy wykonuje się funkcja (submit), czy wysyła żądanie i czy dostajesz odpowiedź jeśli tak to jaką no i sprawdź błędy w konsoli.
dominser
niestety twoje wskazówki okazały się nie trafione ale i tak dzięki za pomoc. gdyby chodziło o # to na pewno nie działało by mi to pod IE, a to jedyna przeglądarka która to przetwarza prawie prawidłowo.
Może ktoś zna jakieś gotowe rozwiązania na ajax'ie żebym mógł sprawdzić czy użytkownik jest już w bazie bez przeładowania strony.
Damonsson
Zainstaluj sobie jQuery i wtedy możesz tak to zrobić:
[JAVASCRIPT] pobierz, plaintext
  1. function sprawdz_dane() {
  2. $("#registerForm").submit(function(event) {
  3. event.preventDefault();
  4.  
  5.  
  6. var login = $("#login").value;
  7.  
  8. var email = $("#email").value;
  9.  
  10. var zapytanie = "NewUser.php?login="+login+"&email="+email;
  11.  
  12. $.ajax({
  13. type: "POST",
  14. url: zapytanie,
  15. success: function(data) {
  16. if(data == "login") {
  17. alert('login');
  18. }
  19. if(data == "email") {
  20. alert('email');
  21. }
  22. if(data == "ok") {
  23. alert('ok');
  24. }
  25. },
  26. error: function(data) {
  27. alert('error');
  28. }
  29. });
  30. return false;
  31. });
  32. }
[JAVASCRIPT] pobierz, plaintext


Nie testowałem, ale po małych poprawkach powinno działać.
Crozin
@valkirek: Akurat fragmenty na które zwróciłeś uwagę są jak najbardziej poprawne.

1. Jeżeli coś nie działa to zapewne pojawiają się jakieś błędy w konsoli - każda przeglądarka ma jakąś formę narzędzi deweloperskich.
2. Dane, które mają być fragmentem URL-a (login, email) muszą zostać odpowiednio przefiltrowane: encodeURIComponent.
dominser
w tym problem że nie wywala mi żadnego błędu w konsoli
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.