Vous êtes sur la page 1sur 57

Développement Web Back-end

PARTIE II
L’interactivité
en PHP

Dans ce module, vous allez :


PHP et les formulaires

Formulaire HTML

 Retourne des informations saisies par un utilisateur vers une application serveur

 La création d’un formulaire nécessite la connaissance de quelques balises HTML indispensables :

 Structure : un formulaire commence toujours par la balise

<form> et se termine par la balise </form>

 Champ de saisie de text en ligne :


<input type = "text" name ="nom_du_champ" value="chaîne">

 Boutons d’envoi et d’effacement :


<input type=" submit " value = "Envoyer">

<input type = "reset" name ="efface" value = "Effacer">


PARTIE 2

 Case à cocher et bouton radio :


<input type = "checkbox" name ="case1" value="valeur_case">

<input type = "radio" name ="radio1" value ="valeur_radio">

3
PHP et les formulaires

 Liste de sélection avec options à choix unique :

<select name ="select" size="1">

<option value = "un"> choix </option>

<option value ="deux"> choix2 </option>

</select>

 Liste de sélection avec options à choix multiples :


<select name ="select" size = "1" multiple>
PARTIE 2

<option value = "un"> choix1 </option>

<option value = "deux"> choix2 </option>

</select>
4
PHP et les formulaires

 Méthodes d’envoi get et post

 transmission selon une des deux méthodes d'envoi GET ou POST

– La méthode GET place les informations d'un formulaire directement à la suite de l'adresse URL de
la page appelée.

• http://www.site.com/cible.php?champ=valeur&champ2=valeur

• inconvénients :

- rendre visibles les données dans la barre d’adresse du navigateur.

- De plus, la longueur totale est limitée à 255 caractères, ce qui rend impossible la
transmission d’un volume de données important
PARTIE 2

– La méthode POST regroupe les informations dans l'entête d'une requête HTTP

• Assure une confidentialité efficace des données


5
PHP et les formulaires

 Récupération des paramètres en PHP

 Les tableaux associatifs $_GET et $_POST contiennent toutes les


variables envoyées par un formulaire

 Vous pouvez aussi utiliser la variable $_REQUEST, si vous ne


souhaitez pas vous embarrasser de la méthode utilisée. Elle contient
un mélange des données de GET, POST, COOKIE et FILE.
PARTIE 2

6
PHP et les formulaires

<form method="POST" action="page_cible.php">


<input type="text" name="Champ_saisie" value="Texte"> <br>
<select name="Liste_Choix" size="3">
<option value="Option_1">Option_1</option>
<option value="Option_2">Option_2</option>
<option value="Option_3">Option_3</option>
</select> <br>
<textarea name="Zone_Texte" cols="30" rows="5"> Texte par défaut </textarea><br>
<input type="checkbox" name="Case_Cocher[]" value="Case_1"> Case 1<br>
<input type="checkbox" name="Case_Cocher[]" value="Case_2"> Case 2<br>
<input type="checkbox" name="Case_Cocher[]" value="Case_3"> Case 3<br>
<input type="radio" name="Case_Radio" value="Case radio 1"> radio 1<br>
<input type="radio" name="Case_Radio" value="Case radio 2"> radio 2<br>
PARTIE 2

<input type="radio" name="Case_Radio" value="Case radio 3"> radio 3<br>


<input type="reset" name="Annulation" value="Annuler">
<input type="submit" name="Soumission" value="Soumettre">
</form>

7
PHP et les formulaires

<?php

$resultat = $_POST["Champ_saisie"] . "<br>";

$resultat .= $_POST["Liste_Choix"] . "<br>";

$resultat .= $_POST["Zone_Texte"] . "<br>";

for ($i = 0; $i < count($_POST["Case_Cocher"]); $i++)

$resultat .= $_POST["Case_Cocher"][$i] . "<br>";

$resultat .= $_POST["Case_Radio"] . "<br>";


PARTIE 2

echo $resultat;

?>

8
PHP et les formulaires

 PHP et les formulaires

 La plupart des éléments d'un formulaire n'acceptent qu'une seule et


unique valeur, laquelle est affectée à la variable correspondante
dans le script de traitement.

$Champ_Saisie  "Ceci est une chaîne de caractères.";

 Pour des cases à cocher et les listes à choix multiples, plusieurs


valeurs peuvent être sélectionnées entraînant l'affectation d'un
tableau de valeurs aux variables correspondantes.
PARTIE 2

$Case_Cocher[0]  "Case radio 1";

$Case_Cocher[1]  "Case radio 3";


9
PHP et les formulaires

 Validation des données du formulaire sur serveur

Une validation côté serveur, en PHP, va donc également s’imposer pour filtrer les données potentiellement
dangereuses.

