X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=unix_prog_web%2Funix_prog_web_08.xhtml;fp=unix_prog_web%2Funix_prog_web_08.xhtml;h=76dda71cc4908758ff7159326c780c485a46df83;hb=e710b4da74b3fb2ffc4af8f6251ed5ad1b0476b1;hp=9bf82b5826dc18617572e58976e7beb891db5d47;hpb=974b232a2c493d5e599c51af0fb85a354d5f2b3a;p=hacks%2FsimpleWebSlides.git diff --git a/unix_prog_web/unix_prog_web_08.xhtml b/unix_prog_web/unix_prog_web_08.xhtml index 9bf82b5..76dda71 100644 --- a/unix_prog_web/unix_prog_web_08.xhtml +++ b/unix_prog_web/unix_prog_web_08.xhtml @@ -4,7 +4,7 @@ >
-GET /~kn/index.html HTTP/1.1
-Host: www.lri.fr
-
HTTP/1.1 200 OK
-Server: nginx/1.4.1 (Ubuntu)
-Date: Sun, 17 Nov 2013 16:44:48 GMT
-Content-Type: text/html
-Content-Length: 2038
-
- Homepage
-
- â¦
-]]>
-
-} â code de retour
+ Champs de texte
+ On peut placer un champ de texte dans un formulaire au moyen
+ de la balise <input type="text"
+ />.
+
+ ]]>
+ Apperçu:
+ Attributs:
+
+
+ - size: donne la largeur en caractères
+ - name: le nom de l'élément (pour y accéder depuis PHP)
+ - value: la valeur initiale du champ (si on veut le pré-remplir)
+
+ Accès à la valeur depuis PHP se fait
+ via $_GET["montexte"] ou $_POST["montexte"]
+ selon la valeur de l'attribut method de
+ l'élément form englobant.
+
Pour des textes multilignes, on utilise la + balise <textarea />. +
+du texte!
+]]>
+ Apperçu: + Attributs: +
+On peut pré-remplir la zone en mettant du texte entre la + balise ouvrante et fermante. + Accès à la valeur depuis PHP se fait + via $_GET["montexte"] ou $_POST["montexte"] + selon la valeur de l'attribut method de + l'élément form englobant.
GET /~kn/fichier.pdf HTTP/1.1
-Host: www.lri.fr
-
HTTP/1.1 200 OK
-Server: nginx/1.4.1 (Ubuntu)
-Date: Sun, 17 Nov 2013 16:44:48 GMT
-Content-Type: application/pdf
-Content-Length: 103449
->
-stream
-â¦â¦â¦
- ]]>
-
-
-On peut définir une liste déroulante avec les + balises <select> et <option>
+
+
+
+
+
+
+]]>
+Apperçu: + Attributs: +
+Le contenu de chaque élément option est celui affiché dans la + liste. + Accès à la valeur depuis PHP se fait + via $_GET["maliste"] ou $_POST["maliste"] + selon la valeur de l'attribut method de + l'élément form englobant.
Fichier notes_csv.php:
- <?php
- header('Content-type: application/csv');
- header('Content-Disposition: attachement; filename="notes.csv"');
- echo "Nom, Note\n";
- foreach ($NOTES as $nom => $note)
- echo $nom . ", " . $note . "\n";
+
+ Boutons à choix unique
+ On peut définir un choix avec la balise
+ <input type="radio">
+
+ 12h
+ 20h
+]]>
+
+Apperçu : 8h
+12h
+20h
+
+
+ Accès à la valeur depuis PHP se fait
+ via $_GET["h"] ou $_POST["h"]
+ selon la valeur de l'attribut method de
+ l'élément form englobant.
+ Attention il faut réutiliser la même valeur de
+ l'attribut name pour les boutons du même groupe.
- ?>
-
⚠ Attention!
-
- - Les appels à la fonction header() doivent se
- trouver
avant le premier echo() du code PHP
- -
- Le code PHP doit générer (avec echo()) du contenu
- compatible avec le type annoncé (et pas du HTML)
-
-
+
+
+ Cases à choix multiples
+ On peut définir des cases à cocher à choix multiple avec la balise
+ <input type="radio">
+
+ 12h
+ 20h
+]]>
+
+Apperçu:
+ 8h
+ 12h
+ 20h
+
+
+ Accès à la valeur depuis PHP se fait
+ via $_GET["tab"] ou $_POST["tab"]
+ selon la valeur de l'attribut method de
+ l'élément form englobant.
+ Attention il faut rajouter [] dans l'attribut name pour
+ que PHP crée un tableau. tab[i] contient la
+ valeur de la ième cases cochée (à partir de 0).
+
+
+Variables super-globales (rappels)
-Quelques en-tête utiles
-En tête utilisés par le serveur dans ses réponses
-
- - Content-type
- type MIME du contenu envoyé par le
- serveur
- - Content-Disposition
- permet de mentionner un nom de
- fichier : attachment; filname="foobar.baz"
- - Cache-Control
- permet de forcer le client Ã
- retélécharger la page: no-cache, must-revalidate
-
- - Last-Modified
- date de dernière modification du
- contenu demandé
-
-En tête utilisés par le client dans ses requêtes
-
- - Range
- permet de ne récupérer qu'un intervale
- d'octets donné dans un fichier: bytes=500-999
-
- â¦
-
+ Variables super-globales
+ PHP définit un certain nombre de variables dites
+ « super-globales ». Ce sont des variables accessible
+ depuis n'importe où dans un programme PHP, y compris depuis des
+ fonctions, sans adjonction du mot clé global.
+
+ $TOTO = 42;
+ function f() {
+ global $TOTO; // obligatoire, sinon $TOTO n'est pas visible
+ echo $TOTO;
+ echo $_GET["champ"]; //fonctionne toujours, même sans 'global'
+ //au début de la fonction.
+
+ }
+
+
- Retour sur le protocole HTTP (3)
- On rappelle que HTTP est un protocole stateless
- (sans état, i.e. le serveur Web ne conserve pas d'information
- entre les connexions). Quel problème cela pose-t-il ?
-
- - Pas de partage d'information entre plusieur
- pages
- - Pas de mécanisme de reprise sur panne
-
- - Pas de persistance de l'information
- - Pas d'authentification (impossible de savoir
- que deux connexions successives ont été faites par le même
- client)
-
- â difficle de réaliser une « application »
- moderne répartie sur plusieurs pages
+Variable $_GET et $_POST
+
+ Ces variables contiennent les valeurs des champs d'un formulaire.
+ Si l'attribut method de l'élément form
+ vaut get la variable $_GET contient les valeurs.
+ S'il vaut post la variable $_POST est à utiliser.
+
-
-Cookies
-Cookies
-Un cookie est un packet de données envoyé par le
- serveur, stocké par le client (navigateur Web) et renvoyé au serveur
- lors d'une nouvelle connexion. Les propriétés d'un cookie sont:
+
Variable $_FILES
+
+ Cette variable contient les informations relatives aux fichiers
+ envoyés par le client.
Si le nom du champ est fichier,
+ alors:
+
- - Son nom
- une chaîne de caractères
- - Sa valeur
- une chaîne de caraceres
- - Sa durée de vie
- jusqu'à la fin de la « session » ou pour
- une période donnée
- - Son domaine
- Le nom du site web émetteur du cookie
- - Son chemin
- Le sous-répertoire (par rapport à la racine
- du site) pour lequel le cookie est valide
-
-⚠ Attention! seul le domaine qui a
- déposé le cookie est capable de le relire
+ $_FILES["fichier"]["error"] Code d'erreur
+ (0 si tout c'est bien passé, > 0 si une erreur s'est produite. Les
+ autres champs ne sont définis que si "error" vaut 0).
+
+ $_FILES["fichier"]["tmp_name"] Nom du fichier
+ temporaire sur le serveur où a été sauvegardé le contenu du
+ fichier envoyé
+ $_FILES["fichier"]["name"] Nom original du fichier
+ $_FILES["fichier"]["size"] Taille du
+ fichier
+ $_FILES["fichier"]["type"] Le type MIME du fichier
+
-Cookies en PHP
-Créer ou mettre à jour un cookie sur le client:
-
- setcookie($nom, $val, $date);
-
-
- - $nom
- nom du cookie
- - $val
- valeur du cookie
- - $date
- date d'expiration en secondes
- depuis epoch (1er janvier 1970 00:00:00)
- ou NULL pour une expiration automatique.
-
-(on peut récupérer le nombre de secondes depuis epoche avec
- la fonction time()).
- Exemple:
+
Variable $_SESSION
+Contient les variables de sessions. La variable n'est
+ accessible qu'après un appel à session_start(). Ces
+ le contenu de cette variable persiste durant toute la durée de la
+ session même sur des pages différentes. La
+ variable $_SESSION est un tableau.
- setcookie("mon_cookie", "42", time() + 3600 * 24 * 30);
- Cookies en PHP
- On peut récupérer la valeur d'un cookie depuis PHP:
-
- $_COOKIE["mon_cookie"]
- Un cookie "foo" existe (i.e. a été défini
- auparavant) si une entrée correspondante existe dans le tableau
- global $_COOKIE. On peut tester qu'une entrée
- existe dans un tableau avec isset().
-
- ⚠ Attention!
-
- - On ne peut pas écrire dans $_COOKIE (par
- exemple $_COOKIE["foo"] = 42), il faut
- utiliser setcookie().
-
- - setcookie()
- utilise header() et doit donc être appelé avant
- le premier echo() du fichier.
-
- - Pour effacer un cookie, on peut lui donner une date
- d'expiration antérieure à l'instant présent (0 par exemple)
-
-
-
-
- Avantages et inconvénients des cookies
-
- - + stockage persistant
- - + interface simple d'utilisation (une
- variable pour la lecture et setcookie pour l'écriture)
- - - limité en taille
- - - limité en nombre par domaine
- - - type de donnée limité à des chaînes
- (on ne peut pas stocker un tableau PHP par exemple)
-- +/- stocké sur le client
-
-
-Sessions
-
-Sessions
- Une session HTTP est un ensemble de requêtes/réponses HTTP
- entre un serveur et un même client.
- Exemple d'un sondage en ligne:
-
- - Le visiteur arrive sur la page q1.php en cliquant sur
- le lien « commencer le sondage » (Début de session)
-
- - Sur q1.php, l'utilisateur coche des choix dans un formulaire et appuie
- sur un boutton de soumission qui l'envoie sur q2.php
-
- - â¦
- - Sur q10.php, l'utilisateur coche des choix dans un
- formulaire et appuie sur un bouton de soumission qui l'envoie
- sur resultat.php
- - Sur resultat.php, le résultat global du sondage (%
- par question, nombre de participants jusqu'à présent etc...) est
- affiché (Fin de session)
-
-
-
-
-
- Variables de session
- Pour programmer une application Web, on souhaîte avoir accès Ã
- des variables de session c'est à dire des variables qui
- sont:
-
- - Globale au serveur, et accessibles depuis plusieurs pages
- PHP différentes
- - Spécifiques à un « utilisateur » (c'est à dire à une session
- particulière)
-
-
- Les variables de sessions sont donc propres à chaque client et
- persistent le temp de la session (le temps de session est décidé par
- le serveur)
+Variable $_COOKIE
+Contient les cookies que le client à envoyé au serveur.
+ La
+ variable $_COOKIE est un tableau.
+
+Conception d'une application simple (étude de cas)
- Variables de session en PHP
- On initie une session avec la fonction:
- session_start();
- Une fois appelée, la variable $_SESSION
- contient un tableau que l'on peut utiliser entre plusieurs
- pages. Les valeurs contenues dans le tableau persistent jusqu'Ã la
- fin de la session. Une session se termine:
+
Cahier des charges
+ On souhaite créer une application Web simple de gestion de QCM.
+ L'application doit répondre au contraintes suivantes :
- - Quand le client se déconnecte
- - Après un certain temps (« votre session a expiré, veuillez
- vous reconnecter»)
- - Quand le code PHP
- appelle session_end();
+
+ - Un QCM est un ensemble de questions, suivies d'une liste de
+ choix. Il peut y avoir plusieurs choix possible. La réponse à la
+ question est correcte si uniquement les bons choix sont
+ sélectionnés.
+ - Un QCM doit être facilement modifiable/éditable
+ - Après la réponse à la dernière question, le score de
+ l'utilisateur est affiché, ainsi que les bonnes réponses
+ - Il y a un temps limite par question
-⚠
- Attention! session_start() doit être appelé
- avant le premier echo du fichier.
- Variables de session en PHP (2)
-
- <?php /* Fichier page1.php */
- session_start();
- $_SESSION["Valeur"] = 42;
- ?>
-
-
- Veuillez cliquer sur le "page2.php"lien
-
-
-]]>
-
-
- La valeur est echo $_SESSION["Valeur"];
-
-
-
-]]>
-
-
- Avantages et inconvénients des session
-
- - + Informations stockées sur le serveur
- - + Pas de limite de taille
- - + Pas limité à des chaînes de caractères
- - - Valeurs perdues en fin de session
- - -
Nécessite des cookies
-
-
-
- Sessions PHP: détails d'implantation
-
- Coté client
-
-
-
-
-
-
-
-
-
-Connexion à une page PHP (envoie du cookie ("php_ssid", "12345"))
-
-
-
- Coté serveur (PHP)
- session_start();
- - génération d'un ID unique "12345"
- - dépot d'un cookie "php_ssid", valeur "12345", durée 10 minutes
- - création dans un tableau global d'une entrée:
- $_GLOBAL["12345"] = Array();
-
- $_SESSION = $_GLOBAL[$_COOKIE["php_ssid"]]
-
-
-
+But du jeu
+Nous allons concevoir, le plus précisément possible l'application
+ (prenez des notes) :
+
-
- Dans la vraie VieTM
- Mélange de variables de sessions, cookies et bases de données.
- Scénario réaliste: site de commerce en ligne
-
-
- - Login/mot de passe stocké dans
- une BD
- - Panier courant stocké dans une variable de
- session
- - Login, date de dernière visite, dernière page visitée stockés
- dans un en cookie
-
- Pourquoi ?
- - BD: information persistante,
- côté serveur (mais la mise à jour, récupération de l'info est
- coûteuse (en temps))
-
- - Variables de sessions : le panier n'a pas forcément
- besoin d'être conservé entre deux sessions, mais on ne veut pas
- que le client puisse fabriquer un panier frauduleux
-
- - Cookie : persistante à faible
- coût (stocké sur le client), ce n'est pas grave si les
- informations sont perdues ou corrompues
-
+ - Rafiner le cahier des charges
+ - Prévoir plusieurs scénarios d'utilisation
+ - Concevoir l'application (données, interface grapique,
+ code)
+ - Tester/vérifier la robustesse
-
-
+Vous devrez écrire le code correspondant en TP
+