0% ont trouvé ce document utile (0 vote)
71 vues20 pages

Création d'une BDD PHP avec MySQL

Le document décrit les étapes pour créer une base de données MySQL et une table avec PHPMyAdmin. Il présente ensuite des exercices pour manipuler les données de la table avec des requêtes SQL dans un script PHP, notamment trier et filtrer les données.

Transféré par

amineamerdal8
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
71 vues20 pages

Création d'une BDD PHP avec MySQL

Le document décrit les étapes pour créer une base de données MySQL et une table avec PHPMyAdmin. Il présente ensuite des exercices pour manipuler les données de la table avec des requêtes SQL dans un script PHP, notamment trier et filtrer les données.

Transféré par

amineamerdal8
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Web dynamique ING2 | 2024

TD/TP 7 : Communication Base de données (BDD) dans PHP


TD (3h) :
Exercice 1 : L’objectif est d’être familiarisé avec MySQL via PhpMyAdmin.

1. Créer dans MySQL une base de données qu’on nommera « famille ».

2. Créer dans cette base de données la table « membre » ayant la structure suivante :

Structure de la table « membre »


Champ Type Null Défaut Extra

ID int(11) Non Primary Key

Auto-Increment

Nom varchar(255) Non

Prenom varchar(255) Non

Statut varchar(255) Non

DateNaissance Date Non

Photo varchar(255) Non

3. Ajouter dans cette table les individus ci-dessous :

Contenu de la table « membre »


Id Nom Prénom Statut Date de naissance Photo

1 Dupond Grégoire Grand-père 1942-05-17 dupond/gregoire.avif

2 Dupond Germaine Grand- 1949-02-15 dupond/germaine.avif


mère

3 Dupond Gérard Père 1969-12-22 dupond/gerard.jpg

4 Dupond Marie Mère 1971-03-0 dupond/marie.jpg

5 Dupond Julien Fils 1995-05-17 dupond/julien.jpg

6 Dupond Manon Fille 2000-11-29 dupond/manon.jpg

Page | 1
Web dynamique ING2 | 2024

4. Créer un script php qui connecte à la base de données « famille » et affiche le contenu de
la table « membre ».
5. Modifier le script pour afficher les données en ordre croissant et décroissant du prénom.
6. Modifier le script pour afficher les membres de la famille dont la date de naissance est
inférieure au 1er janvier 1960
7. Modifier le script pour afficher les membres de la famille dont le prénom commence par
la lettre G.
8. Modifier le script pour afficher les membres de la famille dont le prénom contient MA.

Correction :
Etapes à suivre pour créer une BDD :
• Pour commencer, il faut activer tous les services et les serveurs sur WAMP ou MAMP
• Nous voulons créer notre base de données via PhpMyAdmin. Comment ?
o Avec WAMP :
▪ Cliquer sur PhpMyAdmin ou
▪ Dans votre navigateur partie URL, tapez
• localhost/phpmyadmin/ ou
• 127.0.0.1/phpmyadmin/
o Avec MAMP :
▪ Vous pouvez aller directement sur la partie URL de votre navigateur et tapez
• localhost:8888/phpmyadmin

Page | 2
Web dynamique ING2 | 2024

• Dans la fenêtre de phpMyAdmin, utiliser ces paramètres :


o utilisateur = root | mot de passe = <rien>
o Cliquer sur le bouton « Exécuter »
• Dans la fenêtre suivante, on va créer notre BDD. Cliquer sur le menu « Bases de données » dans la fenêtre à droite :

Page | 3
Web dynamique ING2 | 2024

• Ecrire « famille » comme le nom de votre BDD. Cliquer sur le bouton « Créer »

• Maintenant, on va créer la table « membre » qui contient 6 colonnes. Cliquer sur le bouton « Exécuter »

• Voici le structure de champs pour la table « membre » :


Structure de la table « membre »
Champ Type Null Défaut Extra

ID int(11) Non Primary Key

Auto-Increment (A_I)

Nom varchar(255) Non

Prenom varchar(255) Non

Statut varchar(255) Non

DateNaissance Date Non

Photo varchar(255) Non

Page | 4
Web dynamique ING2 | 2024

• Implémentez les champs de la table selon notre spécification. Cliquer le bouton « Sauvegarder »

• Cliquer sur le menu « Insérer » pour ajouter des données. Remplir les champs de la table avec les valeurs appropriées.
Cliquer le bouton « Exécuter ». Répéter la procédure jusqu’à vous êtes arrivé d’avoir les six membres de la famille.

