Vous êtes sur la page 1sur 16

Manipuler les données

1-Connexion à une base de données MySQL avec PDO


TP :
<?php
//ouvrir une connexion à une base de données
$serName="localhost";
$userName="root";
$passW="";

try {
$pdo = new PDO("mysql:host=$serName;dbname=test", $userName, $passW);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "connexion bien établie !";
} catch (PDOException $e) {
echo "Erreur de connexion : " . $e->getMessage();
}
$pdo = NULL;
?>

<?php
//créer une base de données
$serName="localhost";
$userName="DD23";
$passW="123";
try {
$pdo = new PDO("mysql:host=$serName", $userName, $passW);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "CREATE DATABASE test2";


$pdo->exec($sql);
echo "La base de données est créée avec succes ";
} catch (PDOException $e) {
echo "Erreur de la création de la base de données: " . $e->getMessage();

1
}
$pdo = NULL;
?>

<?php
//supprimer une base de données
$serName="localhost";
$userName="DD23";
$passW="123";
try {
$pdo = new PDO("mysql:host=$serName", $userName, $passW);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "drop database test2";


$pdo->exec($sql);
echo "La base de données est bien supprimée !";
} catch (PDOException $e) {
echo "Erreur de suppression de la base de données : " . $e->getMessage();
}
$pdo = NULL;
?>

