jQuery Italia - Forum » Non solo jQuery

Da dato db in casella testo con click()

(10 articoli)
  1. MR
    Membro

    Ciao ragazzi, abbiate pietà sono neofita.

    Ho una pagina php con dei dati estratti da db  in un loop (foreach) , contenuti in un div, ed a fianco un form con dei campi.
    Vorrei che  cliccando su una delle voci del db, automaticamente si compilassero i campi del form.
    Che strada mi conviene seguire?
    Grazie

    Pubblicato 7 months fa #
  2. jqueryitalia
    Amministratore

    Ciao MR e benvenuto.

    Usa una chiamata ajax passando l'id del dato da recuperare  e riempi il form ;-)

    Pubblicato 7 months fa #
    Private
  3. MR
    Membro

    Ciao e grazie; in realtà è quello che stavo provando. Ho spostato il loop foreach in una pagina php che filtra tutti gli indirizzi del cliente in base all'id e restituisce la lista di div.

    Nella pagina principale ho  inserito la chiamata ajax:

    $.ajax({
    type: "GET",
    url: "ajax_dest.php",
    data: "ID_cliente"+???dovrei metterci l'ID ricavato da php??,
    success: function(response){
    $("#out").html(response);
    }
    });

    e funziona, ma lo script di prova che, cliccando sull'idirizzo dovrebbe fare qualcosa non va. Come se i div ottenuti dalla pagina di filtraggio non fossero..utili:

    $("#indirizzo").click(function () {
    alert("test");
    });

    Grazie in anticipoa  chi mi aiuterà.

    MAX

    Pubblicato 7 months fa #
  4. jqueryitalia
    Amministratore

    Ciao MAX.

    Ho provveduto a farti un piccolo esempio che trovi qui http://www.jqueryitalia.org/tutorial/ajaxrequest.html

    Provo in due parole a spiegarti come funziona.
    La pagina principale contiene l'elenco dei nomi sulla destra ed un form sulla sinistra.
    Alle ancore che contengono il testo edita ho dato classe = 'action' ed id = 'elemento-x' dove x deve essere un identificativo univoco che identifica il dato da estararre nel DB (i questo caso avremo 1, 2 e 3) che puoi recuperare ed associare attraverso la prima chiamata php che fai per estrarre i dati.

    Ho poi associato alla classe 'action' un'azione (che viene eseguita al click) che recupera l'id dell'elemento cliccato ( var elementID = jq(this).attr('id'); ), eseguo lo split delo stesso ( var myPieces = elementID.split('-'); ) ed estrare l'id necessario ( var myID = myPieces[1]; ). Eseguo poi la chiamata ajax, indicando che il dato di ritorno deve essere in formato JSON (praticamente un array).
    La chiamata ajax viene inidrizzata ad un file php che, dato l'ID, estrae i valori e li inserisce in un array (nel nostro caso ad esempio: $arraydata = array('nome' => 'Marco', 'cognome' => 'Rossi', 'indirizzo' => 'via Monte Calvo, 1'); ). Attraverso il comando php json_encode trasformo l'array in formato JSON e lo rimando indietro (echo json_encode($arraydata);).
    A questo punto associo ai campi del form il valore estratto ( nel caso del nome, jq('#nome').val(data.nome); ).

    Puoi ricopiare tranquillamente il codice della pagina di esempio e riadattarlo per il tuo caso.

    Pubblicato 6 months fa #
  5. MR
    Membro

    Ciao... (ma il tuo nome dov'è?), ti ringrazio veramente tantissimo per la risposta e l'esempio. 

    Nel frattempo avevo studiato ed ero riuscito a risolvere il problema, e sono contento che (seppur con differenze dovute al fatto che la lista di partenza è dinamica) , ho proprio percorso la stessa strada! Ho usato il get id per recuperare e passare l'id dell'indirizzo, ed una pagina php che filtra il db.
    Avevo trovato un esempio che ho adattato per elaborare la risposta del db:

    $doc = new DOMDocument();
     $doc->formatOutput = true;
     
     $r = $doc->createElement( "destinazioni" );
     $doc->appendChild( $r );
     
     foreach( $destinazioni as $destinazione ){
     
     $b = $doc->createElement( "destinazione" );
     
     $ID_Destinazione = $doc->createElement( "ID_Destinazione" );
     $ID_Destinazione->appendChild(
     $doc->createTextNode( $destinazione['ID_Destinazione'] )
     );
     $b->appendChild( $ID_Destinazione );
     
     $DEST_PRED_Ragione_sociale = $doc->createElement( "DEST_PRED_Ragione_sociale" );
     $DEST_PRED_Ragione_sociale->appendChild(
     $doc->createTextNode( $destinazione['DEST_PRED_Ragione_sociale'] )
     );
     $b->appendChild( $DEST_PRED_Ragione_sociale );
     
     $DEST_PRED_Indirizzo = $doc->createElement( "DEST_PRED_Indirizzo" );
     $DEST_PRED_Indirizzo->appendChild(
     $doc->createTextNode( $destinazione['DEST_PRED_Indirizzo'] )
     );
     $b->appendChild( $DEST_PRED_Indirizzo );
    [etc..per tutti i valori]
     
     $r->appendChild( $b );
      }
     
     }
     
     echo $doc->saveXML();


    e nella pagina di partenza:

    $(".destinazione").click(function () {
        $.ajax({
            type: "GET",
            url: "ajax_dest.php",
    data: $(this).attr("id"),
            success: xmlParser
        });
    });

    function xmlParser(xml) {
    $(xml).find("destinazione").each(function () {
    var ID_Destinazione = $(this).find("ID_Destinazione").text();
    var DEST_PRED_Ragione_sociale = $(this).find("DEST_PRED_Ragione_sociale").text();
    $("#DEST_PRED_Ragione_sociale").val(DEST_PRED_Ragione_sociale);
    $("#DEST_PRED_Indirizzo").val(DEST_PRED_Indirizzo);
        });
    }

    Poi popolo i campi come dicevi tu. La soluzione è un po' accroccata ma funziona e mi pare lo stesso principio. La tua però è per me ottimo motivo di studio di Json, che mi pare più pratico...
    Grazie ancora, sono sicuro che mi risentirai :-))

    Pubblicato 6 months fa #
  6. MR
    Membro

    PS: potresti postarmi anche il codice della pagina che contiene i dati che vorrei studiarmela? Grazie ancora X!

    Pubblicato 6 months fa #
  7. jqueryitalia
    Amministratore

    Il mio nome è Davide.

    La soluzione con l'XML mi sembra un pò troppo articolata (anche perchè hai la necessita di utilizzare comunque un parser) rispetto a quella da me suggerita. Comunque se funziona... ;-)

    Il codice php utilizzato nel file richiamato dalla funzione ajax è il seguente:

    $dbhost = TUO_HOST;
    $dbuser = TUO_USERNAME;
    $dbpass = TUA_PASSWORD;
    $dbname = TUO_NOME_DB;

    $id = $_POST["id"];
    $arraydata = array();

    if ( $dblink = mysql_connect($dbhost, $dbuser, $dbpass) ) {
        if ( mysql_select_db($dbname, $dblink) ) {
            $query = "SELECT * FROM TUA_TABELLA WHERE TUO_ID =".$id." LIMIT 0, 1";
            $result = mysql_query($query);
            $row = mysql_fetch_array($result, MYSQL_ASSOC);
            $arraydata = array('nome' => $row['nome'], 'cognome' => $row['cognome'], 'indirizzo' => $row['indirizzo']);
        }
    }

    echo json_encode($arraydata);

    Pubblicato 6 months fa #
  8. MR
    Membro

    Ciao Davide!


    Hai ragione la tua mi pare molto più snella ed elegante, ma la mia sorgente dati db non è su mysql, ma Filemaker (è una situazione particolare). L'output è un array comunque; ora provo a usare la  tua soluzione sopra da $array in poi e ti fò sapere. 
    Purtroppo ho tutt'altre competenze e vado a tentativi ;-)

    MAX

    Pubblicato 6 months fa #
    Email
  9. MR
    Membro

    FUNZIAAAAA!!!!!! 

    Grazie Davide.

    Pubblicato 6 months fa #
  10. jqueryitalia
    Amministratore

    Felice di esserti stato d'aiuto :-D

    Pubblicato 6 months fa #

RSS feed for this topic

Replica

Devi aver fatto il login per poter pubblicare articoli.