Techniques Internet de Base 2006-2007



Documents pareils
Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Stockage du fichier dans une table mysql:

TP JAVASCRIPT OMI4 TP5 SRC

Création de formulaires interactifs

Formulaires et Compteurs

Sommaire Accès via un formulaire d'identification... 4 Accès en mode SSO... 5 Quels Identifiant / mot de passe utiliser?... 6

Formulaire pour envoyer un mail

STID 2ème année : TP Web/PHP

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Gilles.Roussel univ-mlv.fr HTTP/1.1 RFC 2068

TD HTML AVEC CORRECTION

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

Séance d ED n 5 : HTML et JavaScript

Attaques de type. Brandon Petty

Le générateur d'activités

Manuel d utilisation NETexcom

Introduction. PHP = Personal Home Pages ou PHP Hypertext Preprocessor. Langage de script interprété (non compilé)

Initiation à html et à la création d'un site web

Comment développer et intégrer un module à PhpMyLab?

Module http MMS AllMySMS.com Manuel d intégration

PHP et les Bases de données - Généralités

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

Les sites Internet dynamiques. contact : Patrick VINCENT pvincent@erasme.org

Activités HTML. Code: act-html

Application de lecture de carte SESAM-Vitale Jeebop

Mise en place d un serveur Proxy sous Ubuntu / Debian

Utilisation d'un réseau avec IACA

Manuel d utilisation de Gestion 6

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

ContactForm et ContactFormLight - Gestionnaires de formulaire pour Prestashop Edité par ARETMIC S.A.

SYSTÈME DE GESTION DE FICHIERS

SUPPRIMER SES COOKIES

MEDIAplus elearning. version 6.6

PHP 5.4 Développez un site web dynamique et interactif

Dans l'article précédent, vous avez appris

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

GUIDE DE DÉMARRAGE RAPIDE

HTML, CSS, JS et CGI. Elanore Elessar Dimar

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

Tutoriel TYPO3 pour les rédacteurs

Création, analyse de questionnaires et d'entretiens pour Windows 2008, 7, 8 et MacOs 10

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

Cyberclasse L'interface web pas à pas

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

FAQ Trouvez des solutions aux problématiques techniques.

NAMEBAY PRO. votre site de revente de noms de domaine en marque blanche. Documentation technique

7.0 Guide de la solution Portable sans fil

Sage CRM. Sage CRM 7.3 Guide du portable

Guide de l'utilisateur

Avec PICASA. Partager ses photos. Avant de commencer. Picasa sur son ordinateur. Premier démarrage

Mysql avec EasyPhp. 1 er mars 2006

LISTES DE DISTRIBUTION GÉRÉES PAR SYMPA DOCUMENT EXPLICATIF DE L'INTERFACE WEB À L'INTENTION DES ABONNÉS

Utiliser une base de données

DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin

Programmation Web TP1 - HTML

Module BD et sites WEB

Manuel d'utilisation d'apimail V3

Manuel d utilisation de la plate-forme de gestion de parc UCOPIA. La mobilité à la hauteur des exigences professionnelles

CA ARCserve Backup Patch Manager pour Windows

TP1 - Prise en main de l environnement Unix.

inviu routes Installation et création d'un ENAiKOON ID

Serveur d application WebDev

Documentation utilisateur, manuel utilisateur MagicSafe Linux. Vous pouvez télécharger la dernière version de ce document à l adresse suivante :

Gérer ses impressions en ligne

Service client LSC 1

Corrigés des exercices du livre. Exercices du chapitre 2

Sophos Mobile Encryption pour Android Aide. Version du produit : 1.3

Introduction. Passage de sites statiques à des sites dynamiques

Les solutions de paiement CyberMUT (Crédit Mutuel) et CIC. Qui contacter pour commencer la mise en place d une configuration de test?

Didacticiel de mise à jour Web

Foire aux Questions Note: Les réponses aux questions correspondent à la version Mise en route

Cours 14 Les fichiers

Le service FTP. M.BOUABID, Page 1 sur 5

Intranet d'établissement avec Eva-web Installation configuration sur serveur 2000 ou 2003 Document pour les administrateurs

HTML/CSS - Travaux Pratiques 2

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

Types MIME (2) Typage des ressources Internet. Les URI. Syntaxe dans les URI. Possibilité de spécifier un paramètre du sous-type

Utilisation de GalaxShare

PDO : PHP Data Object 1/13

Programmation impérative

Programmation Web. Madalina Croitoru IUT Montpellier

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

Démonstration de la mise en cache via HTML 5 sur iphone

Sage CRM. 7.2 Guide de Portail Client

Qu'est ce que le Cloud?

Les services usuels de l Internet

Guide d utilisation. Table des matières. Mutualisé : guide utilisation FileZilla

Manuel d'utilisation du navigateur WAP Palm

INFORM :: DEMARRAGE RAPIDE A service by KIS

Sauvegarder et restaurer les données PMB

Guide de l'utilisateur de l'application mobile

Guide de l'utilisateur

Service de certificat

Guide de démarrage rapide Centre de copies et d'impression Bureau en Gros en ligne

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

MODE D'EMPLOI DU CONTRIBUTEUR WEB UAPV "CONTRIBUER DANS UNE RUBRIQUE DU SITE WEB"

Transcription:

Techniques Internet de Base 2006-2007 Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA ruggero.pensa@univ-st-etienne.fr

PHP - Formulaires

Formulaires et PHP Lorsque l'utilisateur clique sur le bouton d'envoi, une requête HTTP est envoyée au serveur à destination du script désigné par l'attribut action de l'élément <form> La requête contient les associations entre les noms des champs et leur valeur Les associations se trouvent : dans l'en-tête HTTP si la méthode POST est utilisée dans l'url s'il s'agit de la méthode GET Pour envoyer les données au même fichier on peut utiliser la variable $_SERVER["PHP_SELF"] Exemple : <form name="form1" action= <?= $_SERVER["PHP_SELF"]?>>

Récupération des valeurs uniques Les valeurs uniques proviennent des champs de formulaire dans lesquels l'utilisateur peut entrer qu'une valeur Depuis PHP 4.1, ces valeurs sont contenues sur le serveur dans des tableaux associatifs dits superglobaux appelés $_POST et $_GET (selon la méthode choisie) Les clés de ces tableaux sont les noms associés aux champs par l'attribut name Les valeurs associées aux clés sont les informations saisies par l'utilisateur

Récupération des valeurs POST Il est toujours important de vérifier l'existence des variables On peut utiliser la fonction isset() Exemple : <?php if (isset($_post["nomchamp"]) { $valeurchamp=$_post["nomchamp"]; } echo "La valeur du champ est ". $valeurchamp;?>

Exemple : récupération de valeurs 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http:// www.w3.org/tr/html4/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>formulaire traité par PHP</title> </head> <body> <form action= "<?= $_SERVER["PHP_SELF"]?>" method="post" enctype="application/x-www-form-urlencoded"> <fieldset> <legend><b>infos</b></legend> Nom : <input type="text" name="nom" size="40" /> <br /> Débutant : <input type="radio" name="niveau" value="débutant" /> Initié : <input type="radio" name="niveau" value="initié" /><br /> <input type="reset" value="effacer"> <input type="submit" value="envoyer"> </fieldset> </form>

Exemple : récupération de valeurs 2 <?php if(isset($_post["nom"]) && isset($_post["niveau"])) { echo "<h2> Bonjour ". $_POST["nom"]. " vous êtes ".$_POST["niveau"]." en PHP</h2>"; }?> </body> </html>

Récupération des valeurs GET On doit toujours vérifier l'existence des variables Exemple : <?php if (isset($_get["nomchamp"]) { $valeurchamp=$_get["nomchamp"]; } echo "La valeur du champ est ". $valeurchamp;?>

Utilisation de la méthode GET - 1 On considère l'exemple suivant : <html> <body> <a href="exempleform.php?nom=toto&niveau=débutan t">cliquez ici</a> </body> </html> Il s'agit d'un fichier HTML qui contient un lien au fichier exempleform.php avec deux paramètres : nom = Toto niveau = Débutant Si exempleform.php contient le code de l'exemple précédent, les paramètres ne sont pas reconnus

Utilisation de la méthode GET - 2 Il faut utiliser le tableau $_GET : <?php if(isset($_get["nom"]) && isset($_get["niveau"])) { echo "<h2> Bonjour ". $_GET["nom"]. " vous êtes ".$_GET["niveau"]." en PHP</h2>"; }?> En général il faut essayer d'utiliser la méthode GET le moins souvent possible Pour les liens cela reste le moyen plus rapide pour accéder aux fichiers PHP en envoyant des paramètres

Récupération des valeurs multiples Certains champs de formulaire peuvent permettre aux visiteurs de saisir plusieurs valeurs sous un même composant Groupe de cases à cocher ayant le même attribut name Groupe de boutons radio ayant le même attribut name Liste de sélection dans laquelle l'attribut multiple est défini Dans ces cas, le serveur récupère un tableau

