Tutoriel PHP

PHP

Découvez les bases de PHP dans mon support de formation dédié à ce puissant langage orienté web.


HTML HTML5 CSS Dreamweaver Bootstrap

Insérer des enregistrements dans une table MySQL

Télécharger la base de données disques.sql

Insérer un enregistrement avec INSERT INTO

Pour insérer un enregistrement, nous allons utiliser INSERT INTO en SQL.

INSERT INTO table(champ1, champ2, champ3) VALUES('valeur1', 'valeur2', 'valeur3')

Nous allons écrire le code PHP pour insérer les champs de la table disque et faire quelques contrôles.

<?php
// Connexion à MySQL
$connection=mysqli_connect("serveur", "login", "mot_de_passe", "base_de_donnees);

if (!$connection){ // Contrôler la connexion
    $MessageConnexion = die ("connection impossible");
}
else {
if(isset($_POST['Bouton'])){ // Autre contrôle pour vérifier si la variable $_POST['Bouton'] est bien définie
   $id_disque=$_POST['id_disque'];
   $nom_disque=$_POST['nom_disque'];
   $auteur_disque=$_POST['auteur_disque'];
   $note_disque=$_POST['note_disque'];
   $date_disque=$_POST['date_disque'];

   // Requête d'insertion
   $AjouterDisque="INSERT INTO disques (id_disque, nom_disque, auteur_disque, note_disque, date_disque) VALUES ('$id_disque', '$nom_disque', '$auteur_disque', '$note_disque', '$date_disque')";

   // Exécution de la reqête
   mysqli_query($connection, $AjouterDisque) or die('Erreur SQL !'.$AjouterDisque.'<br>'.mysqli_error($connection));
}
}
?>

Ensuite, nous pouvons créer un formulaire reprenant les différents champs de notre table disque.

<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<label for="nom_disque">Nom du disque *</label>
<input type="text" name="nom_disque" id="nom_disque" value="" required>
<br>

<label for="auteur_disque">Auteur *</label>
<input type="text" name="auteur_disque" id="auteur_disque" value="" required>
<br>

<label for="note_disque">Note *</label>
<select name="note_disque" id="note_disque" required>
<option value="">Sélectionner une note</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<br>

<label for="date_disque">Date du disque *</label>
<input type="text" name="date_disque" value="">
<br>

<!-- Champ masqué qui va récupérer l'auto-increment de l'identifiant unqique du disque -->
<input type="hidden" name="id_disque" value="">
<input type="submit" name="Bouton" value="Ajouter un nouveau disque">
</form>

Ensuite nous coupons la connexion dès que le traitement est terminé.

<?php
mysqli_close($connection);
?>

Insérer plusieurs valeurs dans un même champ

Dans cet exemple, nous insérons plusieurs valeurs contenues dans des checkboxs dans un même champ.

<?php
// Connexion à MySQL
$connection=mysqli_connect("serveur", "login", "mot_de_passe", "base_de_donnees);

if (!$connection){ // Contrôler la connexion
    $MessageConnexion = die ("connection impossible");
}


else {
    if(isset($_POST['Bouton'])) {

        // Réecriture des variables
        $id_note=$_POST['id_note'];
        $id_disque_fk=$_POST['id_disque_fk'];
        $note=$_POST['note'];

        // Ici nous utisons la fonction implode, nous allons insérer les différentes checkbox en les séparant par des virgules
        $id_appreciations_fk=implode(',',$_POST['id_appreciations_fk']);
        $com=$_POST['com'];

        // Requête d'insertion d'enregistrement
        $Ajouter="INSERT INTO notes (id_note, id_disque_fk, note, id_appreciations_fk, com)
        VALUES ('$id_note', '$id_disque_fk', '$note', '$id_appreciations_fk', '$com')";

        // Exécution de la reqête
        mysqli_query($connection, $Ajouter) or die('Erreur SQL !'.$Ajouter.'<br>'.mysqli_error($connection));
    }

}

// Appréciations
$Appreciations = mysqli_query($connection, "SELECT * FROM notes_appreciations ORDER BY appreciation ASC") or die(mysqli_error($connection));
$Ligne_Appreciations = mysqli_fetch_assoc($Appreciations);

// Disques
$Disques = mysqli_query($connection, "SELECT * FROM disques ORDER BY nom_disque ASC") or die(mysqli_error($connection));
$Ligne_Disques = mysqli_fetch_assoc($Disques);
?>

Insérer plusieurs enregistrements en utilisant une boucle foreach

Dans l'exemple ci-dessous, je ne vous remets pas les bouts de code pour connecter votre base de données, faire les contrôles et fermer la connection (ils sont identiques à l'exemple ci-dessus).

L'objectif est d'insérer une ligne dans la table pour chaque chexbox cochée, pour cela on utilise une boucle foreach.

Code PHP pour insérer les champs

<?php
// Pour insérer toutes les checkboxs sélectionnées chacune dans une ligne
foreach($_POST['id_complement'] as $id_complement)
{


    $id_formation_complementaire=$_POST['id_formation_complementaire'];
    $id_formation_fk=$_POST['id_formation_fk'];

    $insertSQL="
    INSERT INTO formations_complementaires     (id_formation_complementaire, id_formation_fk, id_complement)
    VALUES ('$id_formation_complementaire', '$id_formation_fk',     '$id_complement')";

    $Result1 = mysqli_query($bdd, $insertSQL) or     die(mysqli_error($bdd));

} // Fin de la boucle foreach
?>

Ensuite, le formulaire :

<form method="post" name="form1" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<table class="table table-responsive table-striped text-left">
<tr>
<td>Formation</td>
<td><input type="hidden" name="id_formation_fk" value="<?php echo $row_Formations['id_formation']; ?>"><?php echo $row_Formations['formation']; ?></td>
</tr>
<tr>
<td>
<p>Formations complémentaires :</p></td>
<td>
<?php do { ?>
<input type="checkbox" name="id_complement[]" value="<?php echo $row_Complementaires['id_formation']; ?>" >
<?php echo $row_Complementaires['formation']; ?><br>
<?php } while ($row_Complementaires = mysqli_fetch_assoc($Complementaires)); ?>
</td>
</tr>
<tr>
<td colspan="2" class="text-center"><a href="index.php" class="btn btn-default" role="button" title="Annuler">Annuler</a><input type="submit" value="Ajouter" class="btn btn-primary"></td>
</tr>
</table>
<input type="hidden" name="id_formation_complementaire" value="">
<input type="hidden" name="MM_insert" value="form1">
</form>

Vous pouvez remarquer que le name de notre checkbox contient un crochet entrant et sortant <input type="checkbox" name="id_complement[]"...

Ne l'oubliez pas sinon ça ne fonctionne pas !

Sécurité

Attention

Il faudra veillez à sécuriser le code ci-dessus et se prémunir contre ces attaques :

  • mySQL Injections
  • Cross-Side Scripting (XSS)

 

Je le détaillerai dans un prochain tutoriel.