Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] walidacja usera - bład
Forum PHP.pl > Forum > Przedszkole
adam83
Witam,
Chciałem dziś napisać skrypt sprawdzający poprawność loginu hasła oraz adres e-mail nowego użytkownika przed dodaniem go do bazy. Wymodziłem coś takiego, wiem że każdy z Was pewnie napisałby to lepiej, ale chciałem aby to było moje "dzieło" a nie znalezione w necie smile.gif
Mam problem.. funkcje nie działają, nie zwracają żadnych "kodów_błedu" bez względu co im zapodam..
Wygląda to tak:


functions.php



  1.  
  2. <?php
  3.  
  4. // sprawdzenie loginu
  5.  
  6. function sprawdz_user($user) {
  7.  
  8. $user_dlugosc = strlen($user);
  9.  
  10. if($user_dlugosc < 4) { // za krotki
  11. $kod_bledu = 1;
  12.  
  13. }
  14. if($user_dlugosc > 10) { // za dlugi
  15. $kod_bledu = 2;
  16. }
  17.  
  18. else{
  19. $kod_bledu = 0; // jest ok
  20.  
  21. }
  22.  
  23. return $kod_bledu;
  24.  
  25. }
  26.  
  27.  
  28.  
  29. // haslo
  30.  
  31. function sprawdz_haslo($haslo, $haslo2) {
  32.  
  33. $haslo_dlugosc = strlen($haslo);
  34.  
  35. if($haslo_dlugosc < 4) { // za krotkie
  36. $kod_bledu = 3;
  37. }
  38. if($haslo_dlugosc > 10) { // za dlugie
  39. $kod_bledu = 4;
  40. }
  41. if(!strcmp($haslo, $haslo2)) {
  42. $kod_bledu = 5; // nie zgadzaja sie oba hasla
  43. }
  44. if(!preg_match("/[0-9A-Za-z]/",$haslo)) {
  45. $kod_bledu = 6; // zawiera zle znaki
  46. }
  47.  
  48. else {
  49. $kod_bledu=0; // haslo ok, mozna je zakodowac przed wrzuceniem do bazy
  50. $haslo_kod = sha1($haslo . SEED);
  51. }
  52.  
  53. return $kod_bledu;
  54. }
  55.  
  56.  
  57.  
  58. // email
  59.  
  60. function sprawdz_email($email) {
  61.  
  62. if (!preg_match("/^( [a-zA-Z0-9] )+( [a-zA-Z0-9\._-] )*@( [a-zA-Z0-9_-] )+( [a-zA-Z0-9\._-] +)+$/" , $email)) {
  63. $kod_bledu = 7; // zly format e-maila
  64. }
  65.  
  66. else {
  67. $kod_bledu=0; // e-mail ok
  68. }
  69.  
  70. return $kod_bledu;
  71. }
  72.  
  73.  
  74.  
  75.  
  76. // wartosci bledow w zaleznosci od kodu
  77.  
  78. function raportuj_blad($kod_bledu) {
  79.  
  80. if($kod_bledu == 0) {
  81. return true;
  82. }
  83. if($kod_bledu == 1) {
  84. $alert = "login za krótki - podaj nową nazwę użytkownika, min 4 znaki";
  85. }
  86. if($kod_bledu == 2) {
  87. $alert = "login za długi - podaj nową nazwę użytkownika, max 10 znaków";
  88. }
  89. if($kod_bledu == 3) {
  90. $alert = "haslo za krótkie - podaj nowe hasło, min 4 znaki";
  91. }
  92. if($kod_bledu == 4) {
  93. $alert = "hasło za długie - podaj nowe hasło, max 10 znaków";
  94. }
  95. if($kod_bledu == 5) {
  96. $alert = "podałeś dwa inne hasła";
  97. }
  98. if($kod_bledu == 6) {
  99. $alert = "hasło zawiera zabronione znaki";
  100. }
  101. if($kod_bledu == 7) {
  102. $alert = "niezgodny format adres e-mail";
  103. }
  104. return $alert;
  105. ?>
  106. }
  107.  




testowe wywołanie:
index.php

  1.  
  2. <?php require_once 'functions.php';
  3.  
  4. $user = "piotrek";
  5. $haslo = "haselko";
  6. $haslo2 = "haselko";
  7. $email = "mail@o2.pl";
  8.  
  9. sprawdz_user($user);
  10. raportuj_blad($kod_bledu);
  11. echo $alert;
  12.  
  13.  
  14. //sprawdz_haslo($haslo, $haslo2);
  15. //raportuj_blad($kod_bledu);
  16. //echo $alert;
  17.  
  18. //sprawdz_email($email);
  19. //raportuj_blad($kod_bledu);
  20. //echo $alert;
  21.  
  22. ?>


pewnie jest jakis głupi błąd.. ale nie mogę fo znaleść wygląda to tak jakby funkcje nie miały zamiaru się wykonać
Max Damage
  1. $a=sprawdz_user($user);
  2. $b=raportuj_blad($a);
  3. echo $b;
  4.  
  5. echo raportuj_blad(sprawdz_user($user));
blooregard
1.Nie przypisujesz nigdzie wartości zwracanych przez funkcje, więc $kod_bledu w wywołaniu f-cji raportuj_blad() nie ma wartości, tak samo, jak póxniej $alert, który chcesz wyświetlić:
  1. sprawdz_user($user);
  2. raportuj_blad($kod_bledu);
  3. echo $alert;
  4.  

Powinno być:
  1. $kod_bledu = sprawdz_user($user);
  2. $alert = raportuj_blad($kod_bledu);
  3. echo $alert;


2. W functions.php ostatni nawias zamykający masz ZA ?> a powinien byc PRZED.
Zainstaluj sobie IDE podświetlające błędy składni, będzie Ci łatwiej (np. NetBeans)
adam83
aaaa dziękuje bardzo smile.gif
Składnia jest ok, przepisując ją tutaj pomyliłem ten nawias..

Wielkie dzięki, taki prosty błąd..

Jeszcze pytanie z mojej strony, licząc na Wasze doświadczenie.. Takie sprawdzenie danych przed zapisem do bazy jest wystarczające? na co moge jesze rzucic warunki?
Mamazur
no bo nawet jeśli błędnych danych jest więcej niż 1 to
  1. echo $alert;
poda tylko jeden komunikat
blooregard
Generalnie skrypt jest przekombinowany i wszystko dałoby się zapisać w 20% linijek tego, co Ty napisałeś, ale dobra, uczysz się.
Co robisz źle?
- niepotrzebnie eliminujesz z hasła znaki inne niz litery i cyfry. dobre hasło wręcz powinno zawierac np. znaki specjalne (!,#,$ itp.)
- brakuje walidacji, czy dany login i email juz istnieją w bazie (generalnie taka sytuacja nie powinna miec miejsca, no chyba, że logika aplikacji dopuszcza taką sytuację).


Co do pytania, czy jest wystarczające: to zależy od wymagań aplikacji.
Mamazur
a to nie powinno być tak?

  1. $blad = sprawdz_user($user);
  2. $komunikat = raportuj_blad($blad);
  3. echo $komnikat;
adam83
jeszcze raz dziękuje, wiem że ktoś bardziej obyty z PHP napisałby to w kilku linijkach.. ale chciałem zrobić to sam smile.gif
Pozdr
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.