Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]filtrowanie zmiennych z paska adresu
Testosteron
post
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

Ostrzeżenie: (0%)
-----


Witam. Napisałem taki oto szkielet skryptu weryfikacji adresu email:

  1. <?php
  2. include('lang\polish.inc');
  3. include('function.inc');
  4. $code = substr($_GET['v'], 0, 10);
  5. $id = substr($_GET['v'], 10);
  6.  
  7. connect();
  8. $weryfikacja = mysql_query("SELECT id, code FROM users WHERE id='" .$id. "' and code='" .$code. "'");
  9. $potwierdzenie = mysql_num_rows($weryfikacja);
  10.  
  11. If($potwierdzenie == 1)
  12. {
  13. $aktywuj = mysql_query("UPDATE users SET activate='1' WHERE id = '" .$id. "'");
  14.  
  15. If ($aktywuj)
  16. {
  17. echo 'Konto zostało aktywowane';
  18. }
  19. else
  20. {
  21. echo 'Wystąpił nieoczekiwany błąd. Nie udało się aktywować konta';
  22. }
  23. }
  24. else
  25. {
  26. echo 'Nieprawidłowy kod aktywacyjny';
  27. }
  28.  
  29. ?>

Kod działa poprawnie. Problem powstaje w momencie, kiedy chcę sprawdzić poprawność zmiennych, np. funkcją is_int. Za każdym razem funkcja zwraca wartość false. Dlaczego tak się dzieje?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
b4rt3kk
post
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Bo w tym momencie $code jest stringiem:

  1. $code = substr($_GET['v'], 0, 10);


jak zresztą sam wiesz, bo używasz funkcji substr, czyli wycinasz string ze stringa, gdzie wartość wyjściowa również jest stringiem.

Weryfikacji możesz dokonać za pomocą preg_match:

  1. $pattern = '/^[0-9]{4}$/';
  2. if (preg_match($pattern, $code) == 1) echo 'ok';


gdzie {4} (przykładowo) to długość jaką powinien mieć Twój kod.

Ten post edytował b4rt3kk 6.10.2012, 11:39:42
Go to the top of the page
+Quote Post
bostaf
post
Post #3





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Cytat(b4rt3kk @ 6.10.2012, 12:31:01 ) *
Weryfikacji możesz dokonać za pomocą preg_match:
  1. $pattern = '/^[0-9]{4}$/';
  2. if (preg_match($pattern, $code) == 1) echo 'ok';


gdzie {4} (przykładowo) to długość jaką powinien mieć Twój kod.


Albo konwertować string do integera za pomocą funkcji intval:

  1. $id = intval(substr($_GET['v'], 10));

Zwróć uwagę, że jeśli konwersja się nie powiedzie to funkcja intval zwróci integer 0, co może być problemem jeśli pole id w Twojej tabeli może przyjmować wartość 0.

Ten post edytował bostaf 6.10.2012, 12:04:30
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.10.2025 - 05:28