Vous êtes sur la page 1sur 13

Support de cours Module Langage de programmation PHP 2 è me Année BTS Informatique Développeur d’Application

SUPPORT DE COURS LANGAGE


EVOLUE – PHP
2ème Année BTS Informatique Développeur d’Application

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

M. GOGBE Benjamin – Professeur d’Algorithmique et programmation 2


Support de cours Module Langage de programmation PHP 2 è me Année BTS Informatique Développeur d’Application

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.

1) Les mécanismes d’accès aux bases de données MySQL

PHP propose plusieurs moyens de se connecter aux bases de données MySQL :


 L’extension mysql_ : qui regroupe un ensemble de fonctions commençant par mysql_
(aujourd’hui dépréciées) permettant de communiquer avec MySQL.
 L’extension mysqli_ : qui contient des fonctions plus améliorées et à jour d’accès à
MySQL.
 L’extension PDO : qui regorge de fonctions permettant d’accéder à n’importe quel
type de base de données (MySQL, SQLite, PostgreSQL, Oracle, etc.).
Pour ce cours nous utiliserons l’extension mysqli_, car il offre des fonctions améliorées du
développement web.
Pour activer cette extension ou vérifier son activation, il suffit soit de cliquer l’icône de WAMP
à droite de la barre des tâches, ensuite l’option PHP et Extensions PHP. Vérifier enfin si l’option
php _mysqli est cochée.
Ou encore, ouvrir le fichier php.ini et vérifier si la ligne extension=php _mysqli.dll n’est pas
en commentaire.

L’utilisation d’une base de données MySQL se fait en 5 étapes majeures :


- la connexion au serveur MySQL ;
- la sélection de la base de données
- envoi de la requête
- récupération et exploitation des résultats
- fermeture de la connexion

2) Connexion à une base de données MySQL avec Mysqli


Pour la connexion au serveur MySQL, il faut créer un objet de la classe PDO. Cet objet utilise
4 paramètres qui sont :
- Le nom d’hôte : l’adresse de l’ordinateur où est installé le serveur MySQL. Dans notre
cas, nous utiliserons localhost parce que PHP et MySQL sont installés sur notre
ordinateur.
- La base : le nom de la base de données. Dans notre cas, on utilisera bdbonappetit.
- Le login : le nom utilisateur crée pour accéder au serveur. Dans notre cas, on utilisera
root.
- Le mot de passe utilisateur : dans notre cas, on ne l’a pas défini, donc on notera ‘ ’.

M. GOGBE Benjamin – Professeur d’Algorithmique et programmation 3


Support de cours Module Langage de programmation PHP 2 è me Année BTS Informatique Développeur d’Application

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";
}
?>

3) L’envoi de requête au serveur MySQL


Toute opération à réaliser sur une base de données nécessite l’envoi au serveur d’une requête
SQL. Pour envoyer une requête, on utilise la fonction query() de l’objet mysqli.

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
}

4) La récupération de résultat de la requête


Dans les cas d’insertion, de suppression, de modifications de données, il suffira de tester si la
requête ne comporte pas d’erreur et est bien exécutée.
Dans le cas, des requêtes de sélection (commande SELECT), la méthode query() retourne un
objet de type mysqli_result. Les résultats de la requête peuvent être récupérés à l’aide de
diverses méthodes de la classe mysqli_result. La forme la plus courante est le tableau.

M. GOGBE Benjamin – Professeur d’Algorithmique et programmation 4


Support de cours Module Langage de programmation PHP 2 è me Année BTS Informatique Développeur d’Application

Récupérer les données sous forme de tableau


On utilise la méthode fetch_array() qui retourne un tableau.

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

}
?>

M. GOGBE Benjamin – Professeur d’Algorithmique et programmation 5


Support de cours Module Langage de programmation PHP 2 è me Année BTS Informatique Développeur d’Application

5) L’insertion des données


Il consiste, après ouverture d’une connexion au serveur, à créer une requête d’insertion qui
sera exécutée. Il faudra ensuite tester si la requête s’exécute sans erreur. Auquel cas
l’insertion des données a été fait avec succès. Dans le cas contraire on renverra l’erreur de la
requête pour le corriger.

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.

M. GOGBE Benjamin – Professeur d’Algorithmique et programmation 6


Support de cours Module Langage de programmation PHP 2 è me Année BTS Informatique Développeur d’Application

Créons maintenant le fichier vrecette.php dans l’attribut action de la balise <form>.