Récuperation des valeurs Dans certains cas il faut faire suivre le nom du composant de crochets : Exemple : Bleu : <input type="checkbox" name="choix[]" value="bleu"> Blanc : <input type="checkbox" name="choix[]" value="blanc"> Pour récupérer les valeurs, on utilise les variables POST comme des tableaux à deux dimensions Exemple : $_POST["choix"][0] // contient la variable "bleu" $_POST["choix"][1] // contient la variable "blanc"

Exemple : valeurs multiples - 1 Fichier multiples.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/tr/html4/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>choix multiples</title> </head> <body> <form method="post" action="multiples.php" > <fieldset> <legend>recherche d'emploi: complétez la fiche </legend> <span>nom<input type="text" name="ident[]" /> Prénom<input type="text" name="ident[]" /> Age<input type="text" name="ident[]" /> <br /><br />

Exemple : valeurs multiples - 2 Langues pratiquées<br /> <select name="lang[]" multiple size="4"> <option value="français"> français</option> <option value="anglais"> anglais</option> <option value="allemand"> allemand</option> <option value="espagnol"> espagnol</option> </select><br /><br /> Compétences informatiques<br /> HTML<input type="checkbox" name="competent[]" value="html" /> PHP<input type="checkbox" name="competent[]" value="php" /> MySQL<input type="checkbox" name="competent[]" value="mysql" /> ASP.Net<input type="checkbox" name="competent[]" value="asp.net" /> </span><br /><br /> <input type="reset" value="effacer"/> <input type="submit" value="envoi"/> </fieldset> </form> </body> </html>

Exemple : valeurs multiples - 3 Fichiers multiples.php <?php if(isset($_post["ident"]) && isset($_post["lang"]) && isset($_post["competent"])) { echo "<table border=\"1\"><tr><th> Récapitulatif de votre fiche d'information personnelle </th></tr><tr><td>"; $nom=$_post["ident"][0]; $prenom=$_post["ident"][1]; $age=$_post["ident"][2]; $lang = $_POST["lang"]; $competent=$_post["competent"]; echo"vous êtes :<b> $prenom ", stripslashes($nom),"</b><br />Vous avez <b>$age ans </b> "; echo "<br />Vous parlez :"; echo "<ul>"; foreach($lang as $valeur) { echo " <li> $valeur </li>"; } echo "</ul>";

Exemple : valeurs multiples - 4 echo "Vous avez des compétences informatiques en :"; echo "<ul>"; foreach($competent as $valeur) { echo "<li> $valeur </li> "; } echo "</ul> </td></tr>"; } else { echo"<script type=\"text/javascript\">" ; echo "alert('complétez tous les champs');"; echo "window.history.back();"; echo "</script>"; }?>

Gérér les boutons d'envoi multiples L'utilisation de plusieurs boutons submit dans un même formulaire permet de déclencher des actions différentes en fonction du bouton activé par l'utilisateur Les boutons doivent avoir le même attribut name, mais des valeurs différentes de l'attribut value Exemple : <input type="submit" name="calcul" value="addition"> <input type="submit" name="calcul" value="soustraction"> <input type="submit" name="calcul" value="multiplication"> <input type="submit" name="calcul" value="division"> Côté serveur on récupère la valeur grâce à la variable $_POST["calcul"]

Transfert de fichier vers le serveur L'inclusion d'un élément HTML <input type="file"> permet de transférer non pas une information mais un fichier Problèmes de sécurité : Il faut vérifier l'extension du fichier On utilise l'attribut ACCEPT de la balise input : <input type="file" accept="image/jpg"> Il faut limiter la taille du fichier à travers l'option upload_max_filesize du fichier php.ini à travers le contrôle caché : <input type="hidden" name="max_file_size" value="120000"> qui spécifie la taille maximale en octets

Fonctionnement Une fois le fichier sélectionné, un clic sur le bouton submit provoque l'envoi du fichier au serveur Le fichier est copié sur un répertoire tampon défini par la directive "upload_tmp_dir" du fichier php.ini Le fichier est automatiquement effacé lors de la déconnection du client Le fichier est enregistré sous un nom différent

Récupération du fichier Côté serveur, on dispose du tableau associatif $_FILES, qui contient les informations nécessaires au traitement du fichier transféré Pour un élément <input type="file" name="fich"> nous avons les informations suivantes : $_FILES["fich"]["name"] : nom du fichier sur le poste client $_FILES["fich"]["type"] : type MIME initial du fichier $_FILES["fich"]["size"] : taille réelle en octet du fichier transféré $_FILES["fich"]["tmp_name"] : donne le nom temporaire que le serveur attribue automatiquement au fichier dans le répértoire tampon $_FILES["fich"]["error"] : donne le code d'erreur éventuel associé au fichier