<?php
//La création d'une table Etudiant dans une base de données « test » avec 4 champs
$serName="localhost";
$userName="DD23";
$passW="123";
try {
$pdo = new PDO("mysql:host=$serName;dbname=test", $userName,$passW);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "CREATE TABLE Etudiant (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(30) NOT NULL,
prenom VARCHAR(30) NOT NULL,

2
age INT(3) NOT NULL
)";
$pdo->exec($sql);
echo "Table étudiant créée avec succès";
} catch (PDOException $e) {
echo $sql . "<br>" . $e->getMessage();
}
$pdo = null;
?>
<?php
//création d'un utilisateur karim
$serName="localhost";
$userName="root";
$passW="";
try {
$pdo = new PDO("mysql:host=$serName",$userName,$passW);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("CREATE USER 'karim'@'localhost'
IDENTIFIED BY '123'");
$stmt->execute();

echo "Utilisateur créé avec succès.";


} catch(PDOException $e) {
echo "Erreur lors de la création de l'utilisateur : " . $e->getMessage();
}
?>
<?php
//vous pouvez utiliser la méthode exec pour insérer des données
// dans votre table Etudiant:
try {
$pdo = new PDO("mysql:host=localhost;dbname=test", 'DD23', '123');

$nom = "SERRAR";
$prenom = "Nada";

3
$age = 55;

$sql = "INSERT INTO Etudiant (nom, prenom, age) VALUES ('$nom', '$prenom', '$age')";
$pdo->exec($sql);
echo "Insertion est bien effectuée !";
}
catch(PDOException $e)
{
echo "Erreur lors d'insertion : " . $e->getMessage();
}
?>
Remarque importante :
Notez cependant que cette approche n'est pas sécurisée car elle n'utilise pas de placeholders pour protéger contre les attaques d'injection SQL. Il
est donc fortement recommandé d'utiliser des placeholders pour les requêtes SQL. Voir l’exemple suivant :
<?php
//Le mieux d'utiliser la méthode placeholders pour insérer des données
// dans votre table Etudiant:
try {
$pdo = new PDO("mysql:host=localhost;dbname=test", "DD23", "123");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "INSERT INTO Etudiant (nom, prenom, age) VALUES (:nom, :prenom, :age)";
$stmt = $pdo->prepare($sql);

$nom = "KADDOM";
$prenom = "Douae";
$age = 18;

$stmt->bindParam(':nom', $nom);
$stmt->bindParam(':prenom', $prenom);
$stmt->bindParam(':age', $age);

$stmt->execute();

4
echo "Nouvel étudiant ajouté avec succès";
} catch (PDOException $e) {
echo "Erreur : " . $e->getMessage();
}
?>
<?php
//supprimer un champs de la table Etudiant
try {
$pdo = new PDO('mysql:host=localhost;dbname=test', 'DD23', '123');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$id = 2;
$sql = "DELETE FROM Etudiant WHERE id = :id";

$stmt = $pdo->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();
echo "la suppression est bien effectuée !";

} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
?>
<?php
//Modifier un champs de la table Etudiant
try {
$pdo = new PDO('mysql:host=localhost;dbname=test', 'DD23', '123');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$id = 1;
$nom = "ALAOUI";
$prenom = "Shamse";
$age = 20;

$sql = "UPDATE Etudiant SET nom = :nom, prenom = :prenom, age = :age WHERE id = :id";

5
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->bindParam(':nom', $nom);
$stmt->bindParam(':prenom', $prenom);
$stmt->bindParam(':age', $age);
$stmt->execute();
echo "L'element $id est bien modifié !";

} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
?>
<?php
//Afficher tous les champs de la table Etudiant (Méthode 1)
try {
$pdo = new PDO('mysql:host=localhost;dbname=test', 'DD23', '123');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare('SELECT * FROM Etudiant');


$stmt->execute();

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($result as $row) {


echo "ID : " . $row['id'] . "<br>";
echo "Nom : " . $row['nom'] . "<br>";
echo "Prénom : " . $row['prenom'] . "<br>";
echo "Age : " . $row['age'] . "<br><br>";
}
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
?>

6
<?php
$host = 'localhost';
$dbname = 'test';
$username = 'DD23';
$password = '123';
//Méthode 2 en utilisant query et fetch
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$result = $pdo->query("SELECT * FROM Etudiant");


while ($row = $result->fetch()) {
echo "ID: " . $row['id'] . " Nom: " . $row['nom'] . " Prénom: " . $row['prenom'] . " Age: " . $row['age'] .
"<br>";
}
} catch(PDOException $e) {
echo "Erreur : " . $e->getMessage();
}
$pdo = null;
?>
<?php
//pour afficher les champs de la table "Etudiant" en fonction de l'âge
// en utilisant ici la méthode prepare, bindParam et la boucle while:
$host = 'localhost';
$dbname = 'test';
$username = 'DD23';
$password = '123';

try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$age = 20;
$stmt = $pdo->prepare("SELECT * FROM Etudiant WHERE age >= :age");
$stmt->bindParam(':age', $age, PDO::PARAM_INT);

7
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "ID: " . $row['id'] . " Nom: " . $row['nom'] . " Prénom: " . $row['prenom'] ." Age: " . $row['age'] .
"<br>";
}
} catch(PDOException $e) {
echo "Erreur : " . $e->getMessage();
}
$pdo = null;
?>
N.B :
PDO::PARAM_INT est une constante utilisée avec la méthode bindParam de la classe PDO de PHP. Elle spécifie que le paramètre passé à la requête
SQL est de type entier.
Lorsque vous utilisez bindParam, vous pouvez spécifier le type de données associé à chaque paramètre pour garantir une sécurité maximale. Les
autres types de données disponibles incluent PDO::PARAM_STR pour les chaînes de caractères, PDO::PARAM_LOB pour les grands objets de
données, PDO::PARAM_NULL pour les valeurs nulles, etc.
En utilisant PDO::PARAM_INT avec bindParam, vous indiquez à PDO que la valeur associée à ce paramètre est un entier, ce qui peut aider à éviter
les injections SQL en garantissant que seuls les entiers sont utilisés dans la requête SQL.

2- Interroger une base de données à travers un formulaire


TP1 : Exemple de code PHP PDO pour interroger une base de données à travers un formulaire (la recherche d’un nom dans la table Etudiant) :
On peut réaliser deux pages :

a- La page Formulaire.html :
<form action="recherche.php" method="post">
Entrer le nom : <input type="text" name="nom">
<input type="submit" name="submit" value="Rechercher">
</form>
b- La page recherche.php :
<?php
$host = 'localhost';
$dbname = 'test';
$username = 'DD23';
$password = '123';

