Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP]Kontynuacja pętli po błędzie
mlody69
post
Post #1





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 18.05.2009

Ostrzeżenie: (0%)
-----


Witam,
mam pewien kod który coś wykonuje, powiedzmy dodaje coś do bazy x razy. Jak zrobić aby przykładowo po 29 powtórzeniu w którym jest bład szło do 30 a nie zatrzymywało skrypt i wywalało błąd?

Z góry dzięki
Go to the top of the page
+Quote Post
lord2105
post
Post #2





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

Ostrzeżenie: (0%)
-----


Najprostsze rozwiązanie to pozbyć się błędów. Może bardziej sprecyzujesz swoje pytania. Jaki to błąd jaka pętla itp
Go to the top of the page
+Quote Post
mlody69
post
Post #3





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 18.05.2009

Ostrzeżenie: (0%)
-----


Nie jest możliwe pozbycie się błędów bo błędy są zalezne od danych wprowadzonych przez usera(login, hasło-zaloguje->idzie do nastepnego, jeżeli haslo zle to blad i stoi).
Pętla foreach
Go to the top of the page
+Quote Post
lord2105
post
Post #4





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

Ostrzeżenie: (0%)
-----


Albo mi się wydaje albo kolega bawi się Brute force
Go to the top of the page
+Quote Post
bastard13
post
Post #5





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


może coś takiego?:
  1. while($liczba_userow<30)
  2. { try {
  3. if(logowanie_usera()===blad)
  4. throw new Exception('wywalilo blad');
  5. }
  6. catch(Exception $e)
  7. { funkcja_obslugujaca_blad(); }
  8. }
Go to the top of the page
+Quote Post
mlody69
post
Post #6





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 18.05.2009

Ostrzeżenie: (0%)
-----


Żadne brute force, czysto domowe. Przykład z userem i hasłem dalem bo jest to coś podobnego.

bastard13: tak, coś w ten deseń.
Go to the top of the page
+Quote Post
bastard13
post
Post #7





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


W takim wypadku w czym jeszcze problem? Napisz funkcję, która sprawdza, czy wyskoczył błąd, niech zwraca false w przypadku błędu. Następnie wywołuj instrukcje zależne od tego czy wystąpił lub nie.
Go to the top of the page
+Quote Post
mlody69
post
Post #8





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 18.05.2009

Ostrzeżenie: (0%)
-----


I w tym problem, że nie mam pojecia jak to zrobić ..(dział Przedszkole (IMG:style_emoticons/default/winksmiley.jpg) )
Go to the top of the page
+Quote Post
Wicepsik
post
Post #9





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

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


Pokaż nam kod, który napisałeś.

Ten post edytował Wicepsik 21.08.2010, 13:25:59
Go to the top of the page
+Quote Post
mlody69
post
Post #10





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 18.05.2009

Ostrzeżenie: (0%)
-----


  1. try {
  2. $newEntry = $cos->zrob_cos
  3. } catch (Zend_Gdata_App_HttpException $httpException) {
  4. echo $httpException->getRawResponseBody();
  5. } catch (Zend_Gdata_App_Exception $e) {
  6. echo $e->getMessage();
  7. }


  1. else {
  2. require_once 'Zend/Gdata/App/AuthException.php';
  3. throw new Zend_Gdata_App_AuthException('Reason: ' .
  4. (isset($goog_resp['Error']) ? $goog_resp['Error'] : 'Unspecified.'));
  5. }
Go to the top of the page
+Quote Post
bastard13
post
Post #11





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Zakładam, że masz kod, który wywala ci błąd:)
Wrzucasz ten kod do logowanie_usera() i:
  1. if(funkcja_ktora_czasami_wywala_bledy()===to_co_wyrzuca_gdy_jest_blad)
  2. return false;

A do funkcja_obslugujaca_blad() dajesz kod, który ma się wykonać, gdy jest błąd, ewentualnie zostaw puste klamry, jeżeli nie chcesz w żaden sposób go obsługiwać.

@up:
rozumiem, że to else wyrzuca ci wyjątek, tyle, że wyrzucasz Zend_Gdata_App_AuthException, którego akurat nie obsługujesz.

Ten post edytował bastard13 21.08.2010, 13:34:40
Go to the top of the page
+Quote Post
mlody69
post
Post #12





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 18.05.2009

Ostrzeżenie: (0%)
-----


Wywala:
  1. Fatal error: Uncaught exception 'Zend_Gdata_App_AuthException' with message
Go to the top of the page
+Quote Post
bastard13
post
Post #13





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Właśnie o tym ci napisałem posta wyżej:) obsługujesz nie te wyjątki, które wyrzucasz, dodaj:
  1. catch (Zend_Gdata_App_AuthException $e) {
  2. echo $e->getMessage();
  3. }
Go to the top of the page
+Quote Post
mlody69
post
Post #14





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 18.05.2009

Ostrzeżenie: (0%)
-----


