Pagina 1 di 2 12 UltimoUltimo
Visualizzazione risultati 1 fino 30 di 37

Discussione: Query MySQL tramite valore campo input

  1. #1
    Data registrazione
    14-02-2020
    Messaggi
    27

    Predefinito Query MySQL tramite valore campo input

    Buongiorno a Tutti,
    sono a chiedervi un aiuto con un codice che non ho la più pallida idea su come possa realizzarlo

    vi spiego in breve...
    io ho un campo (HTML semplice)
    che ha il seguente codice:
    Codice HTML:
    <input type="text" name="title" class="form-control" id="id" placeholder="Title">
    Questo campo è auto compilante tramite uno script in JS in base al suo ID

    io ho la necessità di effettuare una QUERY di SELECT nel mio DB in base al value del campo sopra citato.
    Questo però deve essere fatto in tempo reale, nel senso che al variare del value deve essere (ri)effettuata la query con con il nuovo valore...

    qualcuno mi potrebbe aiutare a capire come trasferire il VALUE del capo all'interno della query??

    Grazie in anticipo
    Fabio

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Associa un event listener che, a ogni cambiamento del valore del campo, effettui una chiamata AJAX verso una pagina PHP, passandole il valore aggiornato come parametro. La pagina PHP eseguirà la query e ne restituirà il risultato alla pagina chiamante.

    I suggerimenti che do più spesso:


  3. #3
    Data registrazione
    14-02-2020
    Messaggi
    27

    Predefinito

    riusciresti gentilmente a farmi un esempio di codice?

    grazie

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Usando jQuery:

    page.html
    Codice HTML:
    ...
    <input type="text" name="title" class="form-control" id="id" placeholder="Title">
    ...
    <script>
    $(function () {
        $('#id').change(function () {
            var value = $(this).val();
    
            $.get('service.php', { title: value }, function (data) {
                console.log(data);
            }
        });
    });
    </script>
    service.php
    Codice PHP:
    <?php
    ...

    $title = $_REQUEST['title'];
    $result = $database->query("SELECT * FROM tabella WHERE title = '$title'");
    $data = [];
    ...
    // i risultati vengono inseriti nel vettore $data

    header('Content-Type: application/json');
    echo
    json_encode($data);
    La pagina service.php, quando interrogata passandole un parametro (tramite GET) title effettua una query restituendone i risultati in formato JSON.
    La pagina page.html, ogni qualvolta viene modificato il valore presente nel campo il cui id è id, interroga la pagina service.php. Non sapendo cosa deve fare con i risultati della query ho usato un console.log per stamparli nella console.

    I suggerimenti che do più spesso:


  5. #5
    Data registrazione
    14-02-2020
    Messaggi
    27

    Predefinito

    quindi se io dopo devo fare un "echo" di tutti i valori ottenuti dal database
    basta che faccio un echo $data['colonna_db']

    giusto?

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Nella pagina chiamante i dati verranno recuperati tramite JavaScript. Niente echo o altre istruzioni PHP.

    I suggerimenti che do più spesso:


  7. #7
    Data registrazione
    14-02-2020
    Messaggi
    27

    Predefinito

    Ok, quindi come le stampo a video?
    Scusa ma di JS non ne capisco praticamente nulla

  8. #8
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Hai varie possibilità, la più semplice è predisporre un contenitore in cui inserire le informazioni creando dinamicamente elementi DOM.
    Per esempio:
    Codice HTML:
    <div id="result-container"></div>
    ...
    <script>
    $(function () {
        $('#id').change(function () {
            var value = $(this).val();
    
            $.get('service.php', { title: value }, function (data) {
                var container = $('#results-container');
                for (var i = 0; i < data.length; ++i) {
                    var item = $('<span>').html(data[i].nome_campo);
                    container.append(item);
                }
            }
        });
    });
    </script>
    O qualcosa del genere.

    I suggerimenti che do più spesso:


  9. #9
    Data registrazione
    14-02-2020
    Messaggi
    27

    Predefinito

    Ho provato anche così:

    Codice HTML:
    		<div id="result-container"></div>
    								<script>
    								$(function () {
    									$('#id').change(function () {
    										var value = $(this).val();
    
    										$.get('service.php', { title: value }, function (data) {
    											var container = $('#results-container');
    											for (var i = 0; i < data.length; ++i) {
    												var item = $('<span>').html(data[i].id);
    												container.append(item);
    												
    											}
    										}
    									});
    								});
    								</script>
    Ma non riesco a venirne fuori
    service.php
    Codice HTML:
    <?php
    
    
    $title = $_REQUEST['title'];
    $result = $database->query("SELECT * FROM SELECT * FROM `events` WHERE title = '$title'");
    $data = [];
     // i risultati vengono inseriti nel vettore $data
    
    header('Content-Type: application/json');
    echo json_encode($data);
    
    ?>


    se vuoi dare un occhio alla pagina è la segeunte:
    http://contabilitavergotti.altervista.org/calendario2/

    tutto il mio codice:
    https://www.dropbox.com/s/vgzm6luykg...index.php?dl=0

    nome DB:
    my_contabilitavergotti
    Tabella: events
    colonnre:
    • id
    • title
    • Descrizione
    • color
    • start
    • end





    ho la necessità di fare un print dopo i due input alla riga 176
    Ultima modifica di contabilitavergotti : 16-02-2020 alle ore 20.26.43

  10. #10
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Usa la console degli errori, nel JavaScript che avevo indicato manca una parentesi chiusa. Capita .

    I suggerimenti che do più spesso:


  11. #11
    Data registrazione
    14-02-2020
    Messaggi
    27

    Predefinito

    niente da fare...nemmeno così
    Codice HTML:
    <div id="result-container"></div>
    								<script>
    								$(function () {
    									$('#id').change(function () {
    										var value = $(this).val();
    
    										$.get('service.php'), { title: value }, function (data) {
    											var container = $('#results-container');
    											for (var i = 0; i < data.length; ++i) {
    												var item = $('<span>').html(data[i].nome_campo);
    												container.append(item);
    												
    											}
    										}
    									});
    								});
    								</script>

  12. #12
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Usa la console degli errori:
    Codice:
    (index):177 Uncaught ReferenceError: $ is not defined at (index):177
    (index):417 Uncaught SyntaxError: missing ) after argument list
    Stai usando un codice jQuery prima di includere jQuery, e manca un'altra parentesi.

    I suggerimenti che do più spesso:


  13. #13
    Data registrazione
    14-02-2020
    Messaggi
    27

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Usa la console degli errori:
    Codice:
    (index):177 Uncaught ReferenceError: $ is not defined at (index):177
    (index):417 Uncaught SyntaxError: missing ) after argument list
    Stai usando un codice jQuery prima di includere jQuery, e manca un'altra parentesi.
    ok, adesso non visualizzo più alcun errore in console
    però continuo a non visualizzare nulla :(

  14. #14
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Manca una "s" nell'id del contenitore:
    Codice HTML:
    <div id="results-container"></div>
    Devi modificare il codice in base alle tue necessità, è chiaro che in questa riga non ci va "nome_campo", ma il nome del campo che vuoi mostrare (ammesso e non concesso che sia questo il formato in cui hai scelto di restituire le informazioni da service.php):
    Codice:
        var item = $('<span>').html(data[i].nome_campo);

    I suggerimenti che do più spesso:


  15. #15
    Data registrazione
    14-02-2020
    Messaggi
    27

    Predefinito

    ok corretti questi errori
    ho notato che la pagina service andava in errore restituendo:
    "Fatal error: Call to a member function query() on null in /membri/contabilitavergotti/calendario2/service.php on line 6"
    surce.php
    Codice HTML:
    <?php
    
    
    //$title = $_REQUEST['title'];
    $title = "15";
    $result = $database->query("SELECT * FROM `events` WHERE id = '$title'");
    $data = [];
     // i risultati vengono inseriti nel vettore $data
    
    header('Content-Type: application/json');
    echo json_encode($data);
    
    ?>
    l'ho modificata così:
    Codice HTML:
    <?php
    
    
    $database = mysql_connect('localhost', 'contabilitavergotti', '') 
    or die('Could not connect: ' . mysql_error()); 
    mysql_select_db('my_contabilitavergotti') or die('Impossibile selezionare il database database'); 
    
    
    
    
    //$title = $_REQUEST['title'];
    $title = "15";
    
    									
    $query = "SELECT * FROM `events` WHERE id = '".$title."'"; 
    $result = mysql_query($query); 
    
    
    
    
    $data = [];
     // i risultati vengono inseriti nel vettore $data
    
    header('Content-Type: application/json');
    echo json_encode($data);
    
    ?>

    però continua a restituire $data vuoto

    vedi http://contabilitavergotti.altervist...o2/service.php
    il mio scopo è:
    dalla pagina http://contabilitavergotti.altervista.org/calendario2/
    al click sopra l'evento
    nel modal che si apre, sotto al campo i input ho la necessità di stampare a video il contenuto dei campi
    • id
    • title
    • Descrizione
    • color
    • start
    • end


    (tabelle del mio db)
    Ultima modifica di contabilitavergotti : 18-02-2020 alle ore 11.44.44

  16. #16
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    però continua a restituire $data vuoto
    Questo perché nel codice hai scritto che $data deve essere vuoto .
    Codice PHP:
    $data = [];
    Devi inserirci dentro le informazioni lette dal database.

    Le funzioni mysql_* non sono più supportate, dovresti valutare di passare a mysqli o PDO.

    I suggerimenti che do più spesso:


  17. #17
    Data registrazione
    14-02-2020
    Messaggi
    27

    Predefinito

    dichiarando che
    Codice HTML:
    $data = mysql_result($result,0,'color');
    e per fare una prova locale che
    Codice PHP:
    $title = "15";
    e modificando il codice su index in:
    Codice PHP:
    <div id="results-container"></div>
    <
    script>
    $(function () {
    $(
    '#id').change(function () {
    var
    value = $(this).val();

    $.
    get('service.php'), { title: value }, function (data) {
    var
    container = $('#results-container');
    for (var
    i = 0; i < data.length; ++i) {
    var
    item = $('<span>').html(data[i].color);
    container.append(item);

    }
    }
    });
    });
    </script>

    sulla pagina surce.php mi appare il colore giusto
    ma sulla index no :(

  18. #18
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Questo perché hai cambiato formato delle risposte. Anziché restituire u oggetto JSON con coppie chiave-valore stai restituendo solo il colore.
    Di conseguenza il JavaScript si modifica così:
    Codice:
    $(function () {
        $('#id').change(function () {
            var value = $(this).val();
            $.get('service.php'), { title: value }, function (data) {
                var container = $('#results-container');
                var item = $('<span>').html(data);
                container.append(item);
            }
        });
    });

    I suggerimenti che do più spesso:


  19. #19
    Data registrazione
    14-02-2020
    Messaggi
    27

    Predefinito

    ancora nulla

    adesso il mio codice è questo:
    index:
    Codice HTML:
    							<input type="text" name="title" class="form-control" id="id" placeholder="Title">
    
    						
    
    					
    						
    								<div id="results-container"></div>
    								<script>
    								$(function () {
    									$('#id').change(function () {
    										var value = $(this).val();
    										$.get('service.php'), { title: value }, function (data) {
    											var container = $('#results-container');
    											var item = $('<span>').html(data);
    											container.append(item);
    										}
    									});
    								});
    								</script>
    						
    service:
    Codice HTML:
    <?php
    
    
    $database = mysql_connect('localhost', 'contabilitavergotti', '') 
    or die('Could not connect: ' . mysql_error()); 
    mysql_select_db('my_contabilitavergotti') or die('Impossibile selezionare il database database'); 
    
    
    
    
    //$title = $_REQUEST['title'];
    $title = "15";
    
    									
    $query = "SELECT * FROM `events` WHERE id = '".$title."'"; 
    $result = mysql_query($query); 
    
    
    
    
    $data = mysql_result($result,0,'color');
     // i risultati vengono inseriti nel vettore $data
    
    header('Content-Type: application/json');
    echo json_encode($data);
    
    ?>


    sto impazzendo

  20. #20
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Adesso il service.php restituisce false. Hai modificato qualcosa?

    I suggerimenti che do più spesso:


  21. #21
    Data registrazione
    14-02-2020
    Messaggi
    27

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Adesso il service.php restituisce false. Hai modificato qualcosa?
    Avevo riabilitato il "$title = $_REQUEST['title'];" e commentato la dichiarazione "$title = "15";"

  22. #22
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Nel JavaScript c'è una parentesi chiusa nel posto sbagliato. Inoltre, per quello che devi fare, forse un keyup è più adatto di un change.
    Codice:
    <script>
    $(function () {
        $('#id').keyup(function () {
            var value = $(this).val();
            $.get('service.php', { title: value }, function (data) {
                var container = $('#results-container');
                var item = $('<span>').html(data);
                container.append(item);
            });
        });
    });
    </script>

    I suggerimenti che do più spesso:


  23. #23
    Data registrazione
    14-02-2020
    Messaggi
    27

    Predefinito

    ok adesso mi stampa a video il risultato
    però si verifica un nuovo problema, che onestamente pensavo di risolvere così ma non è stato...

    cliccando un un evento differente il contenuto del campo input varia (con l'ID del nuovo evento) ma sfruttando il codice da te riportato non esegue la query fin quando non vado a modificare manualmente il valore....come posso automatizzare la cosa (già dalla prima apertura della schermata dei dettagli?

  24. #24
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Puoi aggiungere un event listener ai "pulsanti" che, quando cliccati due volte, pulisce il contenuto del container e carica il valore associato all'id:
    Codice:
    $(function() {
        $('.fc-content').dblclick(function () {
            var value = $('#id').val();
            //console.log(value);
            var container = $('#results-container');
            container.empty();
            $.get('service.php', { title: value }, function (data) {
                var item = $('<span>').html(data);
                container.append(item);
            });
        });
    });

    I suggerimenti che do più spesso:


  25. #25
    Data registrazione
    14-02-2020
    Messaggi
    27

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Puoi aggiungere un event listener ai "pulsanti" che, quando cliccati due volte, pulisce il contenuto del container e carica il valore associato all'id:
    Codice:
    $(function() {
        $('.fc-content').dblclick(function () {
            var value = $('#id').val();
            //console.log(value);
            var container = $('#results-container');
            container.empty();
            $.get('service.php', { title: value }, function (data) {
                var item = $('<span>').html(data);
                container.append(item);
            });
        });
    });
    sostituendo il codice precedente con questo non mi stampa più a video il valore pescato dalla pagina surce :(

  26. #26
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Avevo detto "aggiungere", non "sostituire"...

    I suggerimenti che do più spesso:


  27. #27
    Data registrazione
    14-02-2020
    Messaggi
    27

    Predefinito

    Ok,
    ho ripristinato il codice modificandolo in
    Codice HTML:
    						<script>
    								$(function () {
    									$('#id').keyup(function () {
    										var value = $(this).val();
    										$.get('service.php', { title: value }, function (data) {
    											var container = $('#results-container');
    											var item = $('<span>').html(data);
    											container.append(item);
    										});
    									});
    								});
    							
    								$(function() {
    									$('.fc-content').dblclick(function () {
    										var value = $('#id').val();
    										//console.log(value);
    										var container = $('#results-container');
    										container.empty();
    										$.get('service.php', { title: value }, function (data) {
    											var item = $('<span>').html(data);
    											container.append(item);
    										});
    									});
    								});
    						</script> 
    però al doppio click sull'evento non mi restituisce i valori :/

  28. #28
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    I pulsanti con la classe fc-content esistono già quando il documento viene costruito, o vengono generati dinamicamente?

    I suggerimenti che do più spesso:


  29. #29
    Data registrazione
    14-02-2020
    Messaggi
    27

    Predefinito

    Esistono già al caricamento di una pagina (sono scritti nel db e caricati nella pagina tramite PHP


    può centrare il fatto che il calendario non è costruito dalla pagina index.php ma viene elaborata da un'altra pagina e chiamata dalla index nel seguente modo:
    Codice HTML:
     <div class="col-lg-12 text-center">
                    <h1>FullCalendar BS3 PHP MySQL</h1>
                    <p class="lead">Complete with pre-defined file paths that you won't have to change!</p>
                    <div id="calendar" class="col-centered">
                    </div>
                </div>
    E VIENE CARICATO NEL DIV CON ID "CALENDAR"
    Ultima modifica di contabilitavergotti : 20-02-2020 alle ore 17.36.36

  30. #30
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    parlo dei pulsanti che fanno parte del DOM, non delle informazioni a essi associati.
    Materialmente i <div class="fc-content">...</div> sono creati contestualmente alla pagina, o dinamicamente in un secondo momento, per esempio da qualche libreria?

    Di solito il motivo più probabile per cui un event listener non funziona è che l'elemento a cui dovrebbe essere associato è stato creato dopo il tentativo di associazione.

    I suggerimenti che do più spesso:


Pagina 1 di 2 12 UltimoUltimo

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •