Autor | Zpráva | ||
---|---|---|---|
mjausB Profil |
#1 · Zasláno: 7. 1. 2018, 10:52:55
Ahoj, uz treti den sa trapim so syntaxom JSON aby mi data v premennej ulozilo do databazy.
Javaskript (kde asi bude nejaky zadrhel): var create_data = "{'obj_id': '', 'obj_nr': '1', 'obj_date': '2018-01-01', 'obj_zak': '480', 'obj_user': '1', 'obj_tov': '11', 'obj_qty': '111', 'obj_pozn': 'Poznámka', 'obj_stat': '0'}"; var request = $.ajax({ url: 'data_obj_create.php?job=add_company', cache: false, data: create_data, dataType: 'json', contentType: 'application/json; charset=utf-8', type: 'get' }); a PHP skript - data_obj_create.php: <?php // Prepare array $mysql_data = array(); // Valid job found if ($job != ''){ // Connect to database $db_connection = mysqli_connect($db_server, $db_username, $db_password, $db_name); if (mysqli_connect_errno()){ $result = 'error'; $message = 'Nie je možné spojiť sa s Databázou: ' . mysqli_connect_error(); $job = ''; } // Execute job if ($job == 'add_company'){ // Add company $query = "INSERT INTO objednavka SET "; if (isset($_GET['obj_id'])) { $query .= "obj_id = '" . mysqli_real_escape_string($db_connection, $_GET['obj_id']) . "', "; } if (isset($_GET['obj_nr'])) { $query .= "obj_nr = '" . mysqli_real_escape_string($db_connection, $_GET['obj_nr']) . "', "; } if (isset($_GET['obj_date'])) { $query .= "obj_date = '" . mysqli_real_escape_string($db_connection, $_GET['obj_date']) . "', "; } if (isset($_GET['obj_zak'])) { $query .= "obj_zak = '" . mysqli_real_escape_string($db_connection, $_GET['obj_zak']) . "', "; } if (isset($_GET['obj_user'])) { $query .= "obj_user = '" . mysqli_real_escape_string($db_connection, $_GET['obj_user']) . "', "; } if (isset($_GET['obj_tov'])) { $query .= "obj_tov = '" . mysqli_real_escape_string($db_connection, $_GET['obj_tov']) . "', "; } if (isset($_GET['obj_qty'])) { $query .= "obj_qty = '" . mysqli_real_escape_string($db_connection, $_GET['obj_qty']) . "', "; } if (isset($_GET['obj_pozn'])) { $query .= "obj_pozn = '" . mysqli_real_escape_string($db_connection, $_GET['obj_pozn']) . "', "; } if (isset($_GET['obj_stat'])) { $query .= "obj_stat = '" . mysqli_real_escape_string($db_connection, $_GET['obj_stat']) . "', "; } $query = mysqli_query($db_connection, $query); if (!$query){ $result = 'error'; $message = 'query error'; } else { $result = 'success'; $message = 'query success'; } } // Close database connection mysqli_close($db_connection); } // Prepare data $data = array( "result" => $result, "message" => $message, "data" => $mysql_data ); // Convert PHP array to JSON array $json_data = json_encode($data); print $json_data; ?> |
||
Keeehi Profil |
#2 · Zasláno: 7. 1. 2018, 13:04:05
To není nejspíše vůbec o ajaxu nebo jsonu. Máš totiž špatně ten SQL dotaz. Začátek je INSERT, pak tam máš ale SET což patří do UPDATE dotazu a ne do INSERTu. Tam má být VALUES.
|
||
Tomášeek Profil |
Keeehi:
„Máš totiž špatně ten SQL dotaz. Začátek je INSERT, pak tam máš ale SET což patří do UPDATE dotazu a ne do INSERTu. Tam má být VALUES.“ Nemáš pravdu. Správně jsou obě možnosti, byť ta s VALUES bývá asi častější.
dev.mysql.com/doc/refman/5.7/en/insert.html - v ukázané syntaxi je jedná o druhý způsob (ř. 8-12). mjausB: Kam jsi se dostal? Vykoná se ten JS? Není něco v konzoli? Chyba na serveru? V logu? Mysqli_error? Zkus to trochu oddebugovat a zjistit, kde problém přesně nastává. Problém bude pravděpodobně v PHP na 6. řádku, protože $job !== $_GET['job'] .
|
||
mjausB Profil |
Ano skript prebehne cely nakolko za insertom prebieha presmerovanie na dalsiu stranku a odovzdanie variables do SESSION. Vsetko prebehne a konzola je cista. Mam to cele v if-else kde else je chybova hlaska no ani to sa nevykona Ostatne chyby neviem ako odsledovat :(
Este premyslam ze ci to nie je v samotnych premennych nakolko v databaze su to vsetko INT okrem premennych obj_date a obj_pozn. Keeehi: Ono mi to bezi uplne normalne na inych strankach. Nasiel som to takto niekde ako nejaky priklad a facha to. Takze v tom to asi nebude... Cely JS vypada takto, kde pred tym nacitam kde zakaznik klikol a vezmem ID riadku. Potom nasleduje definovanie premennej adresa, nasledne na to nasleduje ten moj kriticky zapis do databazy. Po nom ide predanie premennych do session a presmerovanie na dalsiu stranku: // Výber zákazníka do objednávky $(document).on('click', '.function_edit a', function(e){ e.preventDefault(); // Get company information from database show_loading_message(); var id = $(this).data('id'); var request = $.ajax({ url: 'data_obj_zak.php?job=get_company', cache: false, data: 'id=' + id, dataType: 'json', contentType: 'application/json; charset=utf-8', type: 'get' }); request.done(function(output){ if (output.result == 'success'){ var adresa = output.data[0].zak_ulica + ", " + output.data[0].zak_mesto; // Definovanie adresy zákazníka hide_loading_message(); // Ulozenie objednavky do databazy hide_ipad_keyboard(); hide_lightbox(); show_loading_message(); var create_data = "{'obj_id': 'null', 'obj_nr': '1', 'obj_date': '2018-01-01', 'obj_zak': '480', 'obj_user': '1', 'obj_tov': '11', 'obj_qty': '111', 'obj_pozn': 'Poznámka', 'obj_stat': '0'}"; var request = $.ajax({ url: 'data_obj_create.php?job=add_company', cache: false, data: create_data, dataType: 'json', contentType: 'application/json; charset=utf-8', type: 'get' }); // Post premenných na dalsiu stranku $.ajax({ method: "POST", url: "objednavka_tovar.php", data: { zakid: id, zakmeno: output.data[0].zak_nazov, zakadr: adresa} // Funkcia POST premennych do SESSION }).done(function(html){ window.location.href = 'objednavka_tovar.php'; //function block runs if Ajax request was successful }).fail(function(html){ var txt; txt = "Nastala chyba!"; hide_loading_message(); document.getElementById("sprava").innerHTML = txt; // function block runs if Ajax request failed }); } else { hide_loading_message(); show_message('Nie je možné nahrať dáta', 'error'); } }); request.fail(function(jqXHR, textStatus){ hide_loading_message(); show_message('Nie je možné nahrať dáta: ' + textStatus, 'error'); }); }); Skor si myslim ze nie je spravne definovana premenna CREATE_DATA = ... tam neviem aky syntax pouzit ci jednoduche uvodzovky, zlozite alebo vobec ziadne... Popripade ci to nezapise koli tomu ze databaza ocakava INT a toto moze byt TXT??? |
||
Keeehi Profil |
Jelikož vlastně nevíš, kde ta chyba je, tak začneme debugovat, jak psal Tomášeek.
Na začátek PHP vlož var_dump($_GET); exit; Data by bylo obecně lepší odesílat metodou POST. |
||
mjausB Profil |
do PHP som kod vlozil a ziadna odpoved....
alebo som nespravne vlozil kod. Kde to vlastne ma ist? prilozil by som printscreen ale neviem ako :( takze som vypol presmerovanie na dalsiu stranku a vidim: array(3) { ["job"]=> string(11) "add_company" ["{'obj_id':_'null',_'obj_nr':_'1',_'obj_date':_'2018-01-01',_'obj_zak':_'480',_'obj_user':_'1',_'obj_tov':_'11',_'obj_qty':_'111',_'obj_pozn':_'Poznámka',_'obj_stat':_'0'}"]=> string(0) "" ["_"]=> string(13) "1515347071282" } namiesto pozadovaneho: {'obj_id': 'null', 'obj_nr': '1', 'obj_date': '2018-01-01', 'obj_zak': '480', 'obj_user': '1', 'obj_tov': '11', 'obj_qty': '111', 'obj_pozn': 'Poznámka', 'obj_stat': '0'} myslim ze sa mi tu miesaju dva ajaxove odoslania nakolko oba maju data: ktore odosielaju (neviem ci to opisujem spravne. Najskor posielam premenne pre SESSION: $.ajax({ method: "POST", url: "objednavka_tovar.php", data: { zakid: id, zakmeno: output.data[0].zak_nazov, zakadr: adresa} // Funkcia POST premennych do SESSION }).done(function(html){ // window.location.href = 'objednavka_tovar.php'; //function block runs if Ajax request was successful }).fail(function(html){ var txt; txt = "Nastala chyba!"; hide_loading_message(); document.getElementById("sprava").innerHTML = txt; // function block runs if Ajax request failed }); a hned na to ak to bolo vykonane spravne posielam data do databazy: var create_data = "{'obj_id': 'null', 'obj_nr': '1', 'obj_date': '2018-01-01', 'obj_zak': '480', 'obj_user': '1', 'obj_tov': '11', 'obj_qty': '111', 'obj_pozn': 'Poznámka', 'obj_stat': '0'}"; var request = $.ajax({ url: 'data_obj_create.php?job=add_company', cache: false, data: create_data, dataType: 'json', contentType: 'application/json; charset=utf-8', type: 'get' vieme toto nejako oddelit??? |
||
weroro Profil |
#7 · Zasláno: 7. 1. 2018, 20:44:51
Nie som si úplne istý, jquery ajax nepoužívam, ale nemá byť v data posielaný object? Ty tam posielaš string. Ak je zapnutý dataType json, tak ten string považuje za kľúč property objektu a setne jej prázdne value. Vyskúšaj to takto:
data: JSON.parse(create_data),
|
||
mjausB Profil |
#8 · Zasláno: 9. 1. 2018, 19:05:02
Nie nefunguje to ani takto. Dakujem. Vysledok je ten isty...
|
||
Kajman Profil |
V první fázi zkuste dát do create_data validní JSON (asi bude stačit nahradit jednoduché uvozovky za dvojité a opačně) a pak už by rada [#7] od werora měla fungovat.
|
||
mjausB Profil |
#10 · Zasláno: 10. 1. 2018, 12:40:57
Tak toto vypise v konzole chybovu hlasku: SyntaxError: JSON Parse error: Single quotes (') are not allowed in JSON
Create data zvalidovane a vypis stale rovnaky: array(3) { ["job"]=> string(11) "add_company" ["{'obj_id':_'null',_'obj_nr':_'1',_'obj_date':_'2018-01-01',_'obj_zak':_'480',_'obj_user':_'1',_'obj_tov':_'11',_'obj_qty':_'111',_'obj_pozn':_'Poznámka',_'obj_stat':_'0'}"]=> string(0) "" ["_"]=> string(13) "1515584362597" } Mne to skor pride ako by to davalo do pola... |
||
weroro Profil |
Validný JSON vyzerá takto ( Kajman ti poslal aj validátor ):
var create_data = '{"obj_id": "null", "obj_nr": "1", "obj_date": "2018-01-01", "obj_zak": "480", "obj_user": "1", "obj_tov": "11", "obj_qty": "111", "obj_pozn": "Poznámka", "obj_stat": "0"}'; |
||
Časová prodleva: 6 let
|
0