Formation PHP
-
Upload
kemenaran -
Category
Technology
-
view
28.237 -
download
0
Transcript of Formation PHP
Formation PHP
Formation PHP
Junior Isep 2006
Pierre de La Morinerie
Pourquoi PHP ?
PHP permet de :
Utiliser des formulaires
Proposer des pages dynamiques
Traiter des donnes sur un serveur
Communiquer avec une Base de donnes
PHP (ou un autre langage serveur) est quasiment indispensable la ralisation d'un site Web avanc.
Historique
Prsentation :
1994 : cr par Rasmus Lerdorf pour sa page perso
D'abord en Perl, puis en C : Personnal Home Page
1997 : repris par Andi Gutmans et Zeev Suraski
Sortie de PHP3, largement utilis depuis
Particularits :
Ressemble au C/C++
Faiblement typ
Sommaire
Installation des serveurs (WAMP, EasyPHP)
Premire page PHP
Structures du langage : variables, boucles, conditions
Fonctions et manipulation de tableaux
Base de donnes : prsentation, administration
Base de donnes : requtes, insertions, mises jour
Formulaires XHTML
Scurit
Installation des serveurs (WAMP)
Installation des serveurs
Pourquoi utiliser un serveur ?
Seul le serveur sait interprter du PHP
Que doit-on installer ?
Apache : pour communiquer avec le navigateur
PHP : pour interprter les fichiers .php
MySQL : pour utiliser la Base de Donnes
Ces trois outils, coupls Linux ou Windows, forment une solution LAMP ou WAMP
Installation des serveurs
WAMP :
regroupe tous ces serveurs
intgre aussi des outils dadministration
est gratuit
WAMP n'est pas obligatoire ! On pourrait installer chaque serveur sparment il est d'ailleurs bon de savoir le faire.
Installation des serveurs
Installation de WAMP
Tlcharger WAMP depuis www.wampserver.com, ou EasyPHP
Questions poses par l'installeur :
Lancer les services automatiquement : Oui
Dossier racine : par dfaut
Serveur SMTP : par dfaut (localhost)
Adresse email : dfaut
Navigateur par dfaut : Si Firefox, aller chercher firefox.exe, sinon laisser explorer.exe
Alerte du pare-feu : dbloquer Apache
Installation des serveurs
Tester l'installation
Tapez localhost dans la Barre d'adresse de votre navigateur
La page d'accueil de WAMP doit s'afficher
L'interface de WAMP :
Sert dmarrer ou arrter les serveurs
Rside ensuite dans la Zone de notification
Contient des raccourcis vers les outils d'administration : phpMyAdmin, sqlLiteManager
Permet galement de configurer Apache et PHP
Premire page PHP
Premire page PHP
Arborescence des dossiers
Les fichiers PHP doivent tre visibles par Apache
Ils faut donc qu'ils soient dans le dossier WebRoot d'Apache (par dfaut C:\wamp\www)
Crez un dossier test dans le dossier www
Premier fichier PHP
Ouvrez une page HTML avec Notepad++
Enregistrez-la dans www\test\index.php
Premire page PHP
Affichage de la page
Ouvrez votre navigateur
Tapez l'adresse http:\\localhost\test\index.php
La page HTML, servie par Apache, s'affiche
Premire page PHP
Inclusion d'un code PHP
Ouvrez le fichier www\test\index.php avec Notepad++
Rajouter dans le la ligne :
Date :
Sauvegarder la page
Affichage
Ouvrir le navigateur pour tester le rsultat
La page doit comporter une ligne :
Date : 14-11-2006 18:15:42
Si on rafrachit la page (F5), la ligne se met jour
Premire page PHP
Explication du fonctionnement : ct client
Schma d'une requte statique :
Premire page PHP
Explication du fonctionnement : ct client
Schma d'une requte dynamique :
Premire page PHP
Explication du fonctionnement : ct serveur
Date :
La fonction date() affiche la date actuelle
Le mot-clef echo sert afficher le rsultat
Premire page PHP
Une autre fonction pratique : include()
Include() permet d'insrer une page PHP dans une autre.
Utilisation :
On peut mettre du PHP dans la page incluse.
La page incluse est directement insre dans le code : il ne faut pas y mettre des tags ou
Premire page PHP
Include()
Exemple d'utilisation : on peut insrer une page menu.php en haut de toutes les pages de son site.
Menu.php :
- Lorem
- Ipsum
Structures du langage
Structure du langage
Syntaxe :
Syntaxe inspire du C, comme C++, Java ou C#
Mais c'est un langage faiblement typ : les variables n'ont pas de type prdfini, et s'adaptent au contexte
Avantages :
La syntaxe C est lgante et largement rpandue
Grande flexibilit donne par les types faibles
Structure du langage
Elements de syntaxe :
Les lignes se terminent par un point-virgule.
Les commentaires peuvent s'crire :
Les blocs sont dlimits par des accolades.
Structure du langage
Dclarer une variable
Il suffit de la nommer ou de l'utiliser :
Structure du langage
Calculs :
Structure du langage
Fonctions mathmatiques :
Pas besoin d'include particulier pour utiliser ces fonctions
Structure du langage
Chanes de caractres :
Leur fonctionnement est intuitif :
Structure du langage
Chanes de caractres :
Les guillemets peuvent tre simples ou doubles.
Guillemets simples : aucune variable n'est remplace, aucun caractre n'est chapp (plus rapide)
Guillemets doubles : les variables sont remplaces, les caractres
chapps (plus lent)
Structure du langage
Structures conditionnelles et boucles
Les structures conditionnelles (if, switch) et les boucles (for, while) fonctionnent de la mme manire qu'en C
Structure du langage
Structures conditionnelles : if
Structure du langage
Structures conditionnelles : switch
Structure du langage
Structures conditionnelles : for
Structure du langage
Structures conditionnelles : while
Structure du langage
Passage de variables :
On peut passer des variables comme paramtres une page PHP
Il suffit de les insrer dans l'adresse de la page
Les adresses sont alors de la forme :
http://exemple.com/ma_page.php?variable=valeur
Exemple :
http://www.google.fr/search.php?q=recherche
Structure du langage
Comment rcuprer les variables d'une Url ?
Les variables d'une Url sont contenues dans un tableau nomm $_GET
On y accde par :
$ma_variable = $_GET['ma_variable'];
Structure du langage
Exemple :
Si on appelle une page par :
index.php?nom=alfred&age=12
On pourra afficher :
Structure du langage - TD
Sujet :
Crer une page-matre, qui appelle toutes les pages-filles du site
TD 1 Pages dynamiques
Structure du langage - TD
Exemple :
L'adresse de la page d'accueil est :
index.php?page=accueil
L'adresse de la page de contacts est :
index.php?page=contacts
L'adresse 'index.php' sans paramtres doit afficher l'accueil.
Structure du langage - TD
Avantages :
Une seule page pour grer les lments communs (titre, menu)
Seul le contenu variable est modifier
Connaissances requises :
Passer un paramtre une page
Rcuprer ces paramtres l'aide de $_GET[]
Utiliser un switch() pour traiter le paramtre
Inclure la page-enfant l'aide d'include()
Tableaux
Fonctions
Tableaux fonctions
Prsentation des tableaux
Les tableaux de PHP fonctionnent un peu comme en C
Ils sont cependant beaucoup plus souples
Tableaux fonctions
Pourquoi utiliser des tableaux :
Classement de donnes
Economie de variables
Rcupration de rsultats provenant d'une BDD
Facilit de manipulation
Tableaux fonctions
Utilisation d'un tableau numrot :
Pour ajouter un lment, il suffit de prciser son numro
Tableaux fonctions
Taille des tableaux :
La taille des tableaux est gre automatiquement
On peut donc rajouter ou supprimer des lments volont
Tableaux fonctions
Tableaux associatifs :
Le tableau est indic par une string, et pas par un n
Tableaux fonctions
Parcourir un tableau :
Exemple de foreach :
Tableaux fonctions
Foreach nom des variables
On peut nommer $key et $value comme on veut
Cela permet souvent de gagner en lisibilit
Foreach modification des donnes
Foreach fonctionne par copie des lments du tableau
En consquence, si l'on modifie $key ou $value dans le foreach, le tableau original n'est pas modifi.
Tableaux fonctions
Tableaux multidimensionnels
Il s'agit de tableaux contenant des tableaux
Ils proviennent habituellement d'une BDD
Exemple :
Tableaux fonctions
Exercice :
Raliser un script qui affiche toutes les variables passes en
paramtre de la page
Exemple :
exercice.php?nom=moi&age=32
Doit afficher :
Le paramtre 'nom' vaut 'moi'.
Le paramtre 'age' vaut '32'.
Le script doit fonctionner pour n'importe quel paramtre !
Tableaux fonctions
Introduction aux fonctions
Les fonctions de PHP sont trs semblables aux C
Cependant :
Elles sont un peu plus souples
Elles ne manipulent pas des pointeurs, mais ventuellement des rfrences
Elles peuvent renvoyer des tableaux
Tableaux fonctions
Les fonctions sont trs pratiques
Elles permettent de dcouper le programme en petits blocs rutilisables
Elles augmentent la modularit et la lisibilit du code
Une fonction est une bote noire
Idalement, sa sortie de dpend que de son entre
Elle peut ventuellement modifier ses paramtres, s'ils sont passs par rfrence (~ pointeurs)
Tableaux fonctions
Syntaxe gnrale
La syntaxe gnrale d'une fonction est :
Tableaux fonctions
Exemple de fonction
Une fonction pour afficher le contenu d'un tableau :
Tableaux fonctions
Valeur de retour
En PHP, on ne prcise pas le type de valeur retourne
La fonction peut retourner (ou non) une valeur de n'importe quel type
Le mot-clef 'return' n'est pas obligatoire si la fonction ne renvoie rien
Tableaux fonctions
Passage des arguments
Par dfaut, les paramtres (ou arguments) d'une fonction sont passs par valeur
La fonction travaille donc sur une copie du paramtre
Tableaux fonctions
Passage des arguments
Exemple de passage par valeur (comportement par dfaut)
:
Tableaux fonctions
Utilit du passage par rfrence :
Lorsque l'on veut retourner plusieurs valeurs (quoique dans ce cas l'on utilise plutt des tableaux)
Lorsque l'on veut manipuler directement une variable :
Tableaux fonctions
Commentez toujours vos fonctions !
Commenter une fonction sert :
Avoir les ides plus claires sur sa conception
Rendre le code rutilisable facilement
Faciliter la lecture de votre code par d'autres programmeurs
Indiquez avant chaque fonction :
Son utilit
Ses paramtres
Ce qu'elle renvoie
Tableaux fonctions
PHPDoc
La syntaxe PHPDoc est une convention pour commenter les fonctions
Elle permet galement de gnrer la documentation de votre code automatiquement
Elle n'influence bien sr pas l'excution du code PHP
Tableaux fonctions
PHPDoc
Exemple de fonction commente en style PHPDoc :
Tableaux fonctions
PHPDoc
Exemple de fonction commente en style PHPDoc :
Tableaux fonctions
Exercice :
Afficher le contenu d'un tableau PHP bidimensionnel dans une HTML
Le script doit permettre d'afficher plusieurs lignes d'un tableau de plusieurs colonnes
Connaissances requises :
Crer un tableau bidimensionnel
Parcourir le tableau avec foreach
Gnrer le code HTML correspondant la vole
Bases de donnes 1
Bases de donnes 1
Utilit des BDD
Elles permettent de... classer des donnes
Mais surtout de rechercher selon des critres prcis
Elles peuvent galement tre mises en relation
Bases de donnes 1
PHP et les BDD
PHP comporte de nombreuses fonctions pour communiquer avec une BDD
BDD communes
Une des plus connues est MySQL (libre et gratuit)
Citons aussi Oracle, SQL Server, Firebird...
Bases de donnes 1
Communiquer avec une BDD
Une BDD reoit des requtes crites en langage SQL
SQL est proche du langage naturel
Administrer une BDD
On peut administrer une BDD uniquement en envoyant des commandes (comme un FTP sous Linux)
Cependant des interfaces rendent cette tche plus intuitive (comme phpMyAdmin)
Bases de donnes 1
PhpMyAdmin
Application crite en PHP
Permet d'administrer facilement une base MySQL
Accs PhpMyAdmin
Sous easyPHP, taper :
http://localhost/mysql/
Bases de donnes 1
Vocabulaire :
Base : armoire contenant des tiroirs (les tables)
Table : Casier contenant des informations classes le nom et l'age des visiteurs, par exemple
Champs : colonnes d'une table
Entres : lignes d'une table
Bases de donnes 1
Crons une nouvelle table dans PhpMyAdmin :
Crer une base nomme 'test'
Crer une nouvelle table dans cette base, nomme 'users', avec 3 champs
Crer les trois champs : nom, ge, courriel
Remplir cette table avec deux ou trois entres
Bases de donnes 1
Lire des donnes avec PHP
Cela ressemble peu la communication avec un FTP
Il faut d'abord se connecter, puis lancer sa requte, et rcuprer la rponse de MySQL
Bases de donnes 1
Etablir la connexion
Avant de communiquer avec MySQL, il faut attirer son attention
Nous allons dmarrer une conversation avec MySQL
On utilise pour cela la fonction mysql_connect()
mysql_connect()
La fonction mysql_connect() s'utilise comme ceci :
mysql_connect($serveur, $login, $mot_de_passe);
Bases de donnes 1
Exemple :
Voici comment vous connecter votre base MySQL :
Explications :
'localhost' est le nom du serveur auquel on se connecte ici, le serveur SQL est sur notre propre machine.
'root' est le nom de l'utilisateur principal de MySQL
'' : par dfaut, l'utilisateur root n'a pas de mot de passe
Bases de donnes 1
Que faire une fois connect ?
D'abord, slectionner la base que l'on veut utiliser
On se sert de la fonction mysql_select_db()
mysql_select_db($database);
Bases de donnes 1
Que faire ensuite ?
Une fois que l'on a plus besoin de parler MySQL, il faut terminer la conversation
Si on ne le fait pas, MySQL finit par la terminer lui-mme, mais cela prend du temps inutile
On utilise la fonction mysql_close()
mysql_close()
Bases de donnes 1
Exemple complet de connexion :
Si ce code n'affiche rien, tout s'est bien pass
Bases de donnes 1
Interroger la BDD
On parle MySQL avec la fonction mysql_query()
mysql_query($requete)
$requete est une chane de caractre contenant une commande SQL
Bases de donnes 1
Le langage SQL
C'est une faon standardise de communiquer avec les Bases de Donnes
Exemple de requte SQL :
SELECT * FROM users
SELECT : la commande excuter (une slection)
* : les champs que l'on veut rcuprer (tous)
FROM table : le nom de la table dans laquelle on veut chercher
Bases de donnes 1
Exemple en PHP
Voici comment excuter la requte prcdente :
Bases de donnes 1
Comment traiter les rponses ?
La rponse renvoye par MySQL est un recordset
Un recordset est un ensemble de valeurs brutes
On ne peut pas le manipuler directement
Il faut donc l'interprter
Bases de donnes 1
Transformer la requte en tableau
mysql_fetch_array() transforme chaque ligne du recordset en un tableau associatif
Exemple :
Bases de donnes 1
Boucle sur les rsultats
mysql_fetch_array() renvoie chaque ligne l'une aprs l'autre
Lorsqu'il n'y a plus de ligne, elle renvoie false
On peut donc l'utiliser dans une boucle while() facilement
Bases de donnes 1
Exemple de boucle sur les donnes :
Bases de donnes 1
Autre exemple plus concis :
Bases de donnes 1
Exercice :
Rcuprer toutes les donnes de la table 'users'
Les afficher sous forme d'un tableau Html
Bases de donnes 1
Slectionner des donnes
SQL permet de ne slectionner que les donnes dont on a besoin, ou de les classer
Slection : WHERE, FROM, LIMIT
Classement : ORDER BY
Bases de donnes 1
La clause WHERE
Utilise tout le temps
Elle restreint les lignes la condition donne
Exemple :
SELECT * FROM users WHERE age > 16
SELECT * FROM users WHERE nom='Berthe'
Note : il se peut qu'une requte ne renvoie aucune ligne, si la condition n'est remplie par aucune des entres
Bases de donnes 1
La clause LIMIT
Permet de restreindre le nombre de donnes renvoyes
Peu standard, mais souvent utilise avec MySQL
Exemple :
SELECT * FROM users LIMIT 20
SELECT * FROM users LIMIT 5, 15
Le premier exemple renvoie les 20 premires entres
Le second exemple renvoie les entres 5 15
Bases de donnes 1
La clause ORDER BY
Permet de grouper les donnes reues
On peut ventuellement spcifier un ordre de tri (ascendant ou descendant)
Exemples :
SELECT * FROM users ORDER BY age
SELECT * FROM users ORDER BY name ASC
La premire requte groupe les rsultats par age
La seconde classe les rsultats par ordre alphabtique
Bases de donnes 1
Regroupement et combinaisons
On peut bien sr combiner toutes ces clauses
Exemple :
SELECT *
FROM users
WHERE age > 16
AND prenom = 'Jules'
ORDER BY nom ASC
LIMIT 20
Bases de donnes 2
Formulaires
Bases de donnes 2
Gestion des erreurs
CRUD
Bases de donnes 1
Gestion des erreurs
Lorsque une requte est mal forme ou choue, MySQL renvoie un message d'erreur
On peut y accder par la fonction mysql_error()
mysql_errror() renvoie le dernier message d'erreur gnr par MySQL
Bases de donnes 2 - Formulaires
Gestion des erreurs
Exemple d'utilisation :
Bases de donnes 2 - Formulaires
Modification des donnes
Les oprations les plus frquentes sur les BDD sont rsumes par l'acronyme CRUD
Create
Retrieve
Update
Delete
Certains frameworks pr-implmentent ces oprations
Voyons comment les raliser avec des requtes SQL
Bases de donnes 2 - Formulaires
Create : Insertion dans une base de donnes
Pour ajouter une entre dans une BDD, on utilise la requte INSERT
INSERT cre une nouvelle entre partir de rien
Structure :
INSERT
INTO table(liste_des_champs)
VALUES(liste_des_valeurs)
La liste des champs est optionnelle
Bases de donnes 2 - Formulaires
Insertion dans une base de donnes
Exemple d'insertion :
Bases de donnes 2 - Formulaires
Update : Mise jour
Pour mettre jour une entre existante, on utilise la commande
UPDATE
UPDATE
table
SET field = value
WHERE condition
Bases de donnes 2 - Formulaires
Mise jour
Exemple : on veut changer l'ge d'un utilisateur
Bases de donnes 2 - Formulaires
Delete : Supression
Pour supprimer une entre, on utilise la commande
DELETE
DELETE
FROM table
WHERE condition
Bases de donnes 2 - Formulaires
Suppression
Exemple : on veut supprimer des utilisateurs
Autre exemple :
$sql = '' DELETE FROM users WHERE age < 16 ''
Bases de donnes 2 - Formulaires
Suppression
Exemple : on veut supprimer des utilisateurs
Autre exemple :
$sql = '' DELETE FROM users WHERE age < 16 ''
Formulaires
Bases de donnes 2 - Formulaires
Pourquoi utiliser des formulaires ?
On a vu comment passer des infos une page PHP, par la mthode GET (variables dans l'Url)
Ce n'est pas trs ergonomique...
Les formulaires sont user-friendly
Les formulaires permettent :
De rentrer des donnes
De les envoyer au serveur
D'afficher des contrles : zones de textes, menus droulants, boutons, etc.
Bases de donnes 2 - Formulaires
Mthode de conception
Les formulaires sont conus en XHTML
Les donnes sont rcupres et interprtes par PHP
Bases de donnes 2 - Formulaires
XHTML Gabarit de formulaire
Formulaire = contrles dans une balise
Exemple :
Method : type de transmission des donnes
Post : passage par paramtre invisible
Get : passage par l'Url (dconseill)
Action : fichier cible du formulaire
Bases de donnes 2 - Formulaires
Contrles communs
ligne de texte (une seule ligne)
zone de texte (multilignes)
bouton de validation
menu droulant
Contrles de mise en forme
groupe de contrles
titre du fieldset
Bases de donnes 2 - Formulaires
Exemple de formulaire :
Bases de donnes 2 - Formulaires
Exercice : enregistrer un nom dans la BDD
Crer un formulaire permettant d'ajouter un utilisateur dans la BDD
Mthode
Crer une page PHP
Si il y a des donnes POSTes, les insrer dans la BDD, avec une requte SQL ''INSERT''
Sinon, afficher le formulaire
Bases de donnes 2 - Formulaires
TP : Ralisation
Quatre pages PHP principales : index.php, add.php, edit.php, delete.php
Un fichier de connexion la BDD, bdd.php, inclus au dbut de toutes les pages principales
Vous tes libres du reste :)
Sessions
Scurit
Mise en ligne
Sessions
Scurit mise en ligne
Sessions
Permettent de conserver des donnes entre les pages
Grs automatiquement par PHP
Scurit mise en ligne
Utilisation des sessions
Initialiser avec session_start()
Utiliser le tableau $_SESSION
Scurit
Scurit mise en ligne
Scurit
La question de la scurit est primordiale
Ds que l'on interagit avec l'extrieur, on s'expose des problmes de scurit :
Excution de requtes SQL malicieuses
Vol de donnes
Excutions de commandes malicieuses sur le serveur
Vol d'identifiants (login/mot de passe)
Accs frauduleux au site
Scurit mise en ligne
Principe fondamental :
NE JAMAIS FAIRE CONFIANCE !
Il faut toujours vrifier les donnes provenant de l'extrieur
Scurit mise en ligne
Principaux vecteurs d'attaques :
Injections de script
Injections SQL
Injection de HTML
Cross-Site Scripting (XSS)
Scurit mise en ligne
Injection de script :
Tentative d'injecter des variables (par l'Url : mthode GET)
Tentative d'excuter des scripts sur le serveur (faille d'include)
Pour se protger :
Toujours initialiser les variables utilises
Vrifier les variables avant de faire des include
Scurit mise en ligne
Injection SQL
Tentative d'injecter des bouts de requte SQL
On peut virtuellement excuter n'importe quelle requte
Exemple :
SELECT * FROM users WHERE login = '$name'
Si $name vaut :
' OR '1' = '1
Tout nom d'utilisateur renverra une rponse valide.
On pourrait ainsi rcuprer des mots de passe, ou mme effacer la
base de donnes :
'; DELETE FROM users WHERE '1' = '1
Scurit mise en ligne
Injection SQL : pour se protger :
Utiliser mysql_real_escape_string()
Cette fonction chappe les guillemets malicieux : elle transforme les ' en \'
Attention magic_quotes_gpc
Option de php.ini permettant d'chapper automatiquement les chanes
Si elle est active, il ne faut pas chapper une seconde fois la chane !
On utilise alors stripslashes() avant mysql_real_escape_string()
Scurit mise en ligne
Injection HTML
Si l'utilisateur peut rentrer du texte affich ensuite sur une page, il pourrait y mettre de l'Html
Exemple :
Dans une news, on pourrait insrer :
Voici ma news