<?php
2 Pierre Faure - pierrefaure.me
Plan de la présentation
1. Les bases de données : MySQL
a. Principe
b. phpMyAdmin
c. Interagir avec une BDD
2. Les fonctio...
1.Les bases de données : MySQL
a.Principe
Photo par closet factory. license CC BY-ND : https://creativecommons.org/license...
1.Les bases de données : MySQL
a.Principe
La base de donnée contient des tables 

Les tables sont organisées sous forme de...
Lier deux tables avec un identifiant
id f_name l_name birth
1
36754
David Axmark 1962-04-28
website
http://…
http://…Rasmu...
id et user_id, quelle différence ?
id f_name l_name birth
1
36754
David Axmark 1962-04-28
website
http://…
http://…Rasmus ...
1.Les bases de données : MySQL
b.phpMyAdmin
Pierre Faure - pierrefaure.me
b.phpMyAdmin : onglet Bases de données
Les bases de données
utf8_general_ci
Créer une base de données
Pierre Faure - pierr...
b.phpMyAdmin : à l’intérieur de base_de_donnee3
Les tables de la BDD
Créer une table
Pierre Faure - pierrefaure.me
b.phpMyAdmin : à l’intérieur de la table vehicles
Les colonnes
b.phpMyAdmin : l’onglet structure
Nom : Nom assigné à la colonne de la table

Type : Type des données à l’intérieur de la ...
b.phpMyAdmin : syntaxe des noms
Ne jamais utiliser de tiret - dans les noms de vos BDD,
de vos tables ou de vos colonnes
U...
b.phpMyAdmin : créer une table
Créons une table posts
Contenant les colonnes id, title, content, date
Pierre Faure - pierr...
b.phpMyAdmin : type & taille d’une colonne
Pierre Faure - pierrefaure.me
b.phpMyAdmin : type & taille d’une colonne
Les types les plus fréquents
INT : valeurs numériques entre 0 et 4,294,967,295
...
b.phpMyAdmin : La valeur par défaut
Défaut : Valeur par défaut lors de l’insertion
CURRENT_TIMESTAMP : Date & heure du ser...
b.phpMyAdmin : L’interclassement
utf8_general_ci : Suffisant pour les langues telles que le français et l’anglais
utf8_uni...
b.phpMyAdmin : Attribut > UNSIGNED
Attributs > UNSIGNED : Les valeurs stockées seront supérieures à 0
Pierre Faure - pierr...
b.phpMyAdmin : NULL
Null : Non = La valeur ne peut pas être inexistante
‘‘Une valeur vide n’est pas similaire/égale à une ...
b.phpMyAdmin : Index > PRIMARY
Index PRIMARY : clé primaire & unique de la table « id »
Pierre Faure - pierrefaure.me
b.phpMyAdmin : Auto Incrémentation
A_I (Auto_Increment) : +1 automatiquement lorsqu’une donnée est ajoutée
Pierre Faure - ...
b.phpMyAdmin : Le moteur de stockage
Pierre Faure - pierrefaure.me
b.phpMyAdmin : Le moteur de stockage
INNODB :
- Plus flexible avec les identifiants (clés étrangères)

