Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> switch
tomekp
post
Post #1





Grupa: Zarejestrowani
Postów: 171
Pomógł: 0
Dołączył: 17.12.2003
Skąd: Krakół

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


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


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

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


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





Grupa: Zarejestrowani
Postów: 171
Pomógł: 0
Dołączył: 17.12.2003
Skąd: Krakół

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


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





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Błędem jest brak break po case'ach na pierwszym poziomie.
Go to the top of the page
+Quote Post
scanner
post
Post #5





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




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





Grupa: Zarejestrowani
Postów: 171
Pomógł: 0
Dołączył: 17.12.2003
Skąd: Krakół

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


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 ?

Ten post edytował tomekp 17.06.2004, 10:02:06
Go to the top of the page
+Quote Post
party
post
Post #7





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 19.08.2003
Skąd: Bydgoszcz

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


To też jest tablica...
Go to the top of the page
+Quote Post
mazy
post
Post #8





Grupa: Zarejestrowani
Postów: 69
Pomógł: 4
Dołączył: 12.03.2003
Skąd: Suwałki

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


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





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


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





Grupa: Zarejestrowani
Postów: 69
Pomógł: 4
Dołączył: 12.03.2003
Skąd: Suwałki

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


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) bo w sprawie to nic nie pomogles (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

a i nie odpisuj bo juz w ogole bedze (IMG:http://forum.php.pl/style_emoticons/default/offtopic.gif)

pozdrawiam
Go to the top of the page
+Quote Post
party
post
Post #11





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 19.08.2003
Skąd: Bydgoszcz

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Partyzant 17.06.2004, 18:17:13
Go to the top of the page
+Quote Post
rzseattle
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 554
Pomógł: 0
Dołączył: 4.04.2002
Skąd: Tychy

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


php => php Początkujący
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: 9.10.2025 - 14:05