Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: operator warunkowy
Forum PHP.pl > Forum > Przedszkole
suchy1
Witam robie taki maly system do zarzadzania hotelem(bardzo skromny tongue.gif ) mam problem z "IF" jak wybiore jedna z opcji(formularz html) to pojawiaja mi sie bledy typu " Notice: Undefined index: wynajmowanie in
...." zeby blad sie nie wyswietlal to uzywam "error_reporting(E_ALL ^ E_NOTICE);" ale wydaje mi sie ze poprostu mam zlego IF.


  1. <?php
  2. error_reporting(E_ALL ^ E_NOTICE); 
  3.  
  4. if(($_GET['wynajmowanie']) == true)
  5. {
  6. include("wy.php");
  7. }
  8. if(($_GET['zwracanie']) == true)
  9. {
  10. print ("Brak modułu.");
  11. }
  12. if(($_GET['rezerwacja']) == true)
  13. {
  14. print ("Brak modułu.");
  15. }
  16. if(($_GET['zestawienia']) == true)
  17. {
  18. include("p4.php");
  19. }
  20. ?>


Jezeli moze ktos na to zerknac to bede wdzieczny smile.gif
Gość
Wszedzie zmien na :
  1. <?php
  2. if( isset($_GET['wynajmowanie']) && $_GET['wynajmowanie']== true)
  3. ?>
siemakuba
ify masz prawie OK. Błąd E_NOTICE pojawia ci się, bo próbujesz sprawdzać wartość niezdefiniowanej zmiennej. (kiedy masz np. wynajmowanie, wiadomo ze nie masz zwracanie). Co możesz na to poradzić:
zamiast:
  1. <?php
  2. if(($_GET['wynajmowanie']) == true)
  3. ?>
daj
  1. <?php
  2. if(isset($_GET['wynajmowanie']) && $_GET['wynajmowanie'] == true)
  3. ?>
. chociaż, jaka wartosc przyjmuja te parametry? tylko loginczą? istnieją lub nie? moze lepiej oprzec to na konstrukcji switch" title="Zobacz w manualu php" target="_manual?
  1. <?php
  2. $act = isset($_GET['act']) ? $_GET['act'] : null;
  3.  
  4. switch ($act)
  5. {
  6. default:
  7. print ("Brak modułu.");
  8. break;
  9. case 'wynajmowanie':
  10. include('wy.php');
  11. break;
  12. // itd.
  13. }
  14. ?>

pozdr.

edit:
aha, no i odwolanie wtedt zamiast plik.php?wynajmowanie=1 dajesz plik.php?act=wynajmowanie
suchy1
dzieki wielkie,dziala ! Pozdrawiam
Fipaj
Przepraszam, tak bardziej z ciekawości zagadam, jakby co to mnie poprawicie: isset" title="Zobacz w manualu php" target="_manual wyklucza ten notice...?
siemakuba
@Fipaj: przy takim sprawdzaniu jak powyżej, owszem. Warunek && zwraca false jeżeli którykolwiek ze składników będzie miał wartość false. Wieć jeżeli isset() zwróci false, to wydaje mi się, że dalej nie jest sprawdzane wogóle - odpada więc E_NOTICE o niezdefiniowanej zmiennej.

aha, to tak po mojemu, nie mogę tego poprzeć żadnym słowem pisanym niestety.
pozdr.
nospor
Cytat
aha, to tak po mojemu, nie mogę tego poprzeć żadnym słowem pisanym niestety.
No to masz slowo pisane:
"Zgadza się" - nospor winksmiley.jpg
aczkolwiek tamtego ifa mozna zamienic na takiego:
  1. <?php
  2. if(!empty($_GET['wynajmowanie']))
  3. ?>

empty nie wywala noticow gdy nie ma indexu
Gość
@nospor - w jakich sytuacjach polecasz uzywac isset a w jakich empty ?
siemakuba
no to ja odpowiem, a co! :)
Cytat
@nospor - w jakich sytuacjach polecasz uzywac isset a w jakich empty ?
jest to pytanie natury filozoficznej, i jako takie ma jedyną słuszną odpowiedź :) manual :)
isset" title="Zobacz w manualu php" target="_manual - empty" title="Zobacz w manualu php" target="_manual

isset - sprawdza czy zmienna została zdefiniowana, czy to przez jawne jej zdeklarowanie
  1. <?php
  2. $zmienna = 'wartosc';
  3. ?>
czy przez np. poczatkowe okreslenie typu a potem nadanie wartosci
  1. <?php
  2. $tablica = array();
  3. $tablica[] = 'wartosc';
  4. ?>


empty - sprawdza czy zmienna ma wartosc null lub inna odpowiadającą logicznemu false (pusta zmienna typu string, 0, false, zdeklarowana zmienna klasy ale bez przypisanej wartosci, pusta tablica). empty zwroci tez true dla niezdefiniowanej zmiennej.

wiedzac to - wiadomo kiedy uzyc jakiego sprawdzania - zalezy co chcesz sprawdzic :)
pozdr.
Gość
Bardziej chodzilo mi o to, ze w jakich sytuacjach, np podczas uzuwania formularza etc. Wy (=bardziej dowiadczeni programisci smile.gif uzywacie empty, a kiedy isset. Bo ja prawie zawsze uzywam isset, i nigdy mnie nie zawiodlo, ale wolalbym zaczac stosowac tak jak ktos bardziej obeznany w temacie, a nie wedlug mojego widzimisie.
siemakuba
hmm. ja używam empty kiedy chcę wiedzieć czy zmienna została zdefiniowana i ma wartość inną niż logiczne false. Kiedy chcę wiedzieć tylko czy zmienna została zdefiniowana używam isset. W sumie, tak na dobrą sprawę to można tych konstrukcji w wielu przypadkach używać zamiennie bo efekt będzie dokładnie taki sam.

Tzeba tylko pamiętaj o tej drobnej różnicy ich działania o której pisałem wyżej. Załóżmy, że chcesz sprawdzić czy isntnieje parametr GET o nazwie "wanda".
załóżmy też 5 przykładowych zapytań i wyniki dla sprawdzania obecności paramtetru wanda:
  1. <?php
  2. // 1 - index.php
  3. isset($_GET['wanda']); // false
  4. empty($_GET['wanda']); // true
  5.  
  6. // 2 - index.php?wanda=banda
  7. isset($_GET['wanda']); // true
  8. empty($_GET['wanda']); // false
  9.  
  10. // 3 - index.php?wanda=1
  11. isset($_GET['wanda']); // true
  12. empty($_GET['wanda']); // false
  13.  
  14. // 4 - index.php?wanda=0
  15. isset($_GET['wanda']); // true
  16. empty($_GET['wanda']); // true
  17.  
  18. // 5 - index.php?wanda=
  19. isset($_GET['wanda']); // true
  20. empty($_GET['wanda']); // true
  21. ?>

tak mniej więcej to wygląda. Używać trzeba tak, aby działało według twojego zamierzenia:) Wydaje mi się, że nie ma też żadnej różnicy w szybkości działania. Jeżeli jest - to raczej niezauważalna.

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