[PHP] Form con elenco a tendina con dati DB

valerio matrix

Nuovo Utente
7 Mag 2015
33
0
6
Sono giorni che ci provo ma senza successo. So che dovrebbe essere un passaggio semplice, ma non riesco a venirne a capo.
Ho un piccolo DB con quattro tabelle. Le prime tre tabelle hanno già dei record mentre la quarta racchiude solo le chiavi primarie delle tre tabelle.
Ora il problema è: come faccio a inserire le chiavi primarie dentro la quarta tabella? e cosa più importante devo capire prima il nome di ogni singola persona prima di relazionarla con il posto dove lavora e la sua funzione.
Avevo provato varie cose ma tutte senza risultato. Posto il poco di lavoro che ho fatto:
Codice:
<?php
//dati connessione
...
$get_lavoratori_query = "SELECT cognome FROM lavoratori";
   $risultato_lav = mysqli_query($conn, $get_lavoratori_query);
   
   $get_fa_query = "SELECT nome FROM funz_aziendale";
   $risultato_fa = mysqli_query($conn, $get_fa_query);
   
   $get_strut_query = "SELECT nome FROM struttura";
   $risultato_strut = mysqli_query($conn, $get_strut_query);

   if($risultato_lav === false){
       die("<p> Errore </p>");
   }
   
       
       while ($lavoratori = mysqli_fetch_array($risultato_lav))
       {
           
            $lavoratori['cognome'] ;
           
       }

   
   
       
?>
e l'html
Codice:
<?php
require '../scripts/select_organigramma.php';

?>
<html>
<head>
   <link href="css/stile.css" rel="stylesheet" type="text/css">
   <link href="css/classi.css" rel="stylesheet" type="text/css">
   <title> Seleziona Organigramma </title>
</head>
<body>
   <div class="conteiner_titolo">
       <h1> SELEZIONA ORGANIGRAMMA </h1>
   </div>
   
   <div class="conteiner_ext_form_new">
       <form action="scripts/" method="POST">
       <select name="nome">
       <option value= "<?php $lavoratori; ?>"> <?php echo "$lavoratori"; ?> </option>
       <option value="scelta due">scelta due</option>
       </select>
       </form>
       
   </div>
   
   
</body>
</html>
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
26
Ciao, scusa ma non ho capito. Hai detto che la quarta tabella racchiude le chiavi delle prime tre tabelle. Subito dopo però chiedi come inserire tali chiavi nella quarta tabella.

Questa tabella è, dunque, vuota?
 

valerio matrix

Nuovo Utente
7 Mag 2015
33
0
6
esatto. sono quattro tabelle (lavoratore, funzione_aziendale, struttura, organigramma). Organigramma è vuota e deve racchiudere oltre il proprio id anche gli id delle altre tre tabelle in modo da poter avere un organigramma.
ad esempio, "Mario Rossi" "presidente" della struttura "ospedale". In organigramma metto solo gli id dei campi appena citati..
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
26
Ok. Il tuo obiettivo è quello di creare un form in cui vai a smistare ogni singola persona presente in lavoratori, secondo funzione aziendale e struttura, all'interno della tabella organigramma?
 

valerio matrix

Nuovo Utente
7 Mag 2015
33
0
6
esatto. Calcolando che per adesso è un DB molto semplice, ma l'ho creato per capire. Piano piano cerco di migliorarlo. Sono giorni che però sbatto e risbatto su questo punto.
 

valerio matrix

Nuovo Utente
7 Mag 2015
33
0
6
Sto provando a leggere ma non comprendo proprio tutto in inglese. Comunque, se non volessi fare con il menù a tendina, come li posso relazionare le mie tre tabelle?
 

marino51

Utente Attivo
28 Feb 2013
2.912
162
63
Lombardia
il problema non è il menu a tendina, ma come gestire una gerarchia di dati in un database relazionale
 

valerio matrix

Nuovo Utente
7 Mag 2015
33
0
6
Cosa intendi per gerarchia? A me le tabelle servono solo in relazione tra loro. Organigramma è solo una tabella che mi registra che il lavoratore X dal giorno Y in poi, svolge dentro la struttura Z il compito W. E' solo un dato indicativo che viene stampato quando serve in una pagina dinamica. Io poi non devo interagire in modo differente in base al grado o ruolo che ricoprono in azienda, e quindi con il quale sono stati registrati.
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
26
Per una questione di comodità immediata io inserirei le chiavi delle tabelle funzioni e struttura all'interno di due colonne della tabella lavoratori (chiamandole ad esempio fk_struttura e fk_funzioni), facendo a meno della tabella organigramma. E poi sviluppare da lì ciò che ti serve.

