Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][PHP][JavaScript]Przerwanie skrypty w momencie błędnej nazwy kolumny w bazie
Forum PHP.pl > Forum > Przedszkole
Grandalf00
Z wykorzystaniem XHR wysyłam zapytanie do aktualizacji wpisów w bazie. Przed wdrożeniem nowej wersji staram się sprawdzać czy wszystko jest ok, ale wiadomo, że zawsze może coś umknąć. Testowo zmieniłem w skrypcie nazwę jednej kolumny. Zapytanie zostało wykonane, jedynie dla błędnej kolumny nie zostały wprowadzone zmiany. W jaki sposób zatrzymać skrypt, przekazać odpowiedni komunikat np przez alert() gdy w skrypcie będzie właśnie pomyłka w nazwie kolumny?
nospor
Nie mozliwe.

Pokaz moze kod jak ty dokonujesz tych zmian. Bo odnosze wrazenie ze dla kazdej kolumny masz oddzielne zapytanie
Grandalf00
Nie, wszystko robię jednym zapytaniem:

  1. UPDATE tab SET k1 = '', k2 = '' ... WHERE id = ''


Jeśli nie można zatrzymać skryptu, to może da się w jakiś sposób przechwycić komunikat z bazy o błędnej nazwie i wyrzucić na ekran?
nospor
Cos krecisz. Raz mowisz ze sie zapytanie wykonuje a jedynie dla zlej kolumny nic sie nie dzieje, a teraz jednak twierdzisz ze zapytanie rzuca bledem. To sie zdecyduj


I tak, mozna pobrac kod bledu zapytania. Jak? A to zalezy czego uzywasz do zapytan.
Grandalf00
Źle się wyraziłem.

Aktualizuje wpisy przesyłając dane przez XHR. Problem w tym, że gdy w zapytaniu do aktualizacji bazy jest błąd to użytkownik tego nie wie, jest przekonany, że wszystko poszło ok, dopiero w logach jest informacja o błędzie (zrobiłem logowanie zdarzeń do pliku). Więc chciałbym aby do użytkownika 'wracał' komunikat, że coś jest nie tak.
nospor
No to faktycznie zle sie wyraziles.

Odpowiedzi juz ci udzielilem
Cytat
I tak, mozna pobrac kod bledu zapytania. Jak? A to zalezy czego uzywasz do zapytan.
Grandalf00
Czego? Tzn?

Zapytanie wykonuje przez

  1. $dbc->query($sql)
nospor
a $dbc to obiekt jakiej klasy? Zrozum, my to wrozki nie jestesmy, twojego kodu nie widzimy.
Grandalf00
  1. $dbc = db_connect();
  2.  
  3. function db_connect() {
  4. $host...
  5. $user...
  6. $pass...
  7. $db...
  8. $tab...
  9. $dbc = new mysqli(...
  10. return $dbc
  11. }
nospor
czyli mysqli

Tu masz bledy w mysqli
http://php.net/manual/en/mysqli.errno.php
Grandalf00
To ja wiem, tylko, że błąd pojawia się poza stroną główną (XMLHttpRequest), którą widzi użytkownik więc skrypt musiałby przechwycić te informacje i wyświetlić na ekranie.
viking
Poczytaj o łapaniu wyjątków. Ustawiasz sobie http://php.net/manual/en/mysqli-driver.report-mode.php na MYSQLI_REPORT_STRICT, potem w skrypcie:
  1. try {
  2. // twój blok zapytań lub innych komend które mogą rzucić wyjątkiem
  3. return json_encode(costam do klienta na sukces);
  4. } catch (Exception $e) {
  5. return json_encode(['message' => 'Jakiś błąd np $e->getMessage()']);
  6. }
Grandalf00
Na stronie głównej w skrypcie XHR zrobiłem takie coś:

  1. if (window.XMLHttpRequest) {
  2. xmlhttp = new XMLHttpRequest();
  3. } else {
  4. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  5. }
  6. xmlhttp.onreadystatechange = function() {
  7. if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
  8. //
  9. ---> alert(xmlhttp.responseText);
  10. }
  11. };
  12. if (confirm("Zaktualizować zaznaczony wpis?") == true) {
  13. xmlhttp.open("GET","aktualizuj.php?id="+id+
  14. "&a1="+a1+
  15. "&a2="+a2+
  16. "&a3="+a3+
  17. "&a4="+a4+
  18. "&a5="+a5+
  19. "&a6="+a6+
  20. "&a7="+a7+
  21. "&a8="+a8+
  22. "&a9="+a9+
  23. "&a10="+a10+
  24. "&a11="+a11+
  25. "&a12="+a12+
  26. "&a13="+a13+
  27. "&a14="+a14,true);
  28. xmlhttp.send();
  29. }


w pliku aktualizuj.php uzupełniłem kod try {}, catch {} lecz w alercie nic się nie pojawia. Chyba inaczej trzeba zwrócić dane aby pojawiły się w .responseText?
nospor
No to moze nie return json_encode a echo json_encode.
Odpal Firebug w firefox i patrz co idzie ajaxem.
Grandalf00
No właśnie przed chwilą spróbowałem i poszło, zwraca komunikaty. Dzięki
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.