Correction pour l’Exercice 1


• Sauvegarder ce fichier (pour WAMP : dans le répertoire www | pour MAMP : dans le répertoire htdocs) comme
« famille.php ». Pour l’exécuter, dans la partie URL de votre navigateur, tapez : Pour WAMP « localhost/famille.php »
| Pour MAMP « localhost :8888/famille.php »

Page | 5
Web dynamique ING2 | 2024

<?php

//identifier le nom de base de données


$database = "famille";

//connectez-vous dans votre BDD


//Rappel : votre serveur = localhost | votre login = root | votre mot de pass = '' (rien)
$db_handle = mysqli_connect('localhost', 'root', '' );
$db_found = mysqli_select_db($db_handle, $database);

//si le BDD existe, faire le traitement


if ($db_found) {
$sql = "SELECT * FROM membre";
$result = mysqli_query($db_handle, $sql);
while ($data = mysqli_fetch_assoc($result)) {
echo "ID: " . $data['ID'] . "<br>";
echo "Nom:" . $data['Nom'] . "<br>";
echo "Prénom: " . $data['Prenom'] . "<br>";
echo "Statut: " . $data['Statut'] . "<br>";
echo "Date de naissance: " . $data['DateNaissance'] . "<br>";
$image = $data['Photo'];
echo "<img src='$image' height='80' width='100'>" . "<br>";

}//end while

}//end if
//si le BDD n'existe pas
else {
echo "Database not found";
}//end else

//fermer la connection
mysqli_close($db_handle);
?>

1. Modifier le script pour afficher les données en ordre croissant et décroissant du prénom.
<?php
// Gardez le code ci-dessus, changez juste la requête SQL !
$sql = SELECT * FROM membre_tbl ORDER BY Prenom';

// L'opérateur ORDER BY permet de classer soit alphabétiquement


// soit numériquement suivant le type du champ.

// Si l'on souhaite classer en décroissant (ex. de Z à A), nous


// y ajouterons DESC soit : ORDER BY prenom DESC
?>

2. Modifier le script pour afficher les membres de la famille dont la date de naissance est inférieure au 1er janvier 1960
<?php
// Gardez le code ci-dessus, changez juste la requête !
$sql = "SELECT * FROM membre WHERE DateNaissance < '1960-01-01'";

// L'avantage d'avoir un type DATE dans notre base de données, c'est que
// nous pouvons comparer des dates dans la requête SQL.
// Ici nous ne souhaitons afficher que les membres de la famille qui sont
// nés avant le 1er janvier 1960, soit : WHERE datenais < '1960-01-01'

Page | 6
Web dynamique ING2 | 2024

?>

3. Modifier le script pour afficher les membres de la famille dont le prénom commence par la lettre G.
<?php
// Gardez le code ci-dessus, changez juste la requête !
$sql = " SELECT * FROM membre WHERE Prenom LIKE 'G%'";

// Le signe pourcentage "%" placé après le G, indique que la lettre G peut


// être suivie, mais pas précédée, d'autres caractères !
// Notez aussi que LIKE n'est pas sensible à la casse, cela veut dire que
// la requête cherchera aussi bien des G majuscules que minuscules.

?>

4. Modifier le script pour afficher les membres de la famille dont le prénom contient MA.
<?php
// Gardez le code ci-dessus, changez juste la requête !
$sql = "SELECT * FROM membre WHERE Prenom LIKE '%MA%'";

// Le signe pourcentage "%" placé avant et après MA indique que la syllabe


// peut-être précédée ou suivie de caractères.
// Une fois de plus notez que LIKE n'est pas sensible à la casse, la requête
// cherchera aussi bien des MA majuscules que dès ma en minuscules.
?>

Voici la solution finale et complète de l’Exercice 1 :


• Partie HTML (Front-end)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Introduction au PHP avec MySQL</title>
<style type="text/css">
body {
background-color: #eeeeee;
}
h1 {
text-align: center;
color: white;
background-color: black;
padding: 20px;
width: 650px;
margin: 0 auto 20px auto;
border-radius: 8px;
}
table {
width: 650px;
margin: auto;
background-color: #9999ee;
border-radius: 8px;
}
#add {
padding-left: 50px;
}
#delete {
padding-left: 50px;
}

