Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Operatory porównania.
Kużdo
post
Post #1





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

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


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





Grupa: Zarejestrowani
Postów: 320
Pomógł: 36
Dołączył: 28.08.2006
Skąd: Wrocław

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


localhost dał Ci bana? (IMG:style_emoticons/default/tongue.gif)
sprawdź sobie (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
MateuszS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


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. }


Ten post edytował MateuszScirka 13.03.2010, 22:01:06
Go to the top of the page
+Quote Post
Kużdo
post
Post #4





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

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


@bogdan89 - tak dał, bo nie używam WAMPów (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/haha.gif)
Go to the top of the page
+Quote Post
bogdan89
post
Post #5





Grupa: Zarejestrowani
Postów: 320
Pomógł: 36
Dołączył: 28.08.2006
Skąd: Wrocław

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


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 (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
Kużdo
post
Post #6





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

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


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. }
Go to the top of the page
+Quote Post
MateuszS
post
Post #7





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


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 ;]
Go to the top of the page
+Quote Post
Kużdo
post
Post #8





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

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


W sumie to masz rację (IMG:style_emoticons/default/haha.gif) Nie pomyślałem akurat o tym... Dzięki ^^
Go to the top of the page
+Quote Post
ucho
post
Post #9





Grupa: Zarejestrowani
Postów: 300
Pomógł: 32
Dołączył: 31.07.2006

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


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





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Ucho, jeszcze do tej funkcji dokłoży tablice i petle i ma jeszcze krocej.

Ten post edytował MateuszScirka 14.03.2010, 11:47:25
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 5.10.2025 - 11:04