ISN W eb - 2014-2015

Documents pareils
TP JAVASCRIPT OMI4 TP5 SRC

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

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

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

Manuel du composant CKForms Version 1.3.2

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

CREATION d UN SITE WEB (INTRODUCTION)

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

Création de formulaires interactifs

Résoudre les problèmes PHP, les meilleures (et les pires) techniques

.. CSS. Damien Nouvel. Damien Nouvel (Inalco) CSS 1 / 15

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

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

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

RÉALISATION D UN SITE DE RENCONTRE

SYSTÈMES D INFORMATIONS

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Publier dans la Base Documentaire

PHP 4 PARTIE : BASE DE DONNEES

1. Installation du Module

Guide de configuration

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

OUAPI Guide d installation Outil d administration de parc informatique. Documentation d installation et de paramétrage

GUIDE D INSTALLATION DE L APPLICATION GECOL SUR

Formulaire pour envoyer un mail

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

Module BD et sites WEB

Mise en place d un serveur Proxy sous Ubuntu / Debian

Programmation Web TP1 - HTML

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

FTP : File TRansfer Protocol => permets d envoyer des gros fichiers sur un serveur (ou de télécharger depuis le serveur)

Publication dans le Back Office

Module http MMS AllMySMS.com Manuel d intégration

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

Attaques applicatives

MANUEL DE L UTILISATEUR

PHP. PHP et bases de données

Open Source Job Scheduler

KWISATZ_TUTO_module_magento novembre 2012 KWISATZ MODULE MAGENTO

GUIDE DE DÉMARRAGE. SitagriPro Infinite FINANCEAGRI. Un service. c o r p o r a t e

Stockage du fichier dans une table mysql:

Les GPO 2012 server R2 (appliqués à Terminal Serveur Edition)

Logiciel : GLPI Version : SYNCRHONISATION DE GLPI AVEC ACTIVE DIRECTORY. Auteur : Claude SANTERO Config. : Windows 2003.

Guide d implémentation. Réussir l intégration de Systempay

Définition des Webservices Ordre de paiement par . Version 1.0

Plateforme PAYZEN. Définition de Web-services

Création d un formulaire de contact Procédure

Projet de Semestre. Page Web Didactique de Visualisation d Algorithme. Université de Genève - semestre de printemps 2012

Rapports d activités et financiers par Internet. Manuel Utilisateur

PHP 5. La base de données MySql. A. Belaïd 1

Utilisation de KoXo Computers V2.1

Gestion de stock pour un magasin

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

(structure des entêtes)

Devenez un véritable développeur web en 3 mois!

mon site web via WordPress

Projet de Java Enterprise Edition

Présentation Serveur Apache et pour RePeGlio

Publier un Carnet Blanc

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

Description des pratiques à adopter pour la mise à jour du layout en utilisant le gestionnaire de conception de Sharepoint 2013

TP3 : Manipulation et implantation de systèmes de fichiers 1

COURS 5 Mettre son site en ligne! Exporter son site avec WordPress Duplicator Installer un logiciel FTP Faire le suivi des visites de son site avec

Création de maquette web

URECA Initiation Matlab 2 Laurent Ott. Initiation Matlab 2

Attaques de type. Brandon Petty

Prise en main rapide

PHP CLÉS EN MAIN. 76 scripts efficaces pour enrichir vos sites web. par William Steinmetz et Brian Ward

Introduction à MATLAB R

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

KWISATZ MODULE PRESTASHOP

DOM - Document Object Model

Programmation Web. Madalina Croitoru IUT Montpellier

HTML, CSS, JS et CGI. Elanore Elessar Dimar

Encryptions, compression et partitionnement des données

Guide de démarrage Tradedoubler. Manuel éditeur / affilié

Plate-forme de tests des fichiers XML virements SEPA et prélèvements SEPA. Guide d'utilisation

Manuel d utilisation TS Evaluation. Version 5 Màj 07/

Magento. Magento. Réussir son site e-commerce. Réussir son site e-commerce BLANCHARD. Préface de Sébastien L e p e r s

Utiliser SQL Server 2008 R2 Reporting Services comme source de donne es pour Microsoft Excel

