Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> obsługa błędów połączenia z bazą danych, przechwycenie błędu
Birkoff
post 17.10.2005, 11:51:06
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 23.10.2003
Skąd: Gdańsk

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


Problem wygląda następująco:

Piszę instalator do systemu CMS. Instalator ma testować dane do połączenia z bazą danych. Sęk w tym, że chce zeby w razie błędu połączenia nie wywalało mi komunikatu serwowanego standardowo przez php ale zeby strona normalnie wię wyświetliła z moim komunikatem błędu W MIEJSCU W KTÓRYM JA CHCE a nie na początku strony.

1. ... or die(...); - odpada bo nie wyświetli mi strony z formularzem i danymi
2. trigger_error("text", E_USER_ERROR) - no ok, zmienilem komunikat ale efekt wciaz nie ten, ciagle wywala Warning: mysql_connect(): Access denied for user: 'test@localhost

Więc pytanie do ambitnych: jak to zrobić?

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

No i zrobiłem - działa, choć na pewno da się to zrobić lepiej:

  1. <?php
  2. if (@mysql_connect($_POST['database'], $_POST['database_login'], $_POST['database_passwd'])) {
  3. $db_error='';
  4. }
  5. else {
  6. $db_error='Blad polaczenia z baza danych!';
  7. }
  8. ?>



a dalej w tekście strony:

  1. <?php if (!empty($db_error)) { echo '<p align="center" style="color: red;">'.$db_error.'</p>'; }?>



Niemniej czekam na Wasze propozycje i uwagi. smile.gif

Ten post edytował Birkoff 17.10.2005, 12:01:53


--------------------
Webcoder
Go to the top of the page
+Quote Post
darecki
post 20.10.2005, 07:46:26
Post #2





Grupa: Zarejestrowani
Postów: 54
Pomógł: 2
Dołączył: 24.08.2005
Skąd: Warszawa

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


ja bym wstawil error_reporting(0); na samym poczatku no i funkcje tak jak ty poprzedził @ i powinno nie wyzucac juz bledow


--------------------
Copyright ˆ by Darecki Ÿ Wszystkie prawa zastrzeżone
TanioNaRybki.pl
Go to the top of the page
+Quote Post
mike
post 20.10.2005, 07:57:12
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


@Birkoff Pomyśl o wykorzystaniu wyjątków, to jest najlepsze wyjście i zresztą wyjątki do tego są właśnie stworzone.

@darecki tak właśnie powstają skryptu wolne i źle napisane.
Ukrycie i stłumienie wszystkich błędów to ucieczka od problemu a nie jego rozwiązanie. Nie powinno się uprawiać takich praktyk.
Nie wiem czy wiesz ale skrypty, które generują dużo błędów (choć wcale nie musi ich być dużo) nawet takich, które zostają stłumione poprzez @ i niewyświetlone dzięki error_reporting() potrafią wykonywać się do 30% dłużej.
Go to the top of the page
+Quote Post
darecki
post 20.10.2005, 08:16:25
Post #4





Grupa: Zarejestrowani
Postów: 54
Pomógł: 2
Dołączył: 24.08.2005
Skąd: Warszawa

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


mike_mech nie mowie tu o tym aby odrazu wstawiac i tlumic bledy jak by ich nie bylo mam na mysli wykonanie skryptu z obsluga bledow i jezeli juz mamy pewnosc ze jest oki i uruchamiamy skrypt na sieci to w ostatnim etapie (przed wzuceniem na ftp-a) wstawienie error_reporting


--------------------
Copyright ˆ by Darecki Ÿ Wszystkie prawa zastrzeżone
TanioNaRybki.pl
Go to the top of the page
+Quote Post
Crozin
post 22.06.2007, 08:08:24
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Temat bardzooo stary, ale muszę go odkopać winksmiley.jpg
O co chodzi? Mianowicie do obsługi błędów (w prostym skrypcie, który właśnie piszę) postanowiłem użyć set_error_handler() + trigger_error() (właściwie to ten sposób używam pierwszy raz :]).No i wszystko jest ładnie, z jednym małym wyjątkiem (zademonstruję na prostym przykładzie)
  1. <?php
  2.  
  3. error_reporting(E_ALL | E_STRICT);
  4.  
  5. function displayerror($no, $msg){
  6. echo($msg.'<br /><br />');
  7. }
  8.  
  9. set_error_handler('displayerror');
  10.  
  11. if(!@mysql_connect('localhostAA', 'root', ''))
  12. trigger_error('jakis komunikat (ladny)', E_USER_ERROR);
  13.  
  14. ?>
No i taki oto błąd jest generowany:
Cytat
mysql_connect() [function.mysql-connect]: Unknown MySQL server host 'localhostAA' (11001)

jakis komunikat (ladny)
I tutaj moje pytanie. Jak "aktywować" operator @ w przypadku korzystania z powyższego skryptu? winksmiley.jpg

PS. W manualu nic nie znalazłem blink.gif
Go to the top of the page
+Quote Post
nospor
post 22.06.2007, 08:16:14
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
PS. W manualu nic nie znalazłem
Kiepsko szukales:
http://pl.php.net/manual/pl/function.set-error-handler.php
Cytat
however you are still able to read the current value of error_reporting and act appropriately. Of particular note is that this value will be 0 if the statement that caused the error was prepended by the @ error-control operator.

i w twojej funkcji walisz:
  1. <?php
  2. if (!error_reporting()) echo 'byla malpa @';
  3. ?>


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Crozin
post 22.06.2007, 12:32:36
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Coż... jedyne co może mnie chyba teraz opisać to to. Ide pouczyć się czytać ze zrozumieniem :/

Dzięki i pozdrawiam,
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.08.2025 - 04:07