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

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

keyz23

Nuovo Utente
18 Lug 2018
30
0
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:
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', '[email protected]','Esterno', '[email protected]', 'cccccccccccccc' ) , ( 'iiiiiiiiiiiiii', 'kkkkkkkkkkkkkkkkkkk', '[email protected]','Interno', '[email protected]', 'cccccccccccccc' ) ,
vedi la virgola finale
 
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
 
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
 
  • Like
Reactions: keyz23
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.
 
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; }
 
  • Like
Reactions: keyz23
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; }
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?
 
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 …)
 
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>
 
  • Like
Reactions: keyz23
Ciao a tutti
Scusate il disturbo
Keyz23 utilizza un pulsante per aggiungere nuovi partecipanti in base alle necessità dell'utente.
A me serve circa la stessa cosa, ma mi sorge una domanda.
Per memorizzare all'interno degli array i dati (non uso un DB ma uso un array per ogni campo), uso array_push
Come gestisco i dati eventualmente aggiunti dall'utente grazie al pulsante "Aggiungi"?
Da dove li recupero?
 
Per memorizzare all'interno degli array i dati (non uso un DB ma uso un array per ogni campo), uso array_push
Come gestisco i dati eventualmente aggiunti dall'utente grazie al pulsante "Aggiungi"?
Da dove li recupero?
trovo quanto hai scritto leggermente "ermetico" (non lo capisco),
esempio "non uso un DB ma uso un array per ogni campo" dove, come, perché e quando ?
puoi spiegare cosa fai e cosa ti serve ?
 

Discussioni simili