Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obsługa błędów
Forum PHP.pl > Forum > Przedszkole
Code46
  1. <?php
  2.  
  3. //------------------->ROZPOCZCIE TRANSAKCJI
  4. $query = &#092;"BEGIN WORK\";
  5. $result = mysql_query($query)
  6. or die (&#092;"Zapytanie nieudane! BŁĄD: \".mysql_error());
  7.  
  8. //Dodanie loginu i hasła
  9. $query = &#092;"INSERT INTO konto(login, haslo, kto) VALUES\" .
  10.  &#092;"('$_POST[login]','\". MD5($_POST[haslo]) . \"','$_POST[Kto]');\";
  11. $result = mysql_query($query)
  12. or die (&#092;"Zapytanie nieudane! BŁĄD: \".mysql_error());
  13. //Sprawdzenie wartości klucza ID
  14. $query = &#092;"SELECT LAST_INSERT_ID()\";
  15. $result = mysql_query($query)
  16. or die (&#092;"Zapytanie nieudane! BŁĄD: \".mysql_error());
  17. $query_data = mysql_fetch_row($result);
  18. $ID = $query_data[0];
  19.  
  20. //Dodanie reszty danych
  21. $query = &#092;"INSERT INTO klient (konto_id, imie, nazwisko, pesel, email, firma, ulica, kod, miejscowosc, tel
    e
  22. on, fax, regon, nip)\".
  23.  \" VALUES ($ID,'$_POST[imie]','$_POST[nazwisko]','$_POST[pesel]','$_POST[email]','$_POST[firma]','$_POST[ulica]','$_POST[kod]','$_POST[miejscowosc]','$_POST[telefon]','$_POST[fax]','$_POST[regon]','$_POST[nip]');\";
  24. $result = mysql_query($query)
  25. or die (\"Zapytanie nieudane! BŁĄD: \".mysql_error());
  26.  
  27. //-------------------> ZATWIERDZENIE TRANSAKCJI
  28. $query = \"COMMIT\";
  29. $result = mysql_query($query)
  30. or die (\"Zapytanie nieudane! BŁĄD: \".mysql_error());
  31.  
  32. //Zamknięcie połączenia z bazą danych
  33. mysql_close($conn);
  34.  
  35. ?>


Parser php jeśli napotka błąd w zapytaniu mysqla, wyświelti na stronie napis "Zapytanie nieudane i opis błędu" a skrypt przestanie się wykonywać czyli żadna zmiana nie zostanie wprowadzona do bazy.

1. Czy powyższy kod jest poprawny? On działa ale czy jest "profesionalny"? Może robię coś nie dokońca poprawnie?
2. Jak zrobić, żeby zamiast opisu błędu podawał kod błędu (liczbowy)? I gdzie można to sprawdzić co taki błąd oznacza? Nie chce żeby użytkownicy wiedzieli co poszło nie tak.

3. Czy taki zapis
  1. <?php
  2. $result = mysql_query($query)
  3. or die (&#092;"Zapytanie nieudane! BŁĄD: \".mysql_error());
  4.  
  5. ?>

można zastąpić innym? Np takim:
  1. <?php
  2. $result = mysql_query($query);
  3. if (!$result) then wyswietl_ladny_blad();
  4.  
  5. ?>

a)Czy można napisać funkcję bez parametrów wyswietl_ladny_blad() , która będzie tworzyła napis w stylu "Wystąpił błąd: KOD BŁDU: $kod_błędu"?
b ) Jak to zrobić?
c)I czy można ją zapisać w pliku include.php.inc (w tym pliku mam nazwe gosta, nazwę bazy i hasło do bazy)?
ActivePlayer
poczytaj o wyjątkach w php5... i poczytaj tez

mysql" title="Zobacz w manualu PHP" target="_manual
mysql_errno" title="Zobacz w manualu PHP" target="_manual

powinno wystarczyc.
mike
Odnośnie "profesjonalności" :
1.
  1. <?php
  2. $query = &#092;"BEGIN WORK\";
  3. $result = mysql_query($query);
  4. ?>

W sytuacji gdzie zapytanie jest bardzo skomplikowane - owszem, ale nie lepiej:
  1. <?php
  2. $result = mysql_query( 'BEGIN WORK' );
  3. ?>

2.
Standardy kodowania
3.
Staraj sie nie używać " tam gdzie można '.

2. i 3. to takie drobnostki.
Ale to są indywidualne sprawy programisty.

Dodatkowo to co napisał @ActivePlayer.
ActivePlayer
profesjonalnosc kody to pojecie względne... moglbys dzielic to na fukncje, klasy, uzywac db layerow i innych wymyslnych metod... czasem smieje sie z tego bo przylapalem siebie sam, na tym ze zamiast 2 linijek kodu, dołączam jakies biblioteki z nieba wzięte... pamiętaj, jesli Twój kod jest łątwy w utrzymaniu i edycji, do tego szybki i malo podatny na bledy, to jest to dobry kod.
Guest
Dzięki Panowie. Przeczytałem. Ale problem z tą funkcją pozostał. Wiem już jak pobrać numer błędu. Chodziło mi o to, czy jest na stronie mysql wykaz błędów.
Czyli klient coś zapisuje do bazy, zapisanie nie udało się a on zobaczy tylko błąd:1048 i tyle - bez opisu. A ja sobie biorę taki kod i sprawdzam na stroni co on oznacza.

Druga sprawa.
Czy sam warunek jest poprawnie zapisany
  1. <?php
  2. $result = mysql_query($query);
  3. if (!$result) then wyswietl_ladny_blad();
  4.  
  5. ?>

questionmark.gif

I jak z tą funkcą. Nie chce korzystać z brzydkiego zapisu echo "Błąd ble ble ble"
tylko napisać funkcję wyswielt_ladny_blad(), która sormatuje tabelkę na środku strony a w niej ładny napis np "Operacja nie udała się. Wystąpił błąd: .....". Żeby za każdym razem nie powielać tych samych kilku linijek a wywoływać funkcję z innego pliku..
Da się coś takiego zrobić?
ActivePlayer
warunek jest ok. poczytaj jeszcze o tym jak poprawnie pisac przejrzysty(ort?) kod. mike_mech dal linka. jak chcesz dawać ładny błąd to w funkcji wyswietl_ladny_blad() zapisuj nazwe i ID błedu do pliku//bazy//gdziekolwiek, a userowi wyswietlasz tylko ze 'wystąpiły problemy techniczne'. aha i odradzam uzywanie dorgi mailowej do raportowania o błędach mysql.... padnie Ci serwer mysqla i zanim sie obejrzysz bedziesz mial 20000 listow z raportami bledów. niezbyt miłe smile.gif
Code46
Cytat
poczytaj jeszcze o tym jak poprawnie pisac przejrzysty(ort?) kod. mike_mech dal linka. jak chcesz dawać ładny błąd to w funkcji wyswietl_ladny_blad() zapisuj nazwe i ID błedu do pliku//bazy//gdziekolwiek, a userowi wyswietlasz tylko ze 'wystąpiły problemy techniczne'. aha i odradzam uzywanie dorgi mailowej do raportowania o błędach mysql.... padnie Ci serwer mysqla i zanim sie obejrzysz bedziesz mial 20000 listow z raportami bledów. niezbyt miłe smile.gif

Ok

Cytat
warunek jest ok.

Wiesz co w między czasie próbowałem sam. I chcaiłem przetestować. Do tej pory miałem tak:
  1. <?php
  2.  
  3. $query = &#092;"SELECT COUNT(login) FROM konto WHERE kto='0'\";
  4. $result = mysql_query($query)
  5. or die (&#092;"Zapytanie nieudane! BŁĄD: \".mysql_error());
  6.  
  7. ?>


i chciałem żeby po każdym udanym odczycie wypisał komunikat "ZAPYTANIE UDAŁO SIE", więc przerobiłem to na taki kod:
  1. <?php
  2.  
  3. $query = &#092;"SELECT COUNT(login) FROM konto WHERE kto='0'\";
  4. $result = mysql_query($query);
  5.  
  6.  if ($result) then echo &#092;"Zapytanie udane\";
  7.  
  8. ?>


Ale parser zatrzymuje wykonywanie skryptu i widzę białą stronę. Dlatego obawiam się czy zapis jest poprawny...
ActivePlayer
  1. <?php
  2. $query = &#092;"SELECT COUNT(login) FROM konto WHERE kto='0'\";
  3. $result = mysql_query($query);
  4. if ($result){
  5.  echo &#092;"Zapytanie udane\";
  6. }
  7. else{
  8.  pokaz_ładny_błąd();
  9.  die();
  10. }
  11.  
  12. ?>


to 'then' to jakies basicowe czy c++sowe ?
Code46
Cytat(ActivePlayer @ 2005-04-19 20:40:09)
to 'then' to jakies basicowe czy c++sowe ?

Hehe żeczywiście złe nawyki. A jeszcze jedno - wiesz jak taką funkcje napisać?

numer 1 - oznacza że nie ma takiej bazy
2 - nie ma takiego rekordu
..
..
itd.

Piszę jedną funkcę którą wrzucam do jakiegoś pliku (możę byc plik config.inc.php - w nim zapisuje parametry połączenia z bazą?), żeby nie powielać kilka razy tego samego kodu.
W funkcji mam np taki kod:
  1. <?php
  2.  
  3.  
  4.  <br><br><br><br><br><br><br><br><br>
  5.  <table width=&#092;"80%\" align=\"center\" border=\"0\" cellpadding=\"14\">
  6. <tr>
  7. <td><h2 class=&#092;"error\">$KOMUNIKAT</h2></td>
  8. </tr>
  9.  </table> 
  10. ?>

A zamiast pisać np
  1. <?php
  2.  
  3.  
  4. $query = &#092;"SELECT COUNT(login) FROM konto WHERE kto='0'\";
  5. $result = mysql_query($query)
  6.  or die (&#092;"Zapytanie nieudane! BŁĄD: \".mysql_error()); 
  7.  
  8. ?>

pisałbym
  1. <?php
  2.  
  3.  $query = &#092;"SELECT COUNT(login) FROM konto WHERE kto='0'\";
  4. $result = mysql_query($query);
  5. if (!$result) wypiszblad($kodbledu);
  6.  
  7. ?>
ActivePlayer
Cytat(Code46 @ 2005-04-19 22:07:53)
Cytat(ActivePlayer @ 2005-04-19 20:40:09)
to 'then' to jakies basicowe czy c++sowe ?

Hehe żeczywiście złe nawyki. A jeszcze jedno - wiesz jak taką funkcje napisać?

numer 1 - oznacza że nie ma takiej bazy
2 - nie ma takiego rekordu
..
..
itd.

Piszę jedną funkcę którą wrzucam do jakiegoś pliku (możę byc plik config.inc.php - w nim zapisuje parametry połączenia z bazą?), żeby nie powielać kilka razy tego samego kodu.
W funkcji mam np taki kod:
  1. <?php
  2.  
  3.  
  4.            <br><br><br><br><br><br><br><br><br>
  5.            <table width=&#092;"80%\" align=\"center\" border=\"0\" cellpadding=\"14\">
  6.                   <tr>
  7.                       <td><h2 class=&#092;"error\">$KOMUNIKAT</h2></td>
  8.                   </tr>
  9.            </table> 
  10. ?>

A zamiast pisać np
  1. <?php
  2.  
  3.  
  4.   $query = &#092;"SELECT COUNT(login) FROM konto WHERE kto='0'\";
  5.   $result = mysql_query($query)
  6.      or die (&#092;"Zapytanie nieudane! BŁĄD: \".mysql_error()); 
  7.  
  8. ?>

pisałbym
  1. <?php
  2.  
  3.  $query = &#092;"SELECT COUNT(login) FROM konto WHERE kto='0'\";
  4.   $result = mysql_query($query);
  5.   if (!$result) wypiszblad($kodbledu);
  6.  
  7. ?>

ale po co userowi przedstawiac kod błędu. lepiej zapisz sobie go gdzies, np w pliku. a user niech zobaczy jakis statyczny napis informujący o problemach z serwerem czy cokolwiek.
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.