Un SGBD, ou système de gestion de base de donnée est un programme servant à stocker des données, les modifier et les afficher.
Dans le tutoriel que je vous propose, nous allons utiliser le serveur de Base de Données MySQL, il a l’avantage d’être gratuit, libre, complet et très fiable.
Nous allons commencer par la création de la base de donnée. Le nom sera bibliotheque. Une fois cette opération effectuée nous allons importer le fichier import.sql qui va s'occuper de créer les tables et les remplir pour les besoins de la démo. (Cliquer ici pour télécharger ce fichier).
Voilà, les tables sont maintenant créées et les données importés.
Nous allons pouvoir procéder au script PHP permettant de manipuler les données.
Dans ce tutoriel, nous allons écrire une petite application
permettant d'afficher, de modifier, de supprimer et d'ajouter un ouvrage
au sein de MySQL.
Créons un fichier bdd.inc.php dans le répertoire inc.
Ce script consiste à établire une connexion à MySQL via la fonction mysqli_connect.
En cas de sucés la fonction retourne l’identifiant de la ressource de connexion et en cas d’échec le message Echec de la connexion apparait et stoppe l’exécution du script.
Créons le fichier index.php à la racine du site. Ce fichier aura pour objectif d’afficher une liste des ouvrages.
Require_once permet d’inclure le fichier de connxion au serveur MySQL que nous avons créer précédemment.
$querySelect = 'select NUMOUV, ouvrages.TITRE, DATEPUB, COLLECTION, LIEUPUB, medium, PRIX, GENRE, editeurs.NUMEDIT, NOM from ouvrages LEFT JOIN oeuvres ON ouvrages.NUMO=oeuvres.NUMO INNER JOIN editeurs ON ouvrages.NUMEDIT=editeurs.NUMEDIT';
Ces lignes permettent d’affecter à la variable $querySelect la requête SQL permettant de sélectionner les ouvrages qui correspondent à 0 ou 1 ouvre et nom et numéro d’éditeur.
Ces lignes permettent de rajouter une condition permettant d’afficher tous les ouvrages appartenant à l’éditeur sélectionné par l’utilisateur.
Le while permet de parcourir chaque occurrence (ligne) répondant à la requête pour ainsi l’afficher par la suite. mysqli_fetch_array permet de retourner chaque ligne sous forme de tableau indicé par le numéro de colonne mais également par le nom du champ de table MySQL.
Ainsi il est de bonne pratique d’utiliser les noms des champs des tables afin de faciliter la lecture du code lors d’une éventuelle reprise.
Ajoutons au fichier index.php, les lignes suivantes avant l’affectation $querySelect :
Ces lignes permettent de tester si le paramètre supprid est passé en paramètre GET dans l’url. Si le prédicat est valide alors nous affections une commande SQL ) la variable $queryDelete ordonnant la suppresion de l’ouvrage.
La fonction mysqli_query($link, $query) execute la requête est retourne un booleen indiquant le résultat de l’opération.
Accéder à une Base de données MySQL (CRUD)
I/ Le SGBD, qu’est ce que c’est ?
Un SGBD, ou système de gestion de base de donnée est un
programme servant à stocker des données, les modifier et les afficher.
Les SGBD les plus connus sont :
- MySQL
- Oracle
- Microsoft SQL Server
- SQLite
- PostgreSQL
Dans le tuto, je vais faire la démonstration avec MySQL,
il a l’avantage d’être gratuit, libre, complet et très fiable.
II/ Création de la base de Donné et des tables libres et
auteur
Après avoir installé votre environnement de développement
(CF Tuto : [PHP] Tuto : Installer votre serveur Apache / PHP avec XAMPP : http://www.geekhelpme.fr/tutoriels/developpement/php-mysql/16-php-installer-xampp.html ), nous allons procéder à la création de la base de donnée.
Dans notre tutoriel, nous allons écrire un petit
programme permettant de lister une liste de livre.
Ainsi, connectez vous à votre interface de gestion de
base de donnée tel que phpmyadmin.
Créer une base de donnée du nom bibliotheque. Puis
importer le fichier import.sql.
Les tables sont créées et importés.
Nous allons pouvoir procéder au script PHP permettant de
manipuler les données.
III/ Connexion à la base de donnée MySQL
Créons un fichier bdd.inc.php dans le répertoire inc.
<?php
/**
*
Fonction permettant de se connecter à Mysql via la librairie mysqli
*
*
@return Retourne une ressource de connexion au serveur MySQL en cas de succès
et, sinon, FALSE .
*/
function connectDb() {
$config['host']='localhost';
$config['user']='root';
$config['password']='';
$config['database']='bibliotheque';
$link =
mysqli_connect($config['host'], $config['user'], $config['password'],
$config['database']);
/*
Vérification de la connexion */
if
(mysqli_connect_errno()) {
printf("Echec
de la connexion : %s\n", mysqli_connect_error());
exit();
}
return
$link;
}
?>
Ce script consiste à établire une connexion à MySQL via
la fonction mysqli_connect.
La signature de cette fonction est la suivante :
< ?php
mysqli mysqli_connect ( string host , string username , string passwd , string dbname , int port , string socket )
?>
En cas de sucés la fonction retourne l’identifiant de la
ressource de connexion et en cas d’échec le message Echec de la connexion
apparait et stoppe l’exécution du script.
IV/ Afficher les valeurs d’une table
Créons le fichier index.php à la racine du site. Ce
fichier aura pour objectif d’afficher une liste des ouvrages.
Le script est le suivant :
<?php
require_once('lib/bdd.inc.php');
// Inclusion du fichier gérant la connexion au serveur MySQL
$link
= connectDb(); // Connexion au serveur MySQL
//
Création de la requête
$querySelect
= 'select NUMOUV,
ouvrages.TITRE, DATEPUB, COLLECTION, LIEUPUB, medium, PRIX, GENRE,
editeurs.NUMEDIT, NOM
from ouvrages
LEFT
JOIN oeuvres ON ouvrages.NUMO=oeuvres.NUMO
INNER
JOIN editeurs ON ouvrages.NUMEDIT=editeurs.NUMEDIT';
//
Ajout d'une condition dans la requete pour afficher tous les ouvrages d'un
éditeur si on cliqué sur le lien (Paramètre GET editeur présent dans l'url)
if (isset($_GET['editeur'])) {
$querySelect =
$querySelect.' WHERE editeurs.NUMEDIT='.$_GET['editeur'];
}
// Execution de la requête
$idQuerySelect =
mysqli_query($link, $querySelect);
?>
<html>
<head>
<title>Liste des
ouvrages</title>
<link rel="stylesheet"
media="all" href="/css/style.css"/>
</head>
<body>
<h1>Médiathèque
- Liste des ouvrages</h1>
<p><a
href="/creerouvrage.php">Ajouter un ouvrage</a></p>
<p>Cliquer sur un editeur pour afficher tous les ouvrages de cette
éditeur</p>
<table>
<tr>
<th>Numéro</th>
<th>Titre</th>
<th>Collection</th>
<th>Date de
Publication</th>
<th>Lieu de
Publication</th>
<th>Média</th>
<th>Prix</th>
<th>Genre</th>
<th>Editeur</th>
<th>Action</th>
</tr>
<?php
while ($result =
mysqli_fetch_array($idQuerySelect)) {
?>
<tr>
<td>
<?php echo
$result['NUMOUV']?>
</td>
<td>
<?php echo
$result['TITRE']?>
</td>
<td>
<?php echo
$result['COLLECTION']?>
</td>
<td>
<?php echo
$result['DATEPUB']?>
</td>
<td>
<?php echo
$result['LIEUPUB']?>
</td>
<td>
<?php echo
$result['medium']?>
</td>
<td>
<?php echo
$result['PRIX']?>
</td>
<td>
<?php echo
$result['GENRE']?>
</td>
<td>
<a
href="/?editeur=<?php echo $result['NUMEDIT']?>"><?php
echo $result['NOM']?></a>
</td>
<td>
<a
href="/modifierouvrage.php?id=<?php echo
$result['NUMOUV']?>">Modification</a>
<a
href="/tutoriels/developpement/php-mysql.html?supprid=<?php_echo______$result[\'NUMOUV\']=>=">Suppression</a>
</td>
</tr>
<?php
}
?>
</table>
</body>
</html>
Explication du code :
Require_once permet d’inclure le fichier de connxion au
serveur MySQL que nous avons créer précédemment.
$querySelect = 'select
NUMOUV, ouvrages.TITRE, DATEPUB, COLLECTION, LIEUPUB, medium, PRIX, GENRE,
editeurs.NUMEDIT, NOM
from ouvrages
LEFT
JOIN oeuvres ON ouvrages.NUMO=oeuvres.NUMO
INNER
JOIN editeurs ON ouvrages.NUMEDIT=editeurs.NUMEDIT';
Ces lignes permettent d’affecter à la variable $ querySelect la requête SQL
permettant de sélectionner les ouvrages qui correspondent à 0 ou 1 ouvre et nom
et numéro d’éditeur.
if
(isset($_GET['editeur'])) {
$querySelect = $querySelect.' WHERE
editeurs.NUMEDIT='.$_GET['editeur'];
}
Ces lignes permettent de rajouter une condition
permettant d’afficher tous les ouvrages appartenant à l’éditeur sélectionné par l’utilisateur.
$idQuerySelect = mysqli_query($link, $querySelect); Cette ligne execute la requite cité
ci-dessus.
while ($result =
mysqli_fetch_array($idQuerySelect)) { //Affiche les données}
Le while permet de parcourir chaque occurrence (ligne)
répondant à la requête pour ainsi l’afficher par la suite. mysqli_fetch_array
permet de retourner chaque ligne sous forme de tableau indicé par le numéro de
colonne mais également par le nom du champ de table MySQL.
Ainsi il est de bonne pratique d’utiliser les noms des
champs des tables afin de faciliter la lecture du code lors d’une éventuelle
reprise.
V/ Suppression d’une ligne dans MySQL
Ajoutons au fichier index.php, les lignes suivantes avant
l’affectation $querySelect :
// Test si un identifiant d'ouvrage a été passé en
paramètre GET dans l'URL
if (isset($_GET['supprid'])) {
$queryDelete =
'delete from ouvrages where NUMOUV='.$_GET['supprid'];
if
(mysqli_query($link, $queryDelete)) {
echo
'<h3>Suppression réussi !</h3>';
}
else
{
echo
'<h3>Erreur la requete n\'a pas été enregistré dasn la bdd :
'.$queryDelete.'</h3>';
}
}
Ces lignes permettent de tester si le paramètre supprid
est passé en paramètre GET dans l’url. Si le prédicat est valide alors nous
affections une commande SQL ) la variable $queryDelete ordonnant la suppresion
de l’ouvrage.
La fonction mysqli_query($link, $query) execute la requête
est retourne un booleen indiquant le résultat de l’opération.
V/ Ajout d’une ligne dans MySQL
<?php
require_once('lib/bdd.inc.php');
// Inclusion du fichier gérant la connexion au serveur MySQL
$link
= connectDb(); // Connexion au serveur MySQL
$querySelectEditeur = 'select *
from
editeurs
order
by nom';
$idQuerySelectSelectEditeur =
mysqli_query($link, $querySelectEditeur);
$querySelectOeuvres = 'select *
from
oeuvres';
$idQuerySelectSelectOeuvres =
mysqli_query($link, $querySelectOeuvres);
if (isset($_POST['TITRE'])
&& isset($_POST['COLLECTION']) && isset($_POST['DATEPUB'])
&& isset($_POST['LIEUPUB']) && isset($_POST['medium'])
&& isset($_POST['PRIX']) && isset($_POST['NUMEDIT']) &&
isset($_POST['NUMO'])) {
$queryInsert =
"INSERT INTO bibliotheque.ouvrages (NUMOUV ,TITRE, COLLECTION, DATEPUB,
LIEUPUB, medium, PRIX, NUMEDIT, NUMO)
VALUES ( NULL,
'".$_POST['TITRE']."' , '".$_POST['COLLECTION']."' ,
'".$_POST['DATEPUB']."' , '".$_POST['LIEUPUB']."' ,
'".$_POST['medium']."' , '".$_POST['PRIX']."' ,
".$_POST['NUMEDIT']." , ".$_POST['NUMO'].")";
if
(mysqli_query($link, $queryInsert)) {
echo
'<h3>Insertion réussi !</h3>';
}
else
{
echo
'<h3>Erreur la requete n\'a pas été enregistré dasn la bdd : '.$queryInsert.'</h3>';
}
}
?>
<html>
<head>
<title>Ajouter un
ouvrage</title>
<link rel="stylesheet"
media="all" href="/css/style.css"/>
</head>
<body>
<h1>Médiathèque
- Ajout d'un ouvrage</h1>
<p><a
href="/index.php">Retour à la liste</a></p>
<form
action="creerouvrage.php" method="post">
<table>
<tr>
<td align="right"
width="15f%">
Titre :
</td>
<td width="90%">
<input type="text"
value="" name="TITRE" id="TITRE" />
</td>
</tr>
<tr>
<td align="right"
width="10%">
Collection :
</td>
<td width="90%">
<input
type="text" value="" name="COLLECTION"
id="COLLECTION" />
</td>
</tr>
<tr>
<td align="right"
width="10%">
Date de publication :
</td>
<td width="90%">
<input
type="text" value="" name="DATEPUB"
id="DATEPUB" />
</td>
</tr>
<tr>
<td align="right"
width="10%">
Lieu de publication
:
</td>
<td width="90%">
<input
type="text" value="" name="LIEUPUB"
id="LIEUPUB" />
</td>
</tr>
<tr>
<td align="right"
width="10%">
Média :
</td>
<td width="90%">
<select
name="medium" id="medium" >
<option
value="CD">CD</option>
<option value="Livre">Livre</option>
<option value="Vidéo">Vidéo</option>
</select>
</td>
</tr>
<tr>
<td align="right"
width="10%">
Prix :
</td>
<td width="90%">
<input type="text"
value="" name="PRIX" id="PRIX" />
</td>
</tr>
<tr>
<td align="right"
width="10%">
Oeuvre :
</td>
<td width="90%">
<select
name="NUMO" id="NUMO">
<option
value="0">Pas d'oeuvre associé</option>
<?php
while ($result =
mysqli_fetch_array($idQuerySelectSelectOeuvres)) {
echo '<option
value="'.$result['NUMO'].'">'.$result['TITRE'].'</option>';
}
?>
</select>
</td>
</tr>
<tr>
<td align="right"
width="10%">
Editeur :
</td>
<td width="90%">
<select
name="NUMEDIT" id="NUMEDIT">
<?php
while ($result =
mysqli_fetch_array($idQuerySelectSelectEditeur)) {
echo '<option
value="'.$result['NUMEDIT'].'">'.$result['NOM'].'</option>';
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2"
align="center">
<input
type="submit" name="Valider" id="Valider"
value="Valider"/>
<input
type="reset" name="Annuler" id="Annuler"
value="Annuler" />
</td>
</tr>
</table>
</form>
</body>
</html>
V/ Modifier une ligne dans MySQL
<?php
require_once('lib/bdd.inc.php');
// Inclusion du fichier gérant la connexion au serveur MySQL
$link
= connectDb(); // Connexion au serveur MySQL
$querySelectEditeur = 'select *
from
editeurs
order
by nom';
$idQuerySelectSelectEditeur =
mysqli_query($link, $querySelectEditeur);
$querySelectOeuvres = 'select *
from
oeuvres';
$idQuerySelectSelectOeuvres =
mysqli_query($link, $querySelectOeuvres);
if (isset($_POST['TITRE'])
&& isset($_POST['COLLECTION']) && isset($_POST['DATEPUB'])
&& isset($_POST['LIEUPUB']) && isset($_POST['medium'])
&& isset($_POST['PRIX']) && isset($_POST['NUMEDIT']) &&
isset($_POST['NUMO']) && isset($_POST['NUMOUV'])) {
$queryInsert =
"UPDATE bibliotheque.ouvrages SET TITRE='".$_POST['TITRE']."' ,
COLLECTION='".$_POST['COLLECTION']."' ,
DATEPUB='".$_POST['DATEPUB']."' ,
LIEUPUB='".$_POST['LIEUPUB']."' , medium='".$_POST['medium']."'
, PRIX='".$_POST['PRIX']."' , NUMEDIT=".$_POST['NUMEDIT']."
, NUMO=".$_POST['NUMO']." WHERE NUMOUV=".$_POST['NUMOUV'];
if
(mysqli_query($link, $queryInsert)) {
echo
'<h3>Modification réussi !</h3>';
}
else
{
echo
'<h3>Erreur la requete n\'a pas été enregistré dasn la bdd :
'.$queryInsert.'</h3>';
}
}
if
(isset($_GET['id'])) {
$querySelect
= 'select NUMOUV,
ouvrages.TITRE, DATEPUB, COLLECTION, LIEUPUB, medium, PRIX, GENRE,
editeurs.NUMEDIT, NOM, oeuvres.NUMO
from
ouvrages
LEFT
JOIN oeuvres ON ouvrages.NUMO=oeuvres.NUMO
INNER JOIN editeurs ON
ouvrages.NUMEDIT=editeurs.NUMEDIT
WHERE
NUMOUV='.$_GET['id'];
// Execution de
la requête
$idQuerySelect =
mysqli_query($link, $querySelect);
$row =
mysqli_fetch_array($idQuerySelect);
}
?>
<html>
<head>
<title>Modifier un
ouvrages</title>
<link rel="stylesheet"
media="all" href="/css/style.css"/>
</head>
<body>
<h1>Médiathèque
- Modifier un ouvrage</h1>
<p><a
href="/index.php">Retour à la liste</a></p>
<form
action="modifierouvrage.php?id=<?php echo $_GET['id']?>"
method="post">
<input
type="hidden" value="<?php echo $_GET['id']?>"
name="NUMOUV" id="NUMOUV" />
<table>
<tr>
<td align="right"
width="15f%">
Titre :
</td>
<td width="90%">
<input
type="text" value="<?php echo $row['TITRE']?>"
name="TITRE" id="TITRE" />
</td>
</tr>
<tr>
<td align="right"
width="10%">
Collection :
</td>
<td width="90%">
<input
type="text" value="<?php echo $row['COLLECTION']?>"
name="COLLECTION" id="COLLECTION" />
</td>
</tr>
<tr>
<td align="right"
width="10%">
Date de publication :
</td>
<td width="90%">
<input
type="text" value="<?php echo $row['DATEPUB']?>"
name="DATEPUB" id="DATEPUB" />
</td>
</tr>
<tr>
<td align="right"
width="10%">
Lieu de publication
:
</td>
<td width="90%">
<input
type="text" value="<?php echo $row['LIEUPUB']?>"
name="LIEUPUB" id="LIEUPUB" />
</td>
</tr>
<tr>
<td align="right"
width="10%">
Média :
</td>
<td width="90%">
<select
name="medium" id="medium" >
<option
value="CD" <?php echo
($row['medium']=='CD')?'selected':'';?>>CD</option>
<option value="Livre" <?php
echo ($row['medium']=='Livre')?'selected':'';?>>Livre</option>
<option
value="Vidéo" <?php echo
($row['medium']=='Vidéo')?'selected':'';?>>Vidéo</option>
</select>
</td>
</tr>
<tr>
<td align="right"
width="10%">
Prix :
</td>
<td width="90%">
<input
type="text" value="<?php echo $row['PRIX']?>"
name="PRIX" id="PRIX" />
</td>
</tr>
<tr>
<td align="right"
width="10%">
Oeuvre :
</td>
<td width="90%">
<select
name="NUMO" id="NUMO">
<option
value="0">Pas d'oeuvre associé</option>
<?php
while ($result =
mysqli_fetch_array($idQuerySelectSelectOeuvres)) {
?>
<option value="<?php echo
$result['NUMO']?>" <?php echo
($result['NUMO']==$row['NUMO'])?'selected':'';?>><?php echo
$result['TITRE'];?></option>
<?php
}
?>
</select>
</td>
</tr>
<tr>
<td align="right"
width="10%">
Editeur :
</td>
<td width="90%">
<select
name="NUMEDIT" id="NUMEDIT">
<?php
while ($result =
mysqli_fetch_array($idQuerySelectSelectEditeur)) {
?>
<option
value="<?php echo $result['NUMEDIT']?>" <?php echo
($result['NUMEDIT']==$row['NUMEDIT'])?'selected':'';?>><?php echo
$result['NOM'];?></option>
<?php
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2"
align="center">
<input
type="submit" name="Valider" id="Valider"
value="Valider"/>
<input
type="reset" name="Annuler" id="Annuler"
value="Annuler" />
</td>
</tr>
</table>
</form>
</body>
</html>