Autor Zpráva
mjausB
Profil
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
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;
Otevři vývojářské nástroje, odešli AJAX a podívej se na odpověď. Měl by v ní být vypsán celý obsah pole GET. Jsou tam všechna data v tom tvaru, jak je očekáváš? Pokud ano, JS je odesílá správně a chyba bude někde dál. Pokud ne, budeme hledat v JS.

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
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
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
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"}';
a potom použi to čo som napísal v [#7].

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: