formation php

Download Formation PHP

If you can't read please download the document

Upload: kemenaran

Post on 16-Apr-2017

28.235 views

Category:

Technology


0 download

TRANSCRIPT

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