Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Znowu switch
Wolfie
post
Post #1





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


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





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Czy jest mozliwosc zrobienia takiej petli switch :

A jaki to ma sens logiczny? (IMG:style_emoticons/default/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ąć...
Go to the top of the page
+Quote Post
Wolfie
post
Post #3





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


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

Ten post edytował Wolfie 4.09.2009, 16:55:28
Go to the top of the page
+Quote Post
thek
post
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Szczerze? Problem rozwiązany w sposób jak dla mnie dziwny (IMG:style_emoticons/default/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ą (IMG:style_emoticons/default/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.

Ten post edytował thek 4.09.2009, 17:15:37
Go to the top of the page
+Quote Post
Wolfie
post
Post #5





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


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

Ten post edytował Wolfie 4.09.2009, 17:23:46
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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. (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
thek
post
Post #7





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




No właśnie nie do końca Wolfie tak sie pisze jak mówisz (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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? (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Wolfie
post
Post #8





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


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? (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)


Ok, w takim razie jaki wzorzec powinienem zastosowac zeby manipulowac kontrolerami, jak przekierowywac na odpowiedni kontroler, jakis albgorytm mozna prosic ?

Ten post edytował Wolfie 1.10.2009, 17:55:58
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: 23.08.2025 - 06:37