Nel codice che hai scritto, oltre al problema del doppio inserimento, ci sono anche altri errori.
Partiamo dall'oggetto della discussione, il doppio inserimento.
Il problema sta qui:
Codice PHP:
$comando="INSERT INTO persons (Nome, Cognome, Età) VALUES ('$nome', '$cognome', '$età')";
// Qui esegui la query
$result = mysqli_query($conn, $comando);
// qui la esegui di nuovo, da cui il secondo inserimento
if ( ! mysqli_query($conn, $comando) )
echo "Inserimento fallito";
O fai
Codice PHP:
$result = mysqli_query($conn, $comando);
if ( ! $result )
...
oppure
Codice PHP:
// elimini questa riga
// $result = mysqli_query($conn, $comando);
// ed esegui direttamente la query nell'if
if ( ! mysqli_query($conn, $comando) )
...
Altri problemi:
tu fai questo controllo
Codice PHP:
if ( ! $nome && ! $cognome && ! $età )
dentro questo if ci andrai solo se l'utente non scrive nulla perché dice "Se non hai inserito né il nome, né il cognome, né l'età...", quindi basta che l'utente scriva uno solo di quei dati e per il tuo controllo è tutto ok.
Se tutti e 3 quei dati sono obbligatori, il controllo corretto è
Codice PHP:
if ( ! $nome || ! $cognome || ! $età )
che vuol dire "Se non hai inserito il nome, oppure non hai inserito il cognome, oppure non hai inserito l'età..."
Ad un certo punto scrivi
Codice PHP:
if( ! $conn )
{
mysqli_close($conn);
die("problemi nello stabilire la connessione<br>");
}
Se la connessione fallisce, non c'è nessuna connessione da chiudere con mysqli_close(), essendo fallita non è mai stata aperta, se finisci lì dentro, PHP ti mostrerà un errore perché a mysqli_close() stai passando un booleano (false) invece dell'handle ad una connessione.