<?php
//Verification de saisie de champs obligatoires
if (isset($_POST["nomrecette"]) && isset($_POST["description"]) && isset($_POST["prix"]) &&
isset($_POST["capacite"])){

//inclure le fichier traitement de la connexion


include_once("inc/conn.inc.php");

//Recuperation des données des champs en échappant les caractères spéciaux


$nomrecette = $idconn->escape_string($_POST["nomrecette"]);
$description = $idconn->escape_string($_POST["description"]);
$prix = $idconn->escape_string($_POST["prix"]);
// $npers = $idconn->escape_string($_POST["nbpers"]);
$capacite = $idconn->escape_string($_POST["capacite"]);
$dispo = $_POST["periode"];
$accomp = $_POST["accomp"];

//Creation de la requete d'insertion


$rqinsert = "INSERT INTO `recettes` (`nomrecette`, `descrecette`, `prix`, `nbpers`, `disponibilite`, `accomp`)
VALUES ('$nomrecette', '$description', '$prix', '$capacite', '$dispo','$accomp')";

//Envoi de la requete d'insertion au serveur


$rst = $idconn->query($rqinsert);

//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
}
}

M. GOGBE Benjamin – Professeur d’Algorithmique et programmation 7


Support de cours Module Langage de programmation PHP 2 è me Année BTS Informatique Développeur d’Application

En récapitulant, on peut obtenir le schéma suivant :


<?php
//Verification de saisie de champs obligatoires
if ( !empty($_POST["champ1"]) && !empty($_POST["champ2"]) .......){

//inclure le fichier traitement de la connexion


include_once("fichier de connexion");

//Recuperation des données des champs en échappant les caractères spéciaux


$var1 = $idconn->escape_string($_POST["champ1"]);
$var2 = $idconn->escape_string($_POST["champ2"]);
…….
……

//Creation de la requete d'insertion


$rqinsert = "INSERT INTO `table` (`champ1`, `champ2`, ....) VALUES ('$var1, '$var2, ......)";

//Envoi de la requete d'insertion au serveur


$rst = $idconn->query($rqinsert);

//Test de la requete
if(!$rst){
//Message d’erreur
}else{
//Message de succès de l’insertion
//Affichage des données insérées
}

En suivant l’exemple ci-dessus, créez les scripts de création et de validation de formulaire


d’ajout de plat.

Figure 4:Formulaire d'ajout de plat

6) La mise à jour de données


Il arrive que pour une raison ou une autre, on veuille modifier des données déjà enregistrées
dans la base de données. Pour réaliser cela, le processus peut se résumer en trois (03) étapes :
 Il faudra dans un premier temps, créer un formulaire permettant de choisir les
données à modifier.
 Ensuite, créer un formulaire de saisie des données à mettre à jour.
 Enfin, créer un script de validation des modifications des données.

M. GOGBE Benjamin – Professeur d’Algorithmique et programmation 8


Support de cours Module Langage de programmation PHP 2 è me Année BTS Informatique Développeur d’Application

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.

Formulaire de choix du plat à modifier :


Code PHP de la page
<?php
include_once("inc/conn.inc.php");
$req="SELECT idplats, libellep, idtype_de_plat FROM plats";
$result = $idconn->query($req);
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Formulaire de recherche des plats</title>
</head>
<body> Figure 5:Formulaire de recherche de plats
<header>
</header>
<form name="frecette" action="vmodplat.php" method="post" enctype="multipart/form-data">
<h2>Formulaire de recherche des plats</h2>
<fieldset><legend>Choissisez le plat à modifier</legend>
<?php
if(!$result){
echo "Erreur de requête type de plat";
}else{
?>
<select name="idplats">
<?php
while($row = $result->fetch_assoc()){
?>
<option value="<?php echo $row["idplats"]; ?>"><?php echo $row["libellep"]; ?></option>
<?php
}
}
?>
</select>
</fieldset>
<br/>
<input name="valider" type="submit" value="Modifier"><input name="Annuler" type="reset" value="Annuler">
</form>
</body>
</html>

M. GOGBE Benjamin – Professeur d’Algorithmique et programmation 9


Support de cours Module Langage de programmation PHP 2 è me Année BTS Informatique Développeur d’Application

Formulaire de saisie des modifications des plats


