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 @@ > - PHP : Sessions et persistance + Formulaires @@ -36,362 +36,245 @@ - +
-

Programmation Internet

+

Unix et Programmation Web

Cours 8

kn@lri.fr
http://www.lri.fr/~kn
-

En-tête de requêtes HTTP

- +

Formulaires (utilisation avancée)

-

Retour sur le protocole HTTP

-
-} ← type de contenu -} ← longueur du contenu -} ← contenu (2038 octets) - - +
+

Champs de texte long

+

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.

-
-

Retour sur le protocole HTTP (2)

-
-
-

Modifier le content-type en PHP

-

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!

- +

+
+

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 ?

- -

⇒ 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!

- -
- -
-

Avantages et inconvénients des cookies

- -
-

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: -

-
  1. Le visiteur arrive sur la page q1.php en cliquant sur - le lien « commencer le sondage » (Début de session) -
  2. -
  3. Sur q1.php, l'utilisateur coche des choix dans un formulaire et appuie - sur un boutton de soumission qui l'envoie sur q2.php -
  4. -
  5. …
  6. -
  7. Sur q10.php, l'utilisateur coche des choix dans un - formulaire et appuie sur un bouton de soumission qui l'envoie - sur resultat.php
  8. -
  9. Sur resultat.php, le résultat global du sondage (% - par question, nombre de participants jusqu'à présent etc...) est - affiché (Fin de session) -
  10. -
- -
-
-

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: -

- -

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 :

-
-

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

- -
-
-

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 -

- -

Pourquoi ?

- -
+

Vous devrez écrire le code correspondant en TP

+
+ +