Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX][PHP][JavaScript]Przerwanie skrypty w momencie błędnej nazwy kolumny w bazie
Grandalf00
post
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 23.01.2016

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


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
nospor
post
Post #2





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




Nie mozliwe.

Pokaz moze kod jak ty dokonujesz tych zmian. Bo odnosze wrazenie ze dla kazdej kolumny masz oddzielne zapytanie


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

"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
Grandalf00
post
Post #3





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 23.01.2016

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


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?

Ten post edytował Grandalf00 31.08.2016, 07:18:41
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




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.


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

"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
Grandalf00
post
Post #5





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 23.01.2016

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


Ź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.
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




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.


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

"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
Grandalf00
post
Post #7





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 23.01.2016

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


Czego? Tzn?

Zapytanie wykonuje przez

  1. $dbc->query($sql)
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




a $dbc to obiekt jakiej klasy? Zrozum, my to wrozki nie jestesmy, twojego kodu nie widzimy.


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

"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
Grandalf00
post
Post #9





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 23.01.2016

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


  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. }


Ten post edytował Grandalf00 31.08.2016, 07:50:48
Go to the top of the page
+Quote Post
nospor
post
Post #10





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




czyli mysqli

Tu masz bledy w mysqli
http://php.net/manual/en/mysqli.errno.php


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

"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
Grandalf00
post
Post #11





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 23.01.2016

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


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.
Go to the top of the page
+Quote Post
viking
post
Post #12





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


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. }


--------------------
Go to the top of the page
+Quote Post
Grandalf00
post
Post #13





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 23.01.2016

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


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?
Go to the top of the page
+Quote Post
nospor
post
Post #14





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




No to moze nie return json_encode a echo json_encode.
Odpal Firebug w firefox i patrz co idzie ajaxem.


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

"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
Grandalf00
post
Post #15





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 23.01.2016

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


No właśnie przed chwilą spróbowałem i poszło, zwraca komunikaty. Dzięki
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 Aktualny czas: 21.08.2025 - 10:26