Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Isset i Empty - kilka pytań
Forum PHP.pl > Forum > Przedszkole
Baku12345
Witam
Mój system logowania w mocnym uproszczeniu wygląda tak

  1. if (isset($_POST['login']) && isset($_POST['haslo']))
  2. {
  3. if (!empty($_POST['login']) && !empty($_POST['haslo']))
  4. {
  5. $login = addslashes(strip_tags($_POST['login']));
  6. $haslo = addslashes(strip_tags($_POST['haslo']));
  7.  
  8. $result = $dbase->get_query("SELECT * FROM uzytkownicy where login = '".$login."' && haslo = '".$haslo."';");
  9.  
  10. if ($result)
  11. {
  12. echo "zalogowany";
  13. }
  14. else
  15. {
  16. echo "podałeś błędny login lub hasło!<br>spróbuj ponownie";
  17. }
  18. }
  19. else
  20. {
  21. echo "nie wprowadziłeś wszystkich danych<br>spróbuj ponownie";
  22. }
  23. }



Zauważam w nim jednak kilka luk i w związku z tym mam kilka pytań:
- Po pierwsze, jeżeli przy zmiennej login nie dopiszę isset, to wyskakuje mi błąd notice, a jeżeli dopiszę tak jak to jest teraz to występuje sytuacja niepożądana. Pozwalam wtedy użytkownikom na wpisywanie pustych znaków lub niewpisywanie niczego. Muszę się wtedy ratować funkcją empty, by sprawdzić czy zmienna nie jest pusta. Czy jest jakiś sposób na to żeby nie musieć dopisywać isset? Bo to trochę głupie jest najpierw zezwalać na puste znaki funkcją isset po to żeby za chwilę funkcją empty zabeaniać ich wpisywania.
- Po drugie, czy istnieje jakaś funkcja podobna do empty, która akceptuje wpisanie 0 (zera) ale blokuje białe znaki? Bo empty chroni przed tym jak ktoś nic nie wpisze, ale jak już ten ktoś wklepie kilka razy spację to nie ochroni. Natomiast jak ktoś wprowadzi znak 0 (zero) to go nie dopuszcza.
- I trzecie ostatnie pytanie. Dlaczego tylko przy pierwszej zmiennej tutaj przy loginie wymaga, żeby dopisać isset a przy haśle nie? Wymusza, by przy zmiennej post login było isset, a przy zmiennej post hasło już sobie można dopisać isset, ale się nie musi.
markuz
A czemu miałbyś użytkownikowi nie pozwolić na wpisywanie "białych znaków"? To jego sprawa, że wpisuje błędne dane. Ew. możesz login i hasło jeszcze trim() - em potraktować.
Pyton_000
Możesz sobie isset sprawdzić czy istnieje pole, a potem preg_match sprawdzić czy string ma w sobie niedozwolone znaki, jeżeli tak to błąd.

Ad. empty:
http://pl1.php.net/empty#103756
Baku12345
Może się czepiam, ale po prostu wydało mi się głupie dodawanie isset i pozwalanie na użycie białych znaków, żeby za chwilę musieć sprawdzać poprzez empty czy przypadkiem nie zostały one wpisane. Myślałem, że może jest sposób żeby nie musieć dopisywać do zmiennej issetu i wtedy już nie musiałbym dodatkowo stosować empty. Ale wtedy pojawia się błąd notice.

No i druga sprawa to z tym zerem. Przecież zero to znak (liczba), to jak się go wpisze to błędnie skrypt pokaże, że nie zostały wypełnione pola, bo przecież zostały wypełnione tym właśnie zerem.

Jeśli można to prosiłbym o wyjaśnienie zasady działania zmiennych tablicowych w warunkach if. A dokładniej, to dlaczego jest mus, żeby pierwsza zmienna (w moim przypadku login) miała dopisane isset a druga (zmienna hasło) może mieć to dopisane ale nie musi.
Pyton_000
Bo jeżeli wysyłasz form to na bank masz 2 pola, więc isset defacto nie jest potrzebny dla password, ale dobrze jak jest.

Poza tym zamiast isset możesz zostawić tylko empty, da to ten sam efekt tyle że ze sprawdzeniem czy ciąg nie jest pusty
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.