Codes d'erreur Les valeurs possibles de la variable $_FILES["inputname"]["error"] sont : 0 (ou UPLOAD_ERR_OK) : indique que le transfert est bien réalisé 1 (ou UPLOAD_ERR_INI_SIZE) : indique que la taille du fichier est supérieure à celle définie dans le fichier php.ini 2 (ou UPLOAD_ERR_FORM_SIZE) : indique que la taille est supérieure à celle définie dans le champ caché MAX_FILE_SIZE 3 (ou UPLOAD_ERR_PARTIAL) : indique que le fichier n'a été que partiellement téléchargé 4 (ou UPLOAD_ERR_NOFILE) : indique qu'aucun fichier n'a été téléchargé

Déplacement du fichier Il faut procéder à l'enregistrement et au renomage éventuel du fichier vers le serveur On utilise la fonction move_uploaded_file() : move_uploaded_file("fichier_tmp","fichier_final") La fonction retourne TRUE si l'opération est bien réalisée (FALSE dans le contraire) Exemple (dans un fichier exemple.php) : move_uploaded_file($_files["fich"]["tmp_name"], "monimage.jpg"); le fichier est transféré dans le répertoire du fichier exemple.php

Exemple de transfer de fichier - 1 <html> <head> <title>transfert de fichier</title> </head> <body> <form action=<?= $_SERVER["PHP_SELF"]?> method="post" enctype="multipart/form-data" > <input type="hidden" name="max_file_size" value="100000" /> <fieldset> <legend><b>transfert de fichier</b></legend> <table> <tr> <th>fichier</th> <td> <input type="file" name="fich" accept="image/jpg" size="50"/></td> </tr> <tr> <th>clic!</th> <td> <input type="submit" value="envoi" /></td> </tr> </table> </fieldset> </form>

Exemple de transfer de fichier - 2 <?php if(isset($_files['fich'])) { echo "Taille maximale autorisée :",$_POST["MAX_FILE_SIZE"]," octets<hr / >"; echo "<b>clés et valeurs du tableau \$_FILES </b><br />"; foreach($_files["fich"] as $cle => $valeur) { echo "clé : $cle valeur : $valeur <br />"; } $result=move_uploaded_file($_files["fich"]["tmp_name"], "monfichier.jpg"); if($result==true) {echo "<hr /><big>le transfert est réalisé!</big>";} else {echo "<hr /> Erreur de transfert n ",$_FILES["fich"]["error"];} }?> </body> </html>

PHP - Fichiers

Les fichiers Pour sauvegarder des information sur le serveur on dispose de deux moyens : les bases de données (MySQL, MS Server, Oracle...) les fichiers (texte, XML...) Avantage des bases de données : Création/recherche simple Récupération des valeurs facile Gestion avancée des droits d'accès Avantage des fichiers : Ils nécessitent pas d'un module supplémentaire Backup/transfert facile Accès facile On s'intéressera aux fichiers texte (.txt)

Création d'un fichier Pour créer un fichier vide on utilise la fonction touch() : if (!file_exists("monfichier.txt")) { touch("monfichier.txt",time()); } Si le file n'existe pas (la fonction file_exists() retourne FALSE), on crée un fichier vide

Ouverture d'un fichier Avant de réaliser des opération de lecture ou d'écriture sur un fichier, il faut l'ouvrir explicitement On peut ouvrir un fichier avec différents modes d'accès : lecture uniquement écriture uniquement lecture et écriture On utilise la fonction fopen();

La fonction fopen() Syntaxe : $id_file=fopen(nomfichier,mode[,recursif]) Paramètres : nomfichier : chaîne de caractères contenant le nom du fichier à ouvrir (chemin + nom du fichier) mode : chaîne de caractères contenant le mode d'accès recursif (facultatif ) : si sa valeur est TRUE la recherche du fichier est étendue à tous les sous-répertoires du chemin indiqué dans le premier paramètre Exemples : $f = fopen("../moncv/formation.txt", "r", FALSE) $f2 = fopen("http://www.monsite.fr/moncv/formation.txt", "w", FALSE) $f3 = fopen(" ftp://ftp.monsite.fr/moncv/formation.txt", "a")

