PHP virginie.sans@irisa.fr http://perso.univ-rennes1.fr/virginie.sans/ BUR Internet et HTML
PHP, qu'est-ce que c'est? Un langage pour la programmation du serveur Permet d'inclure des parties programmées dans du HTML Très proche du langage C Très riche en fonctions, notamment pour l'accès aux bases de données
Modèle requête Client internet Serveur réponse appel de la page Base de données MySQL extraction de données Script PHP exécution Document Html 3/154
Intégration d un script dans une page Les pages web sont au format html. Les pages web dynamiques générées avec PHP4 sont au format php. Le code source php est directement insérer dans le fichier html grâce au conteneur de la norme XML : <?php?> Exemple: <html> <body> <?php echo Bonjour ;?> </body> </html> 4/154 Autres syntaxes d intégration : <??> <script language= php > </script> <% %>
Exemple de script Exemple de script, code source (côté serveur) : <html> <body> <h1>mon premier script</h1> <?php echo Bonjour\n ;?> </body> </html> Autre écriture du même script : <?php echo <html>\n<body>\n ; echo <h1>mon premier script</h1>\n ; echo Bonjour\n ; echo </body>\n</html>\n ;?> Résultat affiché par le navigateur : Code source (côté client) de la page essai.ph3 résultant du script 5/154
Balises du PHP Instructions PHP placées entre un jeu de balises : <?php?> D autres balises, à proscrire : <??> <% %> <script language="php"> </script>
Commentaires Commentaires sur une seule ligne : // Commentaires Commentaires sur plusieurs lignes : /* Commentaires sur * plusieurs lignes */
Types Typage faible : Pas besoin de déclarer les types Conversion automatique implicite 8 types différents : 4 types scalaires 2 types composés 2 types spéciaux
Types scalaires Booléen : Entier : true 10 Nombre à virgule flottante : 34.53 Chaîne de caractères : Bonjour tout le monde
Autres types Types composés : Tableau Objet Types spéciaux : Ressource NULL
Classes Php gère la programmation orientée objet à l aide de classes. Exemple : class Voiture { // déclaration de la classe var $couleur; // déclaration d un attribut var $belle = TRUE; // initialisation d un attribut function voiture() { // constructeur $this->couleur = noire ; } // le mot clé $this faisant référence à l objet est obligatoire function Set_Couleur($couleur) { $this->couleur = $couleur; } } $mavoiture = new Voiture(); // création d une instance $mavoiture->set_couleur( blanche ); // appel d une méthode $coul = $mavoiture->couleur; // appel d un attribut 11/154
Classes (II) Le système de classes de php est très succint, il ne gère que l héritage simple. Exemple : class Voituredeluxe extends Voiture { // déclaration de la sous classe var $couleur; function voituredeluxe() { // constructeur $this->voiture(); } function Set_Couleur($couleur) { $this->couleur = $couleur; } function Get_Couleur() { return $this->couleur; } } La nouvelle classe Voituredeluxe hérite de tous les attributs et méthodes de la classe parente Voiture dont elle est une extension (extends). Il est possible de surcharger les méthodes, d en déclarer de nouvelles, etc. 12/154
Fonctions Fonctions : gettype(); is_<type>(); (ex : is_int();) $var = 3; echo is_int($var); // Affiche true $var = "Hello World"; echo is_int($var); // Affiche false echo is_string($var); // Affiche true
Variables Sensible à la casse Préfixé par un $ (dollar) Valable : $_var; $var; $Var; Non valable : $123var;
Variables Assignement : Concaténation : Destruction : $var = "valeur"; $var = $foo. $bar; $var = $foo. "mot"; unset($var);
Constantes Identifiant représentant une valeur Sensible à la casse (par convention, en majuscules) Types scalaires uniquement Déclaration : Appel : Test : define("foo", "something"); FOO; defined("foo"); // Retourne un booléen
Constantes prédéfinies Constantes définies dans PHP Pas d assignation préalable echo PHP_EXTENSION_DIR; // Affiche le chemin du répertoire stockant les extensions
Tableaux Association clés valeurs Syntaxe : $fruits = array('pomme', 'poire', 'pêche');
Utilisation Manipulation d un élément grâce à son index (ou sa clé) $fruits = array('pomme', 'poire', 'pêche'); echo $fruits[2]; // Affiche pêche $fruits[2] = 'abricot'; echo $fruits[2]; // Affiche abricot
Tableaux associatifs Association clé valeurs explicite La clé est définie par le développeur $promos = array('ps1' => 'Promo 2011', 'PS2' => 'Promo 2010', 'ING1' => 'Promo 2009', 'ING2' => 'Promo 2008', 'ING3' => 'Promo 2007');
Opérateurs Opérateurs de calculs : + - * / % ++ -- Opérateurs de comparaisons : ==!= ===!== <> < <= => > Opérateurs logiques : &&
Structures de contrôle et de tests Voici les chapitres que nous allons aborder: if elseif... else. switch. while, do... while. for. foreach. break. continue.
if elseif else if requiert une condition Notation alternative Egalement disponible pour les autres structures de contrôle if ($str == "Hello") { // Code } if ($str == "Hello"): // Code endif;
if elseif else else est exécuté le cas échéant if ($str == "Hello") { // Code } else { // Code }
if elseif else elseif permet de faire plusieurs tests différents if ($str == "Hello") { // Code } elseif ($str == "Bye") { // Code } else { // Code }
if elseif else Plusieurs conditions pour un test if ($str == "Hello" empty($str)) { // Code } else { // Code }
Opérateur ternaire Equivalent à if else echo ($int == 1? "int = 1" : "int =?");
switch Similaire à if elseif else Succession de tests sur la valeur de la variable d entrée Le code dans default est exécuté si tous les tests échouent switch ($str) { case "Hello": // Code break; case "Bye": // Code break; default: // Code break; }
while Exécution tant que la condition est vraie Notation alternative while ($int < 10) { echo $int; $int++; } while ($int < 10): echo $int; $int++; endwhile;
do while Un passage forcé $int = 1; do { echo $int; } while ($int < 0);
for Initialise la variable Teste si la condition est vraie Effectue une action for ($i = 0 ; $i < 10 ; $i++) { echo $i; }
foreach Parcours d un tableau foreach ($array as $value) { } echo $value;
foreach Possibilité de récupérer la clé en plus de la valeur foreach ($array as $key => $value) { } echo $key. " : ". $value;
break Permet de sortir d une structure de contrôle Possibilité de sortir de plusieurs structures. while ($int < 10) { break; } while ($int < 10) { while (true) { break 2; } }
continue Possibilité de sauter une itération for ($i = 0 ; $i < 10 ; $i++) { if ($i == 3) continue; } echo $i;
continue Possibilité de sauter une itération dans une boucle d un niveau supérieur $i = 0; while ($i++ < 10) { } for ($j = 0 ; $j < 10 ; $j++) { if ($j == 3) continue 2; echo $j; }
Traitement des données en PHP On récupère, sous forme de variable PHP, les champs d'un formulaire Pour les valeurs scalaires -> un variable Pour les fichiers -> un nom de fichier temporaire
Que se passe-t-il quand on valide? Le programme client transmet au programme serveur les infos sous la forme: titre=t&annee=a... Pour le script PHP, cela donne: $titre = t; $annee=a; Et on peut maintenant utiliser ces données pour fabriquer une page HTML <?php if ($année<1920) echo Desole, on a pas. ;?>
Passage de valeurs multiples <FORM ACTION="http://cartier/ITCE/EXEMPLES/ExPHP2.php METHOD=POST"> Titre : <INPUT TYPE=TEXT SIZE=20 NAME="titre"> <TABLE><TR><TH>Prénom</TH><TH>Nom</TH></TR> <TR><TD><INPUT TYPE=TEXT SIZE=30 NAME="prenom[]"> <TD><INPUT TYPE=TEXT SIZE=30 NAME="nom[]"> <TR><TD><INPUT TYPE=TEXT SIZE=30 NAME="prenom[]"> <TD><INPUT TYPE=TEXT SIZE=30 NAME="nom[]"> <TR><TD><INPUT TYPE=TEXT SIZE=30 NAME="prenom[]"> <TD><INPUT TYPE=TEXT SIZE=30 NAME="nom[]"> </TABLE> <H1>Votre choix</h1> <INPUT TYPE=SUBMIT VALUE='Valider'> <INPUT TYPE=RESET VALUE='Annuler'> </FORM>
Que se passe-t-il quand on valide? Le programme client transmet au programme serveur les infos sous la forme: titre=t&prenom[]=p1&nom[]=n1&prenom[]=p2&nom[]=n2&... Pour le script PHP, cela donne: $titre = t; $prenom[] = p1, $nom[] = n1; $prenom[] = p2, $nom[] = n2;... => on crée deux tableaux PHP!
Ce que fait le script Une boucle sur les tableaux permet de récupérer les valeurs. <?php echo "Pour le film $titre j'ai recu les acteurs suivants:<p>\n"; $nbacteurs = count($prenom); for ($i=0; $i < $nbacteurs; $i++) echo "<B> $prenom[$i] $nom[$i]<b><br>\n";?> -> A utiliser aussi pour les champs SELECT multiples.
Transmission de fichiers <FORM ACTION="http://cartier/ITCE/EXEMPLES/ExPHP3.php" METHOD=POST" ENCTYPE= "multipart/form-data"> <INPUT TYPE="hidden" name="max_file_size" value="100000"> Titre : <INPUT TYPE=TEXT SIZE=20 NAME="titre"> <P> Affiche: <INPUT TYPE=FILE SIZE=20 NAME='affiche'> <H1>Votre choix</h1> <INPUT TYPE=SUBMIT VALUE='Valider'> <INPUT TYPE=RESET VALUE='Annuler'> </FORM>
Transmission de fichiers Le fichier est transmis sur le serveur avec quelques variables qui le décrivent: <?php echo "Pour le film $titre j'ai recu le fichier suivant :<P>\n"; echo "<B>Nom du fichier client :<B>$affiche_name<BR>\n"; echo "<B>Nom du fichier sur le serveur :<B>$affiche<BR>\n"; echo "<B>Taille du fichier :<B>$affiche_size<BR>\n"; echo "<B>Type du fichier :<B>$affiche_type<BR>\n"; // Copie du fichier temporaire copy($affiche, "./MonAffiche");?>
Autres variables utiles Infos. sur le client : $REMOTE_HOST : nom de la machine client $REMOTE_ADDR : adresse IP de la machine client $REMOTE_USER : nom du client après identification $HTTP_ACCEPT : liste des types MIME acceptés par le client $HTTP_USER_AGENT : nom du navigateur