Grandalf00
31.08.2016, 07:02:50
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
31.08.2016, 07:13:21
Nie mozliwe.
Pokaz moze kod jak ty dokonujesz tych zmian. Bo odnosze wrazenie ze dla kazdej kolumny masz oddzielne zapytanie
Grandalf00
31.08.2016, 07:17:11
Nie, wszystko robię jednym zapytaniem:
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
31.08.2016, 07:21:23
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
31.08.2016, 07:34:53
Ź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
31.08.2016, 07:35:55
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
31.08.2016, 07:41:34
Czego? Tzn?
Zapytanie wykonuje przez
$dbc->query($sql)
nospor
31.08.2016, 07:46:53
a $dbc to obiekt jakiej klasy? Zrozum, my to wrozki nie jestesmy, twojego kodu nie widzimy.
Grandalf00
31.08.2016, 07:50:10
$dbc = db_connect();
function db_connect() {
$host...
$user...
$pass...
$db...
$tab...
$dbc = new mysqli(...
return $dbc
}
nospor
31.08.2016, 07:51:19
Grandalf00
31.08.2016, 07:57:03
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
31.08.2016, 07:57:40
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:
try {
// twój blok zapytań lub innych komend które mogą rzucić wyjątkiem
return json_encode(costam do klienta na sukces);
} catch (Exception $e) {
return json_encode(['message' => 'Jakiś błąd np $e->getMessage()']);
}
Grandalf00
31.08.2016, 08:50:28
Na stronie głównej w skrypcie XHR zrobiłem takie coś:
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
//
---> alert(xmlhttp.responseText);
}
};
if (confirm("Zaktualizować zaznaczony wpis?") == true) {
xmlhttp.open("GET","aktualizuj.php?id="+id+
"&a1="+a1+
"&a2="+a2+
"&a3="+a3+
"&a4="+a4+
"&a5="+a5+
"&a6="+a6+
"&a7="+a7+
"&a8="+a8+
"&a9="+a9+
"&a10="+a10+
"&a11="+a11+
"&a12="+a12+
"&a13="+a13+
"&a14="+a14,true);
xmlhttp.send();
}
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
31.08.2016, 09:01:35
No to moze nie return json_encode a echo json_encode.
Odpal Firebug w firefox i patrz co idzie ajaxem.
Grandalf00
31.08.2016, 09:05:41
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.