Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Operatory porównania.
Forum PHP.pl > Forum > Przedszkole
Kużdo
Witam,

Wiem, że może to być głupie pytanie, ale ciągle mnie dręczy, więc wolę się upewnić i zapytać. Czy można zapisać porównanie "jeśli większy od X i mniejszy od Y to" w jednym porównaniu zamiast w dwóch? Bo np. patrząc na skrypt w którym muszę sprawdzać za jednym razem wiele danych, czy się zgadzają to takich warunków byłoby kilkanaście... Szybko i łatwo można byłoby się pogubić w tak długim if'ie... Więc ciągle zastanawiam się czy można użyć zapisu np.
  1. if((5 < strlen($zmienna1) < 20) AND (5 < strlen($zmienna2) < 20) AND (5 < strlen($zmienna3) < 20) AND (5 < strlen($zmienna4) < 20))


No bo spójrzmy prawdzie w oczy. Który zapis jest ładniejszy?
  1. if((5 < strlen($zmienna1) < 20) AND (5 < strlen($zmienna2) < 20) AND (5 < strlen($zmienna3) < 20) AND (5 < strlen($zmienna4) < 20))
  2.  
  3. if(strlen($zmienna1) > 5 AND strlen($zmienna1) < 20 AND strlen($zmienna2) > 5 AND strlen($zmienna2) < 20 AND strlen($zmienna3) > 5 AND strlen($zmienna3) < 20 AND strlen($zmienna4) > 5 AND strlen($zmienna4) < 20)
bogdan89
localhost dał Ci bana? tongue.gif
sprawdź sobie winksmiley.jpg
MateuszS
Jest sposób - tablice

  1. $iloscZmiennych = 10;
  2. for($i=0; $i<$iloscZmiennych; $i++) {
  3. if(strlen($zmienna[$i]) > 5 AND strlen($zmienna[$i]) < 20) {
  4. // tu odpowiednia instrukcja
  5. }
  6. }
  7.  



drugie wyjście to napisanie odpowiedniej funkcji

  1. function buyakasha($zmienna)
  2. {
  3. if(strlen($zmienna) > 5 AND strlen($zmienna) < 20) return true;
  4. else return false;
  5. }
Kużdo
@bogdan89 - tak dał, bo nie używam WAMPów winksmiley.jpg
@MateuszScirka - myślałem o łatwiejszym rozwiązaniu, np. takim jakie podałem ;P Ale dzięki za odpowiedź ^^

Programiści PHP mogliby pomyśleć nad takim rozwiązaniem ^^ Ułatwia życie, a w niczym nie przeszkadza haha.gif
bogdan89
Cytat(kuzdo @ 13.03.2010, 22:06:39 ) *
Programiści PHP mogliby pomyśleć nad takim rozwiązaniem ^^ Ułatwia życie, a w niczym nie przeszkadza haha.gif


Nie, to nie tak. Architektura systemów jest taka i już.
Gdzie byś nie zobaczył: Pascal, C, C++, Java ... I tak jest dobrze, że można składać instrukcje za pomocą AND i OR.

Żeby było ładniej to możesz rozdzielić te warunki na osobne instrukcje.
Sprawdzać wszystkie po kolei, a na końcu sprawdzić czy wystąpiły błędy i w razie czego przerwać działanie.
Kużdo
No właśnie już przepisałem sobie jedną funkcję na kilka, bo funkcje sprawdzające poprawność danych przydadzą się w minimum dwóch miejscach (rejestracja i logowanie).
Mam tylko pytanie, czy można pisać w taki sposób (w taki sposób są pisane niektóre funkcje w Biblii PHP5 i MySQL):
  1. function strlen_login($login) {
  2. return (strlen($login) >= 5 && strlen($login) <= 20);
  3. }

Czy może lepiej (lepiej or ładniej or bezpieczniej or nie_wiem_co):
  1. function strlen_login($login) {
  2. if(strlen($login) >= 5 && strlen($login) <= 20) return true;
  3. else return false;
  4. }
MateuszS
W tym przypadku nie ma różnicy w działaniu, ja napisałem tak żeby było przejrzyście i żebyś wiedział że w przypadku spełnienia war. instrukcji zwracana jest prawda w przeciwnym wypadku fałsz. Ale jeżeli ma ta funkcja być używana wiele razy, to zmień jej nazwę i nazwe zmiennej parametrycznej na jakieś nie odwołujące się do pól formularza itd, będzie bardziej PRO ;]
Kużdo
W sumie to masz rację haha.gif Nie pomyślałem akurat o tym... Dzięki ^^
ucho
Przy użyciu pomocniczej funkcji może to wyglądać np. tak
  1. if(lenInRange($zmienna1,5,20) && lenInRange($zmienna2,5,20) & lenInRange($zmienna3,5,20) && lenInRange($zmienna4,5,20))

Tylko, że skoro (prawdopodobnie) chcesz walidować formularz, to chyba lepiej przekazać użytkownikowi, które konkretnie pole jest błędnie wypełnione?
MateuszS
Ucho, jeszcze do tej funkcji dokłoży tablice i petle i ma jeszcze krocej.
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.