Mission Carthage

Accueil › Cours › PHP et MySQL

PHP et MySQL avec mysqli : lire, ajouter, modifier, supprimer

Chapitre 32 · Bac SI

Relie une page PHP à une base MySQL avec MySQLi : lis des lignes et affiche-les, ajoute, modifie et supprime des lignes depuis un formulaire.

Les leçons de ce chapitre

  1. Se connecter et lire une table
  2. Ajouter, modifier, supprimer
  3. Un petit site complet

Leçon 32.1 : Se connecter et lire une table

14 min

Une page PHP parle à MySQL en trois temps : elle se connecte à la base, envoie une requête SQL, puis lit le résultat ligne par ligne.

<?php
$cnx = mysqli_connect("localhost", "root", "", "ecole");
$res = mysqli_query($cnx, "SELECT nom, prenom FROM eleve");
echo mysqli_num_rows($res) . " élèves";
while ($ligne = mysqli_fetch_array($res)) {
  echo "<p>" . $ligne["prenom"] . " " . $ligne["nom"] . "</p>";
}
mysqli_close($cnx);
?>

Attention : Le résultat d'une requête n'est pas un tableau : echo $res["nom"] donne « Cannot use object of type mysqli_result as array ». Il faut d'abord lire une ligne avec mysqli_fetch_array.

En PHP

Lance le site : base.sql crée la base, puis index.php affiche les élèves dans un tableau. Change la requête pour ne garder que les élèves qui ont au moins 10.

<!DOCTYPE html>
<html lang="fr">
<head><meta charset="utf-8"><title>Élèves</title></head>
<body>
<h1>Les élèves</h1>
<?php
$cnx = mysqli_connect("localhost", "root", "", "ecole");
$res = mysqli_query($cnx, "SELECT nom, prenom, moyenne FROM eleve ORDER BY moyenne DESC");
echo "<p>" . mysqli_num_rows($res) . " élèves</p>";
echo "<table border='1'>";
while ($ligne = mysqli_fetch_array($res)) {
  echo "<tr><td>" . $ligne["nom"] . "</td><td>" . $ligne["prenom"] . "</td><td>" . $ligne["moyenne"] . "</td></tr>";
}
echo "</table>";
mysqli_close($cnx);
?>
</body>
</html>

Leçon 32.2 : Ajouter, modifier, supprimer

14 min

<?php
$cnx = mysqli_connect("localhost", "root", "", "ecole");
$nom = $_POST["nom"];
$prenom = $_POST["prenom"];
mysqli_query($cnx, "INSERT INTO eleve (nom, prenom) VALUES ('$nom', '$prenom')");
echo mysqli_affected_rows($cnx) . " élève ajouté";
mysqli_close($cnx);
?>

Quand MySQL refuse

Si la requête est fausse (table inconnue, valeur interdite), PHP 8 s'arrête avec « Uncaught mysqli_sql_exception » et le message de MySQL. Avec mysqli_report(MYSQLI_REPORT_OFF); au début, mysqli_query rend false à la place, et mysqli_error($cnx) donne le message.

Astuce : Un nom avec une apostrophe (L'Aube) casse la requête : mysqli_real_escape_string($cnx, $titre) le protège. C'est aussi ce qui empêche un utilisateur malin de glisser son propre SQL (injection SQL).

En PHP

Lance le site, ajoute un élève avec le formulaire, puis supprime-le avec son lien « supprimer » : la liste se met à jour, car la base reste la même entre les pages.

<!DOCTYPE html>
<html lang="fr">
<head><meta charset="utf-8"><title>Élèves</title></head>
<body>
<form action="ajout.php" method="post">
  Nom : <input type="text" name="nom"> Prénom : <input type="text" name="prenom">
  <input type="submit" value="Ajouter">
</form>
<?php
$cnx = mysqli_connect("localhost", "root", "", "ecole");
$res = mysqli_query($cnx, "SELECT id, nom, prenom FROM eleve");
while ($l = mysqli_fetch_array($res)) {
  echo "<p>" . $l["prenom"] . " " . $l["nom"] . " <a href='supprimer.php?id=" . $l["id"] . "'>supprimer</a></p>";
}
?>
</body>
</html>

Leçon 32.3 : Un petit site complet

14 min

Un site de bac pratique réunit tout : une page HTML avec un formulaire (vérifié en JavaScript), une page PHP qui l'enregistre dans la base, et une page qui liste ou cherche les données.

Chercher avec LIKE

<?php
$cnx = mysqli_connect("localhost", "root", "", "ecole");
$mot = $_POST["mot"];
$res = mysqli_query($cnx, "SELECT nom FROM eleve WHERE nom LIKE '%$mot%'");
if (mysqli_num_rows($res) == 0) {
  echo "Aucun élève trouvé";
}
while ($l = mysqli_fetch_row($res)) {
  echo $l[0] . "<br>";
}
?>

Attention : Ferme la connexion avec mysqli_close($cnx) seulement à la fin : une requête après la fermeture provoque une erreur.

En PHP

Lance le site et cherche Ben, puis a, puis un nom qui n'existe pas.

<?php
$cnx = mysqli_connect("localhost", "root", "", "ecole");
$mot = $_POST["mot"];
$res = mysqli_query($cnx, "SELECT nom FROM eleve WHERE nom LIKE '%$mot%'");
if (mysqli_num_rows($res) == 0) {
  echo "Aucun élève trouvé";
}
while ($l = mysqli_fetch_row($res)) {
  echo $l[0] . "<br>";
}
echo '<p><a href="index.html">Nouvelle recherche</a></p>';
mysqli_close($cnx);
?>

S'entraîner gratuitement

Chaque leçon a 3 exercices gratuits avec indices pour appliquer ce chapitre avec Hannibot.

Ouvrir le chapitre dans Mission Carthage Essayer dans le compilateur en ligne

← Chapitre précédent : PHP : les formulaires

Tous les chapitres · Voir les devoirs corrigés de 2ème TI

Cours écrit pour Mission Carthage d'après le programme officiel. Ton professeur reste la référence.