Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] walidacja usera - bład
adam83
post
Post #1





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 2.11.2009

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


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ć
Go to the top of the page
+Quote Post
Max Damage
post
Post #2





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


  1. $a=sprawdz_user($user);
  2. $b=raportuj_blad($a);
  3. echo $b;
  4.  
  5. echo raportuj_blad(sprawdz_user($user));


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
blooregard
post
Post #3


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




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)


Ten post edytował blooregard 8.02.2010, 12:18:41


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
adam83
post
Post #4





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 2.11.2009

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


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?
Go to the top of the page
+Quote Post
Mamazur
post
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 3.07.2009

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


no bo nawet jeśli błędnych danych jest więcej niż 1 to
  1. echo $alert;
poda tylko jeden komunikat
Go to the top of the page
+Quote Post
blooregard
post
Post #6


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




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.


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
Mamazur
post
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 3.07.2009

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


a to nie powinno być tak?

  1. $blad = sprawdz_user($user);
  2. $komunikat = raportuj_blad($blad);
  3. echo $komnikat;
Go to the top of the page
+Quote Post
adam83
post
Post #8





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 2.11.2009

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


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
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 17:30