- Utilisé pour les ...
1.Les bases de données : MySQL
c. Interagir avec une BDD
The Wolf of Wall Street
Pierre Faure - pierrefaure.me
c. Interagir avec une BDD : Se connecter
PDO
Pierre Faure - pierrefaure.me
c. Interagir avec une BDD : Se connecter
PDO
Est le procédé conseillé par PHP pour se connecter aux bases de données
Perme...
c. Interagir avec une BDD : Se connecter
$host = 'localhost';
$dbname = '';
$user = 'root';
$pass = '';
$db = new PDO('mys...
SELECT
INSERT
UPDATE
DELETE
c. Interagir avec une BDD : Requêtes
Pierre Faure - pierrefaure.me
Construction d’une requête
id f_name l_name birth
1
36754
David Axmark 1962-04-28
website
http://…
http://…Rasmus 1968-11-...
Envoi et traitement d’une requête
$req = $db->prepare($sql);

$req->execute();
Envoi de la requête au serveur

Exécution d...
Traduction du résultat de MySQL pour PHP : fetchAll
$req = $db->prepare($sql);

$req->execute();
Envoi de la requête au se...
Pour résumer
$req = $db->prepare($sql);

$req->execute();
$sql = 'SELECT * FROM users';1
2
$result = $req->fetchAll();3
$d...
SELECT
Type de requête
SELECT
Destination
FROM
Conditions
WHERE et AND / OR

LIMIT 

GROUP BY

ORDER BY

...
Construction ...
SELECT * FROM users WHERE age > 18 AND sex = 0 ORDER BY f_name LIMIT 20
SELECT
Les requêtes préparées
SELECT * FROM users ...
id f_name l_name birth
1
36754
David Axmark 1962-04-28
website
http://…
http://…Rasmus 1968-11-22Lerdorf
users
$sql = "SEL...
Array(
[0] => Array(
[id] => 1
[f_name] => David
[l_name] => Axmark
[birth] => 1962-04-28

[website] => http://www.mysql.c...
id f_name l_name birth
1
36754
David Axmark 1962-04-28
website
http://…
http://…Rasmus 1968-11-22Lerdorf
users
$sql = "SEL...
Array(
[0] => Array(
[f_name] => David
[l_name] => Axmark
)
[1] => Array(
[f_name] => Rasmus
[l_name] => Lerdorf
)
)
var_d...
id f_name l_name birth
1
36754
David Axmark 1962-04-28
website
http://…
http://…Rasmus 1968-11-22Lerdorf
users


$sql = "S...
Array(
[0] => Array(
[id] => 1
[f_name] => David
[l_name] => Axmark
[birth] => 1962-04-28

[website] => http://www.mysql.c...
SELECT
INSERT
UPDATE
DELETE
c. Interagir avec une BDD : Requêtes
Pierre Faure - pierrefaure.me
INSERT
Construction d’une requête
id f_name l_name birth
1
36754
David Axmark 1962-04-28
website
http://…
http://…Rasmus 1...
INSERT
1
$req = $db->prepare($sql);
$req->execute(array(
':fnm' => 'Mark',
':lnm' => 'Zuckerberg',
':birth' => '1984-05-14...
INSERT
Pour résumer
On ajoute Mark Zuckerberg à la base de données
1
$db = new PDO(...); Connexion à la base de données0
N...
SELECT
INSERT
UPDATE
DELETE
c. Interagir avec une BDD : Requêtes
Pierre Faure - pierrefaure.me
Construction d’une requête
id f_name l_name birth
1
36754
David Axmark 1962-04-28
website
http://…
http://…Rasmus 1968-11-...
$sql = "UPDATE users SET f_name = :newnm WHERE id = 1";1
UPDATE
Modification du prénom par Pierre pour l’utilisateur ayant...
Pour résumer
$sql = "UPDATE users SET f_name = :newnm WHERE id = 1";1
UPDATE
Modification du prénom par Pierre pour l’util...
SELECT
INSERT
DELETE
c. Interagir avec une BDD : Requêtes
UPDATE
Pierre Faure - pierrefaure.me
Construction d’une requête
id f_name l_name birth
1
36754
David Axmark 1962-04-28
website
http://…
http://…Rasmus 1968-11-...
$sql = "DELETE FROM users WHERE id = 1";1
DELETE
Suppression de l’utilisateur ayant l’id 1
$req = $db->prepare($sql);

$re...
Pour résumer
$sql = "DELETE FROM users WHERE id = 1";1
DELETE
Suppression de l’utilisateur ayant l’id 1
$req = $db->prepar...
JOINTURES SQL
t1 t2 t2t1
t2t1
t2t1 t2t1
SELECT * 

FROM t1 

LEFT JOIN t2 

ON t1.key = t2.key
SELECT * 

FROM t1 

RIGHT ...
COLLE
2.Les fonctions
On peut comparer une fonction à une machine 

qui effectue toujours les mêmes actions
a.La machine à...
2.Les fonctions
Rappels
Une fonction effectue une ou plusieurs actions et retourne un résultat
function validPassword($pas...
2.Les fonctions
Avec MySQL : supprimer un article
$host = 'localhost';
$dbname = '';
$user = 'root';
$pass = '';
$db = new...
2.Les fonctions
Les fonctions proposées par PHP
isset(); est définie
empty(); est vide
!empty(); n’est pas vide
explode();...
3.Le Modèle MVC
M V CO

D

È
L
E
U

E
O

N

T

R

Ô

L

E

U

R
Pierre Faure - pierrefaure.me
3.Le Modèle MVC
a.Principe
MODÈLE
VUE
CONTRÔLEUR
Contient la plupart de votre code PHP, les fonctions, les requêtes SQL …
...
b.Mise en pratique
monsite Dossier racine
Contrôleur
Configurations (BDD …)
fonctions, requêtes …
fichiers html, images …
...
b.Mise en pratique
index.php
index.html
function.php
include 'config/db.php';


CONTRÔLEUR
MODÈLE
VUE
db.php
Connexion
à
l...
4.Quelques trucs à savoir
Pierre Faure - pierrefaure.me
4.Quelques trucs à savoir
a.$_FILES et $_POST
&
Pierre Faure - pierrefaure.me
a.$_FILES
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="image">
<input type="submi...
a.$_FILES
1 Choix de l’image via le bouton Parcourir … L’image est chez vous
L’image est temporairement 

sur le serveur
2...
a.$_FILES
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="image">
<input type="submi...
a.$_FILES et $_POST
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="image">
<textare...
4.Quelques trucs à savoir
b.$_SESSION
$_SESSION
accueil profil article
‘’En changeant de page, restez connecté grâce à la ...
b.$_SESSION : initialisation
session_start(); permet d’initialiser une nouvelle SESSION 

Il doit se situer sur chaque pag...
$_SESSION['username'] = 'Pierre';
$_SESSION['email'] = 'mail@example.com';
$_SESSION['profil-picture'] = 'profil.jpg';
var...
b.$_SESSION : se déconnecter
Savoir détruire une SESSION peut s’avérer utile lorsque par exemple, 

un utilisateur se déco...
4.Quelques trucs à savoir
c.L’indentation
Pierre Faure - pierrefaure.me
c.L’indentation
if(){
}
}
}
}
if(){
else{
for($i=0;$i<10;$i++){
Pour le PHP
Pierre Faure - pierrefaure.me
c.L’indentation
<div id="content">
</div>
</ul>
</li>
</div>
<div id="header">
<ul id="list">
<li>
Pour le HTML
Pierre Fau...
c.L’indentation
<div id="content">
</div>
}
</div>
</div>
<div id="header">
if{
<div id="connected">
Pour le HTML et le PH...
4.Quelques trucs à savoir
d.HTML et PHP
</> <?>&
Pierre Faure - pierrefaure.me
4.Quelques trucs à savoir
d.HTML et PHP
<div id="content">
<ul id="account">
<?php
if($connected == true){
echo '<li>Bienv...
?>
Pierre Faure - pierrefaure.me
Made by Pierre Faure

Check out my blog: pierrefaure.me
A big thanks to the noun project for the icons
Fonts: Courier Prim...
Prochain SlideShare
Chargement dans…5
×

Php 2 - Approfondissement MySQL, PDO et MVC

1 354 vues

Publié le

Introduction au langage de programmation PHP.
Présentation réalisée la première fois le lundi 10 mars 2014 à l'IIM : Institut de l'Internet et du Multimédia pour les années préparatoires.

Cette présentation a pour but d'approfondir les compétences PHP des élèves : utiliser des bases de données, comprendre PDO et le modèle MVC (basique).

Après présentation orale de ces slides, des exercices de mise en pratique ont été réalisés en Atelier avec les élèves.
L'exercice principal était de construire une plateforme similaire à twitter selon un modèle MVC.

Voici le plan de la présentation :
• Les bases de données : MySQL
- Principe
- phpMyAdmin
- Interagir avec une BDD
• Les fonctions
- La machine à carottes
- Exemple avec MySQL
- Les fonctions PHP
• Modèle Vue Contrôleur - MVC
- Principe
- Mise en pratique
• Quelques trucs à savoir a.$_FILES et $_POST
- $_SESSION
- L’indentation
- PHP + HTML = ?

Publié dans : Ingénierie
0 commentaire
5 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 354
Sur SlideShare
0
Issues des intégrations
0
Intégrations
6
Actions
Partages
0
Téléchargements
163
Commentaires
0
J’aime
5
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Php 2 - Approfondissement MySQL, PDO et MVC

  1. 1. <?php 2 Pierre Faure - pierrefaure.me
  2. 2. Plan de la présentation 1. Les bases de données : MySQL a. Principe b. phpMyAdmin c. Interagir avec une BDD 2. Les fonctions a. La machine à carottes b. Exemple avec MySQL c. Les fonctions PHP 3. Modèle Vue Contrôleur - MVC a. Principe b. Mise en pratique 4. Quelques trucs à savoir a. $_FILES et $_POST b. $_SESSION c. L’indentation d. PHP + HTML = ? Pierre Faure - pierrefaure.me
  3. 3. 1.Les bases de données : MySQL a.Principe Photo par closet factory. license CC BY-ND : https://creativecommons.org/licenses/by-nd/2.0/deed.fr ‘‘Une base de donnée est comparable à un placard extensible et modulable
  4. 4. 1.Les bases de données : MySQL a.Principe La base de donnée contient des tables 
 Les tables sont organisées sous forme de tableau id f_name l_name birth 1 36754 David Axmark 1962-04-28 website http://… http://…Rasmus 1968-11-22Lerdorf users Pierre Faure - pierrefaure.me
  5. 5. Lier deux tables avec un identifiant id f_name l_name birth 1 36754 David Axmark 1962-04-28 website http://… http://…Rasmus 1968-11-22Lerdorf users id name user_id 10 476 MySQL 1 PHP 36754 tools user_id peut également
 s’intituler clé étrangère ou foreign key (FK) Pierre Faure - pierrefaure.me
  6. 6. id et user_id, quelle différence ? id f_name l_name birth 1 36754 David Axmark 1962-04-28 website http://… http://…Rasmus 1968-11-22Lerdorf users id name user_id 10 476 MySQL 1 PHP 36754 tools id est un identifiant unique 
 user_id permet de lier des données 477 PHP 2 36754 Dans user_id, "user" fair référence au nom de la table liée Pierre Faure - pierrefaure.me
  7. 7. 1.Les bases de données : MySQL b.phpMyAdmin Pierre Faure - pierrefaure.me
  8. 8. b.phpMyAdmin : onglet Bases de données Les bases de données utf8_general_ci Créer une base de données Pierre Faure - pierrefaure.me
  9. 9. b.phpMyAdmin : à l’intérieur de base_de_donnee3 Les tables de la BDD Créer une table Pierre Faure - pierrefaure.me
  10. 10. b.phpMyAdmin : à l’intérieur de la table vehicles Les colonnes
  11. 11. b.phpMyAdmin : l’onglet structure Nom : Nom assigné à la colonne de la table
 Type : Type des données à l’intérieur de la colonne
 Interclassement : Encodage 
 Attributs > UNSIGNED : Les valeurs seront supérieures à 0
 Null : Non = La valeur ne peut pas être inexistante (vide est différent de null)
 Défaut : Valeur par défaut de la cellule
 Extra > AUTO_INCREMENT : +1 automatiquement lorsqu’une donnée est ajoutée
 Action : Opérations réalisables Pierre Faure - pierrefaure.me
  12. 12. b.phpMyAdmin : syntaxe des noms Ne jamais utiliser de tiret - dans les noms de vos BDD, de vos tables ou de vos colonnes Utilisez underscore _ à la place Pierre Faure - pierrefaure.me
  13. 13. b.phpMyAdmin : créer une table Créons une table posts Contenant les colonnes id, title, content, date Pierre Faure - pierrefaure.me
  14. 14. b.phpMyAdmin : type & taille d’une colonne Pierre Faure - pierrefaure.me
  15. 15. b.phpMyAdmin : type & taille d’une colonne Les types les plus fréquents INT : valeurs numériques entre 0 et 4,294,967,295 VARCHAR(*) : valeurs entre 0 et 65,535 caractères (255 anciennes versions de MySQL) TEXT : valeurs entre 0 et 65,535 caractères 
 MEDIUMTEXT : valeurs entre 0 et 16,777,215 caractères TIMESTAMP : Date au format : AAAA-MM-JJ HH:MM:SS DATETIME : Date au format : AAAA-MM-JJ HH:MM:SS DATE : Date au format : AAAA-MM-JJ TIMESTAMP, ajouts et mises à jour - date d’ajout/modification d’un article/commentaire/message …
 DATETIME, date spécifique - Événements : anniversaire… | Ne fonctionne pas avec les fuseaux horaires des serveurs (*) Vous devez obligatoirement spécifier une valeur Pierre Faure - pierrefaure.me
  16. 16. b.phpMyAdmin : La valeur par défaut Défaut : Valeur par défaut lors de l’insertion CURRENT_TIMESTAMP : Date & heure du serveur Pierre Faure - pierrefaure.me
  17. 17. b.phpMyAdmin : L’interclassement utf8_general_ci : Suffisant pour les langues telles que le français et l’anglais utf8_unicode_ci : Pour les langues comme l’allemand, le russe … Pierre Faure - pierrefaure.me
  18. 18. b.phpMyAdmin : Attribut > UNSIGNED Attributs > UNSIGNED : Les valeurs stockées seront supérieures à 0 Pierre Faure - pierrefaure.me
  19. 19. b.phpMyAdmin : NULL Null : Non = La valeur ne peut pas être inexistante ‘‘Une valeur vide n’est pas similaire/égale à une valeur NULL Pierre Faure - pierrefaure.me
  20. 20. b.phpMyAdmin : Index > PRIMARY Index PRIMARY : clé primaire & unique de la table « id » Pierre Faure - pierrefaure.me
  21. 21. b.phpMyAdmin : Auto Incrémentation A_I (Auto_Increment) : +1 automatiquement lorsqu’une donnée est ajoutée Pierre Faure - pierrefaure.me
  22. 22. b.phpMyAdmin : Le moteur de stockage Pierre Faure - pierrefaure.me
  23. 23. b.phpMyAdmin : Le moteur de stockage INNODB : - Plus flexible avec les identifiants (clés étrangères)
 - Utilisé pour les applications bancaires MyISAM :
 - Plus rapide pour des sites classiques (Insertion et lecture de données)
 - Les requêtes de recherche s’effectuent plus rapidement On utilisera INNODB cette semaine Pierre Faure - pierrefaure.me
  24. 24. 1.Les bases de données : MySQL c. Interagir avec une BDD The Wolf of Wall Street Pierre Faure - pierrefaure.me
  25. 25. c. Interagir avec une BDD : Se connecter PDO Pierre Faure - pierrefaure.me
  26. 26. c. Interagir avec une BDD : Se connecter PDO Est le procédé conseillé par PHP pour se connecter aux bases de données Permet d’interagir plus simplement avec MySQL, Oracle, PostgreSQL … Pierre Faure - pierrefaure.me
  27. 27. c. Interagir avec une BDD : Se connecter $host = 'localhost'; $dbname = ''; $user = 'root'; $pass = ''; $db = new PDO('mysql:host='.$host.';dbname='.$dbname, $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); PDO  $pass = 'root'; Pierre Faure - pierrefaure.me
  28. 28. SELECT INSERT UPDATE DELETE c. Interagir avec une BDD : Requêtes Pierre Faure - pierrefaure.me
  29. 29. Construction d’une requête id f_name l_name birth 1 36754 David Axmark 1962-04-28 website http://… http://…Rasmus 1968-11-22Lerdorf users $sql = 'SELECT * FROM users'; Sélectionner toutes les données de la table users1 SELECT Pierre Faure - pierrefaure.me
  30. 30. Envoi et traitement d’une requête $req = $db->prepare($sql);
 $req->execute(); Envoi de la requête au serveur
 Exécution de la requête $sql = 'SELECT * FROM users'; Sélectionner toutes les données de la table users1 2 SELECT Pierre Faure - pierrefaure.me
  31. 31. Traduction du résultat de MySQL pour PHP : fetchAll $req = $db->prepare($sql);
 $req->execute(); Envoi de la requête au serveur
 Exécution de la requête $sql = 'SELECT * FROM users'; Sélectionner toutes les données de la table users1 2 $result = $req->fetchAll(); On stock le résultat de la requête dans $result3 Pourquoi une traduction ? Car MySQL peut communiquer avec d’autres langages comme Ruby, Python … 
 Il faut donc traduire le résultat pour PHP SELECT fetchAll() permet de convertir le résultat en tableau. Il joue un rôle de traducteur fetchAll(PDO::FETCH_ASSOC) le tableau sera associatif Pierre Faure - pierrefaure.me
  32. 32. Pour résumer $req = $db->prepare($sql);
 $req->execute(); $sql = 'SELECT * FROM users';1 2 $result = $req->fetchAll();3 $db = new PDO(...); Connexion à la base de données0 Ne pas oublier de se connecter une seule fois au tout début du script Sélectionner toutes les données de la table users On stock le résultat de la requête dans $result Envoi de la requête au serveur
 Exécution de la requête SELECT Pierre Faure - pierrefaure.me
  33. 33. SELECT Type de requête SELECT Destination FROM Conditions WHERE et AND / OR
 LIMIT 
 GROUP BY
 ORDER BY
 ... Construction d’une requête SELECT * FROM users WHERE age > 18 AND sex = 0 ORDER BY f_name LIMIT 20 Sélectionner toutes les colonnes de la table users où l’âge est supérieur à 18 et le sexe est masculin, les classer par prénom, limiter à 20 lignes age, sex et f_name sont des colonnes de la table users Pierre Faure - pierrefaure.me
  34. 34. SELECT * FROM users WHERE age > 18 AND sex = 0 ORDER BY f_name LIMIT 20 SELECT Les requêtes préparées SELECT * FROM users WHERE age > :ag AND sex = :sx ORDER BY f_name LIMIT 20 $req = $db->prepare($sql);
 $req->execute(array( ':ag' => $age, ':sx' => $sex )); $sql = ' '; Passer les paramètres dans le « execute » permet d’éviter les injections SQL « prepare » est également très utile lorsqu’on « execute » plusieurs fois de suite la même requête et que les paramètres sont différents d’une fois à l’autre Pierre Faure - pierrefaure.me
  35. 35. id f_name l_name birth 1 36754 David Axmark 1962-04-28 website http://… http://…Rasmus 1968-11-22Lerdorf users $sql = "SELECT * FROM users"; $req = $db->prepare($sql);
 $req->execute(); $result = $req->fetchAll(PDO::FETCH_ASSOC); Pour sélectionner toutes les données de la table users SELECT Pierre Faure - pierrefaure.me
  36. 36. Array( [0] => Array( [id] => 1 [f_name] => David [l_name] => Axmark [birth] => 1962-04-28
 [website] => http://www.mysql.com/ ) [1] => Array( [id] => 36754 [f_name] => Rasmus [l_name] => Lerdorf [birth] => 1968-11-22
 [website] => http://php.net ) ) var_dump($result); Que contient $result ? Un tableau ! SELECT Pierre Faure - pierrefaure.me
  37. 37. id f_name l_name birth 1 36754 David Axmark 1962-04-28 website http://… http://…Rasmus 1968-11-22Lerdorf users $sql = "SELECT f_name, l_name FROM users"; $req = $db->prepare($sql);
 $req->execute(); $result = $req->fetchAll(PDO::FETCH_ASSOC); Pour sélectionner uniquement les prénoms et noms de la table users SELECT Pierre Faure - pierrefaure.me
  38. 38. Array( [0] => Array( [f_name] => David [l_name] => Axmark ) [1] => Array( [f_name] => Rasmus [l_name] => Lerdorf ) ) var_dump($result); Que contient $result ? Un tableau ! SELECT Pierre Faure - pierrefaure.me
  39. 39. id f_name l_name birth 1 36754 David Axmark 1962-04-28 website http://… http://…Rasmus 1968-11-22Lerdorf users 
 $sql = "SELECT * FROM users WHERE f_name = :fnm "; $req = $db->prepare($sql);
 $req->execute(array(':fnm' => $f_name)); $result = $req->fetchAll(PDO::FETCH_ASSOC); Pour sélectionner toutes les données de la table users qui ont pour f_name David SELECT $f_name = 'David'; Pierre Faure - pierrefaure.me
  40. 40. Array( [0] => Array( [id] => 1 [f_name] => David [l_name] => Axmark [birth] => 1962-04-28
 [website] => http://www.mysql.com/ ) ) var_dump($result); Que contient $result ? Encore un tableau ! SELECT Pierre Faure - pierrefaure.me
  41. 41. SELECT INSERT UPDATE DELETE c. Interagir avec une BDD : Requêtes Pierre Faure - pierrefaure.me
  42. 42. INSERT Construction d’une requête id f_name l_name birth 1 36754 David Axmark 1962-04-28 website http://… http://…Rasmus 1968-11-22Lerdorf users $sql = "INSERT INTO users SET f_name = :fnm, l_name = :lnm, birth = :birth, website = :wsite)"; 1 On ajoute Mark Zuckerberg à la base de données Pierre Faure - pierrefaure.me
  43. 43. INSERT 1 $req = $db->prepare($sql); $req->execute(array( ':fnm' => 'Mark', ':lnm' => 'Zuckerberg', ':birth' => '1984-05-14', ':wsite' => 'http://facebook.com' )); Envoi de la requête au serveur
 Exécution de la requête 2 On ajoute Mark Zuckerberg à la base de données Envoi et traitement d’une requête $sql = "INSERT INTO users SET f_name = :fnm, l_name = :lnm, birth = :birth, website = :wsite)"; Pierre Faure - pierrefaure.me
  44. 44. INSERT Pour résumer On ajoute Mark Zuckerberg à la base de données 1 $db = new PDO(...); Connexion à la base de données0 Ne pas oublier de se connecter une seule fois au tout début du script $req = $db->prepare($sql); $req->execute(array( ':fnm' => 'Mark', ':lnm' => 'Zuckerberg', ':birth' => '1984-05-14', ':wsite' => 'http://facebook.com' )); Envoi de la requête au serveur
 Exécution de la requête 2 $sql = "INSERT INTO users SET f_name = :fnm, l_name = :lnm, birth = :birth, website = :wsite)"; Pierre Faure - pierrefaure.me
  45. 45. SELECT INSERT UPDATE DELETE c. Interagir avec une BDD : Requêtes Pierre Faure - pierrefaure.me
  46. 46. Construction d’une requête id f_name l_name birth 1 36754 David Axmark 1962-04-28 website http://… http://…Rasmus 1968-11-22Lerdorf users $sql = "UPDATE users SET f_name = :newnm WHERE id = 1";1 UPDATE Modification du prénom par Pierre pour l’utilisateur ayant l’id 1 Pierre Faure - pierrefaure.me
  47. 47. $sql = "UPDATE users SET f_name = :newnm WHERE id = 1";1 UPDATE Modification du prénom par Pierre pour l’utilisateur ayant l’id 1 $req = $db->prepare($sql);
 $req->execute(array(':newnm' => 'Pierre')); Envoi de la requête au serveur
 Exécution de la requête 2 Envoi et traitement d’une requête Pierre Faure - pierrefaure.me
  48. 48. Pour résumer $sql = "UPDATE users SET f_name = :newnm WHERE id = 1";1 UPDATE Modification du prénom par Pierre pour l’utilisateur ayant l’id 1 2 $db = new PDO(...); Connexion à la base de données0 Ne pas oublier de se connecter une seule fois au tout début du script $req = $db->prepare($sql);
 $req->execute(array(':newnm' => 'Pierre')); Envoi de la requête au serveur
 Exécution de la requête Pierre Faure - pierrefaure.me
  49. 49. SELECT INSERT DELETE c. Interagir avec une BDD : Requêtes UPDATE Pierre Faure - pierrefaure.me
  50. 50. Construction d’une requête id f_name l_name birth 1 36754 David Axmark 1962-04-28 website http://… http://…Rasmus 1968-11-22Lerdorf users $sql = "DELETE FROM users WHERE id = 1";1 Suppression de l’utilisateur ayant l’id 1 DELETE Pierre Faure - pierrefaure.me
  51. 51. $sql = "DELETE FROM users WHERE id = 1";1 DELETE Suppression de l’utilisateur ayant l’id 1 $req = $db->prepare($sql);
 $req->execute(); Envoi de la requête au serveur
 Exécution de la requête 2 Envoi et traitement d’une requête Pierre Faure - pierrefaure.me
  52. 52. Pour résumer $sql = "DELETE FROM users WHERE id = 1";1 DELETE Suppression de l’utilisateur ayant l’id 1 $req = $db->prepare($sql);
 $req->execute(); Envoi de la requête au serveur
 Exécution de la requête 2 $db = new PDO(...); Connexion à la base de données0 Ne pas oublier de se connecter une seule fois au tout début du script Pierre Faure - pierrefaure.me
  53. 53. JOINTURES SQL t1 t2 t2t1 t2t1 t2t1 t2t1 SELECT * 
 FROM t1 
 LEFT JOIN t2 
 ON t1.key = t2.key SELECT * 
 FROM t1 
 RIGHT JOIN t2 
 ON t1.key = t2.key SELECT * 
 FROM t1 
 FULL OUTER JOIN t2 
 ON t1.key = t2.key SELECT * 
 FROM t1 
 FULL OUTER JOIN t2 
 ON t1.key = t2.key
 WHERE t1.key IS NULL OR t2.key IS NULL SELECT * 
 FROM t1 
 INNER JOIN t2 
 ON t1.key = t2.key Soit t1 et t2, deux tables pouvant être reliées l’une à l’autre grâce à des clés étrangères Modèle original : C.L. Moffatt Pierre Faure - pierrefaure.me
  54. 54. COLLE 2.Les fonctions On peut comparer une fonction à une machine 
 qui effectue toujours les mêmes actions a.La machine à carottes Les paramètres Le résultat : return Pierre Faure - pierrefaure.me
  55. 55. 2.Les fonctions Rappels Une fonction effectue une ou plusieurs actions et retourne un résultat function validPassword($pass){
 if(strlen($pass) > 4){ return true; } else{ return false; }
 } Si la longueur du mot de passe est supérieure à 4 On renvoie true Sinon On renvoie false validPassword('1234'); false validPassword('12345'); true Pierre Faure - pierrefaure.me
  56. 56. 2.Les fonctions Avec MySQL : supprimer un article $host = 'localhost'; $dbname = ''; $user = 'root'; $pass = ''; $db = new PDO('mysql:host='.$host.';dbname='.$dbname, $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); function deletePost($db, $id){ $sql = "DELETE FROM posts WHERE id = :id"; $req = $db->prepare($sql); $req->execute(array(':id' => $id)); } deletePost($db, 1); Pierre Faure - pierrefaure.me
  57. 57. 2.Les fonctions Les fonctions proposées par PHP isset(); est définie empty(); est vide !empty(); n’est pas vide explode(); coupe une chaîne de caractère Liste de l’ensemble des fonctions sur http://php.net/ Pierre Faure - pierrefaure.me
  58. 58. 3.Le Modèle MVC M V CO
 D
 È L E U
 E O
 N
 T
 R
 Ô
 L
 E
 U
 R Pierre Faure - pierrefaure.me
  59. 59. 3.Le Modèle MVC a.Principe MODÈLE VUE CONTRÔLEUR Contient la plupart de votre code PHP, les fonctions, les requêtes SQL … Contient vos pages HTML avec peu de PHP (boucles, conditions …) Fais la liaison entre le modèle et la vue, il permet d’initialiser la logique de votre code avec 
 des « include » et des vérifications basiques (utilisateur authentifié, connexion à la BDD …) Pierre Faure - pierrefaure.me
  60. 60. b.Mise en pratique monsite Dossier racine Contrôleur Configurations (BDD …) fonctions, requêtes … fichiers html, images … config model view index.php css img js index.html Pierre Faure - pierrefaure.me
  61. 61. b.Mise en pratique index.php index.html function.php include 'config/db.php'; 
 CONTRÔLEUR MODÈLE VUE db.php Connexion à la BDD include 'model/function.php'; include 'view/index.html';
  62. 62. 4.Quelques trucs à savoir Pierre Faure - pierrefaure.me
  63. 63. 4.Quelques trucs à savoir a.$_FILES et $_POST & Pierre Faure - pierrefaure.me
  64. 64. a.$_FILES <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="image"> <input type="submit"> </form> var_dump($_FILES['image']); array(5) { ["name"]=> string(53) "screenshot.png" ["type"]=> string(9) "image/png" ["tmp_name"]=> string(36) "/tmp/php/php70mcrk" ["error"]=>int(0) ["size"]=>int(115383) } Pierre Faure - pierrefaure.me
  65. 65. a.$_FILES 1 Choix de l’image via le bouton Parcourir … L’image est chez vous L’image est temporairement 
 sur le serveur 2 Verifications diverses Extension : strrchr() Type MIME : $_FILES["file"]["type"]
 Taille : getimagesize() 3 Déplacer l’image dans le dossier de votre choix
 avec le nom désiré move_uploaded_file() L’image est définitivement 
 sur le serveur Les étapes de l’envoi de fichier ‘‘Avec les éléments ci-dessus, la sécurité n’est pas nécessairement assurée
 Beaucoup de paramètres peuvent entrer en jeu entre votre serveur et votre fichier .htaccess Pierre Faure - pierrefaure.me
  66. 66. a.$_FILES <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="image"> <input type="submit"> </form> $_FILES et $_POST sont interprétés différemment par le navigateur L’envoi de fichier est rendu possible par : le type="file" qui permet de sélectionner un fichier le enctype="multipart/form-data" qui signale au navigateur 
 qu’il va devoir traiter un fichier Comment modifier le formulaire pour envoyer un fichier Pierre Faure - pierrefaure.me
  67. 67. a.$_FILES et $_POST <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="image"> <textarea name="description"></textarea> <input type="submit"> </form> var_dump($_POST); array(1) { ["description"]=> string(22) "description de l'image" } Pierre Faure - pierrefaure.me
  68. 68. 4.Quelques trucs à savoir b.$_SESSION $_SESSION accueil profil article ‘’En changeant de page, restez connecté grâce à la SESSION Pierre Faure - pierrefaure.me
  69. 69. b.$_SESSION : initialisation session_start(); permet d’initialiser une nouvelle SESSION 
 Il doit se situer sur chaque page de votre code ou vous souhaitez utiliser la SESSION Pierre Faure - pierrefaure.me
  70. 70. $_SESSION['username'] = 'Pierre'; $_SESSION['email'] = 'mail@example.com'; $_SESSION['profil-picture'] = 'profil.jpg'; var_dump($_SESSION); array(3) { ["username"]=> string(6) "pierre" ["email"]=>string(16) "mail@example.com" ["profil-picture"]=>string(10) "profil.jpg" } echo 'Bonjour '.$_SESSION['username']; Bonjour Pierre b.$_SESSION : déclarer des variables Pierre Faure - pierrefaure.me
  71. 71. b.$_SESSION : se déconnecter Savoir détruire une SESSION peut s’avérer utile lorsque par exemple, 
 un utilisateur se déconnecte session_unset(); session_destroy(); Permet de "nettoyer" les variables de SESSION 
 Elles seront vides Permet de supprimer la SESSION
 Elle ne sera plus existante Pierre Faure - pierrefaure.me
  72. 72. 4.Quelques trucs à savoir c.L’indentation Pierre Faure - pierrefaure.me
  73. 73. c.L’indentation if(){ } } } } if(){ else{ for($i=0;$i<10;$i++){ Pour le PHP Pierre Faure - pierrefaure.me
  74. 74. c.L’indentation <div id="content"> </div> </ul> </li> </div> <div id="header"> <ul id="list"> <li> Pour le HTML Pierre Faure - pierrefaure.me
  75. 75. c.L’indentation <div id="content"> </div> } </div> </div> <div id="header"> if{ <div id="connected"> Pour le HTML et le PHP Pierre Faure - pierrefaure.me
  76. 76. 4.Quelques trucs à savoir d.HTML et PHP </> <?>& Pierre Faure - pierrefaure.me
  77. 77. 4.Quelques trucs à savoir d.HTML et PHP <div id="content"> <ul id="account"> <?php if($connected == true){ echo '<li>Bienvenue Pierre !</li>'; } else{ echo '<li><a href="">Inscrivez-vous</a></li>'; } ?> <li><a href="">Notre newsletter</a></li> </ul> </div> ‘‘Vous pouvez mettre du php dans un fichier .html et du html dans un fichier .php Pierre Faure - pierrefaure.me
  78. 78. ?> Pierre Faure - pierrefaure.me
  79. 79. Made by Pierre Faure
 Check out my blog: pierrefaure.me A big thanks to the noun project for the icons Fonts: Courier Prime & Marvel Pierre Faure - pierrefaure.me

×