[PHP] Collegamento tra più tabelle

Discussione in 'PHP' iniziata da keyz23, 25 Luglio 2018.

  1. keyz23

    keyz23 Nuovo Utente

    Registrato:
    18 Luglio 2018
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    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">
        <
    bRichiedente :</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>
      <
    bNumero 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
     
  2. zorro

    zorro Utente Attivo

    Registrato:
    20 Ottobre 2014
    Messaggi:
    212
    Mi Piace Ricevuti:
    10
    Punteggio:
    18
    Sesso:
    Maschio
    Località:
    ROMA
    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
     
  3. keyz23

    keyz23 Nuovo Utente

    Registrato:
    18 Luglio 2018
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    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.
     
  4. zorro

    zorro Utente Attivo

    Registrato:
    20 Ottobre 2014
    Messaggi:
    212
    Mi Piace Ricevuti:
    10
    Punteggio:
    18
    Sesso:
    Maschio
    Località:
    ROMA
    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: 25 Luglio 2018
  5. keyz23

    keyz23 Nuovo Utente

    Registrato:
    18 Luglio 2018
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    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: 25 Luglio 2018
  6. zorro

    zorro Utente Attivo

    Registrato:
    20 Ottobre 2014
    Messaggi:
    212
    Mi Piace Ricevuti:
    10
    Punteggio:
    18
    Sesso:
    Maschio
    Località:
    ROMA
    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
     
  7. keyz23

    keyz23 Nuovo Utente

    Registrato:
    18 Luglio 2018
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Certo! Tutto il tempo che vuoi e grazie ancora per l'aiuto!
    ( Ad ogni modo ti lascio il mio file input.php se vuoi vedere come ho impostato io la pagina di inserimento dei dati https://pastebin.com/m0W54EC7 )
     
  8. zorro

    zorro Utente Attivo

    Registrato:
    20 Ottobre 2014
    Messaggi:
    212
    Mi Piace Ricevuti:
    10
    Punteggio:
    18
    Sesso:
    Maschio
    Località:
    ROMA
    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.
     
  9. keyz23

    keyz23 Nuovo Utente

    Registrato:
    18 Luglio 2018
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    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
     
  10. zorro

    zorro Utente Attivo

    Registrato:
    20 Ottobre 2014
    Messaggi:
    212
    Mi Piace Ricevuti:
    10
    Punteggio:
    18
    Sesso:
    Maschio
    Località:
    ROMA
    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
     
  11. zorro

    zorro Utente Attivo

    Registrato:
    20 Ottobre 2014
    Messaggi:
    212
    Mi Piace Ricevuti:
    10
    Punteggio:
    18
    Sesso:
    Maschio
    Località:
    ROMA
    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: 17 Agosto 2018
Sto caricando...

Condividi questa Pagina