Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Znowu switch
Forum PHP.pl > Forum > Przedszkole
Wolfie
Witam,


Czy jest mozliwosc zrobienia takiej petli switch :

  1. Switch ($_POST) {
  2. case ($_POST['costam']):
  3. //jakies dzialanie
  4. break;


Bo mam taki problem ze mam taka petle :

  1. switch ($postvars['check']) {
  2. case 'ok':


Tylko ze z innego skryptu juz przychodzi inny $postvars a mianowicie taki $postvars['naglowek'] no i teraz nie mam jak go uwzglednic w petli switch, co sie robi w takich przypadkach ?
erix
Cytat
Czy jest mozliwosc zrobienia takiej petli switch :

A jaki to ma sens logiczny? tongue.gif

Cytat
no i teraz nie mam jak go uwzglednic w petli switch

To nie jest pętla!

Cytat
co sie robi w takich przypadkach ?

Zagnieżdża switch. Szczerze mówiąc, to nie mam pojęcia, co chcesz osiągnąć...
Wolfie
No tak nie jest to petla, uzylem zlego slowa, co chce osiagnac ? juz przedstawiam


Mam dwa widoki :

To jest pierwszy :

  1. function login() {
  2. $_SESSION['login'] = true;
  3. $this->output.='<div align="center" class="loginform">'.
  4. '<form action="index.php" method="post">'.
  5. '<input type="text" name="login">'.
  6. '<input type="password" name="pass">'.
  7. '<input type="hidden" name="check" value="ok">'.
  8. '<input type="submit" value="Zaloguj">'.
  9. '</form>'.
  10. '</div>';
  11. }


A to drugi :

  1. function inbox() {
  2. $info = $this->model->status();
  3. $num = $info->Nmsgs;
  4. error_reporting(E_ALL ^ E_NOTICE);
  5. $this->output.='<form action="index.php" method="post"><ul id="lista">';
  6. for($i = 1; $i <= $num; $i++) {
  7. if($this->model->subject($i) === null){
  8. $this->output.='<li><label><input type="checkbox" name="naglowek[]" value="'.$this->model->id($i).'">';
  9. ($this->model->id($i));
  10. $this->output.="Subject: brak tematu".' From: '.$this->model->replace($this->model->from($i)).'</label></li>';
  11. }else {
  12. $this->output.='<li><label><input type="checkbox" name="naglowek[]" value="'.$this->model->id($i).'">';
  13. ($this->model->id($i));
  14. $this->output.='Subject: '.$this->model->replace($this->model->subject($i)).'
  15. From: '.$this->model->replace($this->model->from($i)).'</label></li>';
  16. }
  17. }
  18. $this->output.='<input type="submit" value="Wykonaj" />'.'<br/></ul>'.
  19. '</form>';
  20. }


Pierwszy widok jest do logowania, i przekazuje postem input hidden na podstawie ktorego jest uruchamiany przypadek konstrukcji switch,
Drugi formularz wysyla juz zupelnie inne dane $_POST o nazwie naglowek[].

No i teraz chce tak skonstruowac konstrukcje swich aby uwzgledniala oba przypadki czyli cos takiego dla przykaldu podaje (nie sadze zeby bylo to dobrze , poprostu chce idee przedstawic) :

  1.  
  2. Switch ($_POST) {
  3. case ($_POST['check'] == 'ok'):
  4. //rob costam
  5. break;
  6.  
  7. case ($_POST['naglowek']):
  8. //rob co innego
  9. break;
  10. }



pierwszy przedstawiony widok uruchamia drugi jesli popranie zostana wpisane dane, i teraz chce zeby drugi widok uruchomil trzeci widok po przeslaniu danych tablica $_POST
thek
Szczerze? Problem rozwiązany w sposób jak dla mnie dziwny smile.gif Skoro sprawdzasz zalogowanie, to zapewne masz od tego ustawioną zmienną sesyjną i to nią powinieneś sprawdzać fakt bycia zalogowanym lub nie. Wtedy nie musisz niczego zagnieżdżać i cudować. Czyli struktura wygląda:
sprawdzenie zmiennej sesyjnej,
sprawdzenie czy istnieje check,
sprawdzenie czy istnieje jakakolwiek inna zmienna. Żadne switche niepotrzebne... isset wystarczą smile.gif

EDIT: zapomniałem dopisać... W razie gdy sesja nie jest ustawiona prawidłowo widok logowania. Gdy istnieje check próba zalogowania. Jeśli nie zaloguje to znowu widok logowania. Jeśli zaloguje ustawienie sesji i widok drugi.
Wolfie
No tak , ale kontroler chyba na switchach sie robi z tego co wiem, u mnie wyglada to tak :

  1. function MailboxController ($model,$postvars=null, $session=null) {
  2. MailboxView::__construct($model);
  3. $this->header();
  4. print_r($session);
  5. switch ($postvars['check']) {
  6. case 'ok':
  7. if(($this->model->connect('gmail.com',$postvars['login'],$postvars['pass'],'993','imap')) == false) {
  8. $this->login();
  9. } else {
  10.  
  11. $this->inbox();
  12. }
  13. break;
  14. default:
  15. if ( empty ($postvars) ) {
  16. $this->login();
  17. }// else {
  18. // $this->inbox();
  19. //}
  20. break;
  21. }
  22. $this->footer();
  23. //print_r($pol);
  24. }
  25. }
  26. ?>


Narazie tylko tak, no bo wlasnie nie wiem jak mam przyjac przez petle switch przypadek $_POST['naglowek'].......
Wiec wogole mam sie pozbyc switch'a ?

Widok drugi sie odpala, tylko teraz wlasnie chodzi o to ze klikajac subit w widoku drugim chce widok trzeci wywolac, przekazujac parametr do kontrolera......no i tutaj jest probelm......z ta konstrukcja switch
erix
Cytat
No tak , ale kontroler chyba na switchach sie robi z tego co wiem, u mnie wyglada to tak :

Przejrzyj źródła frameworków, to zobaczysz, że w większości przypadków nie jest to switch. tongue.gif

Cytat
Narazie tylko tak, no bo wlasnie nie wiem jak mam przyjac przez petle switch przypadek $_POST['naglowek'].......

Jak mamy rozmawiać, skoro nawet głupiego terminu sobie nie możesz przyswoić...? Proponuję zacząć od podstaw konstrukcji języka.
thek
No właśnie nie do końca Wolfie tak sie pisze jak mówisz smile.gif Kontroler z reguły ma kilka funkcji wywołujących. Index jest domyślną, ale mogą być także inne. W zależności od tego której potrzebujesz - wywołujesz ją. Inna sprawa jest taka, że kontroler może wywołać dowolne modele i dowolne widoki. W zależności od sytuacji albo jest przekierowanie na inny kontroler, albo używa się jednego spośród kilku widoków i ładuje do niego dane z modelu. Nie ma tak, że jedna klasa robi wszystko. Klasy ładuje się w zależności od zapotrzebowania. Chcesz logować? Klasa logowania, chcesz jakieś dane z artykułami - klasa artykułów, coś z newsami - klasa newsów. Jedyne co jest zazwyczaj wspólne to fakt, że wszystkie dziedziczą po klasie bazowej, która nakazuje im zainicjować pewne określone zmienne. W tym wypadku więc wyglądało by to tak, że zrobiłbym kontroler odpowiadający za logowanie użytkownika. W razie wejścia na stronę ladowałbym kalsę i w zalezności od tego czy dostałbym zmienne post prawidłowe po wysłaniu post w formularzu, to przekierowałbym na inny kontroler lub załadował ponownie widok podstawowy. Tak się zazwyczaj to w obiektówce robi smile.gif Ty zaś chcesz wcisnąć wszystko do jednej klasy zamiast rozbić to sobie na klasy, które zajmują właściwymi sobie rzeczami. Po co wkładać logowanie i obsługę poczty do jednego? Nie lepiej niech osobno jest klasa związana z logowaniem użytkownika i osobno do obsługi skrzynki pocztowej? winksmiley.jpg
Wolfie
Cytat
Po co wkładać logowanie i obsługę poczty do jednego? Nie lepiej niech osobno jest klasa związana z logowaniem użytkownika i osobno do obsługi skrzynki pocztowej? winksmiley.jpg


Moze i lepiej ale ja sie loguje do skrzynki pocztowej wiec jedna klasa obsluguje zalogowanie (polaczenie sie ze skrzynka) jak i jej obsluge, odczytywanie wiadomosci , usuwanie itd....

Cytat
W tym wypadku więc wyglądało by to tak, że zrobiłbym kontroler odpowiadający za logowanie użytkownika. W razie wejścia na stronę ladowałbym kalsę i w zalezności od tego czy dostałbym zmienne post prawidłowe po wysłaniu post w formularzu, to przekierowałbym na inny kontroler lub załadował ponownie widok podstawowy. Tak się zazwyczaj to w obiektówce robi smile.gif


Ok, w takim razie jaki wzorzec powinienem zastosowac zeby manipulowac kontrolerami, jak przekierowywac na odpowiedni kontroler, jakis albgorytm mozna prosic ?
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.