php 2 - approfondissement mysql, pdo et mvc

79
<?php 2 Pierre Faure - pierrefaure.me

Upload: pierre-faure

Post on 23-Jan-2018

2.085 views

Category:

Engineering


10 download

TRANSCRIPT

Page 1: Php 2 - Approfondissement MySQL, PDO et MVC

<?php

2Pierre Faure - pierrefaure.me

Page 2: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 3: Php 2 - Approfondissement MySQL, PDO et MVC

1.Les bases de données : MySQLa.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

Page 4: Php 2 - Approfondissement MySQL, PDO et MVC

1.Les bases de données : MySQLa.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

Page 5: Php 2 - Approfondissement MySQL, PDO et MVC

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 égalements’intituler clé étrangère ou foreign key (FK)

Pierre Faure - pierrefaure.me

Page 6: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 7: Php 2 - Approfondissement MySQL, PDO et MVC

1.Les bases de données : MySQLb.phpMyAdmin

Pierre Faure - pierrefaure.me

Page 8: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 9: Php 2 - Approfondissement MySQL, PDO et MVC

b.phpMyAdmin : à l’intérieur de base_de_donnee3

Les tables de la BDD

Créer une table

Pierre Faure - pierrefaure.me

Page 10: Php 2 - Approfondissement MySQL, PDO et MVC

b.phpMyAdmin : à l’intérieur de la table vehicles

Les colonnes

Page 11: Php 2 - Approfondissement MySQL, PDO et MVC

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 à 0Null : 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éeAction : Opérations réalisables

Pierre Faure - pierrefaure.me

Page 12: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 13: Php 2 - Approfondissement MySQL, PDO et MVC

b.phpMyAdmin : créer une table

Créons une table posts

Contenant les colonnes id, title, content, date

Pierre Faure - pierrefaure.me

Page 14: Php 2 - Approfondissement MySQL, PDO et MVC

b.phpMyAdmin : type & taille d’une colonne

Pierre Faure - pierrefaure.me

Page 15: Php 2 - Approfondissement MySQL, PDO et MVC

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 valeurPierre Faure - pierrefaure.me

Page 16: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 17: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 18: Php 2 - Approfondissement MySQL, PDO et MVC

b.phpMyAdmin : Attribut > UNSIGNED

Attributs > UNSIGNED : Les valeurs stockées seront supérieures à 0

Pierre Faure - pierrefaure.me

Page 19: Php 2 - Approfondissement MySQL, PDO et MVC

b.phpMyAdmin : NULL

Null : Non = La valeur ne peut pas être inexistante

‘‘Une valeur vide n’est pas similaire/égale à une valeur NULLPierre Faure - pierrefaure.me

Page 20: Php 2 - Approfondissement MySQL, PDO et MVC

b.phpMyAdmin : Index > PRIMARY

Index PRIMARY : clé primaire & unique de la table « id »

Pierre Faure - pierrefaure.me

Page 21: Php 2 - Approfondissement MySQL, PDO et MVC

b.phpMyAdmin : Auto Incrémentation

A_I (Auto_Increment) : +1 automatiquement lorsqu’une donnée est ajoutée

Pierre Faure - pierrefaure.me

Page 22: Php 2 - Approfondissement MySQL, PDO et MVC

b.phpMyAdmin : Le moteur de stockage

Pierre Faure - pierrefaure.me

Page 23: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 24: Php 2 - Approfondissement MySQL, PDO et MVC

1.Les bases de données : MySQLc. Interagir avec une BDD

The Wolf of Wall StreetPierre Faure - pierrefaure.me

Page 25: Php 2 - Approfondissement MySQL, PDO et MVC

c. Interagir avec une BDD : Se connecter

PDO

Pierre Faure - pierrefaure.me

Page 26: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 27: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 28: Php 2 - Approfondissement MySQL, PDO et MVC

SELECTINSERTUPDATE

DELETE

c. Interagir avec une BDD : Requêtes

Pierre Faure - pierrefaure.me

Page 29: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 30: Php 2 - Approfondissement MySQL, PDO et MVC

Envoi et traitement d’une requête

$req = $db->prepare($sql);$req->execute();

Envoi de la requête au serveurExé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

Page 31: Php 2 - Approfondissement MySQL, PDO et MVC

Traduction du résultat de MySQL pour PHP : fetchAll

$req = $db->prepare($sql);$req->execute();

Envoi de la requête au serveurExé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 traducteurfetchAll(PDO::FETCH_ASSOC) le tableau sera associatif

Pierre Faure - pierrefaure.me

Page 32: Php 2 - Approfondissement MySQL, PDO et MVC

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 serveurExécution de la requête

SELECT

Pierre Faure - pierrefaure.me

Page 33: Php 2 - Approfondissement MySQL, PDO et MVC

SELECT

Type de requête

SELECT

Destination

FROM

Conditions

WHERE et AND / ORLIMIT GROUP BYORDER 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 usersPierre Faure - pierrefaure.me

Page 34: Php 2 - Approfondissement MySQL, PDO et MVC

SELECT * FROM users WHERE age > 18 AND sex = 0 ORDER BY f_name LIMIT 20

SELECTLes 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

Page 35: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 36: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 37: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 38: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 39: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 40: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 41: Php 2 - Approfondissement MySQL, PDO et MVC

SELECTINSERTUPDATE

DELETE

c. Interagir avec une BDD : Requêtes

Pierre Faure - pierrefaure.me

Page 42: Php 2 - Approfondissement MySQL, PDO et MVC

INSERTConstruction 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

Page 43: Php 2 - Approfondissement MySQL, PDO et MVC

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 serveurExé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

