Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Składnia switch nie odczytuje tablicy POST.
Giluś
post
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
 
Start new topic
Odpowiedzi (1 - 7)
nospor
post
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ą...
Go to the top of the page
+Quote Post
Kshyhoo
post
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 (IMG:style_emoticons/default/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
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.
Go to the top of the page
+Quote Post
Giluś
post
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
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.
Go to the top of the page
+Quote Post
Giluś
post
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
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.
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: 22.08.2025 - 20:30