[PHP] Collegamento tra più tabelle

  • Creatore Discussione Creatore Discussione keyz23
  • Data di inizio Data di inizio

keyz23

Nuovo Utente
18 Lug 2018
30
0
6
Buongiorno sto realizzando una webapplication in cui ho 3 tabelle :

prenotazione (id,nome_rich,cogn_rich,email_rich,oggetto_rich)
interni (id,nome_int,cogn_int,email_int)
esterni (id,nome_est,cogn_est,email_est)

E ho creato un form che permette l'inserimento dei dati nel database ( Postgres ) in maniera che ci sia un richiedente di una prenotazione e un numero di persone interne ed esterne scelto dall'utente.
Quindi se l'utente vuole inserire 4 persone interne, avrà in automatico 4 campi "nome_int, cogn_int,email_int".
Adesso qual è il problema? In sostanza quello che non riesco ad implementare è un modo per far si che ID di prenotazione sia uguale ad ID di interni ed esterni in maniera tale da collegarli, nel senso che cosi quando vado a stampare i dati del richiedente io abbia anche tutte le persone interne ed esterne collegate ad esso. Questo procedimento mi manca e non capisco come implementarlo.

index.php
PHP:
<form method="post" action="input.php">
  <!-- FORM RICHIEDENTE -->
  <div class="form_1">
    <b> Richiedente :</b>
    <br>
    <br>
    Nome:<input type="text" name="name" size="20"><br>
    Cognome:<input type="text" name="surname" size="20"><br>
    Email: <input type="email" name="email" size="20"><br>
    Oggetto :<br><textarea name="testo" rows="5" cols="40" placeholder="Specificare oggetto "></textarea><br>
  </div>
  <!-- FINE FORM RICHIEDENTE -->
<br>
 
  <!-- FORM INTERNO -->
  <div class="form_2">
  <b>Partecipanti Interni</b>
  <br>
  <br>
  <div id="start">
    <div id="first">
      Nome:<input type="text" name="iname[]" size="20"><br>
      Cognome: <input type="text" name="isurname[]" size="20"><br>
      Email: <input type="email" name="iemail[]" size="20"><br>
      <br>
    </div>
  </div>
  <br>
  <b> Numero partecipanti interni:</b>
  <input type="text" id="n1" value="1"><br>
  <button><a href="#" id="add1">Aggiungi partecipante</a></button>
  </div>
  <!-- FINE FORM INTERNO -->

<br>
<!-- FORM ESTERNO -->
  <b>Partecipanti Esterni</b>
  <br>
  <br>
  Numero partecipanti Esterni:
 <input type="text" id="n2" value="1"><br>
 <button><a href="#" id="add2">Aggiungi partecipante</a></button>
  <div id="start2">
    <div id="first2">
      Nome:<input type="text" name="ename[]" size="20"><br>
      Cognome: <input type="text" name="esurname[]" size="20"><br>
      Email: <input type="email" name="eemail[]" size="20"><br>
      <br>
    </div>
  </div>

Grazie a tutti per l'aiuto
 
Ciao Keyz23,
se non ho capito male, il tuo è un problema di ID. Questo viene inserito in modo automatico dal computer, quindi, l'unica cosa che potresti fare è: una volta inserito un nuovo utente recuperarne l'ID, quindi creare nelle altre due tabelle un campo (ad es. ID_UT) dove memorizzare l'ID dell'utente appena immesso
 
Intanto grazie per la risposta :)
Quindi dici tipo di fare:
Credo id Richiedente --> questo stesso id viene inserito nelle due tabelle Interno ed Esterno, cosi poi quando vado a fare la stampa vado a richiedere tutto ciò che ha lo stesso id del richiedente?
In sostanza il mio problema è che ho un ID padre, e diversi ID figli e devono essere concatenati tra loro in modo che quando stampo l'ID del padre vengano stampati pure tutti gli ID dei figli.
 
Esattamente.
Se un utente (come il tuo esempio) viene inserito nella prima tabella con un ID pari a 5 e porta ad es. 4 clienti, questi verranno inseriti nell'altra/e tabella/e con ID progressivi (ad es. 6, 7 ,8 e 9) e ID_UT uguale a 5. In sostanza, come sdici tu, hai un ID padre nella prima tabella (5) a cui corrispondono 4 ID_UT figli nelle altre tabelle.
 