Mode d'accès Valeurs du paramètre mode : "r" : lecture seule (la lecture commence au début du fichier) "r+" : lecture et écriture (au début du fichier) "w" : écriture seule (l'écriture commence au début du fichier, si le fichier n'existe pas, il est créé automatiquement) "w+" : lecture et écriture (au début du fichier, si le fichier n'existe pas, il est créé automatiquement) "a" : écriture seule (les données sont écrites en fin de fichier, si le fichier n'existe pas, il est créé automatiquement) "a+" : écriture et lecture (les données sont écrites en fin de fichier, la lecture commence au début du fichier, si le fichier n'existe pas, il est créé automatiquement)

Identifiant de fichier La valeur retourné par la fonction fopen est un identifiant de fichier (type resource), qui doit être utilisé comme premier paramètre des fonction de lecture/écriture Le nom du fichier n'est utilisé que lors de son ouverture Si une erreur se produit lors de l'ouverture, fopen retourne FALSE Exemple : $id_file=fopen("monfichier.txt","a"); if (!$id_file) echo "Erreur d'accès au fichier";

Fermeture d'un fichier Après avoir ouvert un fichier pour y effectuer des opérations de lecture ou d'écriture, il faut impérativement le fermer L'opération de fermeture est réalisée à l'aide de la fonction fclose() : Exemple : if (!fclose($id_file)) echo "Erreur durant la fermeture du fichier";

Verrouillage des fichiers Si plusieurs utilisateurs accèdent au même fichier et y effectuent simultanément des opérations de lecture ou d'écriture, le fichier risque de devenir inutilisable Il est essentiel que les scripts qui y accèdent définissent une priorité d'accès au premier script effectuant une opération sur le fichier Il faut empêcher les autres scripts d'accéder au fichier et d'y faire des modifications tant que le fichier n'est pas fermé On dispose de la fonction flock() Syntaxe : flock($id_file, mode);

Valeurs du paramètre mode Le paramètre mode de la fonction flock() est un entier qui définit le mode de verrouillage du fichier : flock($id_file, 1) ou flock($id_file, LOCK_SH) : bloque l'écriture dans le fichier mais laisse le libre accès en lecture à tous les utilisateurs flock($id_file, 2) ou flock($id_file, LOCK_EX) : bloque l'écriture et la lecture dans le fichier flock($id_file, 3) ou flock($id_file, LOCK_UN) : libère le verrou installé précédemment (ne pas oublier cette fonction à la fin des opérations de lecture et écriture)

Exemple :... $id_file=fopen("monfichier.txt","w+"); flock($id_file,lock_sh); //... //opérations de lecture et/ou d'écriture //... flock($id_file,lock_un); fclose($id_file);...

Ecriture dans un fichier On utilise les fonctions fwrite et fputs (alias l'une de l'autre) Syntaxe : fwrite($id_file,chaîne[,max_car]); fputs($id_file,chaîne[,max_car]); Paramètres : $id_file : identifiant du fichier chaîne : chaîne de caractères à écrire dans le fichier max_car (facultatif) : s'il est définit, seuls les max_car premiers caractères de la chaîne sont écris dans le fichier

Exemple : compteur de visites - 1 <html> <head> <title>compteur de visites</title> </head> <body> <?php if(file_exists("compteur.txt")) if($id_file=fopen("compteur.txt","r")) { flock($id_file,1); $nb=fread($id_file,10); $nb++; fclose($id_file); $id_file=fopen("compteur.txt","w"); fwrite($id_file,$nb); flock($id_file,3); fclose($id_file); } else {echo " Fichier introuvable"; }

Exemple : compteur de visites - 2 else { $nb=10000; $id_file=fopen("compteur.txt","w"); fwrite($id_file,$nb); fclose($id_file); } echo "<table border=\"1\"\"> <tr> <td \">Voici déja </td> <td \"> $nb </td> <td \"> visites sur le site </td></tr> </table>";?> </body>

Formatage des données Pour enregistrer plusieurs valeurs différents sur un même fichier, il faut un moyen de séparer les données sous forme de paquets Chaque paquet occupe une ligne du fichier Chaque donnée est séparée des autres par un caractère quelconque (exemple : tabulation, point-virgule...) Exemple : fwrite($id_file, $nom. ";". $prenom. ";". "$date". "\n");

Exemple : fichiers et formulaires - 1 <html> <head> <title>les fichiers PHP </title> </head> <body"> <form action="<?= $_SERVER['PHP_SELF']?>" method="post" > <fieldset> <legend><b>enregistrez vos informations personnelles </b></legend> <p><b> Votre nom </b> <input type="text" name="nom" > <br /> <b> Votre prénom </b> <input type="text" name="prenom"> <br /> <input type="submit" value="enregistrer"> <input type="reset" value="effacer"></p> </fieldset> </form>