Page | 7
Web dynamique ING2 | 2024
div input {
background-color: #99a;
}
</style>
</head>
<body>
<h1>La famille Dupond &nbsp; <img src="dupond/famille.jpg" height="80" width="120"></h1>
<form action="familleDupond.php" method="post">
<table border="1">
<tr>
<td>Votre sélection</td>
<td>
<input type="radio" name="choix" value="1">Afficher tous les membres de la famille<hr>
<input type="radio" name="choix" value="2">Afficher les membres, rangé par prénom<hr>
<input type="radio" name="choix" value="3">Afficher les membres, rangé par prénom
décroissant<hr>
<input type="radio" name="choix" value="4">Afficher les membres, nés avant 1960<hr>
<input type="radio" name="choix" value="5">Afficher les membres dont son prénom commence
par G<hr>
<input type="radio" name="choix" value="6">Afficher les membres dont son prénom contient
MA<hr>
<input type="radio" name="choix" value="7">Ajouter un nouveau membre de la famille
<div id="add">
<table border="1">
<tr>
<td>Nom</td>
<td><input type="text" name="nom1" size="40"> </td>
</tr>
<tr>
<td>Prénom</td>
<td><input type="text" name="prenom1" size="40"> </td>
</tr>
<tr>
<td>Statut</td>
<td><input type="text" name="statut1" size="40"> </td>
</tr>
<tr>
<td>Date de naissance</td>
<td><input type="Date" name="naissance1" size="40"> </td>
</tr>
<tr>
<td>Photo</td>
<td><input type="text" name="photo1" size="40"> </td>
</tr>
</table>
</div>
<hr>
<input type="radio" name="choix" value="8">Supprimer un membre de la famille
<div id="delete">
<table border="1">
<tr>
<td>Nom</td>
<td><input type="text" name="nom2" size="40"> </td>
</tr>
<tr>
<td>Prénom</td>
<td><input type="text" name="prenom2" size="40"> </td>
</tr>
<tr>
<td>Statut</td>
<td><input type="text" name="statut2" size="40"> </td>
</tr>
<tr>
<td>Date de naissance</td>
<td><input type="Date" name="naissance2" size="40"> </td>

Page | 8
Web dynamique ING2 | 2024
</tr>
<tr>
<td>Photo</td>
<td><input type="text" name="photo2" size="40"> </td>
</tr>
</table>
</div>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="button1" value="Soumettre" onclick="processOption()">
</td>
</tr>

</table>
</form>
</body>
</html>

9. Fusionner vos solutions (a) à (g) afin de créer un menu de recherche dans la BDD, comme
monté par l’image ci-dessous :

• Résultat souhaité (front-end) :

Page | 9
Web dynamique ING2 | 2024

• Partie PHP (Back-End)


NB : Le résultat de chaque enquête est présenté dans un tableau
<?php
echo '<meta charset="utf-8">';
echo '<link rel="stylesheet" type="text/css" href="dupondStyle.css">';

//identifier votre BDD


$database = "famille";

//identifier votre serveur, login et mot de passe


$db_handle = mysqli_connect('localhost', 'root', '');
$db_found = mysqli_select_db($db_handle, $database);

$choice = isset($_POST["choix"])? $_POST["choix"] : "";


if (empty($choice)) {
$choice = 0;
}
$choice = (int)$choice;

//recuperer les infos sur le nouveau membre de la famille


if ($choice ==7) {
$nom = isset($_POST["nom1"])? $_POST["nom1"] : "";
$prenom = isset($_POST["prenom1"])? $_POST["prenom1"] : "";
$statut = isset($_POST["statut1"])? $_POST["statut1"] : "";
$naissance = isset($_POST["naissance1"])? $_POST["naissance1"] : "";
$photo = isset($_POST["photo1"])? $_POST["photo1"] : "";
}
//recuperer les infos sur le membre qui quitte la famille
if ($choice ==8) {
$nom = isset($_POST["nom2"])? $_POST["nom2"] : "";
$prenom = isset($_POST["prenom2"])? $_POST["prenom2"] : "";
$statut = isset($_POST["statut2"])? $_POST["statut2"] : "";
$naissance = isset($_POST["naissance2"])? $_POST["naissance2"] : "";
$photo = isset($_POST["photo2"])? $_POST["photo2"] : "";
}

$sql = "";
$erreur = false;
$errorMessage = "";

//si la BDD existe