Ultima modifica:
Mmmh, solo che a livello di php non capisco come implementarla.
Io ho l'inserimento in richiedente:
PHP:
$query1 = "INSERT INTO prenotazione (nome_rich, cogn_rich, email_rich,oggetto_rich,data_richiesta,orario_richiesta) VALUES ('$name','$surname', '$email','$testo','$str_data', '$str_hour')";

E invece l'inserimento in Interno:
PHP:
$query = "";
if( !empty( $_POST['iname'] ) ) {

    foreach( $_POST['iname'] as $key => $iname ) {

        $isurname = empty( $_POST[$key]['isurname'] ) ? NULL : $_POST[$key]['isurname'];
        $iemail = empty( $_POST[$key]['iemail'] ) ? NULL : $_POST[$key]['iemail'];
        if ($query != "" ) {
            $query .= ",";
        }
        $query .= " ( '$iname', '$isurname', '$iemail' ) ";
    }
}
if( !empty( $query ) ) {

    $query2 = "INSERT INTO interni (nome_int, cogn_int, email_int,id_rich_int) VALUES ".$query;
    $result = pg_query($conn, $query2 ); //if you are using pg_query and $conn is the connection resource
}

Quindi supponendo di aggiungere in interni un valore id_rich_int, per fare in modo che abbia lo stesso valore dell'ID di richiedente, devo aggiungere questo comando?
$query .= " ( '$iname', '$isurname', '$iemail','$id' ) ";

EDIT:
Ho provato e ho ricevuto ovviamente un messaggio di errore.
 
Ultima modifica:
Io ho fatto in questo modo (forse non sarà il più ortodosso ma funziona):
una volta inserito l'utente nella prima tabella, ne recuperi l'ID, tramite una query di ricerca, cercando un utente con nome, cognome e mail uguale all'utente appena immesso, leggi l'ID e lo salvi in una variabile, poi vai sull'altra tabella e salvi tutti gli utenti inserendo nel campo ID_UT il valore salvato nella variabile (in pratica l'ID del padre). Probabilmente potrai ottenere lo stesso risultato usando le JOIN, ma in questo non sono molto ferrato.
Se mi dai un po' di tempo ti posto uno script di esempio
 
Non amo troppo leggere il codice, preferisco fared uina cosa ex-novo.
Una cosa sola: rileggendo il tuo post non è molto chiaro ciò che intendi fare: che vuoi dire con

e un numero di persone interne ed esterne scelto dall'utente.

in che senso interne o esterne? non è molto chiaro. Anche come è strutturato il form. Non lo trovo nel file che mi hai postato.
 
Non amo troppo leggere il codice, preferisco fared uina cosa ex-novo.
Una cosa sola: rileggendo il tuo post non è molto chiaro ciò che intendi fare: che vuoi dire con



in che senso interne o esterne? non è molto chiaro. Anche come è strutturato il form. Non lo trovo nel file che mi hai postato.
Ciao, nel senso che l'utente può scegliere quante persone aggiungere, ovvero tramite come un form dinamico. Quindi se vuole aggiungere 3 persone risulterà per 3 volte Nome, Cognome, Email delle persone che si vogliono aggiungere
 
Si, questo è chiaro. Io intendevo sapere che vuoi dire con 'persone interne ed esterne scelte dall'utente': interne o esterne a che cosa? non è chiaro. Io comunque domani vado fuori una settimana, se hai pazienza di aspettare.........
A presto


Zorro
 
Ciao keyz23,
ho fatto qualche prova e prima di inviarti lo script (anzi gli script: sono ben 8, ho preferito separare i vari script per maggior chiarezza) ti invio il link. Mi sono creato due tabelle di prova: una PRENOTAZIONI con ID (autoincrementante) NOME, COGNOME e MAIL del cliente 'padre', e una OSPITI che, oltre ai precedenti campi, ha anche ID_UT che memorizza l'ID del padre, legandolo così ai figli (ospiti)


Zorro
 
Ultima modifica:

Discussioni simili