Exemple : fichiers et formulaires - 2 <?php if($_post['nom']!="" && $_POST['prenom']!="") { $nom=$_post['nom']; $prenom=$_post['prenom']; echo "<h2> Merci $prenom $nom de votre visite </h2> "; $date=time(); if($id_file=fopen("noms.txt","a")) { flock($id_file,2); fwrite($id_file,$prenom.";".$nom.";".$date."\n"); flock($id_file,3); fclose($id_file); } else { echo "Fichier inaccessible";} } else{ echo "<h2>complétez le formulaire puis cliquez sur 'Envoi'! </h2> ";}?> </body> </html>

Lecture de fichiers Pour effectuer la lecture du fichier, il existe plusieurs méthodes, chacune étant associée à une fonction PHP spécialisée : fgets() fread() fgetc() fseek() fgetcvs() readfile() file() passthru()

Lire une ligne à la fois fonction fgets() Syntaxe : $ligne=fgets($id_file,nombre_octets); La fonction fgets lit le fichier depuis son début et retourne une chaîne de caractères d'une longueur maximale égale au paramètre nombre_octets La lecture s'arrête quand ce nombre d'octets lu est atteint, ou si le caractère "\n" est rencontré dans le fichier Exemple : $ligne=fgets($id_file,256); Pour récupérer les différentes données on peut utiliser la fonction explode(). Exemple : $tab=explode(";", $ligne);

Exemple : fgets() - 1 <?php $file="noms.txt"; //Première lecture $id_file=fopen($file,"r"); $i=1; echo "<h3>lecture du fichier \"$file\" ligne par ligne<br /> Affichage brut de chaque ligne</h3> "; echo "<table border=\"1\"> \n"; while($ligne=fgets($id_file,100) ) { echo "<tr><td>ligne numéro $i </td> <td><b>$ligne </b></td> </tr> \n"; $i++; } fclose($id_file); echo "</table> ";

Exemple : fgets() - 2 //Deuxième lecture $id_file=fopen($file,"r"); $i=1; echo "<h3>lecture du fichier \"$file\" ligne par ligne<br /> Récupération de chaque donnée </h3> "; echo "<table border=\"1\"> \n"; echo "<tr><th>numéro </th> <th>prenom</th> <th>nom</th> <th>date</th> </tr>\n"; while($ligne=fgets($id_file,100) ) { $tab=explode (";",$ligne); $jour= date("j/n/y H:i:s",$tab[2]) ; echo "<tr><td>$i</td> <th>$tab[0]</th> <th>$tab[1]</th> <th>$jour</th> </tr>\n"; $i++; } fclose($id_file); echo "</table> ";?>

Lire un nombre de caractères donné Fonction fread() Syntaxe : $chaine= fread($id_file,nombre_octets); La fonction lit le fichier depuis son début et retourne à chaque appel une chaîne de caractères contenant exactement le nombre de caractères précisé dans le second paramètre, sauf si la fin du fichier est atteinte ou si le caractère "\n" est rencontré La fonction est utiles pour lire des données de taille fixe

Lire un caractère à la fois Fonction fgetc($id_file); Exemple : while($car=fgetc($id_file)) { echo "caractère ". $i. " : ". $car. "\n"; i++; }

Lire une partie d'un fichier Chaque fichier possède un pointeur de lecture et d'écriture Le pointeur est mis à jour lorsqu'une lecture ou une écriture est effectuée On peut déplacer le pointeur n'importe où dans le fichier grâce à la fonction fseek() Syntaxe : fseek($id_file, nombre_octets) la fonction déplace le pointeur à la position nombre_octets calculée à partir du début du fichier Autres fonctions : rewind($if_file) : remet le pointeur au début ftell($id_file) : retourne le nombre d'octets par rapport au début

Lecture de données formatées Fonction fgetcvs() Syntaxe : $tab = fgetcvs($id_file,nombre_octets,séparateur) La fonction lit dans le fichier identifié par $id_file au maximum le nombre de caractères précisé à l'aide du deuxième paramètre Elle retourne un tableau de chaînes de caractères, délimitées dans le fichier par la chaîne séparateur Une ligne Un tableau La fonction fgetcvs combine l'utilisation de fgets et explode

Lecture de la totalité d'un fichier La fonction readfile("nom_fichier") affiche le contenu du fichier directement dans la page du navigateur, et retourne le nombre d'octets qui ont été lus La fonction file("nom_fichier") retourne un tableau de chaîne de caractères où chaque chaîne correspond à une ligne du fichier La fonction fpassthru($id_file) affiche le contenu du fichier directement dans la page du navigateur, mais elle nécessite l'emploi de fopen() et fclose()

