[PHP + MYSQL ] Inserimento dati in database da form dinamico

Discussione in 'PHP' iniziata da keyz23, 13 Settembre 2018.

  1. keyz23

    keyz23 Nuovo Utente

    Registrato:
    18 Luglio 2018
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Buongiorno a tutti,
    Sto provando a creare una pagina web con un form che va a popolare due table nel database.
    In particolare in questo form ho una parte fissa e una dinamica, ovvero che l'utente può aggiungere un numero di partecipanti desiderati cliccando su un bottone.
    Il fatto è che la parte fissa del form viene inserita senza problemi nel database. La parte dinamica invece non ne vuole proprio sapere.. ci sbatto la testa da un po e non so come fare.

    Vi faccio vedere il codice cosi mi posso esprimere meglio:

    index.php

    PHP:
    index.php
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
    Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd"
    >
    <
    html>

    <
    head>
    <
    script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <title>Prenotazione </title>
    <script src="utils.js"></script>
    </head>

    <body>

    Inserire i dati richiesti:<br><br>
    <form method="post" action="input.php">
    <b> Richiedente :</b><br><br>
    Nome:<input type="text" name="nome" size="20"><br>
    Cognome:<input type="text" name="cognome" size="20"><br>
    Email: <input type="email" name="email" size="20"><br>
    Oggetto:<br><textarea name="oggetto" rows="5" cols="40" placeholder="Specificare oggetto"></textarea><br>
    <select class="date" name="day">
                            <option value="1">01
                            </option>
                            <option value="2">02
                            </option>
                            <option value="3">03
                            </option>
                            <option value="4">04
                            </option>
                            <option value="5">05
                            </option>
                            <option value="6">06
                            </option>
                            <option value="7">07
                            </option>
                            <option value="8">08
                            </option>
                            <option value="9">09
                            </option>
                            <option value="10">10
                            </option>
                            <option value="11">11
                            </option>
                            <option value="12">12
                            </option>
                            <option value="13">13
                            </option>
                            <option value="14">14
                            </option>
                            <option value="15">15
                            </option>
                            <option value="16">16
                            </option>
                            <option value="17">17
                            </option>
                            <option value="18">18
                            </option>
                            <option value="19">19
                            </option>
                            <option value="20">20
                            </option>
                            <option value="21">21
                            </option>
                            <option value="22">22
                            </option>
                            <option value="23">23
                            </option>
                            <option value="24">24
                            </option>
                            <option value="25">25
                            </option>
                            <option value="26">26
                            </option>
                            <option value="27">27
                            </option>
                            <option value="28">28
                            </option>
                            <option value="29">29
                            </option>
                            <option value="30">30
                            </option>
                            <option value="31">31
                            </option>
                        </select>
                        <select name="month">
                            <option value="1">January
                            </option>
                            <option value="2">February
                            </option>
                            <option value="3">March
                            </option>
                            <option value="4">April
                            </option>
                            <option value="5">May
                            </option>
                            <option value="6">June
                            </option>
                            <option value="7">July
                            </option>
                            <option value="8">August
                            </option>
                            <option value="9">September
                            </option>
                            <option value="10">October
                            </option>
                            <option value="11">November
                            </option>
                            <option value="12">December
                            </option>
                        </select>
    <br>
    <b>Partecipanti </b>
    <br>
    <br>
    <div id="start">
        <div id="first">
          Nome:<input type="text" name="nomep[]" size="20"><br>
          Cognome: <input type="text" name="cognomep[]" size="20"><br>
          Email: <input type="email" name="emailp[]" size="20"><br>
          Personale:
           <select name="tipologia[]" required="required">
                    <option>Interno</option>
                    <option>Esterno</option>
           </select>
          <br>
          <br>
        </div>
      </div>
      <br>
     Numero partecipanti interni:
     <input type="text" id="n1" size="1" value="1"><br>

    <button><a href="#" id="add">Aggiungi partecipante</a></button>

    <input type="submit" value="Invia" >
    </form>
    </body>
    </html>
    input.php

    PHP:
    <?php
    //Connecting to db here

    $servername "localhost";
    $username "root";
    $password "123456789";
    $dbname "Project1";

    // Create connection
    $conn = new mysqli($servername$username$password$dbname);

    // Check connection
    if ($conn->connect_error) {
        die(
    "Connection failed: " $conn->connect_error);
    }
    echo 
    "Connected successfully";

    // Richiedente
    $nome $_POST['nome'];
    $cognome $_POST['cognome'];
    $email $_POST['email'];
    $oggetto $_POST['oggetto'];
    $day $_POST['day'];
    $month $_POST['month'];

    // Personale
    $nomep $_POST['nomep'];
    $cognomep $_POST['cognomep'];
    $emailp $_POST['emailp'];
    $tipologia $_POST['tipologia'];

    //inserting data order
    $query1 "INSERT INTO Prenotazione (nome,cognome,email,oggetto,day,month) VALUES ('$nome','$cognome','$email','$oggetto', $day$month)";
    //execute the query here
    $result mysqli_query($conn$query1 );

    // SINO A QUI tutto funziona tranquillamente

    // Interni
    $query "";
    if( !empty( 
    $_POST['nomep'] ) ) {

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

            
    $cognomep = empty( $_POST['cognomep'][$key] ) ? NULL $_POST['cognomep'][$key];
            
    $emailp = empty( $_POST['emailp'][$key] ) ? NULL $_POST['emailp'][$key];
            
    $tipologia = empty( $_POST['tipologia'][$key] ) ? NULL $_POST['tipologia'][$key];
            
    $query .= " ( '$nomep', '$cognomep', '$emailp','$tipologia', '$email', '$oggetto' ) ".(end($$_POST['nomep']) ? '' ',');
        }
    }
    var_dump($query); // MI restituisce le stringhe in maniera corretta.
    if( !empty( $query ) ) {

        
    $query2 "INSERT INTO Personale (nomep, cognomep, emailp, tipologia, email_rich,oggetto_rich) VALUES ".$query;
        
    $result mysqli_query($conn$query2 ); //
    }

    ?>
    utils.js

    Codice:
    $(document).ready(function() {
        $("#add").click(function(){
    
          var val1 =$("#n1").val();
          for(var i=0;i<val1;i++){
          $("#start").append($("#first").clone());
          }
        });
    });
    
    
    Il database ha queste due table:

    Personale (nomep, cognomep, emailp, tipologia, email_rich,oggetto_rich) ;
    Prenotazione (nome,cognome,email,oggetto,day,month)

    Secondo voi come posso fare? Grazie del tempo e dell'aiuto.
     
    Ultima modifica: 14 Settembre 2018
  2. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.238
    Mi Piace Ricevuti:
    110
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    potresti postare "utils.js" per evitare di inventare il contenuto ….
     
  3. keyz23

    keyz23 Nuovo Utente

    Registrato:
    18 Luglio 2018
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Ho aggiunto nel post iniziale!
     
  4. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.238
    Mi Piace Ricevuti:
    110
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    non funziona "(end($$_POST['nomep']) ? '' : ',')" perché restituisce sempre la virgola e la query da errore
    Codice:
    INSERT INTO Personale (nomep, cognomep, emailp, tipologia, email_rich, oggetto_rich) VALUES ( 'eeeeeeee', 'ffffffffffffff', 'info@mail.com','Esterno', 'info@mail.com', 'cccccccccccccc' ) , ( 'iiiiiiiiiiiiii', 'kkkkkkkkkkkkkkkkkkk', 'info@mail.com','Interno', 'info@mail.com', 'cccccccccccccc' ) ,
    vedi la virgola finale
     
  5. keyz23

    keyz23 Nuovo Utente

    Registrato:
    18 Luglio 2018
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Grazie per la risposta. Ho provato anche a cancellare quella parte finale
    Codice:
    .(end($$_POST['nomep']) ?);
    Ma inserisce solamente all'interno di Prenotazione e non in Personale
     
  6. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.238
    Mi Piace Ricevuti:
    110
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    usiamo una variabile, $x, per controllare quando inserire la virgola
    PHP:
    // Interni
    $query "";
    $x 0;
    if( !empty( 
    $_POST['nomep'] ) ) {

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

            
    $cognomep  = empty( $_POST['cognomep'] [$key] ) ? NULL $_POST['cognomep'] [$key];
            
    $emailp    = empty( $_POST['emailp']   [$key] ) ? NULL $_POST['emailp']   [$key];
            
    $tipologia = empty( $_POST['tipologia'][$key] ) ? NULL $_POST['tipologia'][$key];

            if( 
    $x $query .= ",";

            
    $query .= " ( '$nomep', '$cognomep', '$emailp','$tipologia', '$email', '$oggetto' )";

            
    $x 1;

            echo 
    $key." - ".$query."<br /><br />";
        }
    }
    if( !empty( 
    $query ) )
    {
        
    $query2 "INSERT INTO Personale (nomep, cognomep, emailp, tipologia, email_rich, oggetto_rich) VALUES ".$query;
        echo 
    $query2."<br /><br />";
    //  $result = mysqli_query($conn, $query2 ); //
    }
    ps, ho commentato esecuzione "insert" e messo degli "echo", sistema tu
     
    A keyz23 piace questo elemento.
  7. keyz23

    keyz23 Nuovo Utente

    Registrato:
    18 Luglio 2018
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Ciao scusami per il ritardo nella mia risposta. Per prima cosa ti ringrazio veramente per l'aiuto che mi stai dando. Ho inserito il codice nel mio "progetto" ma continua ad inserire solamente in Prenotazione e non in Personale.
     
  8. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.238
    Mi Piace Ricevuti:
    110
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    posta tutto il codice, probabilmente c'é ancora un errore nella query

    in ogni caso prova ad eseguire la query con il codice seguente in modo da vedere l'errore
    PHP:
    $result mysqli_query($conn$query2 );
    if (
    $result === TRUE) { echo "New record created successfully"; }
    else                  { echo 
    "Error: " $query2 "<br />" $conn->error; }
     
    A keyz23 piace questo elemento.
  9. keyz23

    keyz23 Nuovo Utente

    Registrato:
    18 Luglio 2018
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Ti ringrazio in questo modo sono riuscito a risolvere il problema :) Grazie mille
    Un’ultimissima cosa! Ma se volessi creando un nuovo campo che questo sia vuoto?
    Mi spiego se io compilo il campo e poi clicco aggiungi partecipante mi visualizza il nuovo campo con tutti i dati di quello di prima. C’è un modo per evitare che ciò avvenga?
     
  10. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.238
    Mi Piace Ricevuti:
    110
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    prova così
    HTML:
    <script>
    $(document).ready(function()
    {
        $("#add").click(function()
        {
    //      $("#start").append($("#first").clone());
    
            var newSet = $("#first").clone().find("input").val("").end();
            $("#start").append(newSet)
        });
    });
    </script>
    verifica bene il risultato (sono di corsa …)
     
  11. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.238
    Mi Piace Ricevuti:
    110
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    ultimo pezzetto,
    HTML:
    <script>
    $(document).ready(function()
    {
        var $conta = 1;
    
        $("#add").click(function()
        {
            var newSet = $("#first").clone().find("input").val("").end();
            $("#start").append(newSet)
    
            $conta += 1;
            $("#n1").val($conta);
        });
    });
    </script>
     
    A keyz23 piace questo elemento.
  12. keyz23

    keyz23 Nuovo Utente

    Registrato:
    18 Luglio 2018
    Messaggi:
    30
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Ti ringrazio! Funziona perfettamente
     
Sto caricando...

Condividi questa Pagina