Php select option e ajax

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
Buonasera a tutti, capisco che sto oer chiedere una cosa quasi scontata per voi,ma essendo nuovo di php ajax ecc sono in netta difficolta... Il problena è banale...ho una tabella mysql con dei valori e vorrei che selezionando il valore da una select le successive (due) input text vengano popolate. Non posto codice perché non ho fatto nulla di comprensibile. So che devo usare l'evento onchangeselect della option e richiamare una function ajax ma...pur provando vari esempi non va...potete darmi qualche dritta? Qualche link? Grazie mille.
E.
 
Codice preso da stackoverflow:
HTML:
<select name="lista" id="type">
   <option value="op1">opzione1</option>
   <option value="op2">opzione2</option>
</select>

$(function() {
  $('#lista').bind('change', function(ev) {
     var value = $(this).val();
     $.ajax({
        .....
     });
  });
});
In questo modo capisci quando l'utente cambia selezione e fai partire la chiamata. Dentro a $.ajax devi mettere i parametri della chiamata, ossia url, dati, l'evento che vuoi che avvenga come risultato,... Ti mando questo link, dove ci sono vari esempi di codici (il primo dovrebbe andar bene), ovviemente nel "data" dovrai inserire come valore la variabile value.
Infine devi creare la pagina PHP, che riceve con $_POST il valore scelto (nel tuo caso "op1" o "op2") e dopo in base a questo usi sql per interagire con il database e fare il return alla chiamata ajax.

Prova a buttare giù un po' di codice e poi facci sapere.
 
Grazie Tommy...super gentile...tra qualche minuto provo,purtroppo faccio questo per passione e non per professione. Sicuramente avrò bisogno ancora del tuo supporto...a tra poco
 
Allora, ho visto che nel post sopra avevo sbagliato, praticamente nel recupero dell'evento jQuery hai messo "#codcol", non funziona perche deve riferirsi all'id della select, quindi dentro al tag select aggiungi id="codcol".
Poi all'interno del parametro data, codice_col deve essere messo tra apici singoli, e sempre dentro a data non ci va codcol, ma value.
Intanto fai queste modifiche, però probabilmente non vedrai nessun cambiamento, perche dentro alla chiamata ajax devi inserirci anche il parametro success (cerca su Google) altrimenti non succede niente.
Ti consiglio di fare cose "semplici" intanto, soltanto per vedere se la chiamata ajax funziona (ad esempio metti solo un semplice alert) di verifica, e se poi funziona allora ti concentri sul sql all'interno del file php
 
Tommy con un po di mal di testa sono riuscito ad andare avanti, ho iniziato con gli alert e ho fatto una sorta di debug fino a quando non ho azzerato gli errore...detto ciò ho ancora un problemino, sono riuscito a farmi restituire la stringa che "disegna" la input box con tanto di risultato della query nel campo value...ma...come la passo al mio form?

dettaglio_pratica.php:

HTML:
<label for="exampleInputEmail1">Cod. Perito</label> 
        <select  id="codcol"  name="cod_perito"  class="form-control1" style="height: 35px;width: 10%">
        <option value="<?php  echo $row->codcol;?>"><?php  echo $row->codcol;?></option>
        <?php
                $sql1="SELECT * from  cod_periti";

        $query1 = $dbh -> prepare($sql1);
        $query1->execute();
        $results1=$query1->fetchAll(PDO::FETCH_OBJ);
            
        if($query1->rowCount() > 0)
        {
    
            foreach($results1 as $row1)
                {     
            
            ?>
                <option value="<?php  echo $row1->cod_perito;?>"><?php  echo $row1->cod_perito;?></option>
                
            
            <?php
                }
        }
            
            ?>
            
    </select> 
 

    <label for="exampleInputEmail1">Cognome e Nome Resp. Amm.</label> <input type="text" style="width: 300px" id="resp_amm_cognome" name="resp_amm_cognome" value="<?php  echo ltrim($row->resp_amm_cognome);?>" class="form-control">
JavaScript:
$(function() {
  $('#codcol').bind('change', function(ev) {
     alert( "Sono arrivato qui");
     var value = $(this).val();
     $.ajax({
      type:'post',
      url: 'check_codcol.php',
      dataType: 'text',
      data : { 'codice_col' : value},
      success : function(data){
         $('#resp_amm_cognome').html(data);
      }
     });
  });
});

</script>

check_codcol.php

PHP:
include('includes/dbconnection.php');
if (isset($_POST['codice_col'])) {
    $sql = "SELECT * FROM cod_periti where cod_perito ='".$_POST['codice_col']."'";
    $query = $dbh -> prepare($sql);
    $query->execute();
    $results=$query->fetchAll(PDO::FETCH_OBJ);
    
    if($query->rowCount() > 0)   
        foreach($results as $row) {
             echo '<input type="text" style="width: 300px" id="resp_amm_cognome" name="resp_amm_cognome" value="'.$row->perito_nome .'" class="form-control">';
         }
    }else{

        echo 'Errore';
    }

Puoi dirmi cosa manca? credo che il problema sia qui: $('#resp_amm_cognome').html(data);
Tnks
E
 
In JQuery il metodo .html riempie un determinato contenitore con qualcosa (ciò che è contenuto nella parentesi, nel tuo caso il risultato della chiamata ajax), quindi l'errore è che al posto di mettere "#resp_amm_cognome" devi mettere l'ID del form (<form id="...">). Tuttavia, il metodo .html sostituisce ciò che è già dentro al form, con il risultato della chiamata, se tu vuoi che si aggiunga, dovresti usare il metodo .append
 
