1 / 65

Formulaires, CGI et PHP

Formulaires, CGI et PHP. David Gross-Amblard (CNAM-Vertigo/Cédric) dgram@cnam.fr Transparents originaux : Philippe Rigaux. Projet 3I 31.10.2001. Plan. Le langage PHP principe syntaxe Applications de PHP formulaires HTML, interaction avec Php Production automatique de documents HTML

Download Presentation

Formulaires, CGI et PHP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Formulaires, CGI et PHP David Gross-Amblard (CNAM-Vertigo/Cédric) dgram@cnam.fr Transparents originaux : Philippe Rigaux Projet 3I 31.10.2001

  2. Plan • Le langage PHP • principe • syntaxe • Applications de PHP • formulaires HTML, interaction avec Php • Production automatique de documents HTML • (Gestion de sessions : les cookies en Php)

  3. Informations • www.php.net : la référence • www.easyphp.org : un paquetage complet sous windows • De très nombreux scripts sur le web : forums, agenda, jeux, … prêt-à-servir.

  4. Le langage PHP

  5. 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

  6. Petit exemple PHP : toto.php <HTML> <HEAD><TITLE>Bonjour</TITLE></HEAD> <BODY> <H1>Quelle heure est-il ?</H1> <P>Il est exactement <?php echo date(“h:i:s”); ?> </P> </BODY> </HTML>

  7. Comment ça marche Requête HTTP : toto.php Navigateur Programme serveur Interprêteur PHP Document HTML Fichier toto.php HTML/PHP Exécution des instructions PHP machine serveur

  8. Ce que renvoit le serveur <HTML> <HEAD><TITLE>Bonjour</TITLE></HEAD> <BODY> <H1>Quelle heure est-il ?</H1> <P>Il est exactement 19:38:5 </P> </BODY> </HTML> Le navigateur ne voit que du HTML !

  9. Syntaxe de PHP • Commentaires • /* ... */ ou //... ou # ... • Variables • Un '$', puis (au moins) une lettre, puis tout ce qu'on veut. • Attention : distinction minuscules/majuscules • Constantes • define (PI, 3.14116)

  10. Déclaration de variables, types • Pas de déclaration de variable en PHP ! • L'apparition d'un nouveau symbole préfixé par '$' entraîne la création d'une variable Ex : $maVariable = 1; • La valeur initiale est '''' ou 0 selon le contexte • Le typage est dynamique • Une même variable peut être utilisée pour stocker plusieurs types de données • Des conversions sont appliquées quand c'est nécessaire.

  11. Types scalaires • Les entiers$i = 1; • Les flottants$i = 1.12; • Les chaînes de caractère$i = "Je suis une chaîne"; • Booléen$i = true; • NB: 0 <=> false, tout le reste vaut true.

  12. A propos des chaînes de caractères • Apostrophes simples : mise en page quelconque.$c = 'Je suis une chaîne de caractères'; • Apostrophes doubles : possibilité d'inclure des variables$nom = "Phileas Fogg"; $c = "Je m'appelle $nom";

  13. Production de HTML • On écrit avec echo ou printf • Des chaînes et/ou des variables • En utilisant la concaténation, '.' • $nom = "Fogg";$nb = 3;echo "Je m'appelle $nom" . "et je prends le métro " . $nb . " fois par jour";

  14. Tableaux • Tableaux indicés : • liste de valeurs indicées par 0, 1, 2, ...$tab[0] = 1; $tab[1] = "une chaîne"; • Tableaux associatifs : • liste de valeurs référencées par des clés$MES["Vertigo"]="Hitchcock";$MES ["Gladiator"]="Scott";

  15. Initialisation d'un tableau • Avec array : • Indicé: $tab = array("e1","el2",120); • Associatif: $mes=array("Vertigo"=>"Hitchcock", "Gladiator" => "Scott"); • Implicitement (utile pour les formulaires) • $tab[] = "el1"; • $tab[] = "el2"; • $tab[] = 120;

  16. Parcours d'un tableau • Tableau indicé : en incrémentant l'indice • for ($i=0; $i < count($tab); $i++) echo "Element $i =" . $tab[$i]; • Tableau associatif : avec des fonctions • Un curseur sur le tableau est déplacé avec next ou prev • Les fonctions key et current renvoient les données du curseur. • do{ echo "Clé : “.key($mes).” élément :”.current($mes); } while (next($mes));

  17. Expressions • Expression = tout ce qui a une valeur. • En PHP, comme en C, presques toutes les instructions ont une valeur. • 10; • $i = 10; • $i; • L'affectation a elle-même une valeur, donc on peut écrire • $j = $i = 10;

  18. Opérateurs • Opérateurs arithmétiques: +, -, *, / • $i = 20; $i = ($i + 2) * 34; • Comparaisons : ==, <, >, <=, >= • $i == 20; $j == $j - 1; • Opérateurs logiques: && (and) || (or) ! (not) • ($i == 20 && $j = j-1) • Concaténation de chaînes • $c1 = "Phileas"; $c2 = "Fogg"; • $nom = $c1 . " " . $c2;

  19. Facilités syntaxiques • Expressions équivalentes : • $i = $i + 20; • $i += $20; • Valable pour tous les opérateurs • $nom = "Phileas "; • $nom .= "Fogg"; • Incrémentations • Au lieu de $i=$i+1, on écrit $i++ ou ++$i; • Valeur de l'expression ?

  20. Structures de contrôle : tests • if (expression){ // bloc si expression != 0}else{ // bloc si expression = 0} • Rappel: expression = tout ce qui produit une valeur ! • Les if-then-else peuvent s'imbriquer.

  21. Structures de contrôle : switch • switch (expression){ case val1: // bloc si expression==val1 break;case val2: // bloc si expression==val1 break; ... default: // tout a échoué break; }

  22. Boucles : do et while • while (expression){ // bloc tant que expression!=0} • A un moment donné, expression doit devenir 0 ! • do{ // bloc tant que expression!=0} while (expression) • NB : le bloc s'exécute au moins une fois

  23. Boucles : for • $i = 0;while ($i < 5){ // bloc $i++;} • Peut être remplacé par : • for ($i=0; $i<5; $i++) {bloc}; • NB : on peut faire des choses très compliquées.

  24. Instructions break et continue • L'instruction break permet de sortir du corps d'une boucle. • L'instruction continue force le passage à l'itération suivante. • $i = 0;while (1){ if (++$i == 5) break; if ($i == 3) continue; // instructions}

  25. Fonctions: passage des arguments function Addition ($i, $j) { // NB :$i et $j sont des variables locales $somme = $i + $j; $i = 2; $j = 3; return $somme; } $i = 1; $j = 1; // Appel de la fonction, passage par valeur $k = Addition ($i, $j); // $i et $j valent toujours 1 !

  26. Fonctions: passage par adresse • En préfixant par '&', on passe une variable par adresse. • Introduit un effet de bord si la fonction modifie ses arguments : très mauvais $i = 1; $j = 1; // Appel de la fonction, passage par valeur $k = Addition (&$i, &$j); // $i et $j valent 2 et 3 !

  27. Passage par adresse avec déclaration function Addition ($i, $j, &$somme) { $somme = $i + $j; $i = 2; $j = 3; } $i = 1; $j = 1; // Appel de la fonction, passage par adresse de $k Addition ($i, $j, $k); // $i et $j valent toujours 1, $k vaut 2

  28. Valeurs par défaut • Il est possible de donner une valeur par défaut aux arguments: très pratique • function Connexion ($nom=”gross", $passe="mdp", $serveur="cortes"){ // instructions }... // Connexion à cortes Connexion (); // Connexion de Amman à cortes Connexion ("amann","mdp2"); // Connexion à cartierConnexion ("gross","mdp","cartier")

  29. Fonctions et variables : conseil du jour • Bon principe : une fonction n'accède pas aux variables du programme appelant, et réciproquement • Variables automatiques : apparaissent et disparaissent avec la fonction => très bon • Variables statiques : locales à la fonction, mais persistantes entre deux appels => bon • Variables globales : visibles partout => TRES MAUVAIS. • => Se limiter aux variables automatiques

  30. Application : formulaires HTML

  31. Formulaires HTML: <FORM> • Un conteneur pour les champs de saisie: • ACTION est l'URL du script ou du programme à déclencher (en principae, sur le serveur) • METHOD est GET ou POST (meilleur)

  32. Exemple : un formulaire HTML (démo) <FORM ACTION='http://cortes.cnam.fr:8080/action.php' METHOD=GET> Paramètres pour la recherche de films :<P> Titre : <INPUT TYPE=TEXT SIZE=20 NAME = 'titre'> <P> Année début : <INPUT TYPE=TEXT SIZE=4 NAME='anMin' VALUE=1900> Année fin : <INPUT TYPE=TEXT SIZE=4 NAME='anMax' VALUE=2100> <P> <INPUT TYPE=SUBMIT VALUE='Rechercher'> </FORM> </BODY></HTML>

  33. Transmission • Chaque champ a un nom • GET : les données sont transmises dans l ’URL http://cortes.cnam.fr:8080/action.php?titre=alien& anMin=1950&anMax=2001 • POST : transmission dans le protocole HTTP (invisible sur l ’URL)

  34. Champs de formulaire : <INPUT> • Très général: saisie de texte, ou choix dans des listes. L'attribut TYPE vaut: • TEXT pour les chaînes de caractères • HIDDEN pour les champs cachés • CHECKBOX pour un choix multiple • RADIOBOX pour un choix exclusif • SUBMIT pour déclencher l'action • FILE pour transmettre un fichier

  35. Champs <SELECT> • Permet de choisir une ou plusieurs valeurs dans une liste • <SELECT NAME='realisateur' SIZE=3> <OPTION VALUE=1>Alfred Hitchcock <OPTION VALUE=2 SELECTED>Maurice Pialat <OPTION VALUE=3>Quentin Tarantino</SELECT> • L'option MULTIPLE permet de sélectionner plusieurs valeurs

  36. Champ <TEXTAREA> • Pour entrer du texte libre: • <TEXTAREA NAME='resume' COLS=30 ROWS=3> Résumé du film </TEXTAREA> • L'attribut MAXLENGTH indique la longueur maximale du text.

  37. Un formulaire complet (démo) <FORM ACTION="http://cortes.cnam.fr:8080/ExPHP1.php" METHOD=POST > <INPUT TYPE="HIDDEN" NAME="monNom" VALUE="ExFormFilm"> Titre : <INPUT TYPE=TEXT SIZE=20 NAME="titre"> Année : <INPUT TYPE=TEXT SIZE=4 MAXLENGTH=4 NAME="annee"> <P> Comédie : <INPUT TYPE=CHECKBOX NAME='genre' VALUE='C'> Drame : <INPUT TYPE=CHECKBOX NAME='genre' VALUE='D'> Histoire : <INPUT TYPE=CHECKBOX NAME='genre' VALUE='H'> Suspense : <INPUT TYPE=CHECKBOX NAME='genre' VALUE='S'> <P> France : <INPUT TYPE=RADIO NAME='pays' VALUE='FR' CHECKED> Etats-Unis : <INPUT TYPE=RADIO NAME='pays' VALUE='US'> Allemagne : <INPUT TYPE=RADIO NAME='pays' VALUE='DE'> Japon : <INPUT TYPE=RADIO NAME='pays' VALUE='JP'> <P> Affiche du film : <INPUT TYPE=FILE SIZE=20 NAME='affiche'>

  38. Un formulaire complet (suite) Metteur-en-scène : <SELECT NAME='realisateur' SIZE=3> <OPTION VALUE=1>Alfred Hitchcock <OPTION VALUE=2>Maurice Pialat <OPTION VALUE=3 SELECTED>Quentin Tarantino <OPTION VALUE=4>Akira Kurosawa <OPTION VALUE=5>John Woo <OPTION VALUE=6>Tim Burton </SELECT> <P> Résumé:<TEXTAREA NAME='resume' COLS=30 ROWS=3>Résumé </TEXTAREA> <H1>Votre choix</H1> <INPUT TYPE=SUBMIT VALUE='Valider'> <INPUT TYPE=RESET VALUE='Annuler'> </FORM>

  39. 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

  40. 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.”; ?>

  41. Passage de valeurs multiples (démo) <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>

  42. 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 !

  43. 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 re₤u 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.

  44. 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>

  45. 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"); ?>

  46. 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

  47. Application : production de code HTML

  48. Intégration avec HTML • Question : vaut-il mieux mettre du PHP dans du HTML ou l'inverse ? • Pour HTML : on génère le site avec un bon éditeur, et on met un peu de PHP dedans • Mais ... le code est ILLISIBLE • Pour PHP : on programme des utilitaires pour produire du HTML • Le code est lisible ... pour les informaticiens.

  49. Fonctions produisant du code // Fonctions produisant des conteneurs HTML function Ancre ($url, $libelle, $classe="") { return "<A HREF='$url' CLASS='$classe'>$libelle</A>\n"; } function Image ($fichier, $largeur=-1, $hauteur=-1, $bordure=0) { if ($largeur != -1) $attrLargeur = " WIDTH = '$largeur %' "; if ($hauteur != -1) $attrHauteur = " HEIGHT = '$hauteur %' "; return "<IMG SRC='$fichier'" . $attrLargeur . $attrHauteur . " BORDER='$bordure'>\n"; }

  50. Exemple • Faire un lien sur une image : <?php echo Ancre(‘http://www.truc.org/maison.html’, Image(‘ maison.gif ’)); ?> • Produit : <A HREF=’http://www.truc.org/maison.html’ CLASS=‘’> <IMG SRC=‘ maison.gif ’ BORDER=0> </A>

More Related