Gdzie to mam dodać?Przeciez to mam tutaj:
  1. try {
  2. $newEntry = $yt->insertEntry($myVideoEntry, $uploadUrl, 'Zend_Gdata_YouTube_VideoEntry');
  3. } catch (Zend_Gdata_App_HttpException $httpException) {
  4. echo $httpException->getRawResponseBody();
  5. } catch (Zend_Gdata_App_Exception $e) {
  6. echo $e->getMessage();
  7. }
Go to the top of the page
+Quote Post
bastard13
post
Post #15





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Nie masz, ty przechwytujesz: Zend_Gdata_App_HttpException i Zend_Gdata_App_Exception, a wyrzucasz Zend_Gdata_App_AuthException, którego nie obsługujesz. Dodaj jeszcze jednego catch'a i po problemie.
Go to the top of the page
+Quote Post
mlody69
post
Post #16





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 18.05.2009

Ostrzeżenie: (0%)
-----


No tak,
błąd:
  1. Fatal error: Uncaught exception 'Zend_Gdata_App_AuthException' with message 'Authentication with [...]
  2. in /var/www/Zend/Gdata/ClientLogin.php:175 Stack trace: #0 /var/www/test.php(36): Zend_Gdata_ClientLogin::getHttpClient(...)
  3. #1 {main} thrown in /var/www/Zend/Gdata/ClientLogin.php on line 175


  1. catch (Zend_Gdata_App_HttpException $httpException) {
  2. echo $httpException->getRawResponseBody();
  3. } catch (Zend_Gdata_App_Exception $e) {
  4. echo $e->getMessage();
  5. } catch (Zend_Gdata_App_AuthException $e) {
  6. echo $e->getMessage();
  7. }


Jakieś propozycje?:/
Go to the top of the page
+Quote Post
bastard13
post
Post #17





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Zostaw sobie w insertEntry() jedynie (reszte zakomentuj):
  1. // require chyba nie jest potrzebna, bo z tego co kojarzę to w Zendzie jest odpowiedni autoloader
  2. throw new Zend_Gdata_App_AuthException('wyrzucony error'));

i zostaw przy przechwytywaniu tylko:
  1. try {
  2. $newEntry = $yt->insertEntry($myVideoEntry, $uploadUrl, 'Zend_Gdata_YouTube_VideoEntry');
  3. }
  4. catch (Zend_Gdata_App_AuthException $e) {
  5. echo $e->getMessage();
  6. }

i napisz czy działa.
Go to the top of the page
+Quote Post
mlody69
post
Post #18





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 18.05.2009

Ostrzeżenie: (0%)
-----


Pozmieniałem tak jak napisałeś i teraz gdy dane 1 są złe a drugie z kolei dobre to wywala:
Kod
Fatal error: Class 'Zend_Gdata_App_AuthException' not found in /var/www/Zend/Gdata/ClientLogin.php on line 179
Go to the top of the page
+Quote Post
bastard13
post
Post #19





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


A wywaliłeś linijkę?
  1. require_once 'Zend/Gdata/App/AuthException.php';

Go to the top of the page
+Quote Post
mlody69
post
Post #20





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 18.05.2009

Ostrzeżenie: (0%)
-----


Ta
Go to the top of the page
+Quote Post
bastard13
post
Post #21





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


to ją dodaj z powrotem:) myślałem, że w zendzie klasy są ładowane automatycznie:)
Go to the top of the page
+Quote Post
mlody69
post
Post #22





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 18.05.2009

Ostrzeżenie: (0%)
-----


Heh, dodałem. Wywala to:
Kod
Fatal error: Uncaught exception 'Zend_Gdata_App_AuthException' with message 'wyrzucony error :))' in /var/www/Zend/Gdata/ClientLogin.php:180 Stack trace: #0 /var/www/pp.php(44): Zend_Gdata_ClientLogin::getHttpClient('') #1 {main} thrown in /var/www/Zend/Gdata/ClientLogin.php on line 180

Go to the top of the page
+Quote Post
bastard13
post
Post #23





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Sprawdź czy działa coś takiego:
  1. try {
  2. require 'Zend/Gdata/App/AuthException.php';
  3. throw new Zend_Gdata_App_AuthException('wyrzucony error'));
  4. }
  5. catch (Zend_Gdata_App_AuthException $e) {
  6. echo $e->getMessage();
  7. }
Go to the top of the page
+Quote Post
mlody69
post
Post #24





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 18.05.2009

Ostrzeżenie: (0%)
-----


Nic. Przeszło już tyle możliwości, może jest jakiś sposób aby ta pętla leciała dalej :/
Go to the top of the page
+Quote Post
bastard13
post
Post #25





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Poddaję się(IMG:style_emoticons/default/smile.gif) Jak chcesz, żeby leciało dalej to usuń tego elsa, w którym wyrzucasz wyjątek.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 24.12.2025 - 05:28