Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Przesyłanie informacji metodą GET a negacja
Forum PHP.pl > Forum > Przedszkole
coomler
Witam,
mam nadzieję, że temat wątku mówi to co chcę. Czy poniższy skrypt jest poprawny, tzn. działa, ale czy jest sposób, aby zrobić to krócej, wydajniej. Chodzi mi o radę, gdyż dopiero się uczę i chciałbym wyrobić sobie dobre nawyki.

  1.  
  2. if(!isset($_GET['newsy']) && $_GET['newsy'] != 'otworz' && !isset($_GET['id']))
  3. {
  4.  
  5. echo '<a href="index.php?newsy=otworz&id=' . $wiersze['id'] . '">' . $wiersze['tytul'] . '</a>';
  6. }
  7.  
  8. elseif(isset($_GET['newsy']) && $_GET['newsy'] == 'otworz' && isset($_GET['id']))
  9. {
  10.  
  11. }

Da się krócej/poprawniej napisać warunek w if()?
mrooczilla
  1. f(!isset($_GET['newsy']) && $_GET['newsy'] != 'otworz' && !isset($_GET['id']))



skoro $_GET['newsy '] nie istnieje to dlaczego dalej sprawdza wartość dla klucza 'newsy' ?
thek
Pamiętaj... Jeśli używasz && to każdy kolejny warunek jest sprawdzany gdy poprzednie dają TRUE. Tylko taki układ daje optymalność. If bowiem czeka na true lub false a logiczne AND ma prawdę tylko gdy wszystkie części warunku zwracają prawdę. Wystarczy, że jeden po drodze da false a if przeskoczy do else ( lub do sprawdzanie ifelse jeśli go posiadasz ). Stąd bardzo sensowne jest
  1. isset($_GET['newsy']) && $_GET['newsy'] == 'otworz' && isset($_GET['id'])

bo idzie to łańcuchem. Ja bym nawet już zrobił na tym etapie na końcu jeszcze walidację, jeśli id jest liczbą dodatnią w stylu:
  1. ctype_digit( $_GET['id'] ) && $_GET['id'] > 0
Ale to co masz w if to pomyłka... Skoro $_GET['newsy'] nawet nie istnieją, to po co jeszcze sprawdzać je? Jeśli akurat nie będzie ich, to skrypt przejdzie dalej i wywali warning, że porównujesz do nie istniejącej zmiennej (utworzy ją w locie i ustawi na ciąg pusty -> '') i tak czy siak wywali false, czyli zakończy sprawdzanie warunku w if, przechodząc do ifelse. Logika matematyczna się kłania.
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.