Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zér0 > Les tutoriels > Non-Officiels > Site Web > PHP > Systèmes complets > Lecture du tutoriel

Un "livre d'or" sans base de données - Les fichiers en PHP

Avatar
Auteur : david96
Créé : le 15/12/2005 11:33:44
Modifié : le 27/03/2008 00:40:17
Noter et commenter ce tutoriel
Imprimer ce tutoriel
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Un livre d'or pour son site sans base de données, c'est possible : on va pour cela utiliser la manipulation des fichiers en PHP. :)
On utilisera aussi la fonction setcookie pour éviter qu'une même personne poste 10 000 fois dans le livre d'or.
Sommaire du chapitre :

Le formulaire - Partie HTML

Comme d'habitude, la mise en forme vous appartient, je me contenterai du minimum esthétique pour la clarté du cours. ;)
Ce sont surtout les balises <form> et <input> qui nous intéressent.

Libre à vous d'appeler le fichier comme vous voulez.
Pour ce cours, on va le nommer livredor.htm. :p
Code : HTML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<html>
<head>
<title>Livre d'or</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
</head>
<body>
 
<h1>Le Livre d'OR</h1>
 
<!-- On commence le formulaire : pour le résultat on invoquera la page "message.php" grâce à l'attribut action de la balise form -->
<form action="message.php" method="post">
<div>
<fieldset> <legend>Votre Nom</legend>
<input type="text" name="pseudo" />
</fieldset>
<fieldset><legend>Postez un message pour le livre d'or</legend>
<textarea cols="66" rows="6" name="message"></textarea>
</fieldset>
<input type="submit" />
 
<!-- On va créer un lien vers une autre page pour ceux qui veulent consulter le livre d'or sans poster dedans -->
<p>
Pour consulter simplement le livre d'or, <a href="consultezlo.php">cliquez ici</a>
</p>
</div>
</form>
<!-- Notre formulaire est fini, on ferme la balise form -->
 
 
</body>
</html>

Le script - Partie PHP

Voilà le fichier "message.php" qui sera invoqué par l'attribut action de la balise <form> du formulaire "livredor.htm" (Voir partie html).
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
// Pour éviter qu'une unique personne poste 50 fois dans le livre d'or, on va insérer un cookie
setcookie("ip",$_SERVER['REMOTE_ADDR'],time()+.3600*60*90);
 
// Si le cookie est égal à l'ip du client, alors on le stoppe
if(isset($_COOKIE['ip']) && $_COOKIE['ip']==$_SERVER['REMOTE_ADDR'])
{
        echo "<h1>Vous ne pouvez émettre qu'un seul avis et vous l'avez déjà donné !</h1>";
 
        // On stoppe le script
        exit;
}
// Mettons le (futur) fichier dans une variable.
$commentaires="messages.txt";
 
// assignons nos 2 variables du formulaire, et on en profite pour les protéger des balises HTML
$pseudo=htmlentities($_POST['pseudo']);
$message=htmlentities($_POST['message']);
 
//Pensons au retour à la ligne et aux stripslashes pour la variable $message
$message=stripslashes(nl2br($message));
 
// On met en place quelques conditions pour les cellules (nom et message)
// On vérifie avant tout si le fichier existe : si ce n'est pas le cas, on le crée
if(!is_file($commentaires))
{
        $verif=@fopen($commentaires,"w+");
}
 
// On vérifie que le login ou le message ne sont pas vide
elseif (trim($message)=="" || trim($pseudo)=="")
{
        echo "Vous devez remplir tous les champs ! <a href="livredor.htm">Retour sur le livre d'or</a>";
        
        // On sort du script !
        exit;
}
 
// Après ces quelques vérifications d'usage, on passe à l'exécution de ce formulaire
 
        
        // Si ok, on ouvre en écriture-enregistrement du fichier message.txt
        $verif=@fopen($commentaires,"r+");
                
        // On analyse les anciennes données et on les stocke
        $stock=@fread($verif,filesize($commentaires));
        
        // On met la date dans une variable
        $date=date ("d/m/Y à H:i");
        
        // On paramètre le tout dans la variable $opinion
        $opinion="<b>".$pseudo."</b> a écrit le : ".$date."<br />\n".$message."<br />\n<hr />";
        
        //On remet le curseur du fichier en début de ligne
        rewind($verif);
        
        //On insère le nouveau commentaire
        fputs($verif,$opinion." \n".$stock);
        
        //On clôt le fichier
        fclose($verif);
        
        // On affiche le tout
        readfile($commentaires);
 
 
?>


On va maintenant créer la page consultezlo.php pour ceux qui veulent simplement consulter le livre d'or.
Vous allez voir : elle est on ne peut plus simple. :D
Code : PHP
1
2
3
4
<?php
$consultez="messages.txt";
readfile($consultez);
?>

