personal home page / hypertext processor (php)

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

Upload: landis

Post on 18-Jan-2016

46 views

Category:

Documents


0 download

DESCRIPTION

Personal Home Page / Hypertext Processor (PHP). Génération dynamique de pages XHTML. URL (avec paramètres). Le client. Le serveur. fichier XHTML. Génération de la 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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Personal Home Page /  Hypertext Processor (PHP)

Xavier Tannier

[email protected]

Yann Jacob

[email protected]

Personal Home Page / Hypertext Processor

(PHP)

Page 2: 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: 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

21/04/23 14:50:06

Page 4: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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