Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Składnia switch nie odczytuje tablicy POST.
Giluś
post 23.08.2012, 10:50:16
Post #1





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

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


Cześć, posiadam kod który odpowiada za wyświetlanie odpowiednich class, kod wygląda tak:

  1. switch ($_POST)
  2. {
  3. case 'log': new logowanie; break;
  4. case 'reg': new rejestracja; break;
  5. case 'przyp': new przypomnij; break;
  6. }


Tablicę otrzymuję taką:

Kod
Array    (
            [login]    =>    login
            [haslo]    =>    haslo
            [log]    =>    Zaloguj
        )


Nic się po prostu nie dzieje, nie ma żadnego błędu, że taka klasa czy plik nie istnieję, całość działa jeśli zastosuję takie rozwiązanie:

  1. if(isset($_POST['przyp'])) {new przypomnij;}
  2. elseif(isset($_POST['reg'])) {new rejestracja;}
  3. elseif(isset($_POST['log'])) {new logowanie;}


(nie chodzi tu o kolejność)..

Ma ktoś jakiś pomysł, aby to zrobić w switch, a nie w if ?.


Pozdrawiam i z góry bardzo dziękuje.
Go to the top of the page
+Quote Post
nospor
post 23.08.2012, 10:52:50
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A od kiedy to do SWITCH zapodaje się tablicę....? Zajrzyj do manuala jak używać SWITCH, bo widać, że nie wiesz.
Do SWITCH zapodaje się zmienną nie będącą tablicą...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kshyhoo
post 23.08.2012, 10:58:55
Post #3





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Dla mnie kiedyś to też było dziwne wink.gif
  1. $go = $_POST['go'];
  2. switch($go) {
  3.  
  4. }


Ten post edytował Kshyhoo 23.08.2012, 10:59:26


--------------------
Go to the top of the page
+Quote Post
nospor
post 23.08.2012, 11:00:56
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ale co tu dziwnego? W manuala jest pokazane do czego służy SWITCH... w manualu jest pokazane jakie konstrukcje można zastąpić switchem.... I napewno nie jest tam napsiane, że coś takiego:
  1. if(isset($_POST['przyp'])) {new przypomnij;}
  2.  
  3. elseif(isset($_POST['reg'])) {new rejestracja;}
  4.  
  5. elseif(isset($_POST['log'])) {new logowanie;}

da się zastipić SWITCHem bo się nie da.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Giluś
post 23.08.2012, 14:26:52
Post #5





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

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


Znalazłem coś takiego:

  1. foreach ($_POST as $post) {
  2. switch ($post) {
  3. case 'log': new logowanie; break;
  4. case 'reg': new rejestracja; break;
  5. case 'przyp': new przypomnij; break;
  6. }
  7. }


Niby powinno działać, a jednak coś jest nie tak...

Go to the top of the page
+Quote Post
nospor
post 24.08.2012, 07:12:35
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




nie: foreach ($_POST as $post) {
a: foreach ($_POST as $post=>$v) {

I przestań zamieniać te swoje IFy na SWITCH bo to jest totalnie bez sensu.... pisałem ci już: SWITCH nie służy do zamiany tego typu konstrukcji....

Co innego gdybyś miał w post indeks o nazwie powiedzmy AKCJA i pod tym indeksem byłyby twoje wartości. Wówczas właśnie byś mógł użyć SWITCH
  1. switch ($_POST['akcja'])
  2.  
  3. {
  4.  
  5. case 'log': new logowanie; break;
  6.  
  7. case 'reg': new rejestracja; break;
  8.  
  9. case 'przyp': new przypomnij; break;
  10.  
  11. }

Do tego właśnie służy SWITCH - do porównywania wartości a nie do porównywania indeksów w tablicy.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Giluś
post 24.08.2012, 09:15:16
Post #7





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

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


Wiem dobrze, że tak powinno się używać switch ($_POST['cos']) {}, a ja chciałem sprawdzić czy w tablicy istnieje obiekt, na początek używałem if, ale później pomyślałem, że może switch będzie dobry - ale widzę jednak, że nie za bardzo... - To może jakieś inne rozwiązanie jest lepsze od warunku if ?.

Pozdrawiam.
Go to the top of the page
+Quote Post
nospor
post 24.08.2012, 12:51:06
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jakbyś dobrze to wiedział, to byś przez X postów uparcie z tym SWITCHEM nie wyjeżdzał...

W takiej postaci jakiej to masz teraz to tylko IF. Jakbyś zmieniał to tak jak ci napisałem w poprzednim to byś mógł użyć SWITCH.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 20:36