8
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

if ( !empty($_POST['nom']))
{
$nom = $_POST['nom'];
$stmt = $pdo->prepare("SELECT * FROM Etudiant WHERE nom = :nom");
$stmt->bindParam(':nom', $nom, PDO::PARAM_STR);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "ID: " . $row['id'] . " Nom: " . $row['nom'] . " Prénom: " . $row['prenom'] . " Age: " . $row['age'] .
"<br>";
}
}
else{
print "Il faut saisir un nom dans la zone de texte <br>";
}
echo '<a href="Formulaire.html">Cliquez ici pour retourner à la page pécédente</a>';
} catch(PDOException $e) {
echo "Erreur : " . $e->getMessage();
}
$pdo = null;
?>

TP2 : le code PHP ci-dessous pour insérer les données d'un formulaire HTML dans une base de données via PDO, tout en vérifiant les données et en informant
l'utilisateur si les champs sont vides :

Etape 1 : utiliser le code HTML ci-dessous pour créer un formulaire simple avec deux champs, "nom", "prénom" et « age » :
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>

9
<body>
<h2>Insertion dans la table Etudiant</h2>
<form action="submit.php" method="post">
<table>
<tr>
<td><label for="nom">Nom :</label></td>
<td><input type="text" name="nom" id="nom"></td>
</tr>
<tr>
<td><label for="prenom">Prénom :</label></td>
<td><input type="text" name="prenom" id="prenom"></td>
</tr>
<tr>
<td><label for="age">Age :</label></td>
<td><input type="text" name="age" id="age"></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="Envoyer">
</td>
</tr>
</table>
</form>
</html>
</body>
3- Manipuler des données CRUD
TP :
L'objectif et de créer, lire, mettre à jour et supprimer (CRUD) en php les données d’une table mysql en utilisant Php Data Object (pdo) :
• La Base de donnée « mydb » contient une table « etudiant »
• La table « etudiant » contient trois colonnes « id », « nom » et « email ».
• create.php : permet la création d’un nouveau étudiant dans la base de données.
• edit.php : permet la mise à jour d’un étudiant dans la base de données.
• delete.php : permet la suppression d’un étudiant dans la base de données (Il faut avoir un message de confirmation).
• db.php : permet la connexion à la base de données.
• index.php : permet de traiter les données.

10
• header.php : permet d’afficher 2 liens:
• Accueil : Affiche un tableau avec toute la liste des étudiants présent dans la base de données.
• Créer un étudiant : permet la création d’un étudiant dans la base de données (Il faut avoir un message de confirmation).

Fichier : db.php
<?php
$dsn = 'mysql:host=localhost;dbname=test';
$username = 'DD23';
$password = '123';
$options = [];
try {
$connection = new PDO($dsn, $username, $password, $options);
}
catch(PDOException $e) {
}
?>
Fichier : header.php
<!doctype html>
<html lang="fr">
<head>
<title>Bonjour</title>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css"
integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
</head>
<body class="bg-info">
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="index.php">Accueil <span class="sr-only">(current)</span></a>
</li>

11
<li class="nav-item">
<a class="nav-link" href="create.php">Créer un étudiant</a>
</li>
</ul>
</div>
</nav>
Fichier : index.php
<?php
require 'db.php';
$sql = 'SELECT * FROM etudiant';
$statement = $connection->prepare($sql);
$statement->execute();
$etudiant = $statement->fetchAll(PDO::FETCH_OBJ);
?>
<?php require 'header.php'; ?>
<div class="container">
<div class="card mt-5">
<div class="card-header">
<h2>Tous les étudiants</h2>
</div>
<div class="card-body">
<table class="table table-bordered">
<tr>
<th>ID</th>
<th>Nom</th>
<th>Prénom</th>
<th>Age</th>
</tr>
<?php foreach($etudiant as $person): ?>
<tr>
<td><?= $person->id; ?></td>
<td><?= $person->nom; ?></td>
<td><?= $person->prenom; ?></td>
<td><?= $person->age; ?></td>
<td>