Le PHP nous offre différentes options pour sécuriser nos formulaires en testant la validité des données envoyées : on
va pouvoir utiliser des fonctions, des filtres, des expressions régulières, etc.

La première fonction que vous devez absolument connaitre est la fonction htmlspecialchars(). Cette fonction va
permettre d’échapper certains caractères spéciaux comme les chevrons « < » et « > » en les transformant en entités
HTML. En échappant les chevrons, on se prémunit d’une injection de code JavaScript puisque les balises <script> et
</script> vont être transformées en & <script> et &/<script> et ne vont donc pas être exécutées par le navigateur.
PARTIE 2

La deuxième fonction est stripslashes() qui va supprimer les antislashes que certains hackers pourraient utiliser pour
échapper des caractères spéciaux. La troisième fonction est trim() qui va supprimer les espaces inutiles
10
PHP et les formulaires

 Validation des données du formulaire sur serveur

Tester La faille XSS.

<form action="testForm.php" method="post">


<p>Votre nom : <input type="text" name="nom" /></p>
</form>
Bonjour, <?php echo htmlspecialchars($_REQUEST['nom']),'<br>'; ?>.

Ou bien on peut créer une fonction personnalisée qui va se charger d’exécuter chacune
des fonctions ci-dessus :

$nom = valid_donnees($_POST["nom"]);
PARTIE 2

function valid_donnees($donnees){
$donnees = trim($donnees);
$donnees = stripslashes($donnees);
$donnees = htmlspecialchars($donnees);
return $donnees;
} 11
Les cookies

 Principe

 Un cookie est un fichier texte créé par un script et stocké sur l’ordinateur des visiteurs
d’un site

 Les cookies permettent de conserver des renseignements utiles sur chaque utilisateur,
et de les réutiliser lors de sa prochaine visite

 Exemple : personnaliser la page d’accueil ou les autres pages du site

– un message personnel comportant par exemple son nom, la date de sa dernière


visite, ou tout autre particularité.
PARTIE 2

 Les cookies étant stockés sur le poste client, l’identification est immédiate et ne
concernent que les renseignements qui le concernent

12
Les cookies

 Exemple d’application des cookies

 Mémorisation des paniers dans les applications d’e-commerce

 Identification des utilisateurs

 Des pages web individualisées

 Afficher des menus personnalisés

 Afficher des pages adaptées aux utilisateurs en fonction de leurs


PARTIE 2

précédents visites

13
Les cookies

Écrire des cookies

 L’écriture de cookies est possible grâce à la fonction setcookie()

 il faut mettre cette fonction dès le début du script avant l’envoi


d’aucune autre information de la part du serveur vers le poste client.
Setcookie("nom_var", "valeur_var", date_expiration)
<?php
setcookie ("premierCookie", "Salut", time() +3600*24*7);

if (!$_COOKIE["premierCookie"]) {
echo "le cookie n’a pas été défini";}
else {
PARTIE 2

echo $_COOKIE["premierCookie"], "<br>";


}
?>

14
Les cookies

 Écriture de cookies

 Nom_var : nom de la variable qui va stocker l’information sur le


poste client et qui sera utilisée pour récupérer cette information dans
la page qui lira le cookie.
 C’est la seule indication obligatoire pour un cookie

 Valeur_var : valeur stockée dans la variable. Par exemple une chaîne


de caractères ou une variable chaîne, en provenance d’un formulaire
 Date_expiration : la date à laquelle le cookie ne sera plus lisible et
sera effacé du poste client
 on utilise en général la date du jour, définie avec la fonction time()
à laquelle on ajoute la durée de validité désirée
PARTIE 2

 Si l’attribut n’est pas spécifié, le cookie expire à l’issue de la session

15
Les cookies

 Lecture de cookies

 Les cookies sont accessibles dans le tableau associatif $_COOKIE

 Il faut d’abord vérifier l’existence des variables dont les noms et les valeurs ont
été définis lors de la création du cookie.

– Cette vérification s’effectue grâce à la fonction isset($_COOKIE["nom_var"]) qui


renvoie true si la variable $nom_var existe et false sinon.

<?php

if (isset($_COOKIE["premierCookie"])){
PARTIE 2

echo "<h2> Bonjour isset($_COOKIE[premierCookie])</h2>";

}
?>

16
Les cookies

 Écriture de plusieurs variables par un cookie

 Utilisation de la fonction compact() pour transformer les variables en un tableau

 Convertir le tableau en une chaîne de caractère à l’aide de la fonction implode()

 Affecter la chaîne créée à l’attribut « nom_cookie »

$col="#FF0000";
$size=24;
$font="Arial";
$text="Je suis le cookie";
PARTIE 2

$arr=compact("col", "size", "font", "text");


$val=implode("&", $arr);
Setcookie("la_cookie", $val, time()+600);

17
Les cookies

 Lecture de plusieurs variables d’un cookie

 Décomposé la chaîne stockée par la cookie et retrouver un tableau en