Actions sur les fichiers Copier un fichier : copy("nom_fichier", "nom_copie"); Rennomer un fichier : rename("nom_actuel","nom_futur"); Effacer un fichier : unlink("nom_fichier");

Informations sur un fichier Existence d'un fichier : file_exists("nom_fichier"); Taille d'un fichier : $taille=filesize($id_file); Date du dernier accès à un fichier : $date=fileatime("nom_fichier"); Date de la dernière modification d'un fichier : $date=filemtime("nom_fichier"); Chemin complet d'un fichier : $chemin=realpath("nom_fichier"); Nom du fichier : $nom_fichier=basename("chemin_complet");

PHP Cookies et sessions

Les cookies Les cookies sont des petits fichiers qui peuvent être écrits par un script PHP ou par d'autres langages sur l'ordinateur du visiteur Un site donné ne peut écrire que 20 cookies sur un même poste client Chaque cookie ne doit pas dépasser 4 Ko Un cookie n'est généralement accessible que par le site qui l'a écrit Les cookies sont utilisés pour le stockage d'information de petite taille (nom, code d'accès, préférences de l'utilisateur...)

Ecriture des cookies Pour écrire un cookie, il est impératif qu'aucun contenu HTML n'ait été envoyé au client avant l'écriture du cookie L'écriture d'un cookie doit précéder les instructions d'affichage (echo...) Pour écrire un cookie on utilise la fonction setcookie() Syntaxe : setcookie(nom_cookie[, valeur, datefin, chemin, domaine, securité) Exemple : setcookie("username","donald Duck");

La fonction setcookie() Paramètres nom_cookie : nom du cookie obéissant aux mêmes règles de nommage que le variables valeur (facultatif) : contient la valeur associé au cookie (chaîne de caractères) datefin (facultatif) : date de fin de validité du cookie chemin (facultatif) : chemin d'accès aux dossiers qui contiennent les scripts qui peuvent accéder au cookie domaine (facultatif) : nom entier du domaine à partir duquel on peut accéder au cookie securité (facultatif) : TRUE si le cookie doit être transmis par une connexion sécurisée) Exemples : setcookie("prenom","zinedine"); setcookie("nom","zidane",time()+86400); setcookie("cb", "1234 5678 1234 5678", time()+86400, "/client/paiment/", www.monsite.com, TRUE);

Cookies et tableaux Il est possible d'enregistrer plusieurs cookies ayant le même nom : setcookie("achat[art1]","livre"); setcookie("achat[art2]","cd"); setcookie("achat[art3]","vidéo"); La clé du tableau n'est pas délimitée par des guillemets!!!

Lecture de cookies Pour récupérer les valeurs des cookies on utilise le tableau $_COOKIE : $nom=$_cookie["nom"]; Pour récupérer les valeurs des cookies ayant le même nom : foreach($_cookie["achat"] as $cle=>$valeur) { } echo "Cookie : ". $cle." valeur : ". $valeur;

Les sessions HTTP ne permet pas de conserver des informations provenant d'une page pour les utiliser dans une autre page L'utilisation des sessions permet de conserver ces informations et de les réutiliser dans toutes les pages d'un site pour un même visiteur Aucune autre visiteur n'a accès à ces données En PHP, le support des sessions est disponible depuis la version 4

Méchanisme des sessions Cinq étapes générales : 1. Ouverture d'une session dans chaque page ayant accès aux données grâce à la fonction session_start(); 2. Un identifiant de session est attribué à chaque utilisateur unique. L'identifiant est transmis d'une page à l'autre 3. Définition des variables de session accessibles dans toutes les pages du site qui utilisent la fonction session_start(). Les nom et les valeurs sont stockées dans le dossier /tmp du serveur (ou dans un répertoire sessions du serveur) 4. Lecture des variables de session dans chaque page en fonction des besoins à l'aide du tableau $_SESSION 5. Fermeture de la session après destruction éventuelle des variables de session

Envoi de l'identifiant de session Pour transmettre l'identifiant de session d'une page à une autre, il existe deux manières différentes : Transmission avec cookies : l'identifiant est transmis en utilisant un cookie sur le poste client Transmission à travers l'url : l'identifiant est ajouté à l'url de la page cible d'un lien

Sessions avec cookies La manière plus simple de transmettre l'identifiant de session est d'utiliser un cookie Il faut que la directive session.use_cookies du fichier php.ini ait la valeur on Il faut que le poste client accepte les cookies L'écriture des cookies de session est prise en charge par PHP lors du premier appel à la fonction session_start() Les variables de session sont définies par le biais du tableau $_SESSION. Exemples : $_SESSION['mavar']=mavaleur; $_SESSION['mavar']=$mavariable; La valeur est visible dans toutes les pages

Fin de la session Pour terminer une session on doit : détruire toutes les variables de la session avec la fonction session_unset() terminer la session avec la fonction session_destroy()

Exemple : identification - 1 Fichier pageindex.php : <?php //PAGE SANS COOKIES session_start(); if(isset($_post['login'])&&isset($_post['pass'])) { if($_post['login']=="pensa" && $_POST['pass']=="1234") { $_SESSION['acces']="oui"; $_SESSION['nom']=$_POST['login']; $_SESSION['html']=0; $_SESSION['php']=0; } } else { if (isset($_get['logout'])) { session_unset(); session_destroy(); } }?>

Exemple : identification - 2 <html> <head> <title>les SESSIONS</title> </head> <body> <?php if (isset($_session['acces'])) { echo "<h4>authentifié comme ". $_SESSION['nom']. "</h4>"; }?> <p> <form method="post" action="<?= $_SERVER['PHP_SELF']?>"> <fieldset> <legend>accès réservé aux personnes autorisées: Identifiez vous! </legend> Login : <input type="text" name="login"> Pass : <input type="password" name="pass" /> <input type="submit" name="envoi" value="entrer"/> </fieldset> </form></p>

Exemple : identification - 3 <p> Visiter les pages du site <br /> <u> <li><a href="pagehtml.php">page HTML </a><? if(isset($_session['html'])) echo " vue ". $_SESSION['html']. " fois";?> </li> <li><a href="pagephp.php">page PHP </a><? if(isset($_session['php'])) echo " vue ". $_SESSION['php']. " fois";?> </li> </u> <?php echo "<br />"; echo "Nom de la session : ", session_name(),"<br />"; echo "Id de la session : ", session_id(),"<br />";?> </body> </html>

Exemple : identification - 4 Fichier pagephp.php : <?php session_start(); if(!isset($_session['acces'])) { header("location:pageindex.php"); } else { echo "<h4>bonjour ". $_SESSION['nom']."</h4>"; $_SESSION['php'] ++; }?>

Exemple : identification - 5 <html> <head> <title>la page de PHP</title> </head> <body> <h4> Accès réservé aux personnes autorisées</h4> <p> Visiter les autres pages du site : <? echo "Page PHP vue ". $_SESSION['php']. " fois";?> <u> <li><a href="pageindex.php">page d'accueil </a> </li> <li><a href="pagehtml.php">page HTML </a> <? if(isset($_session['html']))echo " vue ". $_SESSION['html']. " fois";?></li> <li><a href="pageindex.php?logout">logout</a></li> </u> <h3>contenu de la page PHP</h3> </body> </html>

Exemple : identification - 6 Fichier pagehtml.php : <?php session_start(); if(!isset($_session['acces'])) { header("location:pageindex.php"); } else { echo "<h4>bonjour ". $_SESSION['nom']."</h4>"; $_SESSION['html'] ++; }?>

Exemple : identification - 7 <html> <head> <title>la page du HTML.</title> </head> <body> <h4> Accès réservé aux personnes autorisées</h4> <p> Visiter les autres pages du site : <? echo "Page HTML vue ". $_SESSION['html']. " fois";?> <u> <li><a href="pageindex.php">page d'accueil </a> </li> <li><a href="pagephp.php">page PHP </a> <? if(isset($_session['php']))echo " vue ". $_SESSION['php']. " fois";? > <li><a href="pageindex.php?logout">logout</a></li> </li> </u> <h3>contenu de la page HTML</h3> </body> </html>

Sessions sans cookies Si les cookies sont désactivés, PHP ne peut plus enregistrer l'identifiant de session dans un cookie sur le poste client Il faut donc transmettre cet identifiant entre toutes les pages du site en ajoutant à la fin de chaque adresse définie dans un lien le caractère? suivi de la valeur de la constante SID La constante SID contient une chaîne de caractères de la forme PHPSESSID=6a5c348dc5146a6a6ec19400897d7e34 La constante SID équivaut à la chaîne de caractères : $chaine_session=session_name()."=".session_id();

Exemple Dans le fichier phpindex.php : <u> <li><a href="pagehtml.php?<?php echo SID?>">Page HTML </a><? if(isset($_session['html'])) echo " vue ". $_SESSION['html']. " fois";?> </li> <li><a href="pagephp.php?<?php echo SID?>">Page PHP </a><? if(isset($_session['php'])) echo " vue ". $_SESSION['php']. " fois";?> </li> </u>