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. 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)
PHP : exemple Commentaires <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 26/03/2017 23:00:31
Instructions conditionnelles if (conditionA) { // instructions A } elsif (conditionB1 && conditionB2) { // instructions B } elsif (conditionC1 || conditionC2) { // instructions C } else { // instructions D }
Boucles for ($i=0 ; $i < $n ; $i++) { // instructions } while (condition) { do { } while (condition)
Tableaux $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 />"; } Parcours echo "<ul>"; foreach ($tab as $valeur) { echo "<li>$valeur</li>"; } echo "</ul>";
Tableaux associatifs $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>"; Parcours echo "<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>";
Fonctions 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");
Quelques fonctions prédéfinies 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"
Quelques fonctions prédéfinies (chaînes, 1/2) 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"
Quelques fonctions prédéfinies (chaînes, 2/2) 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"
Quelques fonctions prédéfinies (tableaux) 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
Transmettre des informations : méthode GET HTML PHP <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> <html> ... <div> Bonjour <?php echo $_GET["prenom"]." ". $_GET["nom"]; ?> </div> </html>
Transmettre des informations : méthode POST HTML PHP <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> <html> ... <div> Bonjour <?php echo $_POST["prenom"]." ". $_POST["nom"]; ?> </div> </html>
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 [])
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é
Gestion des fichiers HTML PHP <div> <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 $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\" />"; }
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.
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()
Authentification et sessions en 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
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é
Caractères spéciaux (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 !)
Caractères spéciaux ^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 ... Pour utiliser les caractères spéciaux (*, +, etc.) en tant que caractères réels, il faut les précéder d'un '\' Attention, certaines expressions ne sont pas universelles, celles-ci sont celles qui fonctionnent en PHP
Fonctions PHP pour les expressions régulières 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
Références http://www.php.net/ Pratique de MySQL et PHP, Philippe Rigaux, O’Reilly