Analyse du script - Partie PHP

Certaines lignes de code se doivent d'avoir quelques explications. :p

La fonction setcookie

Code : PHP
1
2
// Pour éviter qu'une unique personne poste 50 fois, on va insérer un cookie
setcookie("ip",$_SERVER['REMOTE_ADDR'],time()+.3600*60*90);


Pour en savoir plus, je vous renvoie aux cours de M@teo21 :
Cours sur les cookies

On vérifie si le fichier existe

Avec la fonction is_file().
Code : PHP
1
2
3
4
5
// On vérifie avant tout si le fichier existe : si ce n'est pas le cas, on le crée
if(!is_file($commentaires))
{
        $verif=@fopen($commentaires,"w+");
}

Devant la fonction, on a mis l'opérateur de négation "!" qui lui indique le contraire de ce qu'elle doit faire; donc là, textuellement la condition veut dire :
si le fichier "message.txt" n'existe pas {on le crée}

La variable $verif
Que nous dit elle ?

Code : PHP
1
$verif=fopen($commentaires,"w+");

La fonction fopen() ouvre le fichier en positionnant toujours un curseur (ou pointeur) de texte.
Le mode "w+" veut dire lecture et écriture, il efface totalement le contenant du fichier et positionne le curseur en début du fichier. En fait, on l'utilise ici pour créer une fois pour toutes le fichier "message.txt", puisque le mode "w+" crée le fichier s'il n'existe pas. ;)

Il y a d'autres modes :
  • "r" : (read) ouvre en lecture, positionne le curseur en début du fichier.
  • "r+" : ouvre en lecture et en écriture, et place le curseur au début du fichier.
  • "w" : (write) ouvre en écriture, et place le curseur au début du fichier en effaçant tout sur son passage. Si le fichier n'existe pas, il tente de le créer.
  • "w+" : ouvre en lecture et en écriture et place le curseur au début du fichier en effaçant tout sur son passage. Si le fichier n'existe pas, il tente de le créer.
  • "a" : (append) ouvre en écriture seule et place le curseur à la fin du fichier. Si le fichier n'existe pas, on tente de le créer.
  • "a+" : ouvre en lecture et en écriture et place le curseur à la fin du fichier. Si le fichier n'existe pas, on tente de le créer.



Pour conserver les anciens commentaires, petite astuce : j'appelle à la barre :
La fonction fread();

Code : PHP
1
2
// On analyse les anciennes données et on les stocke
        $stock=fread($verif,filesize($commentaires));


La fonction fread() va lire la totalité du fichier et placer le curseur à la fin de celui-ci ; il a aussi besoin d'un second argument : la taille du fichier.
Pour ne pas être embarrassé, on met la fonction filesize().
Donc, la variable $stock comprendra la totalité des messages sauvegardés.


La variable $opinion

Cette variable comprendra le nom, la date et le commentaire soumis par le formulaire.
Code : PHP
1
2
// On paramètre le tout dans la variable $opinion
        $opinion="<b>".$pseudo."</b> a écrit le : ".$date."<br />\n".$message."<br />\n<hr />";


On place le curseur en début de fichier.
Code : PHP
1
2
//On remet le curseur du fichier en début de ligne
        rewind($verif);


On peut alors insérer notre variable $opinion dans le fichier commentaire.txt.
Code : PHP
1
2
//On insère le nouveau commentaire
        fputs($verif,$opinion." \n".$stock);



La fonction readfile()

La fonction readfile() va nous permettre de lire l'intégralité du fichier (commentaire.txt) et de l'afficher.
Code : PHP
1
2
// On affiche le tout
        readfile($commentaires);


Voilà pour ce qui est de l'approfondissement de ce script.
Sur certains serveurs, il faudra que vous modifiez le CHMOD du fichier pour qu'il soit accessible en lecture et écriture ; pour en savoir plus sur le CHMOD, je vous renvoie une fois de plus aux cours de M@teo21 : cours sur le CHMOD.

Q.C.M.

Quel est l'argument de la fonction fopen() qui va ouvrir le fichier en lecture seulement ?
Quelle est la fonction qui va nous permettre d'écrire dans le fichier ?
Quelle est la condition qui va nous permettre de savoir si le fichier existe ?


Voilà : c'était surtout pour dire qu'on peut parfois se passer des bases de données, mais en vérité, c'est surtout pour voir les manipulations des fichiers que PHP gère à merveille. :D
Auteur : david96
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Edité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 420 Zéros connectés | Requêtes SQL 6 requêtes | Temps de génération de la page : Total (SQL) 0.1273s (0.1107s)