[PHP] Compilare campi in automatico con dati presi dal DB

Max61

Utente Attivo
2 Mar 2014
694
3
18
Salve sono di nuovo qui a chiedere AIUTO, questa volta vorrei che selezionando un valore dalla select gli altri campi si compilino in automatico in base al valore scelto, tipo se seleziono una città in automatico mi si compila anche il campo relativo al CAP.
Cerco di spiegarmi:
ho la tabella 'tbldipendenti' con questi campi: IDDIPENDENTI; NOMINATIVO; MATRICOLA; LIVELLO
bene vorrei che quando scelgo un nominativo mi si compilassero in automatico i campi MATRICOLA E LIVELLO.
Adesso per recuperare i tre valori uso tre query come quella sotto:
PHP:
require"Connessione.php";  
// ===Preparazione elenco per menu a tendina nominativo ====
  $Query_nominativo="SELECT nominativo
            FROM tbldipendenti
            GROUP BY nominativo";
       //esecuzione della query 
           [email protected]_query($Query_nominativo) or die (mysql_error());
       if(!$Leggi_user_name)
         print("<H2>Query fallita!</H2>");
       else
       echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>Nome</b> &nbsp;<select name='nominativo' id='user_nameid' required>";//Genera casella a discesa
       while ($row = mysql_fetch_array($Leggi_user_name)) 
    { 
        $nominativo = $row['nominativo'];
        echo "<option value =\"$nominativo\">$nominativo </option>"; //Popola casella
    }
        echo "value=$nominativo </select>";
Grazie per l'aiuto
Max61
 

Max61

Utente Attivo
2 Mar 2014
694
3
18
Grazie marino51, prima di chiedere aiuto al forum ho già provato con l'esempio a cui fai riferimento, ma non sono riuscito...
inoltre l'esempio prende i dati su tre tabelle diverse, mentre nel mio caso i dati vengono presi da una sola tabella e nello stesso record.
E poi cosa di non poco conto...sono imbranato!!!
Ciao
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
devi usare la funzione onchange di javascript, ma i due campi che vuoi far uscire al cambio della selezione devono uscire su i campi tabella o su altre select?
 

Max61

Utente Attivo
2 Mar 2014
694
3
18
Nel form di inserimento ho 3 campi NOMINATIVO; MATRICOLA; LIVELLO,
adesso seleziono prima il nominativo, poi la matricola e infine il livello, mi piacerebbe che fosse automatizzato, cioè alla selezione del nominativo in automatico si compilino gli altri 2 campi del form MATRICOLA e LIVELLO così da ridurre anche i possibili errori di selezione.
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
allora preciso che non sono super esperto ti dico come risolverei io anche se magari non è la più corretta.

crei due form uno per la prima select e l'altro epr la restante

nella prima select metti l'onchange this form e crei un array associativo esempio al volo



PHP:
<form name="principale" action="pagina dati" method="POST">

<form action="" name="from" method="POST">
<?php
 $query="SELECT * FROM tabella";
$result = $db->query($query);
$result->error;
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>Nome</b> &nbsp;<select name='nome' id='user_nameid' required onchange='this.form.submit()'>";//Genera casella a discesa
       echo "<option>";    echo  isset($_POST['nome']) ?    $_POST['nome'] :       "-";        echo "</option>";
$nominativo=array();
    while($row = $result->fetch_array(MYSQLI_ASSOC))
    {
        $array[$row['nominativo']] = array('matricola'=>$row['nome_manager'],'livello'=>$row['contratto']);
    }
    foreach($array as $key=>$nominativo){
        echo "<option value =".$key.">".$key." </option>"; //Popola casella
    }
        echo "</select>";
?>
<?php
</form>  
<form action="" name="fa" method="POST">
 <input type="hidden" id="custId" name="custId" value="<?php $nominativo?$_POST['nome']; echo $nominativo;?>">
<?php
    echo "<select>";
       echo "<option value =".$array[$_POST['nome']]['matricola'].">".$array[$_POST['nome']]['matricola']." </option>"; 
    echo "</select>";
    echo "<select>";
       echo "<option value =".$array[$_POST['nome']]['livello'].">".$array[$_POST['nome']]['livello']." </option>"; 
    echo "</select>";
?>
</form>
 
<input type="submit" value= "invia I dati">
</form>
 

Max61

Utente Attivo
2 Mar 2014
694
3
18
Ciao e grazie per la risposta, ho provato il tuo codice e dopo vari aggiustamenti sono arrivato a selezionare il nome della persona, però gli altri campi non si compilano
PHP:
<form action="" name="from" method="POST">
<?php
 $query="SELECT * FROM tbldipendenti";
 [email protected]_query($query) or die (mysql_error());