utilisant la fonction explode()
echo " <b> voici le contenu de la chaîne cookie : </b><br>";

echo $_COOKIE["la_cookie"], "<br> <br>";

$arr=explode("&", $_COOKIE["la_cookie"]);

echo "<b> ces variables ont été établies à partir de la chaîne cookie : </b> <br>
<br>";

foreach ($arr as $k=>$elem) {


PARTIE 2

echo "$k=>$elem <br>";

18
Les cookies

 Supprimer un cookie

 Il suffit de renvoyer le cookie grâce à la fonction setcookie() en spécifiant


simplement l'argument NomDuCookie

setcookie("Visites");

 Une autre méthode consiste à envoyer un cookie dont la date d'expiration est
passée:
PARTIE 2

setcookie("Visites","",time()-1 )

19
Les sessions

 Principe

 Est un mécanisme permettant de mettre en relation les différentes requêtes


du même client sur une période de temps donnée.

 Les sessions permettent de conserver des informations relatives à un


utilisateur lors de son parcours sur un site web

 Des données spécifiques à un visiteur pourront être transmises de page en


page afin d'adapter personnellement les réponses d'une application PHP

 Chaque visiteur en se connectant à un site reçoit un numéro d'identification


dénommé identifiant de session (SID)
PARTIE 2

20
Les sessions

 Démarrer une session PHP

 La fonction session_start() se charge de générer automatiquement cet


identifiant unique de session et de créer un répertoire. Elle doit être placée
au début de chaque page afin de démarrer ou de continuer une session.
<?php
session_start();
$Session_ID = session_id();
// $Session_ID = 7edf48ca359ee24dbc5b3f6ed2557e90 ?>

 La fonction session_start() vérifie d’abord si une session existe déjà en


recherchant la présence d’un ID de session. Si elle en trouve un, c’est à dire
que la session est déjà démarrée, elle met en place les variables de session et
PARTIE 2

si ce n’est pas le cas, elle démarre une nouvelle session en créant un nouvel
ID de session.

21
Les sessions

 Stockage des données de session

 Vous pouvez stocker toutes vos données de session sous forme de paires clé-valeur dans
le tableau $_SESSION[]. Les données stockées sont accessibles pendant la durée de vie
d’une session. Considérons le script suivant, qui crée une nouvelle session et enregistre
deux variables de session.

<?php

// Démarrer la session

session_start();

// Stocker des données de session

$_SESSION["nom"] = "Jean";
PARTIE 2

$_SESSION["adresse"] = "Paris";

?>

22
Les sessions

 Accès aux données de session

 Pour accéder aux données de session que nous avons définies dans l’exemple ci-dessus depuis
n’importe quelle autre page, il suffit de recréer la session en appelant session_start() puis de
passer la clé correspondante au tableau associatif $_SESSION.
<?php

// Démarrer la session

session_start();

// Accès aux données de session

echo 'Nom : ' . $_SESSION["nom"] . '\n';

echo 'Adresse : ' . $_SESSION["adresse"];


PARTIE 2

?>

23
Les sessions

Détruire une session

 Si vous souhaitez supprimer certaines données de session, il suffit d’indiquer la clé


correspondante du tableau associatif $_SESSION, comme indiqué dans l’exemple suivant :
// Démarrer la session

session_start();

// Suppression des données de session

if(isset($_SESSION["adresse"])){

unset($_SESSION["adresse"]);

 Pour supprimer toutes les variables de session globales et détruire la session, utilisez
session_unset() et session_destroy() :
PARTIE 2

// supprimer toutes les variables de session


session_unset();
// détruire la session
session_destroy();

24
Les sessions

Exemple d’authentification

 Nous allons créer un système de connexion simple en utilisant PHP . Nous allons créer un formulaire
de connexion, ainsi qu’une page d’accueil et un script de déconnexion.

 Créons un autre fichier PHP appelé « auth.php » et y mettons le code d’exemple suivant. Cet
exemple de code va créer un formulaire web qui permet aux utilisateurs de s’authentifier.

<form action="" method="post">


<h1 >S'authentifier</h1>
<input type="text" name="login" placeholder="login" required />
<input type="password" name="password" placeholder="Mot de passe" required />
PARTIE 2

<input type="submit" name="submit" value="S'inscrire" />


</form>

25
Les sessions

Exemple d’authentification

Les entrées seront vérifiées par rapport aux informations d’identification stockées dans la
base de données. Si le nom d’utilisateur et le mot de passe correspondent, l’utilisateur est
autorisé et se voit accorder l’accès au site, sinon la tentative de connexion sera rejetée.
<?php
session_start();
@ $login=$_POST["login"];
@ $mdp=crypt($_POST["password"], '$1$rasmusle$');
@ $submit=$_POST["submit"];
$_SESSION["login"]=$login;
$erreur='';
if (isset($submit)){
if($login=="alae" && $mdp=='$1$rasmusle$uwzLzKVWDEpvbNytWXBmS/'){
PARTIE 2

$_SESSION["autoriser"]="ok";
header("location:accueil.php");//header est une fonction qui renvoie les entêtes http
}else{ $erreur="login ou mot de passe incorrect"; echo $erreur; }
}
?>

26
Les sessions

Exemple d’authentification
Créer la page d’accueil
Voici le code de notre fichier « accueil.php », où l’utilisateur est redirigé après une connexion réussie.

<?php
// Initialiser la session
session_start();
// Vérifiez si l'utilisateur est connecté, sinon redirigez-le vers la page de
connexion
if(!isset($_SESSION["autoriser"])){
header("Location: auth.php");
exit(); //arret prematurer
}
?>
<h1>Bienvenue <?php echo $_SESSION['login']; ?>!</h1>
<p>C'est votre page d'accueil.</p>
PARTIE 2

<a href="deconnection.php">Déconnexion</a>
</div>
</body>
</html>

27
Les sessions

Exemple d’authentification

Créer le script de déconnexion

Maintenant, créons le fichier « deconnection.php ». Lorsque l’utilisateur clique sur le lien de déconnexion, le
script à l’intérieur de ce fichier détruit la session et redirige l’utilisateur vers la page de connexion.

<?php

// Initialiser la session

session_start();

// Détruire la session.

if(session_destroy())

{ // Redirection vers la page de connexion


PARTIE 2

header("Location: auth.php");

?>

28
Connexion à une base de données MySQL
avec PHP PDO

Le SGBD le plus connu pour accompagner le langage PHP est MySQL. Cependant, PHP peut aussi
dialoguer avec plusieurs autres SGBD comme PostgreSQL, Oracle, SQL Server...

jusqu'à la version 5 de PHP, la connexion à une base de données (en particulier MySQL) se faisait d'une
manière transparente grâce à des fonctions du genre mysql_connect(), mysql_select_db(),
mysql_query()... Ces fonctions marchent encore sur les dernières versions PHP5.x (y compris PHP5.6),
mais elles sont rendues obsolètes à partir de PHP5.5. A la sortie de PHP7 elles ont été supprimées.

Bien que ces fonctions marchaient très bien, leurs limites n'ont pas mis beaucoup de temps pour se
PARTIE 2

manifester, en particulier quand on souhaite migrer vers un SGBD autre que MySQL.

29
Connexion à une base de données MySQL
avec PHP PDO

Objet PDO (PHP Data Objects)

PDO signifie PHP Data Objects. Il s'agit d'une interface qui permet au scripts PHP d’interroger une base
de données via des requêtes SQL.

PDO est une extension qui s'ajoute au PHP pour que ses différentes fonctionnalités soient disponibles
dans le langage. Il constitue une interface d'abstraction de la base de données, c'est à dire qu'on peut
utiliser l'ensemble de ses fonctions pour exécuter des requêtes SQL quelque soit le SGBD. Autrement
dit, si l'application Web repose sur le SGBD MySQL, on peut migrer vers le SGBD PostgreSQL sans
modifier le code source (quelques modifications mineurs sont requises).
PARTIE 2

30
Connexion à une base de données MySQL
avec PHP PDO

Objet PDO (PHP Data Objects)

Le bon fonctionnement de PDO repose sur la disponibilité du pilote de la base de données. Il faut que
celui-ci soit pris en charge pour pouvoir interroger le SGBD souhaité.

Pour déclarer le pilote du SBGD MySQL par exemple, il faut aller dans le fichier php.ini et ajouter la
ligne suivante (si elle n'est pas déjà déclarée):

extension = php_pdo_mysql.dll

Notez que la ligne suivante peut aussi figurer:


PARTIE 2

extension = php_pdo.dll

31
Connexion à une base de données MySQL
avec PHP PDO

Création d’une base de données en utilisant PDO

Nous allons pouvoir créer une nouvelle base de données avec PDO en PHP en utilisant la requête SQL CREATE DATABASE
suivie du nom que l’on souhaite donner à notre base de données.

Note : A partir de maintenant, nous allons commencer à découvrir et à utiliser le langage SQL. Comme nous l’avons
expliqué précédemment, nous allons envoyer nos requêtes SQL via PDO en PHP.

Pour exécuter une requête SQL en PDO, nous allons devoir utiliser la méthode exec() qui va prendre en paramètre une
requête SQL.
<?php
$host='localhost';$username = 'root';$password = '';
try{//dsn
$pdo = new PDO("mysql:host=$host", $username, $password);
$sql = "CREATE DATABASE maBase";
$pdo->exec($sql); // PDO::exec() - Exécute une requête SQL et retourne le nombre de lignes affectées
PARTIE 2

echo 'Base de données bien créée !';}

catch(PDOException $e){
echo "Erreur : " . $e->getMessage();
}
?>
32
Connexion à une base de données MySQL
avec PHP PDO

Connexions et gestionnaire de connexion

Les connexions sont établies en créant des instances de la classe de base de PDO. Peu importe quel pilote vous voulez
utiliser ; vous utilisez toujours le nom de la classe PDO. Le constructeur accepte des paramètres pour spécifier la
source de la base de données (connue en tant que DSN) et optionnellement, le nom d'utilisateur et le mot de passe
(s'il y en a un).

<?php

$host = 'localhost';$dbname = 'test';$username = 'root';$password = '';

try { $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);

echo "Connecté à $dbname sur $host avec succès.";

} catch (PDOException $e) {


PARTIE 2

die("Impossible de se connecter à la base de données $dbname :" . $e->getMessage());

?>

33
Connexion à une base de données MySQL
avec PHP PDO

Fermeture d'une connexion

Lorsque la connexion à la base de données a réussi, une instance de la classe PDO est retournée à votre script. La
connexion est active tant que l'objet PDO l'est. Pour clore la connexion, vous devez détruire l'objet en vous assurant
que toutes ses références sont effacées. Vous pouvez faire cela en assignant null à la variable gérant l'objet. Si vous ne
le faites pas explicitement, PHP fermera automatiquement la connexion lorsque le script arrivera à la fin.

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);


// utiliser la connexion ici
$sth = $dbh->query('SELECT * FROM foo');

// et maintenant, fermez-la !
$sth = null;
PARTIE 2

$dbh = null;

34
Connexion à une base de données MySQL
avec PHP PDO

Création d’une table MySQL

Une table de base de données a son propre nom unique et se compose de colonnes et de lignes.

Pour créer une nouvelle table dans une base de données, on utilise l’instruction CREATE TABLE. L’instruction SQL
suivante crée la table « Users »:

CREATE TABLE Users (

id INT(3) UNSIGNED AUTO_INCREMENT PRIMARY KEY,

firstname VARCHAR(50) NOT NULL,

lastname VARCHAR(50) NOT NULL,

address VARCHAR(250)

)
PARTIE 2

Nous exécutons cette instructions SQL pour créer la table « Users » via un outil en ligne de commande ou un outil
d’interface graphique MySQL.

35
Connexion à une base de données MySQL
avec PHP PDO

Création d’une table MySQL avec PDO

Script pour créer une table MySQL avec PDO

$dsn = "mysql:host=$host;dbname=$dbname"; $pdo = new PDO($dsn, $username, $password);

//Nous avons créé une connexion à la base de données MySQL en instanciant une instance
de la classe PDO et en transmettant l’argument $dsn à son constructeur.
//Ensuite, nous avons spécifié l’instruction SQL qui crée la table « Users ».

$sql = "CREATE TABLE Users (


id INT(3) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(50) NOT NULL,
lastname VARCHAR(50) NOT NULL,
address VARCHAR(250)
) ENGINE=InnoDB"
;
PARTIE 2

$msg = '';

$res = $pdo->exec($sql);//Enfin, nous appelons la méthode exec() de la classe PDO


pour exécuter l’instructions SQL.
36
Connexion à une base de données MySQL
avec PHP PDO

Insérer des données dans une table MySQL avec PHP PDO

Le formulaire pour insérer des données dans une table MySQL avec PHP PDO.

<!DOCTYPE html>
<html>
<head>
<title>Insérer des données dans la table Users</title>
</head>
<body>
<form action="process.php" method="post">
<p>Nom: <input type="text" name="firstname"></p>
<p>Prenom:<input type="text" name="lastname"></p>
<p><input type="submit" name="insert" value="Insérer"></p>
</form>
</body>
PARTIE 2

</html>

37
Connexion à une base de données MySQL
avec PHP PDO

Insérer des données dans une table MySQL avec PHP PDO
Script pour insérer des données dans une table MySQL avec PHP PDO
insérer des données dans la table « Users » dans la base de données « test »

<?php
$host = 'localhost';
$dbname = 'test';
$username = 'root';
$password = '';
if(isset($_POST['insert'])){
try {
// se connecter à mysql
$pdo = new PDO("mysql:host=$host;dbname=$dbname","$username","$password");
} catch (PDOException $exc) {
echo $exc->getMessage();
exit();
PARTIE 2

}
// récupérer les valeurs
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];

38
Connexion à une base de données MySQL
avec PHP PDO

Insérer des données dans une table MySQL avec PHP PDO
Script pour insérer des données dans une table MySQL avec PHP PDO
insérer des données dans la table « Users » dans la base de données « test »

// Requête mysql pour insérer des données


$sql = "INSERT INTO `users`(`firstname`, `lastname`) VALUES (:firstname,:lastname)";

//PDO::prepare — Prépare une requête à l'exécution et retourne un objet

$res = $pdo->prepare($sql);

$exec = $res->execute(array(":firstname"=>$firstname,":lastname"=>$lastname));
// vérifier si la requête d'insertion a réussi
if($exec){
echo 'Données insérées';
}else{
PARTIE 2

echo "Échec de l'opération d'insertion";


}
}

39
Connexion à une base de données MySQL
avec PHP PDO

Afficher les données d’une table MySQL avec PHP PDO


interroger toutes les données de la table « Users » dans la base de données « test »
<?php
$host = 'localhost'; $dbname = 'test'; $username = 'root'; $password = '';
$dsn = "mysql:host=$host;dbname=$dbname";
// récupérer tous les utilisateurs
$sql = "SELECT * FROM Users";

try{
$pdo = new PDO($dsn, $username, $password);
//PDO::query() prépare et exécute une requête SQL en un seul appel de fonction,
retournant la requête en tant qu'objet PDOStatement.
$stmt = $pdo->query($sql);

if($stmt === false){


die("Erreur");
PARTIE 2

}
}catch (PDOException $e){
echo $e->getMessage();
}
?>

40
Connexion à une base de données MySQL
avec PHP PDO

Afficher les données d’une table MySQL avec PHP PDO


interroger toutes les données de la table « Users » dans la base de données « test »

Pour toutes les requêtes renvoyant des données autres que le nombre d'enregistrements concernés, nous allons utiliser
query().

Cette fonction ne renvoit pas directement les données prêtes à être affichées mais un sous objet PDO qui dispose de 2
méthodes permettant de manipuler ces données.

Méthode fetchAll() : Toutes les données sont rangées dans un tableau et le SGBD est libéré. Avantage : nous avons toutes
les données d'un coup et pouvons travailler dessus. Inconvénient : toutes les données sont présentes en mémoire.
PARTIE 2

Méthode fetch() : Les résultats sont lus de manière séquentielle, un par un. Avantage : parfait pour traiter des résultats
très nombreux sans surcharger la mémoire. Inconvénient : on ne peut pas faire d'autres requêtes pendant le traitement
de ces résultats.
41
Connexion à une base de données MySQL
avec PHP PDO

Afficher les données d’une table MySQL avec PHP PDO


interroger toutes les données de la table « Users » dans la base de données « test »

PDOStatement::fetch
Récupère une ligne depuis un jeu de résultats associé à l'objet PDOStatement. Le paramètre mode détermine la façon
dont PDO retourne la ligne.

PDO::FETCH_ASSOC: retourne un tableau indexé par le nom de la colonne

<?php while($row = $stmt->fetch(PDO::FETCH_ASSOC)) : ?>


<tr>
<td><?php echo htmlspecialchars($row['id']); ?></td>
<td><?php echo htmlspecialchars($row['firstname']); ?></td>
<td><?php echo htmlspecialchars($row['lastname']); ?></td>
PARTIE 2

</tr>
<?php endwhile; ?>

42
Connexion à une base de données MySQL
avec PHP PDO

Afficher les données d’une table MySQL avec PHP PDO


interroger toutes les données de la table « Users » dans la base de données « test »

PDOStatement::fetchAll— Récupère les lignes restantes d'un ensemble de résultats

<?php
$row = $stmt->fetchAll();

foreach($row as $ligne) {?>

<tr>

<td><?php echo htmlspecialchars($ligne['id']); ?></td>

<td><?php echo htmlspecialchars($ligne['firstname']); ?></td>

<td><?php echo htmlspecialchars($ligne['lastname']); ?></td>


PARTIE 2

</tr>

<?php

} ?>
43
Connexion à une base de données MySQL
avec PHP PDO

Le paramètre mode détermine la façon dont PDO retourne la ligne.

Contrôle comment la prochaine ligne sera retournée à l'appelant. Cette valeur doit être une des constantes
PDO::FETCH_*, et par défaut, vaut la valeur de PDO::ATTR_DEFAULT_FETCH_MODE (qui vaut par défaut la valeur de la
constante PDO::FETCH_BOTH).

PDO::FETCH_ASSOC: retourne un tableau indexé par le nom de la colonne comme retourné dans le jeu de résultats

PDO::FETCH_BOTH (défaut): retourne un tableau indexé par les noms de colonnes et aussi par les numéros de
colonnes, commençant à l'index 0, comme retournés dans le jeu de résultats

PDO::FETCH_BOUND: retourne true et assigne les valeurs des colonnes de votre jeu de résultats dans les variables
PHP à laquelle elles sont liées avec la méthode PDOStatement::bindColumn()

PDO::FETCH_CLASS: retourne une nouvelle instance de la classe demandée, liant les colonnes du jeu de résultats aux
noms des propriétés de la classe et en appelant le constructeur par la suite, sauf si PDO::FETCH_PROPS_LATE est
également donné. Si fetch_style inclut PDO::FETCH_CLASS (c'est-à-dire PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE),
alors le nom de la classe est déterminé à partir d'une valeur de la première colonne.
PARTIE 2

PDO::FETCH_INTO : met à jour une instance existante de la classe demandée, liant les colonnes du jeu de résultats
aux noms des propriétés de la classe

44
Connexion à une base de données MySQL
avec PHP PDO

Le paramètre mode détermine la façon dont PDO retourne la ligne.

PDO::FETCH_LAZY : combine PDO::FETCH_BOTH et PDO::FETCH_OBJ, créant ainsi les noms des variables de l'objet,
comme elles sont accédées

PDO::FETCH_NAMED : retourne un tableau de la même forme que PDO::FETCH_ASSOC, excepté que s'il y a plusieurs
colonnes avec les mêmes noms, la valeur pointée par cette clé sera un tableau de toutes les valeurs de la ligne qui a ce
nom comme colonne

PDO::FETCH_NUM : retourne un tableau indexé par le numéro de la colonne comme elle est retourné dans votre jeu
de résultat, commençant à 0

PDO::FETCH_OBJ : retourne un objet anonyme avec les noms de propriétés qui correspondent aux noms des
colonnes retournés dans le jeu de résultats

PDO::FETCH_PROPS_LATE : lorsqu'il est utilisé avec PDO::FETCH_CLASS, le constructeur de la classe est appelé avant
que les propriétés ne soient assignées à partir des valeurs de colonne respectives.
PARTIE 2

45
Connexion à une base de données MySQL
avec PHP PDO

Mise à jour d’une table MySQL avec PHP PDO

Nous allons utiliser l’instruction SQL UPDATE suivie du nom de la table pour mettre à jour des données dans une table.

Cette instruction va toujours être accompagnée de SET qui va nous servir à préciser la colonne à mettre à jour ainsi
que la nouvelle valeur pour la colonne.

En s’arrêtant là, en effet, nous allons mettre à jour toutes les valeurs d’une colonne d’un coup ! Ce sera très rarement
ce que nous voudrons faire en pratique, et c’est pour cela que nous allons généralement également utiliser la clause
WHERE pour spécifier quelles entrées doivent être mises à jour.
PARTIE 2

46
Connexion à une base de données MySQL
avec PHP PDO

Mise à jour d’une table MySQL avec PHP PDO

$sql = "UPDATE users SET firstname = :firstname,

lastname = :lastname,

address = :address

WHERE id = :id";

$stmt = $pdo->prepare($sql);

// PDOStatement::bindParam — Lie un paramètre à un nom de variable spécifique

// PDOStatement::bindValue — Associe une valeur à un paramètre

$stmt->bindParam(':firstname', $_POST['firstname'], PDO::PARAM_STR);

$stmt->bindParam(':lastname', $_POST['lastname'], PDO::PARAM_STR);


PARTIE 2

$stmt->bindParam(':address', $_POST['address'], PDO::PARAM_STR);

$stmt->bindParam(':id', $_POST['id'], PDO::PARAM_INT);

$stmt->execute();
47
Connexion à une base de données MySQL
avec PHP PDO

Supprimer une ligne d’une table MySQL en PHP PDO

Pour supprimer des données d’une table, nous allons utiliser l’instruction SQL DELETE FROM.

Pour préciser quelles entrées doivent être supprimées, nous allons accompagner DELETE FROM d’une clause WHERE
nous permettant de cibler des données en particulier dans notre table.

$sql = "DELETE FROM utilisateur WHERE lastname='alae1'";


$sth = $pdo->prepare($sql);
$sth->execute();
PARTIE 2

48
Connexion à une base de données MySQL
avec PHP PDO

Modifier la structure d’une table

Pour modifier la structure d’une table en soi, nous allons utiliser l’instruction SQL ALTER TABLE.

Cette commande va nous permettre d’ajouter, de supprimer ou de modifier une colonne dans une table.

Ajouter une colonne dans une table

Pour ajouter une colonne, nous allons également devoir utiliser ADD avec le nom de la colonne à ajouter et le type de
données attendu.

$sql = "
ALTER TABLE Users
ADD DateInscription TIMESTAMP
";
PARTIE 2

$pdo->exec($sql);
echo 'Colonne ajoutée';

49
Connexion à une base de données MySQL
avec PHP PDO

Modifier la structure d’une table

Supprimer une colonne dans une table

Pour maintenant supprimer une colonne dans une table, nous allons cette fois-ci utiliser ALTER TABLE de concert avec
l’instruction DROP COLUMN.

En revanche, il n’y a bien évidemment pas besoin de préciser le type de données de la colonne lorsqu’on souhaite la
supprimer.

$sql = "
ALTER TABLE Users
PARTIE 2

DROP COLUMN DateInscription


";

$pdo->exec($sql);
echo 'Colonne supprimée';

50
Connexion à une base de données MySQL
avec PHP PDO

Modifier la structure d’une table

Modifier une colonne dans une table

Pour finalement modifier le type de donnée d’une colonne dans une table, il faudra utiliser ALTER TABLE avec
l’instruction MODIFY COLUMN

$sql = "
ALTER TABLE Users
MODIFY COLUMN firstname VARCHAR(100)
";

$pdo->exec($sql);
echo 'Colonne modifier';
PARTIE 2

51
Connexion à une base de données MySQL
avec PHP PDO

Copier une table MySQL avec PHP

Pour copier une table dans une autre, ceci peut être fait en MySQL en deux étapes. La première consiste à copier la
structure de la table et la deuxième consiste à remplir les données avec la table d’origine.

$table = 'users';
//Le nom de la nouvelle table.
$newTable = 'utilisateur';
//Copier la structure de la table
$pdo->exec("CREATE TABLE $newTable LIKE $table");
//Copier les données dans la nouvelle table
$pdo->exec("INSERT $newTable SELECT * FROM $table");
PARTIE 2

52
Connexion à une base de données MySQL
avec PHP PDO

Récapitulatif
Dans le contexte de PHP PDO (PHP Data Objects), "exec", "execute" et "query" sont trois méthodes utilisées pour
interagir avec les bases de données.

"exec" est une méthode utilisée pour exécuter une instruction SQL qui ne renvoie pas de données, telle qu'une
instruction INSERT, UPDATE ou DELETE. La méthode renvoie le nombre de lignes affectées par l'instruction exécutée.

"execute" est une méthode utilisée pour exécuter une instruction SQL qui peut ou non renvoyer des données, telle
qu'une instruction SELECT ou un appel de procédure stockée. La méthode prépare l'instruction pour l'exécution, lie
tous les paramètres, puis exécute l'instruction. La méthode renvoie un objet PDOStatement qui peut être utilisé pour
récupérer toutes les lignes résultantes.

"query" est une méthode utilisée pour exécuter une instruction SQL SELECT qui renvoie une ou plusieurs lignes de
données. La méthode prépare l'instruction pour l'exécution et l'exécute. La méthode renvoie un objet PDOStatement
PARTIE 2

qui peut être utilisé pour récupérer les lignes résultantes.

En résumé, "exec" est utilisé pour les instructions SQL qui ne renvoient pas de données, "execute" est utilisé pour les
instructions SQL qui peuvent ou non renvoyer des données, et "query" est utilisé spécifiquement pour les instructions
SQL SELECT qui renvoient des données.
53
TP

Exercice 1

Un Objet Simple Etudiant en PHP


Fabriquons maintenant un objet simple en PHP. Ecrivons un objet représentant un étudiant avec ses
données:
•identifiant
•nom
•date de naissance
et des méthodes pour opérer sur ces données:
•constructeur
•getters et setters
•equals()
PARTIE 2

•toString() pour affichage

54
TP

Exercice 2

Créer uns classe compteBancaire comptes bancaires avec les attributs suivant:
devise, solde et titulaire.

Créez toutes les méthodes nécessaires (getter setter _toSting…) y compris un constructeurs avec paramètres
__construct($devise, $solde, $titulaire).

Ensuite définir la classe CompteEpargne qui hérite de la classe CompteBancaire.


Enfin créer la classe Test.php pour tester toutes les méthodes.
PARTIE 2

55
TP Exercice 3

Authentification via une base de données en PHP

On aura donc besoin des pages suivantes:


• inscription.php: qui permet à l'utilisateur de créer un compte. Cette page contient un formulaire avec les
champs: nom, prenom, login, mot de passe, confirmation de mot de passe et un bouton d'envoi.
• login.php: qui authentifie l'utilisateur. Elle contient un formulaire renfermant une zone de texte, une zone de
mot de passe et un bouton d'envoi.
• session.php: qui représente la page à accès limité. Aucun visiteur n'a le droit de voir son contenu s'il n a pas
été authentifié par la page login.php.
• deconnexion.php: est la page qui permet de déconnecter le client (détruire la session) et rediriger le
navigateur vers la page login.php.
• connexion.php: qui contient la chaîne de connexion.
PARTIE 2

Lors de l'inscription, aucun champ ne doit être laissé vide et les champs "mot de passe" et "confirmation de
mot de passe" doivent être identiques. Si tous les champs sont valides, on vérifie d'abord si le login n'existe
pas déjà dans la base de donnée. Si non alors les informations de l'utilisateur seront placées dans la table
"utilisateurs"
56
PARTIE 2

57

Vous aimerez peut-être aussi