Page 44: Php 2 - Approfondissement MySQL, PDO et MVC

INSERTPour 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 serveurExé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

Page 45: Php 2 - Approfondissement MySQL, PDO et MVC

SELECTINSERTUPDATE

DELETE

c. Interagir avec une BDD : Requêtes

Pierre Faure - pierrefaure.me

Page 46: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 47: Php 2 - Approfondissement MySQL, PDO et MVC

$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 serveurExécution de la requête

2

Envoi et traitement d’une requête

Pierre Faure - pierrefaure.me

Page 48: Php 2 - Approfondissement MySQL, PDO et MVC

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 serveurExécution de la requête

Pierre Faure - pierrefaure.me

Page 49: Php 2 - Approfondissement MySQL, PDO et MVC

SELECTINSERT

DELETE

c. Interagir avec une BDD : Requêtes

UPDATE

Pierre Faure - pierrefaure.me

Page 50: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 51: Php 2 - Approfondissement MySQL, PDO et MVC

$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 serveurExécution de la requête

2

Envoi et traitement d’une requête

Pierre Faure - pierrefaure.me

Page 52: Php 2 - Approfondissement MySQL, PDO et MVC

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 serveurExé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

Page 53: Php 2 - Approfondissement MySQL, PDO et MVC

JOINTURES SQL

t1 t2 t2 t1

t2 t1

t2 t1 t2 t1

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.keyWHERE 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

Page 54: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 55: Php 2 - Approfondissement MySQL, PDO et MVC

2.Les fonctionsRappels

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 à 4On renvoie true

SinonOn renvoie false

validPassword('1234'); false

validPassword('12345'); true

Pierre Faure - pierrefaure.me

Page 56: Php 2 - Approfondissement MySQL, PDO et MVC

2.Les fonctionsAvec 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

Page 57: Php 2 - Approfondissement MySQL, PDO et MVC

2.Les fonctionsLes 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

Page 58: Php 2 - Approfondissement MySQL, PDO et MVC

3.Le Modèle MVC

M V CODÈ L E

UE

ONTRÔLEUR

Pierre Faure - pierrefaure.me

Page 59: Php 2 - Approfondissement MySQL, PDO et MVC

3.Le Modèle MVCa.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

Page 60: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 61: Php 2 - Approfondissement MySQL, PDO et MVC

b.Mise en pratique

index.php

index.html

function.phpinclude 'config/db.php';

C ONTRÔLEUR

M ODÈLE

VUE

db.php

Connexion à la BDD

include 'model/function.php';

include 'view/index.html';

Page 62: Php 2 - Approfondissement MySQL, PDO et MVC

4.Quelques trucs à savoir

Pierre Faure - pierrefaure.me

Page 63: Php 2 - Approfondissement MySQL, PDO et MVC

4.Quelques trucs à savoira.$_FILES et $_POST

&Pierre Faure - pierrefaure.me

Page 64: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 65: Php 2 - Approfondissement MySQL, PDO et MVC

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éeBeaucoup de paramètres peuvent entrer en jeu entre votre serveur et votre fichier .htaccess

Pierre Faure - pierrefaure.me

Page 66: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 67: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 68: Php 2 - Approfondissement MySQL, PDO et MVC

4.Quelques trucs à savoirb.$_SESSION

$_SESSION

accueil profil article

‘’En changeant de page, restez connecté grâce à la SESSION

Pierre Faure - pierrefaure.me

Page 69: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 70: Php 2 - Approfondissement MySQL, PDO et MVC

$_SESSION['username'] = 'Pierre'; $_SESSION['email'] = '[email protected]'; $_SESSION['profil-picture'] = 'profil.jpg';

var_dump($_SESSION);

array(3) { ["username"]=> string(6) "pierre" ["email"]=>string(16) "[email protected]" ["profil-picture"]=>string(10) "profil.jpg" }

echo 'Bonjour '.$_SESSION['username']; Bonjour Pierre

b.$_SESSION : déclarer des variables

Pierre Faure - pierrefaure.me

Page 71: Php 2 - Approfondissement MySQL, PDO et MVC

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 SESSIONElle ne sera plus existante

Pierre Faure - pierrefaure.me

Page 72: Php 2 - Approfondissement MySQL, PDO et MVC

4.Quelques trucs à savoirc.L’indentation

Pierre Faure - pierrefaure.me

Page 73: Php 2 - Approfondissement MySQL, PDO et MVC

c.L’indentation

if(){

}

}

}

}

if(){

else{

for($i=0;$i<10;$i++){

Pour le PHP

Pierre Faure - pierrefaure.me

Page 74: Php 2 - Approfondissement MySQL, PDO et MVC

c.L’indentation

<div id="content">

</div>

</ul>

</li>

</div>

<div id="header">

<ul id="list">

<li>

Pour le HTML

Pierre Faure - pierrefaure.me

Page 75: Php 2 - Approfondissement MySQL, PDO et MVC

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

Page 76: Php 2 - Approfondissement MySQL, PDO et MVC

4.Quelques trucs à savoird.HTML et PHP

</> <?>&Pierre Faure - pierrefaure.me

Page 77: Php 2 - Approfondissement MySQL, PDO et MVC

4.Quelques trucs à savoird.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

Page 78: Php 2 - Approfondissement MySQL, PDO et MVC

?>Pierre Faure - pierrefaure.me

Page 79: Php 2 - Approfondissement MySQL, PDO et MVC

Made by Pierre FaureCheck out my blog: pierrefaure.me

A big thanks to the noun project for the icons Fonts: Courier Prime & Marvel

Pierre Faure - pierrefaure.me