Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zalecenie dot. walidacji formularza rejestracyjnego
Forum PHP.pl > Forum > Przedszkole
Zbooj
Na początek chciałem się przywitać ponieważ jest to moj pierwszy post na tym forum smile.gif tak więc
Witajcie smile.gif

Moim zamiarem jest stworzenie systemu rejestracji uzytkownika. Skrypt ten najchętniej napisalbym wykorzystujac jedynie PHP w wersji programowania proceduralnego. Wiem ze to nieco stare podejscie do programowania, ale tak chcialbym to zrobić.

Rejestracja zawiera: username, email i haslo wraz z potwierdzeniem hasla. Logicznym postępowaniem wydaje mi się napisanie funkcji wyswietlajacej formularz i poszczegolnych funkcji odpowiadajacym poszczegolnym polom formularza.

I tak pole:
- username powinno skladac sie jedynie z malych liter alfabetu (bez ogonków), cyfr, znaków _-. nie występujacych bezposrednio po sobie, ma to na celu ograniczyc zastosowanie cudzyslowow, gwiazdek,ukośników,nawiasow i wszelkich innych niebezpiecznych znaków, przykladowe dane dozwolone w username aaa, aa1, aaaa_aaaa, a_a33-33a12
- mail, ta sama sytuacja co w username plus duze litery bo mam zamiar dodatkowo uzyc strtolower()
- haslo, ta sama sytuacja co w username plus dodanie duzych liter

Mam nadzieje ze takie sa zalecenia dot. tych pól w podobnych skryptach. Jeśli sa inne prosze mnie uswiadomic.

Nie proszę o napisanie calego skryptu, jedynie o cenne wskazowki dotyczace konstrukcji i uzywanych funkcji.
Na forach w internecie sa przyklady, ale sa najczesciej niekompletne lub slabo zabezpieczone.
wookieb
Funkcji to jak chcesz.. Ja używalem kiedyś jednej w ktorej podawało sie klucz z tablicy post, minimalna dlugosc, maksymalna dlugosc, "czy pole wymagane", pattern [opcjonalne]. Pierwzse 4 wiadomo ale ostatnie jest to popropstu zwykły pattern do preg_matcha ktory mial sprawdzac poprawnosc wprowadzonych danych. Jeżeli wszystko ok zwraca true. Jeżeli nie zwraca wartość liczbowa ujemna. np -1 - Nie wprowadzil pola
-2 za krotkie
-3 za dlugi itd.
Do stosowengo bledu wyswietlalem odpowiedni komunikat dla danego pola.
W tym przypadku robilem to tak

Kod
function printError($code, $arr)
{
if(is_numeric($code))
{
    return $arr[abs($code)-1];
}
}

echo printError(funcka_sprawdzajaca(), array('Nie podałes wartosci', 'za krotkie', 'za dlugie'... itd));


Zapytasz pewnie dlaczego w tablicy. A to po to by komunikaty nie brzmiały
"Pole 'imię' byc za krótka" smile.gif Może przykład błędu smieszny ale jak chcesz smile.gif
decha-design
Cytat(Zbooj @ 4.09.2008, 14:09:11 ) *
- username powinno skladac sie jedynie z malych liter alfabetu (bez ogonków), cyfr, znaków _-. nie występujacych bezposrednio po sobie, ma to na celu ograniczyc zastosowanie cudzyslowow, gwiazdek,ukośników,nawiasow i wszelkich innych niebezpiecznych znaków, przykladowe dane dozwolone w username aaa, aa1, aaaa_aaaa, a_a33-33a12


do tego użyj str_replace" title="Zobacz w manualu PHP" target="_manual, zamieniaj każde polskie znaki na a itd lub użyj in_array" title="Zobacz w manualu PHP" target="_manual jeżeli chcesz aby wyświetlała się jakaś informacja po wysłaniu formularza z błedem że login nie może zawierać polskich znaków ...

dodatkowo strlen" title="Zobacz w manualu PHP" target="_manual do sprawdzenia długości ... is_string" title="Zobacz w manualu PHP" target="_manual do sprawdzenia typu przesyłanego tekstu ...

Cytat(Zbooj @ 4.09.2008, 14:09:11 ) *
- mail, ta sama sytuacja co w username plus duze litery bo mam zamiar dodatkowo uzyc strtolower()


