Chapitre 2
RAPPELS SUR PHP
 
 
Précédent Suivant
 

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));