jQuery Validation i funkcja remote

Autor: Arkadiusz Tobiasz 5 maja 2012

Jakiś czas temu zwrócił się do mnie użytkownik z problemem. Chodzi o to, że korzysta on z pluginu walidacji jQuery, który jakiś czas temu opisywałem na swoim blogu.

Ma on problem z taką sytuacją, że korzysta z funkcji remote, aby sprawdzić czy login danego użytkownika nie znajduje się w bazie danych, a jeśli się znajduje to zwraca odpowiedni komunikat. Wszystko byłoby fajnie, gdyby błąd nie pokazywał się jak użytkownik nie zmienia swojego loginu, gdyż login ten znajduje się w naszej bazie danych.

Poniżej przedstawiam chyba najprostsze rozwiązanie powyższego problemu. W swoim przykładzie posłużę się nie login, a adresem e-mail. Oto jak wygląda nasza reguła walidacji:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$("#edit-profile-form").validate({
      submitHandler: function(form) {
          form.submit();
      },
      rules: {
          email: {
              required: true,
              rangelength: [3, 70],
              email: true,
              remote: {
                  url: baseurl + "/check-user.php",
                  type: "get",
                  data: {
                      value: function() {
                          return $("#edit-profile-form #email").val();
                      },
                      email: function() {
                          return $("#edit-profile-form #original_email").val();
                      }
                  }
              }
          }
      },
      messages: {
          email: {
              required: "To pole jest wymagane",
              rangelength: "To pole musi mie\u0107 od 3 do 70 znaków",
              email: "Musisz poda\u0107 poprawny adres e-mail",
              remote: "Ten adres e-mail jest ju\u017c w naszej bazie"
          }
      }
    });

oraz fragment mojego kodu formularza

1
2
3
4
<form id="edit-profile-form" method="post" action="">
   <input id="email" class="form-input" type="text" maxlength="70" size="15" value="admin@domena.pl" name="email">
   <input id="original_email" type="hidden" value="admin@domena.pl" name="original_email">
</form>

a na samym końcu skrypt check-user.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   $email = $_GET['value'];
   $orginal_email = $_GET['email'];
   if($email != $orginal_email) {
     $email= mysql_real_escape_string($email);
     $sql = mysql_query("SELECT user_id FROM users WHERE email='$email'");
     if(mysql_num_rows($sql))
     {
        return true;
     }
     else
     {
        return false;
     }
   } else {
     return false;
   }

Nasza funkcja remote przesyła dwa argumenty jeden to wartość inputa, gdzie można zmienić adres e-mail. Natomiast drugi input jest ukryty i powinien zawierać adres e-mail jaki jest zapisany w bazie danych. Obie wartości wysyłane są do naszego skryptu i w bazie danych sprawdzamy istnienie tego adresu e-mail tylko wtedy, gdy te wartości się różnią.

Odpowiedz

 

Arkadiusz Tobiasz student Akademii Ekonomicznej im. Karola Adamieckiego w Katowicach na specjalnościach informatyka ekonomiczna oraz rachunkowość. Więcej...

jQuery Validation i funkcja remote

Jakiś czas temu zwrócił się do mnie użytkownik z problemem. Chodzi o to, że korzysta on z pluginu walidacji jQuery, […]

Zend Framework: integracja z Uploadify

W tym wpisie postaram się przedstawić Wam w jaki sposób zintegrować skrypt Uploadify z Zend Frameworkiem. Dzięki temu będziemy mogli […]

Javascript: Czasowe wyświetlanie reklamy

Czasami chcemy, aby na pewnym elemencie naszej strony wyświetlała się reklama przez jakiś czas, a następnie zniknęła. W tym wpisie […]

Linux: backup wszystkich baz danych MySQL

Swego czasu pisałem o tym jak z poziomu konsoli można szybko i przyjemnie zrobić backup bazy MySQL. Wszystko jest ładnie […]