//$result = $database->query($query);
//$result->error;
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>Nome</b> &nbsp;<select name='nominativo' id='nominativo' required onchange='this.form.submit()'>";//Genera casella a discesa
    echo "<option>"; echo isset($_POST['nominativo']) ? $_POST['nominativo'] : "-"; echo "</option>";
$nominativo=array();
    //while($row = $result->fetch_array(MYSQLI_ASSOC))
    while ($row = mysql_fetch_array($result))
    {
        $array[$row['nominativo']] = array('matricola'=>$row['matricola'],'livello'=>$row['livello']);
    }
    foreach($array as $key=>$nominativo){
        echo "<option value =".$key.">".$key." </option>"; //Popola casella
    }
        echo "</select>";
?>

</form>
<form action="" name="fa" method="POST">
 
 
 QUI MI DA ERRORE "Parse error: syntax error, unexpected ';' in C:\xampp\htdocs\GestioneOrario\views\Orario_Insert.php on line 416"
 <input type="hidden" id="custId" name="custId" value="<?php $nominativo?$_POST['nominativo']; echo $nominativo;?>">

 
<?php
    echo "<select>";
       echo "<option value =".$array[$_POST['nominativo']]['matricola'].">".$array[$_POST['nominativo']]['matricola']." </option>";
    echo "</select>";
    echo "<select>";
       echo "<option value =".$array[$_POST['nominativo']]['livello'].">".$array[$_POST['nominativo']]['livello']." </option>";
    echo "</select>";
?>
</form>
 
<input type="submit" value= "invia I dati">
</form><form action="" name="from" method="POST">
<?php
 $query="SELECT * FROM tbldipendenti";
 [email protected]_query($query) or die (mysql_error());
//$result = $database->query($query);
//$result->error;
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>Nome</b> &nbsp;<select name='nominativo' id='nominativo' required onchange='this.form.submit()'>";//Genera casella a discesa
    echo "<option>"; echo isset($_POST['nominativo']) ? $_POST['nominativo'] : "-"; echo "</option>";
$nominativo=array();
    //while($row = $result->fetch_array(MYSQLI_ASSOC))
    while ($row = mysql_fetch_array($result))
    {
        $array[$row['nominativo']] = array('matricola'=>$row['matricola'],'livello'=>$row['livello']);
    }
    foreach($array as $key=>$nominativo){
        echo "<option value =".$key.">".$key." </option>"; //Popola casella
    }
        echo "</select>";
?>

</form>
<form action="" name="fa" method="POST">
 
 
 QUI MI DA ERRORE "Parse error: syntax error, unexpected ';' in C:\xampp\htdocs\GestioneOrario\views\Orario_Insert.php on line 416"
 <input type="hidden" id="custId" name="custId" value="<?php $nominativo?$_POST['nominativo']; echo $nominativo;?>">

 
<?php
    echo "<select>";
       echo "<option value =".$array[$_POST['nominativo']]['matricola'].">".$array[$_POST['nominativo']]['matricola']." </option>";
    echo "</select>";
    echo "<select>";
       echo "<option value =".$array[$_POST['nominativo']]['livello'].">".$array[$_POST['nominativo']]['livello']." </option>";
    echo "</select>";
?>
</form>
 
<input type="submit" value= "invia I dati">
</form>

QUI MI DA ERRORE "Parse error: syntax error, unexpected ';' in C:\xampp\htdocs\GestioneOrario\views\Orario_Insert.php on line 416"
<input type="hidden" id="custId" name="custId" value="<?php $nominativo?$_POST['nominativo']; echo $nominativo;?>">

Ciao e grazie
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
non so cosa intendi fare con quella riga, vedo un ? volevi fare un if ternario? o ti sei dimenticato un echo?
o volevi inserire il valore del $_POST in nominativo?
nell'ultimo caso al posto di ? devi mettere un =

PHP:
<?php $nominativo=$_POST['nominativo']; echo $nominativo;?>
 

Max61

Utente Attivo
2 Mar 2014
694
3
18
Ciao e grazie per la risposta, ho messo il tuo codice e l'errore non c'è più, ma ancora i campi MATRICOLA e LIVELLO non si compilano..
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
attento quella che tu chiami $array NON è un arry semplice ma un array di array quindi è da rivedere il forech in funzione di quello che vuoi ottenere
non capisco poi quelle varie <select> di cui alcune sensa nome e mischiate con valori $_POSTO (da un form?) con quelli estratti da una tabella (?)
 

Max61

