xavier tannier [email protected] yann jacob [email protected] personal home page / hypertext...

25
Xavier Tannier [email protected] Yann Jacob [email protected] Personal Home Page / Hypertext Processor (PHP)

Upload: eloise-jacquin

Post on 03-Apr-2015

121 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Xavier Tannier

[email protected]

Yann Jacob

[email protected]

Personal Home Page / Hypertext Processor

(PHP)

Page 2: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Génération dynamique de pages XHTML

2

Le client Le serveurURL (avec paramètres)

fichier XHTML

Génération dela page

– Attention, le client ne sait pas lire une page PHP ! C'est le serveur qui crée la page XHTML et l'envoie au client.

– La page PHP contient des instructions– Une page PHP peut contenir du code HTML– On ne peut pas valider du PHP, on valide son résultat... (pas en local)

Page 3: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

PHP : exemple

3

<html > <head >

<title>Test de page PHP</title> </head > <body > <h2>Page de test</h2> <?php // Ceci est du code PHP $date = date("d/m/Y"); # Variable PHP + fonction $heure = date("H:i:s"); /* Affichage */ echo "Nous sommes le <strong>$date</strong> et il est

<strong>$heure</strong>"; ?> <hr /> </body ></html>

Commentaires

11/04/23 03:17:14

Page 4: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Instructions conditionnelles

4