12
<a href="edit.php?id=<?= $person->id ?>" class="btn btn-info">Edit</a>
<a onclick="return confirm('Êtes-vous sûr de vouloir supprimer cet enregistrement?')"
href="delete.php?id=<?= $person->id ?>" class='btn btn-danger'>Supprimer</a>
</td>
</tr>
<?php endforeach; ?>
</table>
</div>
</div>
</div>
Fichier : create.php
<?php
require 'db.php';
$message = '';
if (isset ($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['age']) ) {
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$age = $_POST['age'];
$sql = 'INSERT INTO etudiant(nom, prenom, age) VALUES(:nom, :prenom, :age)';
$statement = $connection->prepare($sql);
if ($statement->execute([':nom' => $nom, ':prenom' => $prenom, ':age' => $age])) {
$message = 'Donnée créée avec succès';
}
}
?>
<?php require 'header.php'; ?>
<div class="container">
<div class="card mt-5">
<div class="card-header">
<h2>Créer un étudiant</h2>
</div>
<div class="card-body">
<?php if(!empty($message)): ?>
<div class="alert alert-success">
<?= $message; ?>

13
</div>
<?php endif; ?>
<form method="post">
<div class="form-group">
<label for="nom">Nom</label>
<input type="text" name="nom" id="nom" class="form-control">
</div>
<div class="form-group">
<label for="prenom">Prenom</label>
<input type="text" name="prenom" id="prenom" class="form-control">
</div>
<div class="form-group">
<label for="age">Age</label>
<input type="text" name="age" id="age" class="form-control">
</div>
<div class="form-group">
<button type="submit" class="btn btn-info">Créer un étudiant</button>
</div>
</form>
</div>
</div>
</div>
Fichier : edit.php
<?php
require 'db.php';
$id = $_GET['id'];
$sql = 'SELECT * FROM etudiant WHERE id=:id';
$statement = $connection->prepare($sql);
$statement->execute([':id' => $id ]);
$person = $statement->fetch(PDO::FETCH_OBJ);
if (isset ($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['age']) ) {
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$age = $_POST['age'];
$sql = 'UPDATE etudiant SET nom=:nom, prenom=:prenom, age=:age WHERE id=:id';

14
$statement = $connection->prepare($sql);
if ($statement->execute([':nom' => $nom, ':prenom' => $prenom, ':age' => $age, ':id' => $id])) {
header("Location: index.php");
}}?>
<?php require 'header.php'; ?>
<div class="container">
<div class="card mt-5">
<div class="card-header">
<h2>Mise à jour d'un étudiant</h2>
</div>
<div class="card-body">
<?php if(!empty($message)): ?>
<div class="alert alert-success">
<?= $message; ?>
</div>
<?php endif; ?>
<form method="post">
<div class="form-group">
<label for="nom">Nom</label>
<input value="<?= $person->nom; ?>" type="text" name="nom" id="nom" class="form-control">
</div>
<div class="form-group">
<label for="prenom">Prénom</label>
<input type="text" value="<?= $person->prenom; ?>" name="prenom" id="prenom" class="form-control">
</div>
<div class="form-group">
<label for="age">Age</label>
<input type="text" value="<?= $person->age; ?>" name="age" id="age" class="form-control">
</div>
<div class="form-group">
<button type="submit" class="btn btn-info">Mise à jour d'un étudiant</button>
</div>
</form>
</div>
</div>

15
</div>
Fichier : delete.php
<?php
require 'db.php';
$id = $_GET['id'];
$sql = 'DELETE FROM etudiant WHERE id=:id';
$statement = $connection->prepare($sql);
if ($statement->execute([':id' => $id])) {
header("Location: index.php");
}
?>

16

Vous aimerez peut-être aussi