Académique Documents
Professionnel Documents
Culture Documents
Note : Ce support est un supplément pour le cours de PHP au programme de 2ème année du BTS option
Informatique Développeur d’Application. Il ne peut par conséquent se substituer au cours donné par
l’enseignant en classe.
SYSG TRAINING
M. GOGBE Benjamin – Professeur d’Algorithmique et programmation 1
Support de cours Module Langage de programmation PHP 2 è me Année BTS Informatique Développeur d’Application
Chapitre IX : PHP et
Les bases de données MySQL
INTRODUCTION
Dans le chapitre précédent nous avons découvert les bases de données MySQL. Nous
aborderons dans ce chapitre, l’utilisation des fonctions PHP permettant d’accéder aux bases
de données MySQL afin d’insérer des données, d’afficher des données, de faire des mises à
jour dans le but de créer des pages web dynamiques.
Ainsi, nous verrons :
- les mécanismes d’accès aux bases de données MySQL,
- l’envoi de requête au serveur MySQL,
- la récupération de résultat de la requête,
- l’insertion des données,
- la mise à jour et la suppression de données,
- la recherche des données.
Syntaxe:
$idconn= new mysqli($host, $user, $pass, $base) ;
Où les variables $host, $base, $user, $pass représente respectivement l’hôte, la base de
données, le login et le mot de passe.
Dans la pratique, il faut créer un fichier de connexion contenant les paramètres de connexion
et le script de connexion au serveur.
Créons donc le fichier connexion.inc.php avec le code suivant :
<?php
define("HOST", "localhost");
define("BASE", "bdbonappetit");
define("USER", "root");
define("PASS", "");
$idconn = new mysqli(HOST, USER, PASS, BASE);
if(!$idconn){
echo "<script type=text/javascript>";
echo "alert('Connexion Impossible à la base)</script>";
}else{
echo "Connexion à la base de données avec succès";
}
?>
Syntaxe :
$result = $idconn–>query (string $requete)
Où $requete est soit la requête SQL sous forme de chaine de caractères ou une variable du
même type.
La fonction query() retourne TRUE en cas de réussite et FALSE dans le cas contraire. Il retourne
un objet de type mysqli_result pour les requêtes de sélection (SELECT).
Exemple :
Soit une requête permettant d’afficher le libellé et le prix de vente de tous les plats.
$req="SELECT libelleP, prixventeP FROM PLATS";
$result = $idconn->query($req);
if(!$result){
echo "Erreur de requête";
}else{
//Code de traitement du résultat
}
Syntaxe :
array $result–>fetch_array (int type)
Cette méthode retourne soit un tableau indicé (si type vaut MYSQLI_NUM) ou un tableau
associatif (si type vaut MYSQLI_ASSOC) dont les clés sont les noms de colonnes de la requête
ou encore mixte (si type vaut MYSQLI_BOTH).
Pour afficher les données du tableau on utilisera une boucle (par exemple while) pour tester
l’existence de chaque ligne. Ensuite on utilisera une autre boucle (par exemple foreach) pour
lire et afficher la ligne.
Il est possible d’utiliser d’autres méthodes permettant de récupérer une ligne de résultat. On
peut citer :
- fetch_assoc() qui retourne un tableau associatif dont les clés sont les noms de
colonnes de la requête
array $result–>fetch_assoc (void)
- fetch_row() qui retourne un tableau indicé dont les indices (de 0 à N) sont les
positions des colonnes dans la requête
array $result–>fetch_row (void)
Exemple :
On veut afficher maintenant les résultats de notre requête précédente.
<?php
include_once("inc/conn.inc.php");
$req="SELECT libelleP, prixventeP FROM PLATS";
$result = $idconn->query($req);
if(!$result){
echo "Erreur de requête";
}else{
$nbplat = $result->num_rows;
echo "<h2>LISTE DES PLATS </h2>";
echo "<h3>Il y a $nbplat plats</h3>";
?>
<table border="1">
<th>Libellé plat</th><th>Prix de vente</th>
<?php
while($row=$result->fetch_array(MYSQLI_ASSOC)){
echo "<tr>";
foreach($row as $valeur){
echo "<td>$valeur </td>";
}
echo "</tr>";
}
?>
</table>
<?php Figure 1:Résultat de la requête
}
?>
Exemple :
Créons un code d’insertion des recettes dans la base.
Commençons par créer le formulaire d’insertion des recettes ci-dessous.
<form name="frecette" action="vrecette.php" method="post"
enctype="multipart/form-data">
<h2>Saisie des recettes proposées</h2>
<fieldset><legend>Informations sur la recette</legend>
<label>Nom de la recette</label><br/>
<input name="nomrecette" type="text" size="50"
maxlength="250"><br/>
<label>Description de la recette</label><br/>
<textarea name="description" rows="5"
cols="50"></textarea><br/>
<label>Prix du plat</label><br/>
<input name="prix" type="number" min="0"
max="10000" step="500" /><br/>
<label>Nombre de personnes</label><br/>
<input name="capacite" type="number" min="0"
max="100" /><br/>
<label>Période de disponibilité</label><br/>
<label><input name="periode" type="radio"
value="matin" >Matin (Petit déjeuner)</label><br/>
Figure 2:Formulaire de saisie des recettes
<label><input name="periode" type="radio"
value="midi">Midi (Déjeuner)</label><br/>
<label><input name="periode" type="radio" value="apres midi">Après-midi (Gouter)</label><br/>
<label><input name="periode" type="radio" value="soir">Soir (Diner) </label><br/>
</fieldset>
<fieldset><legend>Accompagnement possible</legend>
<select name="accomp">
<option value="Riz blanc" >Riz blanc</option>
<option value="Tchep" selected>Tchep</option>
<option value="Foutou de banane">Foutou de banane</option>
<option value="Attiéké">Attiéké</option>
<option value="Foufou">Foufou</option>
<option value="Igname bouillie">Igname bouillie</option>
<option value="Foutou de banane">Foutou de banane</option>
</select>
<p>NB: Maintenir CTRL pour sélectionner plusieurs</p>-->
</fieldset>
<input name="valider" type="submit" value="Valider"><input name="Annuler" type="reset" value="Annuler">
</form>
Recopier le code HTML du formulaire et créer un fichier HTML dans votre répertoire du site
avec le nom recette.html.
//Test de la requete
if(!$rst){
echo "Erreur dans la requete insertion de recette <br/>";
echo "$idconn->errno : ";
echo "$idconn->error";
}else{
echo "Insertion de recette avec succès<br/>";
?>
<fieldset><legend>Vous avez saisi les informations
suivantes :</legend>
<label>Nom de la recette</label><br/>
<strong><?php echo $nomrecette;
?></strong><br/>
<label>Description de la recette</label><br/> Figure 3:Résultat de la validation de l'insertion de recette
<strong><?php echo nl2br($description);
?></strong><br/>
<label>Prix du plat pour une personne</label><br/>
<strong><?php echo $prix; ?></strong><br/>
<label>Capacité de production</label><br/>
<strong><?php echo $capacite; ?></strong><br/>
<label>Disponibilité des plats :</label><br/>
<strong><?php echo $dispo; ?></strong><br/>
<label>Accompagnements des plats : </label><br/>
<strong><?php echo $accomp; ?></strong><br/>
</fieldset>
<?php
}
}
//Test de la requete
if(!$rst){
//Message d’erreur
}else{
//Message de succès de l’insertion
//Affichage des données insérées
}
Exemple :
On se propose de modifier les informations d’un plat.
Pour cela, on créera un formulaire permettant de sélectionner le plat à modifier.
Et ensuite, on va créer un formulaire de saisie des modifications de données et enfin un script
de validation des mises à jour.
<?php
//Verification de saisie de champs obligatoires
if (!empty($_POST["libellep"]) && isset($_POST["prixrevient"]) && isset($_POST["prixvente"]) ){
//Test de la requete
if(!$rst){
echo "Erreur dans la requete de mise à jour de plat <br/>";
echo "$idconn->errno : ";
echo "$idconn->error";
}else{
echo "Modification de plat avec succès<br/>";
?>
<fieldset><legend>Vous avez saisi les informations suivantes :</legend>
<label>Libellé du plat :</label><br/>
<strong><?php echo $libellep; ?></strong><br/>
<label>Prix de revient </label><br/>
<strong><?php echo $prixrevient; ?></strong><br/>
<label>Prix de vente : </label><br/>
<strong><?php echo $prixvente; ?></strong><br/>
<label>Nombre de personnes :</label><br/>
<strong><?php echo $nbpers; ?></strong><br/>
<label>Type de plat:</label><br/>
<strong><?php echo $typeplat; ?></strong><br/>
<label>Echantillon recette : </label><br/>
<img src="images/<?php echo $photo; ?>" height="40%" width="27%"/>
</fieldset>
<?php
}
}
7) La suppression de données
Comme pour la modification, la suppression d’enregistrement suppose de choisir dans un
premier temps, la données à supprimer. Ensuite, de valider la suppression.
Exemple :
On se propose de supprimer un plat de la liste des plats.
Dans un premier temps, créons une page affichant la liste des plats. Ensuite, on écrira le code
permettant de valider la suppression.
Code de la page affichant la liste des plats.
On fera en sorte que pour chaque plat un lien vers la page permettant de supprimer le plat
soit créé.
<?php
include_once("inc/conn.inc.php");
//Requête de selection des plats
$req="SELECT idplats, libelleP, prixventeP, photoP FROM PLATS";
$result = $idconn->query($req);
if(!$result){
echo "Erreur de requête";
}else{
$nbplat = $result->num_rows;
echo "<h2>LISTE DES PLATS </h2>";
echo "<h3>Il y a $nbplat plats</h3>";
?>
<table border="1" width="40%" cellspacing="0" >
<th>Libellé plat</th><th>Prix de
vente</th><th>Photo</th><th>Action</th>
<?php
while($row=$result->fetch_array(MYSQLI_ASSOC)){
$idplats = $row["idplats"];
$photoP = $row["photoP"];
Figure 7: Liste de plats avec le lien Supprimer
echo "<tr>";
echo "<td>".$row["libelleP"] ."</td>";
echo "<td>".$row["prixventeP"]."</td>";
if(!empty($photoP)){
echo "<td><img src=\"images/$photoP\" height=\"50\" width=\"50\"/></td>";
}else{
echo "<td>Pas d'image</td>";
}
//Lien vers la page supplat.php avec pour paramètre l’identifiant du plat.
echo "<td><a href=\"?id=$idplats\">Supprimer</a></td>";
echo "</tr>";
}
?>
</table>
<?php
}
?>
//Test de la requete
if(!$rst){
echo "Erreur dans la requête de suppression de plat";
}else{
?>
//Message de succès de la suppression
<script type="text/javascript">
alert('Le plat a été supprimé avec succès');
window.location='admplats.php';
</script>
<?php
}
}
Ce script sera inséré à la fin du script de la page de liste des plats.