Édu-groupe - Version 4.3

Gestion d identités PSL Installation IdP Authentic

Guide Enseignant de l application OpenERP

MISE AU POINT FINANCIÈRE GUIDE DE L UTILISATEUR. Le logiciel MISE AU POINT FINANCIÈRE est offert sous licence par EquiSoft.

Paginer les données côté serveur, mettre en cache côté client

Mysql avec EasyPhp. 1 er mars 2006

PARTAGER UN ANNUAIRE COLLECTIF DE SIGNETS AVEC DEL.ICIO.US

Guide d utilisation 2012

Alfstore workflow framework Spécification technique

145A, avenue de Port Royal, Bonaventure (Québec) G0C 1E0 Sans frais :

SUPPORT DE COURS / PHP PARTIE 3

ING & NEWSLETTER NEWSLETTER RESPONSIVE

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

< Atelier 1 /> Démarrer une application web

Editer un script de configuration automatique du proxy

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

TP 1. Prise en main du langage Python

Transcription:

Avoir accès aux fichiers sur le serveur web Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 02 / 40

Enregistrer les données sur un disque dur Pérennité Partage ou pas (configuration de apache) (sauvegarde en dehors du web) Souplesse de programmation aucun format imposé Mais code «bas niveau» Elément de Configuration d apache <FilesMatch "^\.ht"> Order allow,deny Deny from all Satisfy All </FilesMatch> #idem pour <Files *.inc> ou < Files *~> Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 03 / 40

Équivalent des opérations sur les fichiers fournies par les systèmes d exploitation glob ( $pattern) : recherche des chemins qui vérifient une expression $pattern <?php $files = glob("*.php"); // que les fichiers php du dossier courant foreach ($files as $filename) { echo «<a hef="$filename >".basename($filename)."</a><br />\n"; }?> is_dir ($nomfichier) -- Indique si le fichier est un dossier is_file ($nomfichier) -- Indique si le fichier est un fichier is_readable ($nomfichier) -- Indique si un fichier est autorisé en lecture is_writable ($nomfichier) -- Indique si un fichier est autorisé en écriture Les résultats de ces fonctions sont mis en cache Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 04 / 40

mkdir ( $chemin [, int mode]) Crée un dossier $chemin (ou retourne faux) Mode : droit d accès : 0777 par avoir les droits d écriture (c est nobody ou www-data ou qui crée ) rename ( $oldname, $newname) Renomme un fichier ou un dossier de nom $oldname en $newname Retourne true si cela fonctionne, faux en cas d échec Permet de déplacer un fichier rmdir ( $dir) Efface le dossier $dir, s il est vide et si le script à les droits Retourne true si cela fonctionne, faux en cas d échec touch ($nomfichier) Modifie la date de modification et de dernier accès d'un fichier Retourne vrai ou faux unlink ($nomfichier) -- Efface un fichier [retourne vrai ou faux] Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 05 / 40

filesize($nomfichier) Retourne la taille en octet du fichier Ou false (+ error E_WARNING) filemtime($nomfichier) Retourne la date de modification du fichier sous forme d un nombre de secondes écoulées depuis le début 1970 Elément de Configuration Configuration de php.ini pour l affichage des erreurs) error_reporting display_errors Etc. Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 06 / 40

file($nomfichier) Lecture de tout un fichier sous forme d un tableau de string, 1 ligne = une case Fin de ligne absent rtrim($str) : enlève les «espaces» à la fin de $str url possible Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 07 / 40

Exécute une itération à chaque passage de la boucle Itération sur les indices Ou pour «n» itérations Il faut préciser: l initialisation du compteur d itération On peut commencer à 0; à 2; etc.. Attention à la plage des indices d un tableau la condition d arrêt de la boucle; Limite supérieur si le compteur augmente Limite inférieur si le compteur diminue la ou les instructions faisant évoluer ces valeurs à chaque itération $longeur=count($tab); for ($a=0,$a<$longueur; $a = $a+1) { echo $tab[$a] ; } Boucles équivalentes for ($x=0; $x <10; $x++) { // Ici des instructions } foreach($tab as $case) { echo $case; } Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 08 / 40

file_get_contents($nomfichier, [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]]) Idem file, mais le résultat est dans une chaine Possibilité de préciser une sous partie (par des octets) Utilisation possible de include_path de php.ini pour rechercher le fichier $context : NULL (si on n en utilise pas) file_put_contents(string $nomfichier, mixed $data [, int $flags = 0 [, resource $context ]]) Pour écrire dans un fichier $date : string ou tableau (ou stream resource) $flags : FILE_USE_INCLUDE_PATH ou FILE_APPEND ou LOCK_EX Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 09 / 40