Code PHP de la page
<?php
include_once("inc/conn.inc.php");
$idplats = $_POST["idplats"];
//La requête de recherche du plat sélectionné
$req="SELECT idplats, libellep, prixrevientp, prixventep, nbpers, plats.idtype_de_plat AS typeplat, photop,
DesignationTP FROM plats, type_de_plat WHERE idplats ='$idplats' AND
PLATS.idtype_de_plat=type_de_plat.idtype_de_plat ";
//Exécution de la requête
$result = $idconn->query($req);
if(!$result){
echo "Erreur de requête type de plat";
}else{
//Récupération du résultat de la requête pour les stocker dans des variables
$row = $result->fetch_array();
$idplats=$row["idplats"];
$libellep = $row["libellep"];
$prixrevientp = $row["prixrevientp"];
$prixventep = $row["prixventep"];
$nbpers = $row["nbpers"];
$idtype_de_plat = $row["typeplat"];
$photop = $row["photop"];
$designationtp = $row["DesignationTP"];
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Formulaire de modification des plats</title>
</head> Figure 6 : Formulaire de modification des plats
<body>
<form name="frecette" action="vmodplat.php" method="post" enctype="multipart/form-data">
<h2>Saisie des plats</h2>
<fieldset><legend>Informations sur le plat</legend>
<label>Libellé du plat</label><br/>
<input name="libellep" type="text" value="<?php echo $libellep ?>"size="50" maxlength="250"><br/>
<label>Prix de revient</label><br/>
<input name="prixrevient" type="number" value="<?php echo $prixrevientp ?>" min="0" max="10000"
step="500" /><br/>
<label>Prix de vente</label><br/>
<input name="prixvente" type="number" value="<?php echo $prixventep ?>" min="0" max="10000"
step="500" /><br/>
<label>Nombre de personnes</label><br/>
<input name="nbper" type="number" min="0" value="<?php echo $nbpers ?>" max="100" /><br/>
</fieldset>

<fieldset><legend>Type de plat :</legend>


<select name="typeplat">
<option value="<?php echo $idtype_de_plat; ?>" selected><?php echo $designationtp; ?></option>
<?php
include_once("inc/listetypeplat.inc.php");
?>
</select>
</fieldset>
<fieldset><legend>Echantillons</legend>

M. GOGBE Benjamin – Professeur d’Algorithmique et programmation 10


Support de cours Module Langage de programmation PHP 2 è me Année BTS Informatique Développeur d’Application

<?php
//Verification de saisie de champs obligatoires
if (!empty($_POST["libellep"]) && isset($_POST["prixrevient"]) && isset($_POST["prixvente"]) ){

//inclure le fichier traitement de la connexion


include_once("inc/conn.inc.php");
//Traitement de la photo
include_once("inc/trmtphoto.inc.php");

//Recuperation des données des champs en échappant les caractères spéciaux


$idplats = $idconn->escape_string($_POST["idplats"]);
$libellep = $idconn->escape_string($_POST["libellep"]);
$prixrevient = $idconn->escape_string($_POST["prixrevient"]);
$prixvente = $idconn->escape_string($_POST["prixvente"]);
// $npers = $idconn->escape_string($_POST["nbpers"]);
$nbpers = $idconn->escape_string($_POST["nbper"]);
$typeplat = $idconn->escape_string($_POST["typeplat"]);
//Vérifier si la photo à été modifiée
if(!empty(basename($_FILES["photo"]["name"]))){
$photo = basename($_FILES["photo"]["name"]);
}else{
$photo =$idconn->escape_string($_POST["photo"]);
}

//Creation de la requete de modification avec la commande UPDATE


$rqmaj = "UPDATE `plats` SET `libellep`='$libellep', `prixrevientP`='$prixrevient',
`prixventeP`='$prixvente', `nbpers`='$nbpers', `idtype_de_plat`='$typeplat', `photoP`='$photo'
WHERE idplats ='$idplats'";

//Envoi de la requete de mise à jour


$rst = $idconn->query($rqmaj);

//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
}
}

M. GOGBE Benjamin – Professeur d’Algorithmique et programmation 11


Support de cours Module Langage de programmation PHP 2 è me Année BTS Informatique Développeur d’Application

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
}
?>

M. GOGBE Benjamin – Professeur d’Algorithmique et programmation 12


Support de cours Module Langage de programmation PHP 2 è me Année BTS Informatique Développeur d’Application

Script de suppression de plat


if(isset($_GET["id"])){
$idplats = $_GET["id"];
//Requete de suppression de plat
$rqsupp = "DELETE FROM `plats` WHERE idplats ='$idplats'";

//Envoi de la requete de mise à jour


$rst = $idconn->query($rqsupp);

//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.

M. GOGBE Benjamin – Professeur d’Algorithmique et programmation 13

Vous aimerez peut-être aussi