if ($db_found) {
//code MySQL. $sql est basé sur le choix de l'utilisateur
switch($choice) {
case 1:
$sql = "SELECT * FROM membre";
break;
case 2:
$sql = "SELECT * FROM membre ORDER BY Prenom";
break;
case 3:
$sql = "SELECT * FROM membre ORDER BY Prenom DESC";
break;
case 4:
$sql = "SELECT * FROM membre WHERE DateNaissance < '1960-01-01'";
break;
case 5:
$sql = "SELECT * FROM membre WHERE Prenom LIKE 'G%'";
break;
case 6:
$sql = "SELECT * FROM membre WHERE Prenom LIKE '%MA%'";
break;
case 7:

Page | 10
Web dynamique ING2 | 2024
$sql = "";
break;
case 8:
$sql = "";
break;
default:
$sql = "SELECT * FROM membre";
break;
}

if ($choice == 7) {
//verifier que le nouveau membre a ajouter n'existe pas encore dans la BDD
$sql = "SELECT * FROM membre";
if ($nom != "") {
$sql .= " WHERE Nom LIKE '%$nom%'";
if ($prenom != "") {
$sql .= " AND Prenom LIKE '%$prenom%'";
}
}
$result = mysqli_query($db_handle, $sql);
if (mysqli_num_rows($result) > 0) {
//ça existe
$erreur = true;
$errorMessage = "<p>Cannot add. Member already exists.
Duplicates not allowed</p>";
} else {
$sql = "INSERT INTO membre(Nom, Prenom, Statut, DateNaissance, Photo)
VALUES('$nom', '$prenom', '$statut', '$naissance', '$photo')";
$result = mysqli_query($db_handle, $sql);
$sql = "SELECT * FROM membre ORDER BY ID DESC LIMIT 1";
}
} //end if ($choice == 7)

if ($choice == 8) {
//verifier que le membre à supprimer existe dans la BDD
$sql = "SELECT * FROM membre";
if ($nom != "") {
$sql .= " WHERE Nom LIKE '%$nom%'";
if ($prenom != "") {
$sql .= " AND Prenom LIKE '%$prenom%'";
}
}
$result = mysqli_query($db_handle, $sql);
if (mysqli_num_rows($result) == 0) {
//n'existe pas
$erreur = true;
$errorMessage = "<p>Cannot delete. No such member exists</p>";
} else {
while ($data = mysqli_fetch_assoc($result)) {
$ID = $data['ID'];
}
//on supprime cet enregistrement
$sql = "DELETE FROM membre WHERE ID = $ID";
$result = mysqli_query($db_handle, $sql);
echo "<br>Delete successful.";
echo "<br>Résultat après la suppression.";
$sql = "SELECT * FROM membre";
}
} //end if ($choice == 8)

if (!$erreur) {
echo "<h1>La famille Dupond</h1>";
echo "<p>Requete: " . $sql . "<br>";
echo "Résultat: </p>";

Page | 11
Web dynamique ING2 | 2024
$result = mysqli_query($db_handle, $sql);

echo "<table border=\"1\">";


echo "<tr>";
echo "<th>" . "ID" . "</th>";
echo "<th>" . "Nom" . "</th>";
echo "<th>" . "Prénom" . "</th>";
echo "<th>" . "Statut" . "</th>";
echo "<th>" . "Date de naissance" . "</th>";
echo "<th>" . "Photo" . "</th>";
echo "</tr>";

//afficher le résultat
while ($data = mysqli_fetch_assoc($result)){
echo "<tr>";
echo "<td>" . $data['ID'] . "</td>";
echo "<td>" . $data['Nom'] . "</td>";
echo "<td>" . $data['Prenom'] . "</td>";
echo "<td>" . $data['Statut'] . "</td>";
echo "<td>" . $data['DateNaissance'] . "</td>";
$image = $data['Photo'];
echo "<td>" . "<img src='$image' height='60' width='80'>" . "</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo $errorMessage . "<br>";
} //end if (!$erreur)
} else {
echo "<br>Database not found";
} // end if($db_found)

//fermer la connexion
mysqli_close($db_handle);

?>

• Partie CSS (Back-End) (dupontStyle.css)


h1 {
width: 650px;
margin: auto;
text-align: center;
color: white;
background-color: #336699;
padding: 20px;

margin: 0 auto 20px auto;


border-radius: 5px;
}
p {
margin-left: 22%;
}
table {
width: 680px;
margin: auto;
}
th {
background-color: #6699CC;
}
td {
background-color: #cccccc;
}
tr:hover {
opacity: 0.5;

Page | 12
Web dynamique ING2 | 2024
}

• Les Résultats (back-end)


o Enquête 1 :

o Enquête 2 :

o Enquête 3 :

Page | 13
Web dynamique ING2 | 2024

o Enquête 4 :

o Enquête 5 :

o Enquête 6 :

Page | 14
Web dynamique ING2 | 2024

o Enquête 7 :

o Enquête 8 :

Page | 15
Web dynamique ING2 | 2024

Exercice 2
Dans cet exercice, nous voulons faire la communication entre différentes pages PHP en utilisant PHP
SESSION.

Introduction :

La superglobale $_SESSION est un tableau associatif qui va contenir toutes les données de session une
fois la session démarrée.

Pour démarrer une session en PHP, on va utiliser la fonction session_start(). Cette fonction va se charger
de vérifier si une session a déjà été démarrée en recherchant la présence d’un identifiant de session et, si
ce n’est pas le cas, va démarrer une nouvelle session et générer un identifiant de session unique pour un
utilisateur. Il va falloir appeler session_start() avant toute autre opération dans nos pages.

Pour commencer, on a besoin un formulaire comme montré ci-dessous. On va réaliser ce formulaire


par un code qui contient des variables globales $_SESSION.

Page | 16
Web dynamique ING2 | 2024

accueil.php
<?php
// Start the session
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Carte de crédit</title>
</head>
<?php
// Set session variables (variables globales)
$_SESSION["client"] = "";
$_SESSION["statutPaiement"] = "void";
?>
<body>
<h2>Paiement par carte de crédit</h2>
<form action="traitementPaiement.php" method="post">
<table border="1">
<tr>
<td>Nom de client:</td>
<td><input type="text" name="client"></td>
</tr>
<tr>
<td>Montant à payer:</td>
<td><input type="number" step="0.01" name="amount"></td>
</tr>
<tr>
<td>Payer par:</td>
<td>
<input type="radio" name="creditCard" value="MasterCard">
MasterCard<br>
<input type="radio" name="creditCard" value="Visa" checked>
Visa<br>

Page | 17
Web dynamique ING2 | 2024
<input type="radio" name="creditCard" value="Amex">
American Express <br>
<input type="radio" name="creditCard" value="PayPal">
PayPal<br>
</td>
</tr>
<tr>
<td>Numéro de carte de crédit:</td>
<td><input type="number" name="numero"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="button1" value="Soumettre">
</td>
</tr>
</table>
</form>
</body>
</html>

Ensuite, on va créer une BDD contenant une table des clients, comme montré ci-dessous :

Finalement, notre fichier de traitement php (traitementPaiement.php) :


<?php
// Start the session
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>Traitement</title>
</head>
<body>
<?php
$database = "clients";
$db_handle = mysqli_connect('localhost','root','');

Page | 18
Web dynamique ING2 | 2024
$db_found = mysqli_select_db($db_handle, $database);
$client = isset($_POST["client"])? $_POST["client"]: "";

//montant à payer
$montant = isset($_POST["amount"])? $_POST["amount"]: "";
if (empty($montant)) { $montant = 0.0; }

//si une carte est selectionnée


$card = isset($_POST["creditCard"])? $_POST["creditCard"] : "";
$numero = isset($_POST["numero"])? $_POST["numero"] : "";

$_SESSION["client"] = $client;

//si le bouton est cliqué


if (isset($_POST["button1"])) {
//traitement
if ($db_found) {
//rechercher ce client dans la BDD
$sql = "SELECT * from VIP WHERE Nom LIKE '$client'
AND CarteCredit LIKE '$card' AND Numero LIKE '$numero'";

$result = mysqli_query($db_handle, $sql);


while ($data = mysqli_fetch_assoc($result)){
echo "ID: " . $data['ID'] . '<br>';
echo "Nom: " . $data['Nom'] . '<br>';
echo "Carte de crédit: " . $data['CarteCredit'] . '<br>';
echo "Numéro de carte: " . $data['Numero'] . '<br>';
echo "Solde: " . $data['Solde'] . '<br><br>';
$solde = $data['Solde'];
if ($solde >= $montant) {
$_SESSION["statutPaiement"] = "Paiement accepté";
} else {
$_SESSION["statutPaiement"] = "Paiement refusé";
}
}
// Echo session (global) variables
echo "<br>Notre client: " . $_SESSION["client"];
echo "<br>Status de son paiement: " . $_SESSION["statutPaiement"];
} else {
echo "<br>Database not found.";
}
}
//fermer la connexion
mysqli_close($db_handle);
?>
</body>
</html>

Page | 19
Web dynamique ING2 | 2024

Notre résultat :

Page | 20

Vous aimerez peut-être aussi