Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Składnia switch nie odczytuje tablicy POST.
Forum PHP.pl > Forum > Przedszkole
Giluś
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.
nospor
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ą...
Kshyhoo
Dla mnie kiedyś to też było dziwne wink.gif
  1. $go = $_POST['go'];
  2. switch($go) {
  3.  
  4. }
nospor
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.
Giluś
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...

nospor
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.
Giluś
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.
nospor
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.
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.