Rappels sur PHP Page statique / page dynamique * Page HTML = page statique * Extension ".htm" ou ".html" * Transmise directement au client * Code source lisible par le client * Page PHP = page dynamique * Extension ".php", ".php3" ou ".php4" * Interprétée par le serveur * Génère du HTML transmis au client * Code source non lisible par le client HTML et PHP * Code PHP inséré dans code HTML * Balise de début: <?php * Balise de fin: ?> * "echo" permet de générer du HTML * Code PHP + HTML <html> <body> <?php echo "<b>Hello World !</b>"; ?> </body> </html> * Code généré = code HTML <html> <body> <b>Hello World !</b> </body> </html> Langage PHP * Syntaxe similaire à Java * Instructions terminées par ";" * Commentaires * "//" pour une seule ligne * "/*...*/" pour plusieurs lignes * Opérateurs identiques * Structures de contrôle identiques * Sensible à la casse * Nom des variables précédé d'un "$" * Variables faiblement typées * Pas de type prédéfini * Type peut changer en cours d'exécution Variables * Déclaration implicite * $nom_variable = valeur; * Aucun mot-clé particulier * Déclarée à la première utilisation * Portée de la variable limitée au bloc d'instructions * Bloc d'instructions = zone entre "{" et "}" * En dehors de tout bloc = variable globale * Dans le bloc d'une fonction = variable locale * Pour utiliser une variable globale * Mot-clé "global" * global $nom_variable Types de données * Type déterminé à l'initialisation de la variable * Booléen * $x = TRUE; * $x = FALSE; * Entier * $x = 27; * Flottant * $x = 27.13; * Chaîne de caractères * $x = "Nawouak"; * $x = "27"; * Le type d'une variable peut changer en cours d'exécution $x = 5; ... $x = "cinq"; Opérateurs * Opérateurs classiques * Arithmétique: +, -, *, /, % * Affectation: =, +=, -=, *=, /=, %=, --, ++ * Logique: && (ou and), || (ou or), ! * Comparaison: ==, <, >, <=, >=, != * Test sur les variables * isset($var) * "TRUE" si "$var" existe * "FALSE" sinon * empty($var) * "TRUE" si "$var" n'existe pas ou nulle (zéro, chaîne vide) * "FALSE" sinon Structures de contrôle * Bloc d'instructions délimité par "{" et "}" * Facultatif si une seule ligne * if (x == 1) y = 2; ? if (x == 1) { y = 2; } * Structures conditionnelles * if (test1) action1 else if (test2) action2 else action3 * switch (variable) case valeur1: action1 case valeur2: action2 default: action3 * Structures de boucle * while (test) action * do action while (test) * for (depart; test; suivant) action Chaînes de caractères * Délimiteurs et concaténation * Variables non évaluées avec "'" 'salut $nom' ==> salut $nom * Variables évaluées avec """ "salut $nom" ==> salut Bruno "${formation}2007" ==> src2007 * Opérateur de concaténation "salut ".$nom ==> salut Bruno * Symbole \ * \$ ==> $ * \\ ==> \ * \" ==> " * \' ==> ' * \n ==> nouvelle ligne Tableaux simples (1/2) * La déclaration du tableau n'est pas nécessaire * Le remplissage du tableau n'est pas forcément continu $menu[3] = "CV"; $menu[1] = "Accueil"; $menu[7] = "Photos"; * Les indices sont facultatifs, la numérotation commence à 0 $menu[] = "Accueil"; $menu[] = "CV"; $menu[] = "Photos"; * Déclaration accélérée * $menu = array("Accueil","CV","Photos"); * Connaître le nombre d'éléments * $nb = count($menu); Tableaux simples (2/2) * Parcours des éléments * Code PHP for ($i = 0; $i < count($menu); $i++) { echo "Rubrique $i: $menu[$i]<br/>"; } * Code HTML généré Rubrique 0: Accueil<br/> Rubrique 1: CV<br/> Rubrique 2: Photos<br/> * Uniquement pour un remplissage continu ! Fonctions (1/2) * Permettent de factoriser / réutiliser du code * Portions de code associées à un nom * Reçoivent des arguments en entrée * Retournent une valeur en sortie * function nom(arguments) { action; return resultat; } * Peuvent être rassemblées dans des fichiers * "include" inclut et exécute un fichier * Alerte en cas d'absence * "require" inclut et exécute un fichier * Erreur en cas d'absence Fonctions (2/2) * Passage par valeur * function f($x) * Modification de "$x" limitée à "f" * function ajouter($a,$b) { return ($a+$b); } * $c = ajouter($a,$b); * Passage par référence * function f(&$x) * Modification de "$x" répercutée en dehors de "f" * function ajouter($a,$b,&$c) { $c = $a + $b; } * ajouter($a,$b,$c); * A l'appel, aucune différence: y = f($x); Un tout petit exercice... * Retour sur l'exemple du tableau simple * $menu = array("Accueil","CV","Photos"); * Ecrire la boucle d'affichage * Version 1: avec "for" (déjà vu !) * Version 2: avec "while" * Version 3: avec "do...while" * Ecrire une fonction pour l'affichage d'une rubrique * Version 1 * Reçoit l'intitulé de la rubrique * Génère le code HTML directement avec "echo" * Version 2 * Reçoit l'intitulé de la rubrique et une chaîne * Génère le code HTML à la fin de la chaîne * Affichage de la chaîne avec "echo" après la boucle Tableaux associatifs (1/3) * Tableaux indexés par des chaînes * Association d'une clé (chaîne) à un élément * Tableau simple: association entier-élément * Initialisation d'un tableau * $menu["home"] = "Accueil"; $menu["cv"] = "CV"; $menu["photos"] = "Photos"; * $menu = array( "home" => "Accueil", "cv" => "CV", "photos" => "Photos"); Tableaux associatifs (2/3) * Parcours des éléments * Code PHP foreach ($menu as $element) { echo "Rubrique \"$element\"<br/>"; } * Code HTML généré Rubrique "Accueil"<br/> Rubrique "CV"<br/> Rubrique "Photos"<br/> * Fonctionne aussi pour des tableaux simples ! Tableaux associatifs (3/3) * Parcours des couples clé-élément * Code PHP foreach ($menu as $cle => $element) { echo "Rubrique <a href='$cle.htm'>"; echo "$element</a><br/>"; } * Code HTML généré Rubrique <a href='home.htm'>Accueil</a><br/> Rubrique <a href='cv.htm'>CV</a><br/> Rubrique <a href='photos.htm'>Photos</a><br/> HTML et les formulaires * Formulaire = balise HTML <form> * Contient des champs de saisie * Chaque champ a un nom (attribut "name") * Chaque champ a une valeur (attribut "value") * Permet la saisie de paramètres (association nom-valeur) * Associé à une action * URL où transmettre les données (PHP ou HTML) * Attribut "action" * Méthode de transmission des données ("get" ou "post") * Attribut "method" * <form method="get" action="login.php"> * Contient un bouton de soumission * Il déclenche l'envoi des données * Il transmet les couples nom-valeur de chaque champ * La page destinataire reçoit une liste de paramètres Eléments d'un formulaire (1/3) * Saisie de texte * <input type="text"/>: Une seule ligne, saisie visible * <input type="password"/>: Une seule ligne, saisie cachée * <textarea>: Plusieurs lignes Eléments d'un formulaire (2/3) * Sélection * <input type="checkbox"/>: Réponse oui / non * <input type="radio"/>: Une sélection parmi plusieurs * <select>: Menu déroulant Eléments d'un formulaire (3/3) * Information cachée * <input type="hidden"/> * Exemple: transmettre un identifiant * Attribut "value" contient la valeur * Sélection de fichier * <input type="file"/> * Fichier téléchargé au moment de la soumission * Méthode "post" * Encodage binaire: enctype="multipart/form-data" * Nom du fichier stocké dans "value" * Méthode "get" * Méthode "post" avec encodage normal * Boutons * <input type="submit"/>: Soumission du formulaire * Attribut "value" pour changer le nom * <input type="reset"/>: Réinitialisation du formulaire * Attribut "value" pour changer le nom * <input type="image"/>: Soumission en forme d'image * Attribut "src" pour indiquer l'image Exemple de formulaire * Code HTML <form method="get" action="login.php"> <p>Utilisateur: <input type="text" name="user"/></p> <p>Mot de passe: <input type="password" name="pass"/></p> <p><input type="submit" value="Se connecter"/></p> </form> * Apparence Passage de paramètres (méthode "get") * Paramètres transmis dans l'URL * Ils apparaissent en clair * La taille des données est limitée * Attention au format des données (caractères spéciaux) * S'utilise avec l'ancre * <a href="login.php?user=nawouak&pass=dummy"> * S'utilise aussi avec le formulaire * <form action="login.php" method="get"> * Accessibles par le tableau "_GET" * echo "Utilisateur: $_GET['user']"; Passage de paramètres (méthode "post") * Paramètres transmis dans l'entête de la requête * Ils n'apparaissent pas en clair dans l'URL * Ils ne sont pas pour autant cryptés * La taille des données n'est plus limitée * Il n'y a pas à se soucier des caractères spéciaux * S'utilise uniquement avec le formulaire * <form action="login.php" method="post"> * Accessibles par le tableau "_POST" * echo "Utilisateur: $_POST['user']"; En vrac... * Empêcher le code HTML dans les formulaires * $nom = "<b>Nawouak</b>"; * echo $nom; ==> <b>Nawouak</b> * echo htmlEntities($nom); ==> <b>Nawouak</b> * Rediriger une page PHP vers une autre * header("Location: nouvelle_page"); * Attention: rien ne doit être affiché avant cette instruction * Doit être avant la balise <html> * Pas d'instruction "echo" avant * Pour comparer sans casse * $en_minuscule = strtolower($chaine); * $en_majuscule = strtoupper($chaine); * if (strtolower($chaine1) == strtolower($chaine2)); |