if (conditionA) {

// instructions A

} elsif (conditionB1 && conditionB2) {

// instructions B

} elsif (conditionC1 || conditionC2) {

// instructions C

} else {

// instructions D}

Page 5: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Boucles

5

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

// instructions}

while (condition) {

// instructions}

do {

// instructions

} while (condition)

Page 6: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Tableaux

6

$tab = array("A", "B", "C");

$tab[0] = "A";$tab[1] = "B";$tab[2] = "C";

echo $tab[1]; // affiche "B"

for ($i = 0 ; $i < count($tab) ; $i++) { echo "La valeur $i est $tab[$i] <br />";}

echo "<ul>";foreach ($tab as $valeur) { echo "<li>$valeur</li>";}echo "</ul>";

Parcours

Page 7: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Tableaux associatifs

7

$notes = array("Marie" => 14, "Paul" => 12, "Pierre" => 7);

$notes["Marie"] = 14; $notes["Paul"] = 12;$notes["Pierre"] = 7;

echo "<table>";foreach ($notes as $clef => $valeur) { echo "<tr><td>$clef</td><td>$valeur</td></tr>\n";}echo "</table>";

Parcoursecho "<table>";reset($notes);while (next($notes)) { // il y a aussi prev $etud = key($notes); $note = current($notes); echo "<tr><td>$etud</td><td>$note</td></tr>\n";}echo "</table>";

Page 8: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Fonctions

8

function bonjour($nom) { echo "Bonjour $nom !<br />";}

bonjour("Marie");

function somme($x, $y) { return $x + $y;}

$z = somme(3, 10);

function coordonnees($ville) { ... return array($x, $y);}

list($a, $b) = coordonnees("Tokyo");

Page 9: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Quelques fonctions prédéfinies

9

empty($v) teste si $v est définie est a une valeur non nulle

isset($v) teste si $v est définie

abs($v) valeur absolue

ceil($v) entier immédiatement supérieur

floor($v) entier immédiatement inférieur

round($f) arrondi

max($v1, $v2, ..., $vn) plus grande valeur

min($v1, $v2, ..., $vn) plus petite valeur

rand() valeur aléatoire

date($format) renvoie la date courante formatée. Exemples : - "d/m/Y" - "H:i:s"

Page 10: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Quelques fonctions prédéfinies (chaînes, 1/2)

10

explode($sep, $chaine) divise $chaine selon le séparateur $sep et renvoie les valeurs dans un tableau

implode($sep, $tableau) regroupe les valeurs de $tableau avec le séparateur $sep et renvoir la chaîne de caractères

htmlspecialchars($ch) retourne la chaîne $ch dans laquelle les caractères réservés au HTML ('<', '>', '&'...) ont été remplacés par leur code HTML.

$fruits = "abricot|kiwi|pomme|fraise|banane";$liste_fruits = explode('|', $fruits); $fruits2 = implode(' ', $liste_fruits);echo $fruits2// => "abricot kiwi pomme fraise banane"

Page 11: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Quelques fonctions prédéfinies (chaînes, 2/2)

11

strlen($chaine) renvoie la taille de la chaîne de caractères

strstr($ch1, $ch2) renvoie le contenu de $ch1 à partir de la première occurrence de $ch2 (sinon, renvoie faux)

substr($ch, $i, $l) renvoie la sous-chaîne de $ch de longueur $l à partir de l'index $i

$fruits = "abricot|kiwi|pomme|fraise|banane";

$tmp = strstr($fruits, '|'); echo $tmp;// => "|kiwi|pomme|fraise|banane"

$tmp2 = substr($fruits, 8, 4); echo $tmp2;// => "kiwi"

Page 12: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Quelques fonctions prédéfinies (tableaux)

12

is_array($tab) teste si $tab est un tableau

count($tab) nombre d'éléments du tableau

sort($tab) tri du tableau sur les valeurs, ordre ascendant

rsort($tab) tri du tableau sur les valeurs, ordre descendant

ksort($tab) tri du tableau sur les clés, ordre ascendant

krsort($tab) tri du tableau sur les clés, ordre descendant

max($tab) plus grande valeur

min($tab) plus petite valeur

Page 13: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Transmettre des informations : méthode GET

13

<form action="script.php" method="get">

<label for="nom">Nom</label> <input type="text" name="nom"

id="nom"> <label for="prenom">Prénom

</label> <input type="text"

name="prenom" id="nom"> <input type="submit"

name="action" value="OK"> </form>

PHPHTML<html> ... <div> Bonjour <?php echo $_GET["prenom"]." ". $_GET["nom"]; ?> </div></html>

Page 14: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Transmettre des informations : méthode POST

14

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

<label for="nom">Nom</label> <input type="text" name="nom"

id="nom"> <label for="prenom">Prénom

</label> <input type="text"

name="prenom" id="nom"> <input type="submit"

name="action" value="OK"> </form>

PHPHTML<html> ... <div> Bonjour <?php echo $_POST["prenom"]." ". $_POST["nom"]; ?> </div></html>

Page 15: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Méthodes GET et POST

• Avec la méthode GET, les paramètres sont passés dans l'URL (donc visibles par l'internaute), et un formulaire n'est pas indispensable

• Avec la méthode POST, les paramètres sont passés dans le corps de la requête HTTP

• La méthode GET est la plus simple• Utiliser POST lorsque les paramètres sont longs ou confidentiels • Le tableau associatif $_REQUEST contient à la fois les variables

des tableaux $_GET, $_POST et $_COOKIE• Les valeurs des tableaux associatifs peuvent être des variables

simples ou des tableaux (si le code XHTML les a nommés avec un suffixe [])

15

Page 16: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Gestion des fichiers

• Les informations concernant le fichier téléchargé sont dans $_FILES[$nom] ou $nom est le nom du champ du formulaire d'où provient le fichier

• Les clés de $_FILES[$nom] :– name le nom du fichier sur la machine du client– tmp_name le nom du fichier temporaire sur le serveur– size la taille du fichier– type le type du fichier– error :

• UPLOAD_ERR_OK pas d’erreur, le transfert s’est bien passé• UPLOAD_ERR_INI_SIZE le fichier dépasse la taille maximale autorisée• UPLOAD_ERR_PARTIAL le fichier est transféré seulement partiellement• UPLOAD_ERR_NO_FILE aucun fichier n’a été transféré

16

Page 17: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Gestion des fichiers

17

<form method="post" enctype="multipart/form-data" action="fic.php"> <div> <label for="photo">Insérez une photo :</label> <input type="file" name="photo" id="photo"/> <input type="submit" name="envoi" value="envoi" /> </div></form>

PHP

HTML

$fichier = $_FILES['photo'];

if ($fichier['error'] == UPLOAD_ERR_OK) { // Copie du fichier dans le répertoire PHOTOS $src = $fichier['tmp_name']; $dest = "./photos".$fichier['name']; copy($src, $dest); // Affichage de l'image echo "<img src=\"$dest\" alt=\"Votre photo\" />";}

Page 18: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Authentification et gestion de session

• L'authentification HTTP au niveau du serveur Web est très simple (ex : .htaccess et .htpasswd) mais impose une modification de la configuration et est difficile à brancher à une base de données.

• Cookies : fichiers placés chez le client, par exemple pour conserver des informations de session.

• En PHP, utilisation de setcookie($nom, $valeur) et de la variable $_COOKIE.

• Mais PHP permet de gérer des sessions avec cookies sans avoir à gérer le cookie lui-même.

18

Page 19: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Authentification et sessions en PHP

• Un formulaire demande l'identifiant et le mot de passe• Ces informations sont vérifiées :

– Si c'est bon• on crée une session avec session_start() et on crée un paramètre sur le

tableau associatif $_SESSION.Par exemple : $_SESSION['valid_user'] = 1;

• On redirige vers les pages de contenu

– Si ce n'est pas bon• On redirige vers une page d'erreur ou on retourne au formulaire

• Sur les autres pages :– session_start()– Vérification de la variable $_SESSION['valid_user']

• Pour la déconnexion : session_destroy()

19

Page 20: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Authentification et sessions en PHP

20

<?php $id = $_POST['id']; $passwd = $_POST['pwd']; /* Vérification de l'identifiant et du mot de passe */ if (verif_ok($id, $passwd)) { session_start(); $_SESSION['valid_user'] = 1; // Redirection echo "<html>"; echo "<meta http-equiv=\"refresh\" content=\"0;url=./script2.php\" />"; echo "</html>"; } else { // Redirection vers le formulaire ... }?>

Doit être placé avant d'écrire des choses sur la page (avant l'écriture des entêtes HTTP)

Redirection HTML au bout de 0 seconde

<?php session_start(); if ($_SESSION['valid_user'] != 1) { // Redirection vers le formulaire } ?>

dans script2.php

Page 21: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Les expressions régulières

• Définition de motifs de chaînes de caractères– informat.* correspond à "informaticien", "informatique",

"informateur"...– sites? correspond à "site" ou "sites"– [Ii]nternet correspond à "Internet" ou "internet"– ph. correspond à "php", "phi", "phd", ...– youpi+ correspond à "youpi", "youpii", youpiii", ...– ...

• On peut ensuite tester si une chaîne de caractères correspond à un motif donné

21

Page 22: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Caractères spéciaux

22

(motif) même chose que motif

[abcd] a ou b ou c ou d

motif$ la chaîne se termine par motif

. tous les caractères

c* c est présent 0 ou n fois

c+ c est présent 1 ou n fois

c? c est présent 0 ou 1 fois

[^ab] tous les caractères sauf a et b

a{m,n} a{m,} a{m} a est présent entre m et n fois, plus de m fois, m fois exactement.

[a-z] tous les caractères entre a et z (À ÉVITER en général !)

Page 23: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Caractères spéciaux

23

^motif la chaîne commence par motif

motif$ la chaîne se termine par motif

[:alpha:] n'importe quel caractère alpha-numérique

[:space:] [:blank:] un espace, un blanc (espace, tabulation, ...)

[:lower:] [:upper] minuscule, majuscule

[:punct:] une ponctuation

[:ctrl:] un caractère de contrôle

... ...

Attention, certaines expressions ne sont pas universelles,celles-ci sont celles qui fonctionnent en PHP

Pour utiliser les caractères spéciaux (*, +, etc.) en tant que caractères réels, il faut les précéder d'un '\'

Page 24: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Fonctions PHP pour les expressions régulières

24

ereg($m, $ch) retourne vrai si le motif a été trouvé dans la chaîne $ch. (Ajouter "^" et "$" pour vérifier l'intégralité de la chaîne)

ereg($m, $ch, $tab) retourne vrai si le motif a été trouvé dans la chaîne $ch, et stocke toutes les occurrences trouvées du motif dans le tableau $tab

ereg_replace($m, $r, $ch) retourne la chaîne $ch dans laquelle toutes les occurrences du motif $m ont été remplacées par la chaîne $r

Page 25: Xavier Tannier xavier.tannier@limsi.fr Yann Jacob yann.jacob@lip6.fr Personal Home Page / Hypertext Processor (PHP)

Programmation Web / Bases de Données► PHP

Références

• http://www.php.net/

• Pratique de MySQL et PHP, Philippe Rigaux, O’Reilly

25