personal home page / hypertext processor (php)
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 PresentationTRANSCRIPT
Xavier Tannier
Yann Jacob
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)
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
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}
Programmation Web / Bases de Données► PHP
Boucles
5
for ($i=0 ; $i < $n ; $i++) {
// instructions}
while (condition) {
// instructions}
do {
// instructions
} while (condition)
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
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>";
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");
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"
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"
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"
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
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>
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>
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
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
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\" />";}
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
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
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
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
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 !)
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 '\'
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
Programmation Web / Bases de Données► PHP
Références
• http://www.php.net/
• Pratique de MySQL et PHP, Philippe Rigaux, O’Reilly
25