Utente Attivo
2 Mar 2014
694
3
18
I valori dei campi NOMINATIVO; MATRICOLA; LIVELLO; sono estratti dalla tabella tbldipendenti che è così strutturata
CREATE TABLE `tbldipendenti` (
`iddipendenti` int(11) NOT NULL,
`nominativo` varchar(255) NOT NULL,
`matricola` varchar(4) NOT NULL,
`livello` varchar(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 

Max61

Utente Attivo
2 Mar 2014
694
3
18
OK...Nel form di inserimento ho 3 campi NOMINATIVO; MATRICOLA; LIVELLO,
adesso seleziono prima il nominativo, poi la matricola e infine il livello, mi piacerebbe che fosse automatizzato, cioè alla selezione della select nominativo in automatico si compilino gli altri 2 campi del form MATRICOLA e LIVELLO così da ridurre anche i possibili errori di selezione.
Es.:
nominativo matricola livello
Pippo 2209 BS5
Pluto 4536 B2
Selezionando il nominativo Pippo il campo matricola sarà 2209 e il livello BS5
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
Ciao
credo di aver capito, penso che non ti basti php ma ti serva o ajax o jquery, potresti farlo con un refresh (da cui una selct sulla tabella per ricavare gli altri valori) ma è bruttissimo
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
prova a dare un occhio qui
https://www.mrwebmaster.it/javascript/select-dinamiche-jquery-php_7478.html
in pratica fa con le regioni/provincie/comuni quello che vuoi fare tu /nominativo/matricola/livello
devi avere la pazienza di cambiare i nomi delle variabili per renderlo di più facile lettura nel tuo caso e farlo operare su un'unica tabella al posto di tre ma su tre campi
 

Max61

Utente Attivo
2 Mar 2014
694
3
18
Però sarebbe utile per non sbagliare l'abbinamento tra il nome, la matricola e il livello,
perchè la coppia nome e matricola li uso come parametro per calcolare il totale delle ore fatte dal dipendente, quindi più è automatizzato e più è difficile fare errori, mentre il livello lo uso per calcolare il costo...
Prima di chiedere aiuto al forum ho già provato a modificare il codice del progetto regioniProvinceComuni, ma non sono riuscito...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
Ciao
prova, ma non ti assicuro niente
comunque verifica:
1. che abbia modificato giuso tutti i nomi delle variabili
2. ho sostituito le vecchie mysql con le nuove funzioni mysqli quindi verifica chre abbia fatto tutto
3. che i nomi che ho usato corrispondano alla tua tabella
4. con pazienza confronta con l'articolo di mrwm di cui ti ho dato il link


file form
PHP:
<label for="nominat">Nominativo:</label><br />
<select id="nominat" name="nominat" onchange="selNomiLiv(this.value);">
<option value="" selected="selected">-- seleziona --</option>
<?php
// Collegamento ad database.
$conn = mysqli_connect($host,$username,$password, $db);

// Query selezione tutte le nominati.
$sql = "select * from tbldipendenti order by nominativo";

// Eseguo la query.
$result = mysqli_query($conn,$sql);
while($nominat = mysqli_fetch_array($result)) {
?>
<option value="<?php echo $nominat['id']; ?>"><?php echo $nominat['nominativo']; ?></option>
<?php
}
?>
</select>
</p>
<p>
<label for="matricole">Matricola:</label><br />
<select id="matricole" name="matricole" onchange="selLiv(this.value);">
<option value="" selected="selected">-- seleziona --</option>
<?php

// Query selezione tutte le matricole.
$sql = "select * from tbldipendenti order by nominativo";

// Eseguo la query.
$result = mysqli_query($conn,$sql);
while($matricole = mysqli_fetch_array($result)) {
?>
<option value="<?php echo $matricole['id']; ?>"><?php echo $matricole['matricola']; ?></option>
<?php
}
?>
</select>
</p>
<p>
<label for="level">Città:</label><br />
<select id="level" name="level">
<option value="" selected="selected">-- seleziona --</option>
</select>
javascripit e jquery
Codice:
<script src="https://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script type="text/javascript">
// Select Province e Comuni dalla Regione.
function selNomiLiv(idNominat) {
  // Seleziono matricole di questa nominate.
  $.get("select_abitativa.php", { nominatid: idNominat, requestItems: 'matricole'},
  function(dataMatricole){
    $("select[id='matricole']").empty();
    var options = '<option value="">-- seleziona --</option>';
    var arrayMatricole = dataMatricole.split( '||');
    for (var i = 1; i < arrayMatricole.length; i++) {
      var provincia = arrayMatricole[i].split( /,/);
      options += '<option value="' + matricola[0] + '">' + matricola[1] + '</option>';
    }
    $("select[id='matricole']").html(options);
  });
  // Seleziono livelli di questa nominate.
  $.get("select_abitativa.php", { nominatid: idNominat, requestItems: 'livelli'},
  function(dataLivelli){
    $("select[id='level']").empty();
    var options = '<option value="">-- seleziona --</option>';
    var arrayLivelli = dataLivelli.split( '||');
    for (var i = 1; i < arrayLivelli.length; i++) {
      var comune = arrayLivelli[i].split( /,/);
      options += '<option value="' + livello[0] + '">' +livello[1] + '</option>';
    }
    $("select[id='level']").html(options);
  });
}

// Select Comuni dalla Provincia.
function selLiv(idNominat) {
  // Seleziono livelli di questa provincia.
  $.get("select_abitativa.php", { nominativoid: idNominat, requestItems: 'livelli'},
  function(dataLivelli){
    $("select[id='level']").empty();
    var options = '<option value="">-- seleziona --</option>';
    var arrayLivelli = dataLivelli.split( '||');
    for (var i = 1; i < arrayLivelli.length; i++) {
      var comune = arrayLivelli[i].split( /,/);
      options += '<option value="' + livello[0] + '">' + livello[1] + '</option>';
    }
    $("select[id='level']").html(options);
  });
}
</script>
file select_abitativa.php
PHP:
<?php
 
$conn = mysqli_connect($host,$username,$password, $db);

if (isset($_GET['nominatid']) and is_numeric($_GET['nominatid'])) {
  if (isset($_GET['requestItems']) and $_GET['requestItems']==='matricole') {
    $nominatID = intval($_GET['nominatid']);
    $query = <<<EOQ
SELECT *
FROM tbldipendenti
WHERE id = '$nominatID'
ORDER BY matricola
EOQ;
    $result = mysqli_query($query, $conn);
    $returnMatricole = '';
    while ($row = mysqli_fetch_array($result)) {
      $returnMatricole .= "||".$row['id'].",".$row['provincia'];
    }
    print_r($returnMatricole);
  }
  else if (isset($_GET['requestItems']) and $_GET['requestItems']==='livelli') {
    $nominatID = intval($_GET['nominatid']);
    $query = <<<EOQ
SELECT *
FROM tbldipendenti
WHERE id = '$nominatID'
ORDER BY livello
EOQ;
    $result = mysqli_query($conn, $query);
    $returnCLivelli = '';
    while ($row = mysqli_fetch_array($result)) {
      $returnCLivelli .= "||".$row['id'].",".$row['comune'];
    }
    print_r($returnCLivelli);
  }
}
else if (isset($_GET['provinciaid']) and is_numeric($_GET['provinciaid'])) {
  if (isset($_GET['requestItems']) and $_GET['requestItems']==='livelli') {
    $provinciaID = intval($_GET['provinciaid']);
    $query = <<<EOQ
SELECT *
FROM tbldipendenti
WHERE id = '$provinciaID'
ORDER BY livello
EOQ;
    $result = mysqli_query($conn,$query);
    $returnCLivelli = '';
    while ($row = mysqli_fetch_array($result)) {
      $returnCLivelli .= "||".$row['id'].",".$row['comune'];
    }
    print_r($returnCLivelli);
  }
}
?>
prova e.... spera

dimenticavo: stai attento alla sintassi eredoc delle ultime due query (forse è meglio che le trasforni in sintassi usuale)
 

Max61

Utente Attivo
2 Mar 2014
694
3
18
Ciao e grazie per il tempo dedicatomi, ho provato il tuo codice e con alcune modifiche sono riuscito a far funzionare il campo NOMINATIVO e il campo MATRICOLA, però non è quello che mi serve così già lo faccio, infatti con tre query come questa
PHP:
require"Connessione.php";
// ===Preparazione elenco per menu a tendina nominativo ====
  $Query_nominativo="SELECT nominativo
            FROM tbldipendenti
            GROUP BY nominativo";
       //esecuzione della query
           [email protected]_query($Query_nominativo) or die (mysql_error());
       if(!$Leggi_user_name)
         print("<H2>Query fallita!</H2>");
       else
       echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>Nome</b> &nbsp;<select name='nominativo' id='user_nameid' required>";//Genera casella a discesa
       while ($row = mysql_fetch_array($Leggi_user_name))
    {
        $nominativo = $row['nominativo'];
        echo "<option value =\"$nominativo\">$nominativo </option>"; //Popola casella
    }
        echo "value=$nominativo </select>";
riesco ad estrapolare tutti i dati necessari.
Io avrei voluto che una volta selezionato un nominativo mi si compilasse in auromatico sia il campo livello che il campo matricola, come già avevo fatto tempo su access:
Codice:
Me.Localita.Value = Me.Localita.Column(0)
Me.Cap.Value = Me.Localita.Column(1)
Me.Prov.Value = Me.Localita.Column(2)
dove una volta selezionata la località mi compila i campi Cap e Prov automaticamente con i dati presi dalla tabella.
Vorrei poter fare la stessa cosa adesso
Es.:
nominativo matricola livello
Pippo 2209 BS5
Pluto 4536 B2
Selezionando il nominativo Pippo il campo matricola sarà compilato automaticamente con 2209 e il livello BS5.
Ciao