chcesz użyć strtolower? a jak ktoś ma duże znaki w e-mailu? chociaż nie wiem czy to możliwe ale kto wie ... (ja nie wiem ^^)

do sprawdzenia dużych lub małych litera użyj regexów ... ereg" title="Zobacz w manualu PHP" target="_manual

a do kompletnej walidacji użyj tego ...
  1. <?php
  2. function check($var) { 
  3.  
  4. $var = @mysql_real_escape_string($var); 
  5. $var = htmlspecialchars($var, ENT_QUOTES); 
  6. $var = trim($var); 
  7.  
  8.  
  9. $var = addslashes($var); 
  10.  
  11. }
  12.  
  13. $var = strip_tags($var); 
  14.  
  15. return $var;
  16.  
  17. }
  18. ?>
Zbooj
Cytat
Ja używalem kiedyś jednej w ktorej podawało sie klucz z tablicy post, minimalna dlugosc, maksymalna dlugosc, "czy pole wymagane", pattern [opcjonalne]. Pierwzse 4 wiadomo ale ostatnie jest to popropstu zwykły pattern do preg_matcha ktory mial sprawdzac poprawnosc wprowadzonych danych.

Fajny skrypt smile.gif i pomysł. Jak wygladała składnia tej zmienniej globalnej i jej sprawdzanie?

Cytat
chcesz użyć strtolower? a jak ktoś ma duże znaki w e-mailu? chociaż nie wiem czy to możliwe ale kto wie ... (ja nie wiem ^^)

Maile raczej sa z malych liter.

decha-design nie rozumiem działania trim($var), co to robi?

Chce ograniczyc funkcją ereg wpisywanie znaków niebezpiecznych tzn nawiasow slashów cudzyslowow itp. czy to dobry pomysl?
decha-design
wywala białe znaki z tekstu (z poczatku i konca) oraz te znaczki: /n /t /r itd ...
wookieb
Kod
function checkField($key, $min, $max, $req=false, $preg=false)
{
    if(!isset($_POST['send'])) return true;
    
    if(!isset($_POST[$key])) $_POST[$key]='';
    else $_POST[$key]=trim($_POST[$key]);
    
    if(strlen($_POST[$key])==0 && $req==true) return 1;
    
    if(strlen($_POST[$key])<$min && $req==true) return 2;
    
    if(strlen($_POST[$key])>$max) return 3;
    
    if($preg)
    {
        if(!preg_match($preg, $_POST[$key])) return 4;
    }
    
    return true;
}
function getFormError($ret, $arr)
{
    if($ret===true) return '';
    global $errors;
    $errors++;
    return '<tr><td colspan="2" style="color: red; font-size: 14px;">'.$arr[($ret-1)].'</td></tr>';
}
<?php
        $arr=array();
        $arr[]='Podaj imię';
        $arr[]='Imię jest za krótkie';
        $arr[]='Imię jest za długie';
        echo getFormError(checkField('imie', 4, 30, true), $arr);
        ?>
        <tr>
            <td style="font-weight: bold; text-align: right; font-size: 14px;">
                Imię *:
            </td>
            <td>
                <input type="text" name="imie" value="<?php echo $_POST['imie']; ?>" />
            </td>
        </tr>
henio
Cytat(Zbooj @ 4.09.2008, 14:15:05 ) *
Maile raczej sa z malych liter.

Chociażby dziś spotkałem się z mailem, w którym pierwsze litery imienia i nazwiska były z dużej litery
fernet
Ile programistow tyle formularzy rejestracyjnych.

Najchetniej pozbawil bym uzytkownikow mozliwosci zakladanie kont, ale jak juz zdecydowales sie na rejestracje to mysle ze powinienes pomyslec jeszcze o roboteach. Po prawdzie wiekszasc z nich padnie na banalnej walidacji danych ale token da im wiecej do myslanie.
Zbooj
A jak to wyglada w wersji obiektowej. Tworzy się odpowiedni obiekt walidacji danych czy wykorzystuje sie do tego obiekt uzytkownika?
bzybzy
Mnie osobiście podobają się wbudowane w php funkcję filtra i korzystanie ewentualnie z wyrażeń regularnych.

http://www.w3schools.com/php/php_ref_filter.asp

Ciekaw jestem waszej opini i doświadczeń winksmiley.jpg.

Tu przykład zastosowania,
http://www.w3schools.com/php/php_filter.asp
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.