ho provato e hai ragione...ma io vorrei che riempie il campo già esistente... è possibile?
 
Hai ragione... in pratica ho questo form con 65 campi che aggiorna dei dati su un Db. tra i vari campi ho messo delle select per fare in modo di recuperare dei valori dal Db e non farli scrivere manualmente agli utenti. Detto ciò, la select id="codcol" fa una query su una tabella con i seguenti campi: Id, Cod_perito,Cognome perito, nome perito,mail ecc... e vorrei che una volta selezionato il "codcol" si vadano a popolare i campi cognome e nome (nell'esempio ho messo solo il cognome) id="resp_amm_cognome". un po come funziona per il classico esempio regioni-provincie-comuni.

Spero di essermi spiegato bene, ma a prescindere da tutto volevo ringraziarti per il tempo che mi stai dedicando...
E
 
Beh, se hai la necessita di riempire un campo già esistente con il cognome preso dal DB (è quello che devi fare, giusto?), puoi fare l'echo soltanto della variabile con il cognome, e nel success della chiamata ajax metti:
HTML:
$('#id_campo').val(data);
 
perfetto...funziona alla grande...ora però volendo prendere più valori es. Cognome nome mail ecc e distribuire questi valori nelle rispettive caselle mi sta creando problemi. Mi sono creato 1 array e faccio il suo echo... ma non vengono richiamati i campi...
questo è il success:

JavaScript:
success : function(data){
          
          $('#perito_cognome').val(data.perito_cognome);
          $('#perito_mail').val(data.perito_mail);         
        
      }

e questo è l'array

JavaScript:
if($query->rowCount() > 0)   
        foreach($results as $row) {
            
            $perito_mail=$row->perito_mail;
            $perito_cognome=$row->perito_nome;
            $arr = array ("perito_mail"=>"$perito_mail","perito_cognome"=>"$cognome_perito" );
            echo json_encode($arr);       
             //echo ($arr);
    
         }

giuro che poi per stasera non ti scoccio più :):)

E
 
Credo che tu debba togliere le virgolette da $perito_mail e $perito_cognome, e poi nel JQuery devi mettere dataType:'json' non 'text'. Prova così, se ancora non funziona fai un alert(data) per vedere se è un problema col php o col jquery.
 
Sei un grande!!! con un po di modifiche sono arrivato alla soluzione. La riporto di seguito:

PHP:
if (isset($_POST['codice_col'])) {
    $sql = "SELECT * FROM cod_periti where cod_perito ='".$_POST['codice_col']."'";
    $query = $dbh -> prepare($sql);
    $query->execute();
    $results=$query->fetchAll(PDO::FETCH_OBJ);
    
    if($query->rowCount() > 0)   
        foreach($results as $row) {
            
            $arr = array ("perito_mail"=>$row->perito_mail,"perito_cognome"=>$row->perito_cognome." ".$row->perito_nome,"perito_telefono"=>$row->perito_tel);
            echo json_encode($arr); 
         }
    }else{

        echo 'Errore';
    }


JavaScript:
$(function() {
  $('#codcol').bind('change', function(ev) {
    
     var value = $(this).val();
     $.ajax({
      type:'post',
      url: 'check_codcol.php',
      dataType: 'json',
      data : { 'codice_col' : value},
      
      success : function(data){
          
          $('#perito_cognome').val(data.perito_cognome);
          $('#perito_mail').val(data.perito_mail);
          $('#perito_tel').val(data.perito_telefono);         
        
      }
     });
  });
});


Ti ringrazio infinitamente per la pazienza... ci risentiremo presto :D:D:D
un saluto
E
 
Buonasera a tutti, riprendo questa discussione perchè il problema è similare... La procedura sopra indicata, è valida anche se volessi fare delle query partendo da una input text? mi spiego meglio, vorrei eseguire una funzione partendo dall'evento blur di una input text, prenderne il valore, e fare un controllo sul database per prelevare dati. Ho provato a fare in questo modo:

JavaScript:
$(function() {
  $('#idinput').bind('blur', function(ev) {
    
     var value = $(this).val();
     $.ajax({
      type:'post',
      url: 'check_codcol.php',
      dataType: 'json',
      data : { 'idinput' : value,'idselectbox' : value},
      
      success : function(data){
          
          $('#idinput2').val(data.perito_cognome);
          $('#idinput3').val(data.perito_mail);
          $('#idinput4').val(data.perito_telefono);         
        
      }
     });
  });
});

Se metto un messaggio sotto la "var value = $(this).val();" riesco ad avere il valore $(this).val(); ma credo che da li in poi ci sia qualche problema, non chiamo il file php (faccio una echo ad inizio programma) e non ho messaggi di errore.

Sapete suggerirmi qualcosa?
questo sistema funziona benissimo con le select, e non vorrei che in questo caso sto sottovalutando qualcosa

Grazie a tutti
E
 
Non ho capito precisamente cosa devi fare, l'evento blur verifica quando un campo input perde il focus. Praticamente tu vuoi che quando l'utente scrive qualcosa su un campo e poi clicca fuori, si riempiono altri campi?
 
Esatto Vorrei che quando il campo perde i Focus parte una query con il dato di questo campo più un altro dato proveniente da una Select box e vengono popolati altri tre Campi .ho usato lo stesso metodo usato in passato (che tu mi hai suggerito) ma non va... Helpppp
 

Discussioni simili