In ogni caso, la mia idea è quella di ciclare direttamente sulla tabella lavoratori, inserendo ogni riga all'interno di un form, il quale a sua volta conterrà due select con i possibili valori assumibili da fk_struttura e fk_funzioni e poi andare in update sulla lavoratori.
 

marino51

Utente Attivo
28 Feb 2013
2.912
162
63
Lombardia
Per una questione di comodità immediata io inserirei le chiavi delle tabelle funzioni e struttura all'interno di due colonne della tabella lavoratori (chiamandole ad esempio fk_struttura e fk_funzioni), facendo a meno della tabella organigramma. E poi sviluppare da lì ciò che ti serve.
l'articolo citato in un mio post suggeriva di evitare la tabella organigramma e proponeva due metodi per gestire la gerarchia
ma, se l'inglese è un problema ...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
scusate se mi intrometto, ma se non ho capito male il problema valerio matrix chiede come fare per riempire una tabella con i vari id selezionati.
se è così non capisco perchè la facciate così complicata, schematizzo
PHP:
<?php
//dati di connessione
if(isset($_POST['invia'])){
    $id_lav=$_POST['lav'];
    $id_fun=$_POST['fun'];
    $id_str=$_POST['str'];
    $query="INSERT INTO organigramma(id_lav,id_fun,id_str) VALUES($id_lav,$id_fun,$id_str)";
    if(mysqli_query($query)){
        echo "OK";
    }else{
        echo "KO";
    }
}
echo "<form action='".$_SERVER['PHP_SELF']."' method='post'>";
$q_lavoratori=mysqli_query($conn,"SELECT * FROM FROM lavoratori ORDER BY cognome");
echo "<select name='lav'>";
while($riga=mysqli_fetch_assoc($q_lavoratori)){
    echo "<option value='".$riga['id']."'>".$riga['cognome']."</option>";
}
echo "</select><br>";
//stessa cosa per la funzione aziendale e la struttura
//evidetemente cambiando nomi tabella e sekect
echo "<input type='submit' name='invia' value='invia'>";
echo "</form>";
?>
a cosa servirà poi quella tabella, probabilmente per creare delle relazioni, sarà un problema successivo

p.s.
quando inserite codice usate gli appositi bccode
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
2.912
162
63
Lombardia
@Borgo, non è complicata ... ora, ma lo sarà in caso di modifiche alla struttura organizzativa che è memorizzata nel db
ma ... chi vivrà vedrà
at salut
 

marino51

Utente Attivo
28 Feb 2013
2.912
162
63
Lombardia
ricorda che si impara di più dai propri errori che da quelli degli altri
caro Gianni, le massime filosofiche non aiutano l'apprendimento, i libri e qualche articolo ben fatto, si
spesso si affrontano soluzioni con meno del minimo delle conoscenze, ma è la vita di oggi

ps suggerivo una buona lettura non errori ....
 

valerio matrix

Nuovo Utente
7 Mag 2015
33
0
6
Buongiorno. Vi ringrazio per gli utili consigli. Sto provando a studiare php e mysql su dei libri e cerco di fare pratica, realizzando questi piccoli db. Ora, per quello che ho capito, le cose che si studiano entrano in testa se vengono poi applicate a livello pratico e per questo motivo, sto cercando di realizzare questa struttura. Il problema è che carico i dati nel db, li riesco a stampare ma non riesco a fare ciò che ho chiesto nel post e non trovo nemmeno un metodo per farlo su il libro. Sicuramente devo provare e riprovare ma vi ringrazio per l'aiuto.
borgo italia ho provato il tuo codice, ma quando lo eseguo mi stampa solo il form con il menu a tendina, vuoto. Sto cercando di capire il perchè.
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
26
Sulla base di ciò che ti avevo detto nella mia ultima risposta, avevo messo insieme del codice che faceva ciò di cui hai bisogno. Ed è contenuto nel file in allegato.

Le strutture non sono le tue originali (viene a mancare la tabella organigramma).

EDIT:
ho visto solo ora che hai risolto. Come non detto.
Al limite puoi vederla come un'alternativa o esercizio. ;)
 

Allegati