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

Max61

Utente Attivo
2 Mar 2014
740
4
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 
           $Leggi_user_name=@mysql_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
740
4
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
740
4
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
740
4
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";
 $result=@mysql_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";
 $result=@mysql_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.046
150
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
740
4
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.046
150
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
740
4
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
740
4
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.046
150
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.046
150
63
PR
www.borgo-italia.it
ciao
prova a dare un occhio qui
https://www.mrw.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
740
4
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.046
150
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
740
4
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
           $Leggi_user_name=@mysql_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
 
Discussioni simili
Autore Titolo Forum Risposte Data
L [PHP] Form da select compilare campi automaticamente PHP 1
M [PHP] Compilare automaticamente il campo data PHP 5
T Compilare "form PDF" in php PHP 2
M Tabella PHP con sorgente dati csv: selezionare le riche e compilare Form eMail PHP 1
S Compilare un documento word da form php PHP 1
A Pulsante per compilare una form php in automatico con dati presi da un db PHP 6
N Compilare il PHP PHP 0
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8

Discussioni simili