• User Attivo

    from Jscrpt to PHP [JSON]

    Salve a tutti spero di non essermi troppo allontanato dal php, stò cercando di inviare una stringa valida (spero) formato json al filr.php per poi essere decodificato (json_decode)

    Ma non ho le idee molto chiare sul formato, le parentesi graffe e quadre mi han confuso un pò, la mia situazione è questa.

    1- Da javascript genero questo:```
    {"libro":"[{"titolo":"XXX","Pagine":"299.5","Prezzo":" 23.90","Data":"31/8/2009","Commnto":"lascia un commento..."}]}

    
    
    2- nel file.php che riceve la stringa :```
    $obj=var_dump(json_decode($_POST['JS']));									 
    echo $obj->titolo;
    

    -risultato finale- mi torna un NULL !!!!!

    Dove sbaglio? :arrabbiato:

    Thanks


  • User Attivo

    Ciao Gandalf,
    secondo me l'errore è dovuto ai doppi apici utilizzati prima della quadra
    per dichiarare l'array di libri.

    Secondo me, però, non hai intenzione di utilizzare un array, ma solo di descrivere le proprietà del libro in questione, quindi dovrebbe essere così:

    [php]
    obj_json = {"libro":{
    "titolo":"un titolo",
    "pagine":"275",
    "prezzo":"? 32.90"
    }
    };
    [/php]Per info, se ti servirà, dai un'occhiata qui: json.org/example.html

    Ciao


  • User Attivo

    Ciao mirkoagrati innanzitutto grazie per il reply 😉 ora correggo e provo.

    La mia situazione è questa ho una serie (diciamo) di capitoli e un solo titolo per libro, vorrei passare tutti questi dati tramite Json.

    Magari anche sottoforma di oggetto non c'è problema per me. Se mi limito alla correzione dei doppi apici sono sulla giusta strada ?

    Ho letto parecchie guide sul Json ma non chiariscono bene come "formare" una stringa di tipo Json o forse sono io :arrabbiato: (non lo escludo) :fumato:

    thanks


  • User Attivo

    Ciao Gandalf,
    dunque supponiamo (se non ho capito male) che nell'oggetto in formato JSON che ti ho postato precedentemente vogliamo aggiungere dati su ogni capitolo.

    Dovremo creare una nuova proprietà nell'oggetto e questa proprietà deve essere un Array di capitoli:

    [php]
    obj_json = {"libro":{
    "titolo":"un titolo",
    "pagine":"275",
    "prezzo":"? 32.90",
    "capitoli":[
    {"num":"1", "pagine":"50"},
    {"num":"2", "pagine":"30"},
    {"num":"3", "pagine":"25"}
    ]
    }
    };
    [/php]Se non ho commesso errori parsandolo dovresti trovare una nuova proprietà di nome capitoli di tipo array.

    Ciao


  • User Attivo

    Sigh ancora nulla, vediamo se riassumendo meglio ne vengo fuori 🙂

    Il mio intento è di inviare da Javascript verso --> un file.php una stringa di tipo Json

    Un es. della mia stringa ricavata è: (output del comando 'console.log')

    {"libro":
    {"titolo":"XXX",
    "capitoli":[
    {"Dat":"31/8/2009","Com":"lascia un commento..."},
    {"Dat":"31/8/2009","Com":"lascia un commento..."}
    ]
    }}
    

    poi nel file.php ho queste due righe:

    <?php
    $obj=var_dump(json_decode($_POST['JS']));									 
    echo $obj->titolo;
    ?>
    

    dove sbaglio ? :mmm:


  • User Attivo

    Dunque, mi sa che stiamo facendo un po' di confusione lato server:

    questa istruzione non è usata per valorizzare variabili ma solo per mostrarne il contenuto:
    [php]
    var_dump(json_decode($json));
    [/php]Quindi prova così:
    [php]
    $obj = json_decode($json);
    echo $obj->titolo oppure $obj->{'titolo'}
    [/php]comunque prova a dare un'occhiata qui it2.php.net/json_decode.

    Ciao


  • User Attivo

    Ok var_dump eliminato, cosa è cambiato ? Non mi torna più il fastidioso NULL ora mi ritorna il vuoto assoluto :mmm:

    Neanche il null .... ho provato sia con
    $obj->titolo sia con $obj->{'titolo'} niente :():

    thanks


  • User Attivo

    Strano,
    non trovi niente neanche nei logs ?


  • User Attivo

    Si nei logs trovo la stringa sempre com'era .... :mmm:

    Bah a naso direi che c'è qualcosa che non và nel formato stringa durante l passaggio dal Javascript al PHP .... mmm...


  • User Attivo

    Uhmm noioso così!!!

    Sto leggendo un po' la documentazione, ho trovato questo:

    On one server I use (FreeBSD 6.3; PHP 5.2.6 as module in Apache 2.2.10), PHP was compiled with the '--disable-all' configuration option. Consequently, there exists a secondary configuration file -- /usr/local/php5/etc/extensions.ini -- in which the line

    ; extension=json.so

    must be uncommented (delete the semicolon) and Apache restarted for these functions to be available.
    Comunque,
    prova così:
    [php]
    $json= json_encode('{"titolo":"ciao", "autore":"umberto eco"}');
    $obj = json_decode($json);
    echo $obj->titolo oppure $obj->{'titolo'}
    [/php]Queste informazioni sono reperibili qui:

    1. it2.php.net/manual/en/json.installation.php;
    2. it2.php.net/manual/en/function.json-last-error.php;

    Ciao


  • User Attivo

    prova così:

    Codice PHP:
    $json= json_encode('{"titolo":"ciao", "autore":"umberto eco"}');
    $obj = json_decode($json);
    echo $obj->titolo oppure $obj->{'titolo'}

    Mi torna vuoto .... :(): come prima. Sai una cosa stò testando il tutto localmente (Php 5.2.9) perchè aruba ha ancora la 4.4.9 Json non esiste, quindi le modifiche eventuali al php.ini le testo in locale e poi devo pregare che siano settate bene sui servers di aruba !!! Giusto ?

    1. it2.php.net/manual/en/function.json-last-error.php;
      😄 Siamo sulla stessa strada ... L'ho provato sembra non riconoscere la funzione :bho:

    Grazie mille comunque vada per la pazienza !!!!


  • User Attivo

    :(): ... mi stà sorgendo un dubbio atroce !!!!

    1. json_decode() non dà i risultati attesi
    2. json_last_error() dà errore "Call to undefined function json_last_error()"

    .... vuoi vedere che nel mio php 5.2.9 manca la libreria Json ? Se sì come la installo :mmm: ?!?!?

    thanks all

    dubbio sfatato:

    if(function_exists('json_encode')){echo 'ok json_decode installato';}
    

  • User Attivo

    Ciao Gandalf,
    se hai PHP > 5.xx allora le hai.

    E' più probabile che siano inibite e quindi prova a vedere se nel php.ini
    devi de-commentare la riga
    [php]
    ; extension=json.so
    [/php]Ciao


  • User Attivo

    @mirkoagrati said:

    E' più probabile che siano inibite e quindi prova a vedere se nel php.ini
    devi de-commentare la riga
    [php]
    ; extension=json.so
    [/php]Ciao

    ho cercato il file php.ini nel mio PC, poi con blocco note ho aperto il contenuto e ho cercato la stringa "json", l'unico risultato è questa riga:
    ;extension=php_json.dll

    mi devo preoccupare ?:?

    ho decommentato la riga in questione, ho riavviato Apache e non è cambiato nulla !!!!


  • User Attivo

    Ciao Gandalf,
    hai riavviato apache?
    E' essenziale perchè il php.ini è caricato alla partenza.

    Ciao


  • User Attivo

    @mirkoagrati said:

    prova così:
    [php]
    $json= json_encode('{"titolo":"ciao", "autore":"umberto eco"}');
    $obj = json_decode($json);
    echo $obj->titolo oppure $obj->{'titolo'}
    [/php]
    Ciao

    mirko modificando di poco il tuo codice sopra funziona la prova che mi hai suggerito così (togliendo l'encode del json)

    $json= '{"titolo":"ciao", "autore":"umberto eco"}';
    $obj = json_decode($json);
    echo $obj->titolo
    
    

    mi torna la stringa "ciao".

    però ho ritestato il mio codice :mmm: ma non funziona ancora 😢😢😢


  • User Attivo

    Eppur si muove (Archimede)
    Dunque nel primo codice che hai postato non andava bene il doppio apice appena prima della parentesi quadra dell'array: togli i doppi apici e dovrebbe essere corretto.

    Ciao


  • User Attivo
    Eppur si muove (Archimede) 
    ``` :D
    
    Beh sai che faccio (peccato non c'abbia pensato prima)
    incollo la stringa del *console.log()* nel codice php
    
    

    $json_str=('{"libro":[{"titolo":"rrrr","pagine":"299.5","Dat":"31/8/2009","Com":"lascia un commento..."}]}');
    $obj=json_decode($json_str);
    echo 'titolo='.$obj->titolo;

    
    e cosa ne ricavo ... :cry: nulla sempre vuoto !!!!! arghhhhh
    
    mentre se rettifico la stringa così:
    

    $json_str=('{"titolo":"rrrr","pagine":"299.5","Dat":"31/8/2009","Com":"lascia un commento..."}');
    $obj=json_decode($json_str);
    echo 'titolo='.$obj->titolo;

    
    funziona 
    
    Ma nel mio caso specifico ho bisogno di -UN- Titolo e una serie (array) di pagine/date/commenti .... come posso ?
    
    thanks

  • User Attivo

    Non saprei,
    la sintassi json che utilizzi mi pare corretta;

    prova a vedere se c'è qualche patch o qualche nota sul sito degli sviluppatori,
    mi sembra che su php.net nella sezione json ci siano i contatti.

    Buona Fortuna Gandalf


  • User Attivo

    Mirkoagrati grazie mille lo stesso per la tua disponibilità e i preziosi consigli 😄 grazie a te perlomeno ho una stringa funzionante da cui iniziare a capire dove sbaglio !!!

    Ciao.
    gandalf