Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: switch
Forum PHP.pl > Forum > Przedszkole
tomekp
Witam, mam problem z funkcją switch.
Wyświetla mi wszystkie default odrazu, a nie powinno tak być.
Co może być tego przyczyną ?

Kod jest dostępny pod tym linkiem.

switch.phps
Bakus
  1. <?php
  2. switch ($opcja) {
  3. case 'ftp':
  4. switch($_GET[&#092;"g\"]) { // błąd nr. 1
  5. case 'add':
  6. module_service_ftp_add();
  7. break;
  8. case 'edit':
  9. module_service_ftp_edit();
  10. break;
  11. case 'password':
  12. module_service_ftp_password();
  13. break;
  14. default:
  15. module_service_ftp();
  16. break;
  17. }
  18.  break; // błąd nr. 2
  19. case 'domains':
  20. switch($_GET[&#092;"g\"]) { // błąd nr. 3
  21. case 'add':
  22. module_service_domain_add();
  23. break;
  24. case 'delete':
  25. module_service_domain_delete();
  26. break;
  27. default:
  28. module_service_domain_list();
  29. break;
  30. }
  31.  break; // błąd nr. 4
  32. default:
  33. echo &#092;"Hello\";
  34. break;
  35. }
  36. ?>
tomekp
dzięki, ale dlaczego uważasz, że błędem jest nie użycie w $_GET[g] cudzysłowiów ? Czy to ma jakieś większe znaczenie ? Pytam ponieważ działa mi również bez tych cudzysłowiów.
kszychu
Błędem jest brak break po case'ach na pierwszym poziomie.
scanner
Już kilaknaści erazy tłumaczyłem...

  1. <?php
  2. echo $_GET[foo]
  3. ?>
Oznacza:
Wyświetl wartość tablicy $_GET o indeksie zapisanym w stałej foo.
  1. <?php
  2. echo $_GET['foo']
  3. ?>
Oznacza:
Wyświetl wartość tablicy $_GET o indeksie foo.

Różnica jest ogromna nie uważasz?
w pierwszym przypadku php zadziała tak:

Sprawdzi istnienie stałej foo.
Jeśłi jej nie ma, wygeneruje warning, podstawi jako jej wartość jej nazwę (wykona define( 'foo', 'foo' );
pobierze wartość z indexu.
Czyli teoretycznie działa, ale... to jest błąd, niestety na razie nie słysząłem, aby to mieli zmienić.

Indexy tablicy zapisujemy:
  1. <?php
  2. //cyfrowe:
  3. $arrFoo[0];
  4. // literowe
  5. $arrFoo['bar']; /* lub */ $arrFoo[&#092;"bar\"];
  6. //zapisane w zmiennych
  7. $strBar = 'bar';
  8. $arrFoo[$strBar];
  9. //zapisane w stałych
  10. define( 'bar', 'bar' );
  11. $arrFoo[bar];
  12. ?>
tomekp
Teraz wszystko jest już jasne.
Tak uważam iż to ogromna różnica, dzięki za wytłumaczenie.

A gdy używam :

  1. <?php
  2.  
  3. $zapytanie = sql(&#092;"SELECT * FROM obsluga.domains WHERE kod_klienta = '$kod_klienta' AND id = '$id'\");
  4. $wiersz = mysql_fetch_array($zapytanie);
  5.  
  6. ?>


To zmienne bazy też mam wywoływać w sposób $wiersz['domain'] czy nie jest to już konieczne ?
party
To też jest tablica...
mazy
o co ci chodzi z tym bledem?

Cytat(kszychu @ 2004-06-17 09:45:13)
Błędem jest brak break po case'ach na pierwszym poziomie.

Cytat
Po etykiecie case mogą nie występować żadne instrukcje, co oznacza po prostu, że sterowanie zostaje przekazane do następnej etykiety case.

  1. <?php
  2. switch ($i) {
  3.  case 0:
  4.  case 1:
  5.  case 2:
  6.  print &#092;"i jest mniejsze od 3, ale nie jest ujemne\";
  7.  break;
  8.  case 3:
  9.  print &#092;"i jest równe 3\";
  10. }
  11. ?>
kszychu
Ale jeżeli występują jakieś instrukcje, jak w tym przypadku, i nie dasz break to wiesz co będzie się działo? Nie wiesz? To przeczytaj odpowiedni fragment manuala i zacytuj go tutaj.
mazy
hehe napisales ze to jest blad a to nie blad, uwazaj wiec co piszez bo mozesz wprowadzić kogoś w blad ( ;/ ciagle ten blad;) ) ps. nie obraz sie ale ja bym to uznal za pisania dla tych numerkow pod avatarkiem winksmiley.jpg bo w sprawie to nic nie pomogles winksmiley.jpg

a i nie odpisuj bo juz w ogole bedze offtopic.gif

pozdrawiam
party
Cytat
... php rozpoczyna wykonywanie kodu od miejsca, gdzie znajduje się ta instrukcja case. php wykonuje instrukcje aż do momentu kiedy blok switch  się skończy, lub do momentu znalezienia instrukcji break. Jeśli nie napiszesz instrukcji break na końcu instrukcji w danym wyrażeniu case to php będzie wykonywać dalej instrukcje z następnego wyrażenia case.

http://pl.php.net/switch

EOT smile.gif
rzseattle
php => php Początkujący
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.