Mais code «bas niveau» Refaire toujours les mêmes morceaux de code Pas de structure «commune», non partegeable Cas du CSV (comma separeted values) format d export textuel de tableur $chaine = file($fichier); $donnees = explode(";", $chaine[$i]) ; // $donnees => un tableau défini par les ; Manque de sémantiques ordre des colonnes Contenu des colonnes Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 10 / 40

Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 11 / 40

Vision «brute» Utilisation d un style fourni : <link media="screen" type="text/css" rel="stylesheet" href="style.css" /> Dans une variable $filename mémoriser le nom et le chemin d un fichier : «news/politique/1.news» Avec la fonction file_get_contents affichez le contenu de cet article dans la page dans une balise «article». file_get_contents($filename) Lecture de tout un fichier, retourne son contenu dans une chaine http://www.php.net/manual/fr/function.file-get-contents.php Si le fichier n existe pas, affichez le message «article inexistant» (toujours dans une div de classe css «article»). Essayer votre page en modifiant la valeur de $filename. N hésitez pas à mettre des valeurs farfelues Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 12 / 40

Il faut remplacer la fonction «file_get_contents» par du code plus évoluer. Avec la fonction file, vous récupérez le contenu d un fichier sous forme d un tableau de chaine de caractère. Chaque élément du tableau est une ligne du fichier. Dans le cas d un fichier «.news», le premier élément du tableau retourné par la fonction file sera le titre de l article, le deuxième sera l auteur, le reste sera le contenu de l article (c.f. l illustration ci-dessous) Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 13 / 40

Titre de l article Auteur de l article Contenu de l article Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 14 / 40

A partir de ce tableau, il faudra générer un code html semblable à celui ci-dessous, à condition qu il y ait au moins 2 lignes dans le fichier «.news» (la première pour le titre, la seconde pour l auteur). Sinon, utilisez file_get_contents (comme avant). <article> </article> <h2>le titre</h2> <p>l auteur</p> Le reste de l article, c est-à-dire la fin du tableau (à partir de l indice 2, jusqu au bout) Voici le code css pour centrer le titre de l article, changer sa couleur de fond pour un gris clair opaque à 0.5 (50%), placer un trait en bas (avec boder-bottom) article > h2 { text-align: center; background: rgba(225,225,225,0.5); border-bottom: black thin solid; } Voici le code css aligner pour le nom de l auteur à droite, l écrire en italique article > h2 + p { text-align: right; font-style: italic; } Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 15 / 40

En attendant les formulaires Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 16 / 40

Chaque page exécutée (ou obtenue) indépendamment Continuité dans la navigation, dans l interaction Comment partager des valeurs? Persistance à long terme (fichiers, bd) Persistance à court terme (session) Formulaires (saisie par l utilisateur) Paramètre dans l url et lien spécifique Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 17 / 40

Ajout à la fin de l url http://serveur.domaine/chemin/page?variable=valeur Une variable dans une url se définit par Un nom Une valeur (après égal) Plusieurs variables possibles Séparation par des & entre les variables https://www.google.fr/search?q=philippe+renevier- Gonin&aq=f&oq=Philippe+Renevier- Gonin&aqs=chrome.0.59j61l3j0j62.6424&sourceid=chrome&ie=UTF-8 Fonctionne dans des liens <a href="?q=philippe+renevier-gonin&aq=f"> Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 18 / 40

$_GET Variable super globale http://www.php.net/manual/fr/language.variables.superglobals.p hp Un tableau associatif des valeurs passées au script courant via les paramètres d'url. Les clefs sont les noms des variables de l url Les valeurs sont définies après le signe = (et avant le &) $_GET décode déjà les paramètres Encodage de l url Décodage avec urldecode ou rawurldecode Encodage avec urlencode ou rawurldecode http://www.faqs.org/rfcs/rfc3986.html Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 19 / 40

