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


napisalem sobie prosty kontroler ale mam problem z konstrukcja switch

oto kod i zaraz wyjasniam o co chodzi :

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


$this->login() - widok wyswietlajacy formularz logowania
$this->inbox() - widok wyswietlajacy inbox

Gdy odpalam index.php jest wszystko ok, nie ma zadnych zmiennych $_POST wiec wyswietlany jest widok logowania jak to wynika z defaultowej czesci konstrukcji switch.
Nastepnie wpisuje login i haslo do skrzynki pocztowej, oto tablica $_POST jaka otrzymuje :

Cytat
Array ( [login] => magisterkamw@gmail.com [pass] => jakieshaslo [check] => ok )


No i teraz moim zdaniem jesli poprawnie wpisalem dane to powinien wyswietlac sie widok skrzynki inbox $this->inbox() ale zamiast tego powraca mi do widoku logowania.

Gdy wpisze zle haslo i/lub login wyskakuje mi oczywisty komunikat :

Cytat
Warning: imap_open() [function.imap-open]: Couldn't open stream {imap.gmail.com:993/imap/ssl} in C:\Apache\htdocs\PrackaMgr\class.MailboxAccess.php on line 13


Ale tego akurat moznaby sie spodziewac,

Nie wiem co robie nie tak ze zamiast do widoku $this->inbox() znowu przekierowuje mnie do widoku logowania......
patryczakowy
Sprawdź co rzeczywiście zwraca ci ten fragment czy czasem nie false?
  1. ($this->model->connect('gmail.com',$postvars['login'],$postvars['pass'],'993','imap')

i zrób jeszcze
  1. print_r($postvars);
Wolfie
Ale ten fragment ma zwracac false jesli logowanie bedzie nieudane.....imap_open zwraca false jesli logowanie sie nie powiedzie.....

Ale stalo sie cos bardzo dziwnego

gdy zmienilem ten fragment na :
  1. if((print_r($this->model->connect('gmail.com',$postvars['login'],$postvars['pass'],'993','imap'))) == false) {


To nagle zaczela sie wyswietlac skrzynka prawidlowo, no ale raczej o taka konstrukcje mi nie chodzi......nie wiem jakim cudem to zaczelo dzialac......

Tablice postvars juz pokazalem w pierwszym poscie

Cytat
Array ( [login] => magisterkamw@gmail.com [pass] => jakieshaslo [check] => ok )
patryczakowy
może pokaz nam metodę connect zadziałało bo print_r wrócił ci coś innego niż false. W każdym będź razie moim zdaniem problem leży w tej metodzie connect a raczej w tym co ona wraca
Wolfie
prosze bardzo, metoda connect() wyglada tak :

  1. public function connect($server, $user, $pass, $port = 993, $protocol = 'imap') {
  2. if(!($this->_connection = imap_open('{imap.'.$server.':'.$port.'/'.$protocol.'/ssl}', $user, $pass)))
  3. throw new Exception ('Connection failure');
  4. }


z tym ze wogole nie wylapuje narazie wyjatku, nie wiem czy to ma cos wspolnego......

No i w zasadzie ta metoda nic nie zwraca.....
patryczakowy
Spróbuj tak bo w podanym przez ciebie przykładzie nic metoda nie zwraca
  1. public function connect($server, $user, $pass, $port = 993, $protocol = 'imap') {
  2. if(!($this->_connection = imap_open('{imap.'.$server.':'.$port.'/'.$protocol.'/ssl}', $user, $pass)))
  3. return false;
  4. }else
  5. return true;
  6.  
Wolfie
No tak, teraz dziala prawidlowo, w zasadzie to ta metoda powinna zwracac wartosc funkcji imap_open bo jesli polaczenie sie nie powiedzie to wlasnie jest zwracany false,

A jezeli zostawie ta metode tak jak Ty mi pokazales to w jaki sposob wylapac wyjatek ?
patryczakowy
to zrób tak
  1. public function connect($server, $user, $pass, $port = 993, $protocol = 'imap') {
  2. $this->_connection = imap_open('{imap.'.$server.':'.$port.'/'.$protocol.'/ssl}', $user, $pass);
  3. return $this->_connection;
  4. ;
  5.  
  6.  

Albo tak
  1. public function connect($server, $user, $pass, $port = 993, $protocol = 'imap') {
  2. if(!($this->_connection = imap_open('{imap.'.$server.':'.$port.'/'.$protocol.'/ssl}', $user, $pass)))
  3. throw new Exception ('Connection failure');
  4. }else
  5. return $this->_connection;
  6.  
Wolfie
To nie bedzie dobre bo imap_open zwraca albo false albo identyfikator polczenia......wiec nigdy nie zwroci true......

zreszta juz probowalem ten pierwszy sposob i wychodza takie kwiatki jak na poczatku......

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

Sorry jednak dziala tongue.gif
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.