Alimenter une table MySQL via un formulaire HTML

Voici un formulaire HTML permettant d'ajouter un enregistrement dans notre table carnet. Le formulaire contient des zones de texte comportant des attributs name. Les valeurs de ces attributs seront récupérées dans les variables du tableau associatif $_POST.

ajouter.html

<!DOCTYPE html>
<html lang="fr">
	<head>
        <title>Ajouter un contact</title>
		<meta charset="utf-8">
	</head>
	<body>
		<h1>Ajouter un contact</h1>
		<form method="post">
			<label>Civilité</label>
			<select name="civilite">
				<option value="Madame">Madame</option>
				<option value="Monsieur" selected>Monsieur</option>
			</select>
			<label>Prénom</label>
            <input type="text" name="prenom">
			<label>Nom</label>
            <input type="text" name="nom">
			<label>Email</label>
            <input type="email" name="email">
			<label>Date de naissance</label>
            <input type="date" name="date_naissance">
			<input type="submit" value="Ajouter">
		</form>
	</body>
</html>

Pour finir, une requête SQL INSERT INTO permettra d’ajouter une ligne dans la table carnet.

Le but est d’obtenir, grâce aux concaténations des variables et des textes, une requête SQL de la forme suivante :

INSERT INTO carnet VALUE(NULL, 'Monsieur', 'Pierre', 'Richard', 'pierre@free.fr', '1940-10-13')

La première "anti-valeur" NULL, correspond à la clé primaire numero de la table carnet. Ce champ n'a pas besoin d'être renseigné car il s'incrémente à chaque nouvel enregistrement.

ajouter.php

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
	</head>
	<body>
		<h1>Ajouter un contact</h1>
		<?php
		$mysqli = new mysqli("localhost", "root", "", "essai");
		$mysqli->set_charset("utf8");
		$requete = "INSERT INTO carnet VALUES(NULL, '" . $_POST['civilite'] . "', '" . $_POST['prenom'] . "', '" . $_POST['nom'] . "', '" . $_POST['email'] . "', '" . $_POST['date_naissance'] . "')";
		$resultat = $mysqli->query($requete);
		if ($resultat)
			echo "<p>Le contact a été ajouté</p>";
		else
			echo "<p>Erreur</p>";
		?>
	</body> 
</html>

Une seule page avec isset()

La balise <form> ci-dessous a été allégée de son attribut action=ajouter.php. Par conséquent, la page contenant le formulaire sera elle-même exécutée lors du clic sur le bouton Ajouter.

La fonction isset() permet de vérifier l'existence d'une variable. Dans le code ci-dessous, on analyse l'existence de la variable $_POST['prenom'], ce qui permet de savoir si le formulaire a été soumis ou pas. Cette condition nous permet de fusionner élégamment les deux codes précédents en une seule page.

ajouter.php

<!DOCTYPE html>
<html lang="fr">
	<head>
        <title>Ajouter un contact</title>
		<meta charset="utf-8">
	</head>
	<body>
		<h1>Ajouter un contact</h1>
		<form method="post">
			<label>Civilité</label>
			<select name="civilite">
				<option value="Madame">Madame</option>
				<option value="Monsieur" selected>Monsieur</option>
			</select>
			<label>Prénom</label>
            <input type="text" name="prenom">
			<label>Nom</label>
            <input type="text" name="nom">
			<label>Email</label>
            <input type="email" name="email">
			<label>Date de naissance</label>
            <input type="date" name="date_naissance">
			<input type="submit" value="Ajouter">
		</form>
		<?php
		if (isset($_POST['prenom'])) {
			$mysqli = new mysqli("localhost", "root", "", "essai");
            $mysqli->set_charset("utf8");
            $requete = "INSERT INTO carnet VALUES(NULL, '" . $_POST['civilite'] . "', '" . $_POST['prenom'] . "', '" . $_POST['nom'] . "', '" . $_POST['email'] . "', '" . $_POST['date_naissance'] . "')";
		    $resultat = $mysqli->query($requete);
            if ($resultat)
                echo "<p>Le contact a été ajouté</p>";
            else
                echo "<p>Erreur</p>";
		}
		?>
	</body> 
</html>