$val = "valeur par defaut"; If ( isset($_get["variable"]) ) { $val = $_GET["variable"]; // faire des tests sur les valeurs // convertion } Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 20 / 40

Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 21 / 40

À la place d avoir une variable $filename, utiliser une variable $dossier = "news/politque"; $file = "01.news"; $filename = $dossier."/".$file; La suite est inchangée Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 22 / 40

Les urls devront avoir la forme : article.php?article=01.news&dossier=politiqu e Après avoir initialiser $dossier et $file, regarder si : $_GET["article"] existe $_GET["dossier"] existe Si oui, affectez ces valeurs aux variables correspondantes Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 23 / 40

Dans les li, générez des liens vers article.php avec les paramètres nécessaires pour ouvrir le bon article Utilisez urlencode sur les noms de dossier et d article s il y a des caractères spéciaux (attention, glob renvoie le chemin complet) La fonction basename donne le nom du fichier à partir d un chemin (fonctionne s il n y a pas d accent dans le nom du fichier) Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 24 / 40

Entrer des données depuis un navigateur Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 25 / 40

Envoi de données depuis le navigateur Pour traitement dans le serveur Deux façons de faire Passage des informations dans l url (méthode GET, déjà utilisée) Passage des informations dans la requête (méthode POST) Attention : ce n est pas sécurisé Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 26 / 40

<form action="page.php" method="post"> <fieldset> <legend>placez une alerte</legend> <p>message de l'alerte : <input type="text" name="alerte" /></p> <input type="submit" name="setalerte" value="declenchez l'alerte" /> </fieldset> </form> Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 27 / 40

<form action="page.php" method="post"> <fieldset> <legend>placez une alerte</legend> <p>message de l'alerte : <input type="text" name="alerte" /></p> <input type="submit" name="setalerte" value="declenchez l'alerte" /> </fieldset> </form> if (isset($_post["setalerte"])) { $alerte = rawurlencode(trim($_post["alerte"])); file_put_contents("alerte.txt", $alerte); } Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 28 / 40

Contient des éléments de contrôle de formulaire (bouton, champs, etc.) «block» (sauf form) ou script Attributs action (uri) method ("get" ou "post") get : envoi dans l url des paires key/value :?toto=val&titi=val2& post : envoi enctype (pour une méthode "post") Par défaut : application/x-www-form-urlencoded - encodage : espace devient + et les autres non alphanumériques %HH et les retours à la ligne : "CR LF" (i.e., `%0D%0A' ) multipart/form-data - envoi en différentes parties (types à préciser à la source) accept-charset (liste -, - d encodage possible pour les caractères acceptés par le server) Accept (liste -, - de types de contenu acceptés par le server) events : onsubmit et onreset Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 29 / 40

text : champs d entrée de texte. password : l écho sont des *. sécutité pauvre. submit : un bouton pour envoyer reset (bouton). file : sélection d un fichier Etc. Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 30 / 40

Balise vide Attributs type name : nom de contrôle (très important) value (valeur initiale ou libellé) : optionnel sauf pour radio et checkbox size (en pixel sauf pour text et password où c est un nombre de caractère) maxlength : pour text ou password : nombre de caractères maximum checked : pour radio et checkbox src : pour image : la source (ne pas oublier alt) Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 31 / 40

select : menu ( optgroup option )+ attributs name : nom de contrôle size (nombre) : nombre d éléments visibles pour une scroll list multiple (pas de valeur) : permet la sélection multiple option #pcdata (texte) attributs selected : pour présélectionner l élément value (texte) : pour donner une valeur autre que le texte (#pcdata) label (texte) : pour faire apparaître un autre nom (plus court) à la charge du navigateur!! (pas sûr que cela fonctionne!!) optgroup regrouper les options : (option)+ attribut : label (texte) : libellé Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 32 / 40

Champs d entrée sur plusieurs lignes textarea #PCDATA : texte initiale Attributs name : nom de contrôle cols : nombre de colonne rows : nombre de ligne Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 33 / 40

Permet d associer un texte à un élément de formulaire sans texte inline Start tag: required, End tag: required Attaché par l attribut for Valeur = id d un champ de contrôle Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 34 / 40

<form action="recoit.php" method="post"> <fieldset> <legend>ajouter une news</legend> <select name="categorie"> <option value='france' >france</option> <option value='monde' >monde</option> <option value='politique' >politique</option> <option value='sports' >sports</option> </select><br /> </form> <label for="titre">titre : </label><input type="text" name="titre" value='' /><br /> <label for="auteur">auteur : </label><input type="text" name="auteur" value='' /><br /> <label for="texte">texte : </label><textarea name="texte"></textarea ><br /> <input type="submit" /></fieldset> Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 35 / 40

Page qui reçoit le formulaire : attribut «action» du form Valeur(s) accessible(s) par : - tableau associatif : index est l attribut «name» de l input $_POST ou $_GET sont des «superglobales» Un peu de sécurité trim(htmlspecialchars(addslashes( ) ) ) str_replace pour remplacer des caractères «spéciaux» Tests complémentaires Les valeurs peuvent être des tableaux (si le name de l input est du style nom[] Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 36 / 40

// si toutes les valeurs du formulaires sont bien présentes if (isset($_post["titre"],$_post["auteur"],$_post["texte"],$_post["categorie"])) { // et si elles sont toutes remplies avec quelques choses if ($_POST["titre"] && $_POST["auteur"] && $_POST["texte"] && $_POST["categorie"]) { // on prépare le contenu de la nouvelle / article $article = trim($_post["titre"]). "\n"; $article.= trim($_post["auteur"]). "\n"; $article.= trim($_post["texte"]) ; // il faut déterminer un nom de fichier $nomfichier = "news/".$_post["categorie"]."/".$_post["titre"].".news"; // si le fichier n existe pas... if (! file_exists($nomfichier) ) { //... il est créé file_put_contents($nomfichier, $article); } } } Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 37 / 40

Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 38 / 40

Créez une page ajouter.php. Cette page permettra d ajouter une nouvelle. Cette page «ajouter.php» contient une page web (entêtes inclues) comprenant un formulaire (pour saisir une nouvelle) : Comprenant un champ «select» nommé «categorie» avec comme option les catégories de nouvelle existants (les options sont écrites en dur ou générer en php, avec glob «onlydir») Un champ de texte (input) nommée «titre» Un champ de texte nommée «auteur» Un textarea nommée «texte» pour saisir le texte de la nouvelle Un champ «submit» pour soumettre le formulaire A vous de fixer le champ action du formulaire, mais celui-ci peut-être ajouter.php. La méthode d envoie sera post. Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 39 / 40

Il s agit maintenant de traiter le formulaire reçu lors de l ajout d une nouvelle. Vous devez «blinder» votre code avec des tests sur la faisabilité de la création. Notamment car il faut gérer les droits d accès du php (c est dans le groupe «other», c est à fixer avec chmod o+w ). Au début du fichier «ajouter.php», faites le test si le formulaire vient d être soumis via l existence des variables $_POST["categorie"], $_POST["titre"], $_POST["auteur"] et $_POST["contenu"]. Si c est le cas, déterminez la catégorie (le chemin complet est «news/»). Si la catégorie existe (is_dir) et si elle est modifiable (is_writable), alors créez un fichier : Construisez une chaine de caractère $nouvelle correspondant à la nouvelle nouvelle N oubliez pas les \n pour ajouter les retours à ligne Déterminez un nom de fichier (par exemple strtotime("now") puis «_» puis le titre encodé avec urlencode puis «.news»). N oubliez pas de préciser le chemin complet (news/catégorie/ ) Si le fichier n existe pas, créez le avec la fonction file_put_contents. Le résultat retourné par file_put_contents est le nombre d octet écrit. Si c est différent de strlen($nouvelle) alors il y a un problème Générer une phrase qui donne et explique le résultat du traitement du formulaire. Affichez cette phrase (juste avant le formulaire). Philippe Renevier Gonin - Php, Fichiers et Formulaires - formation ISN, 2014-2015 40 / 40