Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LIVRE D'OR


Information sur la source

Catégorie :Divers Niveau : Débutant Date de création : 16/07/2004 Date de mise à jour : 19/07/2004 13:28:54 Vu / téléchargé: 5 099 / 456

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (22)
Ajouter un commentaire et/ou une note

Description

Un livre d'or très simple, n'utilisant pas de base de données.
 

Source

  • LIVRE.PHP
  • <!doctype html public "-//w3c//dtd html 4.0 transitional//en">
  • <html>
  • <head>
  • <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  • <title>Livre d'or</title>
  • <?
  • function RecordMessage($MessagesFile)
  • {
  • global $nom;
  • global $commentaire;
  • if (!file_exists($MessagesFile))
  • {
  • $pntFile1=fopen($MessagesFile,"w+");
  • $ret=fputs($pntFile1,"<HR>\r");
  • $ret=fclose($pntFile1);
  • }
  • $idlck=fopen($MessagesFile.".bak","w");
  • fclose($idlck);
  • $ret=copy($MessagesFile,$MessagesFile.".bak");
  • $pntFile1=fopen($MessagesFile,"w");
  • $pntFile2=fopen($MessagesFile.".bak","r");
  • // write the message
  • $commentaire= ereg_replace(chr(13),"<BR>",$commentaire); // replace chr(13) by <BR>
  • $commentaire= str_replace("\'","'",$commentaire);
  • $commentaire= str_replace('\"','"',$commentaire);
  • if($commentaire&&$nom)
  • {
  • $ret=fputs($pntFile1," <CENTER>\r");
  • $ret=fputs($pntFile1," <I>$commentaire</I>\r");
  • $ret=fputs($pntFile1," </CENTER>\r");
  • $ret=fputs($pntFile1,"</P>\r");
  • $ret=fputs($pntFile1,"<BR>\r");
  • $ret=fputs($pntFile1,"$nom ");
  • $ret=fputs($pntFile1,date("d/m/Y H:i"));
  • $ret=fputs($pntFile1,"<BR>\r");
  • $ret=fputs($pntFile1,"<HR>\r");
  • }
  • $contents = fread( $pntFile2, filesize( "$MessagesFile.bak" ) );
  • $ret =fputs($pntFile1,$contents);
  • $ret=fclose($pntFile2);
  • $ret=fclose($pntFile1);
  • $ret=unlink("$MessagesFile.bak");
  • }
  • ?>
  • <?
  • function lit_actu($fichier)
  • {
  • $lecture=fopen($fichier, "r");
  • $chaine=fread($lecture,filesize($fichier));//lit le contenu du fichier
  • fclose($lecture);
  • return $chaine;
  • }
  • ?>
  • <?
  • $MessagesFile=("messages.txt");
  • $ecriture=RecordMessage($MessagesFile);
  • ?>
  • <style>
  • a{
  • text-decoration:none;
  • }
  • </style>
  • <SCRIPT LANGUAGE="JavaScript">
  • function verifform(formulaire)
  • {
  • if(formulaire.commentaire.value == "" && formulaire.nom.value == "")
  • alert('Remplissez le formulaire !');
  • else
  • formulaire.submit();
  • }
  • </SCRIPT>
  • </head>
  • <body text="#000099" bgcolor="#E9E9E9" link="#000099" vlink="#000099" alink="#000099">
  • <center><table COLS=1 WIDTH="80%" >
  • <tr>
  • <td>
  • <center><h2>LIVRE D'OR</h2></center>
  • </td>
  • </tr>
  • </table></center>
  • <br>&nbsp;
  • <center><table COLS=1 WIDTH="80%">
  • <tr><td><center>
  • <form method="post" action="livre.php">
  • <b><font color="#000099">Votre nom ou pseudo</font></b><br>
  • <input type="text" name="nom" size="20" maxlength="40"><br><br>
  • <b>Veuillez taper votre message ci-dessous</b><br>
  • <textarea name="commentaire" cols="40" rows="5"></textarea>
  • <br><br>
  • <input type="button" value="envoyer" onClick="verifform(this.form)">
  • &nbsp;&nbsp;
  • <input type="reset" value="effacer">
  • </form>
  • </center>
  • </td></tr>
  • </table></center>
  • <center><h3>MESSAGES</h3></center>
  • <center><table COLS=1 WIDTH="50%" BGCOLOR="#FFFFFF" BORDER=0>
  • <tr>
  • <?
  • $actu=lit_actu("messages.txt");
  • ?>
  • <TD VALIGN=CENTER>
  • <b>
  • <? echo "$actu"; ?>
  • </b>
  • </TD></td>
  • </tr>
  • </table></center>
  • <br>&nbsp;
  • </body>
  • </html>
LIVRE.PHP

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
   <title>Livre d'or</title>
   <?
function RecordMessage($MessagesFile)
{
 global $nom;
 global $commentaire;

 if (!file_exists($MessagesFile))
 {
  $pntFile1=fopen($MessagesFile,"w+");
  $ret=fputs($pntFile1,"<HR>\r");
  $ret=fclose($pntFile1);
 }

 $idlck=fopen($MessagesFile.".bak","w");
 fclose($idlck);

 $ret=copy($MessagesFile,$MessagesFile.".bak");
 $pntFile1=fopen($MessagesFile,"w");
 $pntFile2=fopen($MessagesFile.".bak","r");
 // write the message

 $commentaire= ereg_replace(chr(13),"<BR>",$commentaire); // replace chr(13) by <BR>
 $commentaire= str_replace("\'","'",$commentaire);
 $commentaire= str_replace('\"','"',$commentaire);

 if($commentaire&&$nom)
 {
 $ret=fputs($pntFile1," <CENTER>\r");
 $ret=fputs($pntFile1,"  <I>$commentaire</I>\r");
 $ret=fputs($pntFile1," </CENTER>\r");
 $ret=fputs($pntFile1,"</P>\r");
 $ret=fputs($pntFile1,"<BR>\r");
 $ret=fputs($pntFile1,"$nom ");
 $ret=fputs($pntFile1,date("d/m/Y H:i"));
 $ret=fputs($pntFile1,"<BR>\r");
 $ret=fputs($pntFile1,"<HR>\r");
 }
 $contents = fread( $pntFile2, filesize( "$MessagesFile.bak" ) );
 $ret  =fputs($pntFile1,$contents);
 $ret=fclose($pntFile2);
 $ret=fclose($pntFile1);
 $ret=unlink("$MessagesFile.bak");
}
?>
   <?
function lit_actu($fichier)
{
    $lecture=fopen($fichier, "r");
    $chaine=fread($lecture,filesize($fichier));//lit le contenu du fichier
    fclose($lecture);
    return $chaine;
}
     ?>

<?
$MessagesFile=("messages.txt");
$ecriture=RecordMessage($MessagesFile);
?>

  <style>
  a{
      text-decoration:none;
  }
  </style>
  <SCRIPT LANGUAGE="JavaScript">
  function verifform(formulaire)
  {
      if(formulaire.commentaire.value == "" && formulaire.nom.value == "")
      alert('Remplissez le formulaire !');
      else
      formulaire.submit();
  }
</SCRIPT>
</head>
<body text="#000099" bgcolor="#E9E9E9" link="#000099" vlink="#000099" alink="#000099">
<center><table COLS=1 WIDTH="80%" >
<tr>
<td>
<center><h2>LIVRE D'OR</h2></center>
</td>
</tr>
</table></center>
<br>&nbsp;
<center><table COLS=1 WIDTH="80%">
<tr><td><center>
<form method="post" action="livre.php">
<b><font color="#000099">Votre nom ou pseudo</font></b><br>
<input type="text" name="nom" size="20" maxlength="40"><br><br>
<b>Veuillez taper votre message ci-dessous</b><br>
<textarea name="commentaire" cols="40" rows="5"></textarea>
<br><br>
<input type="button" value="envoyer" onClick="verifform(this.form)">
&nbsp;&nbsp;
<input type="reset" value="effacer">
</form>
</center>
</td></tr>
</table></center>
<center><h3>MESSAGES</h3></center>
<center><table COLS=1 WIDTH="50%" BGCOLOR="#FFFFFF" BORDER=0>
<tr>
<?
$actu=lit_actu("messages.txt");
?>
<TD VALIGN=CENTER>
<b>
<? echo "$actu"; ?>
</b>
</TD></td>
</tr>
</table></center>
<br>&nbsp;
</body>
</html>

Conclusion

Suite aux conseils de GRenard, il semblerait que la méthode de déclaration de variables "global" n'est plus usitée pour des raisons de sécurité,  il conviendra donc d'utiliser la méthode $_POST.

$nom=$_POST['nom'];
$commentaire=$_POST['commentaire'];

à la place de :

global $nom;
global $commentaire;


Attention, cette méthode ne fonctionne pas chez Tiscali, mais fonctionne parfaitement chez Free.
A vous de tester pour les autres hébergeurs.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

17 juillet 2004 07:57:53 :
17 juillet 2004 09:38:49 :
18 juillet 2004 09:15:54 :
19 juillet 2004 12:57:06 :
Suite aux conseils de coucou747, ajouter ces 2 lignes : $commentaire= str_replace("<'"," ",$commentaire); $commentaire= str_replace('>"'," ",$commentaire); dans le script pour le sécuriser.
19 juillet 2004 13:28:54 :
Rectificatif pour erreur de copier/coller : $commentaire= str_replace("<"," ",$commentaire); $commentaire= str_replace(">"," ",$commentaire);

Commentaires et avis

signaler à un administrateur
Commentaire de GRenard le 16/07/2004 08:23:48

Il faut mettre une method au formulaire (GET ou POST) et ensuite utiliser les variables tableaux du système $_GET ou $_POST pour aller chercher ce qui a été envoyé par formulaire ou adresse web, mais pas directement $nom_de_la_variable.

Petit conseil, essais de coder avec les variables suivantes :
short_open_tag = Off
register_globals = Off
error_reporting = E_ALL

signaler à un administrateur
Commentaire de familypm le 16/07/2004 08:50:28

Je te remercie pour tes conseils.

En fait c'est mon premier script, avec un Tag-Board qui utilise le même script, ils fonctionnent parfaitement tous les deux sur mon site, mais j'ai surement fait des erreurs, principalement au niveau de la sécurité.

Je vais essayé de comprendre mes erreurs et les modifier.

signaler à un administrateur
Commentaire de windu le 16/07/2004 09:56:21

familypm->en fait les erreur que te signale GRenard sont dus a une "faille de sécurité" de PHP... depui PHP 4 & kelke pour recuperer tes variables tu dois utiliser les tableaux $_GET et $_POST car sinon si tu recupere la variable comme tu le fais n'importe qui peut transmettre une variable et fausser ton système voire le pirater le principe des tableaux superglobaux limitent l'accès des variables: $_GET ne représente que les variabler d'URL par ex.
de toute facon, a part si tu change register_globals, tu es obligé d'utiliser les tableaux superglobaux sur toutes les nouvelle versions de PHP (depuis la version de correction mais je me souviens plus c'est laquelle exactement...)

signaler à un administrateur
Commentaire de familypm le 17/07/2004 08:35:06

J'ai modifié le script en utilisant  $_POST, j'espère avoir bien compris, en tous cas ça fonctionne toujours.
Merci encore

signaler à un administrateur
Commentaire de familypm le 17/07/2004 09:50:39

En fin de compte, j'ai remis la méthode "global", car ça ne fonctionnait plus en ligne, (en revanche ça marchait en local ??), surement à cause des variables $nom et $commentaire qui se trouvent à différents endroits du script.

J'ai tenté de modifier des $nom en $_POST['nom'] et des $commentaire en $_POST['commentaire'], j'avais encore plus d'erreurs.

Je cherche encore.

signaler à un administrateur
Commentaire de GRenard le 17/07/2004 10:28:06

Pour tester jusqu'a temps que tu n'ailles plus d'erreur, va mettre dans ton php.ini les variables que j'ai mentionnées plus haut !
Bonne Chance !

(Lorsque tu fais une mise à jour, ne l'écrit pas dans "ton code" ou l'explication... écrit le dans l'espace alloué qui explique ta mise à jour !)

signaler à un administrateur
Commentaire de familypm le 17/07/2004 11:27:41

J'ai trouvé pourquoi ça marche en local et pas en ligne, sur le forum des webmasters de Tiscali mon hébergeur, en fait  le register_globals de Tiscali est sur ON et apparemment je ne suis pas le seul à avoir ce problème.

signaler à un administrateur
Commentaire de GRenard le 18/07/2004 06:39:28

S'il est sur ON, les variables $_ fonctionnent quand même...

signaler à un administrateur
Commentaire de familypm le 18/07/2004 08:54:57

Voici ce qui est répondu par le modérateur sur le forum des webmasters des pages perso de Tiscali.

Question :

J'ai fait mon petit portail, pour la reception ds données formulaires, j'ai
l'habitude d'utiliser $_get['bob'] ou $_post['bob'] ou encore
$_request['bob']... ici ça veut pas....
Quel est donc le pourquoi du comment ? Problème de version ? Je vais tout
de meme pas me taper toutes les conversions de $_request['bob'] en $bob...
Merci pour la reponse
et de rien pour l'effort de redaction...


Réponse :

C'est en effet un problème de version de PHP, celle installée ne prend pas
les $_GET et $_POST mais directement les $variables.

Merci de votre compréhension.


C'est la raison pour laquelle je ne peux pas utiliser $_POST en ligne chez Tiscali, mais que ça fontionne très bien en local, même avec EasyPHP 1.6.

Je le testerais chez Free, après modifications, sur un autre site.

Je vais laisser mon script en l'état, libre à chacun de modifier la déclaration des variables, en fonction de son hébergeur.

Merci encore pour les conseils, que je pense avoir compris.

signaler à un administrateur
Commentaire de GRenard le 18/07/2004 10:19:40

Attention, ces variables sont obligatoirement en majuscule...

La version de PHP doit etre sacrément vieille pour ne pas accepter ces variables sur Tascali...
Une chance que ce service est gratuit sinon tu aurais pus les poursuivres :P

Pour savoir la version de PHP sur un serveur, tu fais un fichier avec ceci à l'intérieur
<?php
phpinfo();
?>

Tu obtiendras pleins d'informations utiles ainsi que le numéro de la version...


Si tu veux avoir une meilleur version chez toi, je te conseille d'installer Apache, mySQL et ensuite PHP4.3.8 (à ce jour)


Bonne Chance :)

signaler à un administrateur
Commentaire de coucou747 le 19/07/2004 10:24:18

a moins que j'ai mal lu ton code source, c'est très dangereux de mettre ça dans ton site...
si qqn met
<?
system("shutdown -h now")
?>
dans ton livre d'or, ton serveur s'éteind... Bref, ton script prends le html et le php dans les commentaires que posteront les internautes => grosse faille de sécuritée...

Sinon, c'est pas mal, t'as juste ça a ajouter, une ligne remplaçant les "<" par des espaces et une ligne remplacant les ">" par des espaces...

signaler à un administrateur
Commentaire de familypm le 19/07/2004 13:37:56

Bien vu !

C'est rectifié.

Merci beaucoup

signaler à un administrateur
Commentaire de coucou747 le 23/07/2004 15:09:48

en fait sans ça t'es un peu mal car la, je donne juste la solution pour éteindre un serveur a distance, mais évidement vous pensez bien que l'on pourrait facilement avec ça passer toutes les autres sécuritées et supprimer tout les fichier du serveur... (possèdant moi même un serveur perso, je suis solidaire... lol)
sinon, bon code

signaler à un administrateur
Commentaire de coucou747 le 23/07/2004 15:14:12

au dessus, j'ai vu un commentaire te conseillant php 3...
met php5 c'est un peu plus récent...

signaler à un administrateur
Commentaire de coucou747 le 23/07/2004 15:14:25

au dessus, j'ai vu un commentaire te conseillant php 3...
met php5 c'est un peu plus récent...

signaler à un administrateur
Commentaire de coucou747 le 23/07/2004 15:14:39

au dessus, j'ai vu un commentaire te conseillant php 3...
met php5 c'est un peu plus récent...

signaler à un administrateur
Commentaire de coucou747 le 23/07/2004 18:45:43

ça marche pas chez moi, je sais pas pourquois...

signaler à un administrateur
Commentaire de familypm le 26/07/2004 10:52:39

Si tu utilises EasyPHP 1.7, il faut déclarer les variables à l'aide de $_POST, comme dit dans un post précédent.

signaler à un administrateur
Commentaire de coucou747 le 26/07/2004 10:57:22

j'utilises apache, mais j'ai réussi a créer moi même un script de ce genre, alors je n'en ai as besoin (ce script m'a bien aider a aprendre le php)
merci pour ta source

signaler à un administrateur
Commentaire de choubess le 22/08/2004 17:52:00

Je ne suis pas un crac en programmation mais je me demande comment le webmaster peut effacer un message à partir de ce scipt là?
Un message en double par exemple puisque un seul suffit? !!
Merci de ma répondre

Le choubidou

signaler à un administrateur
Commentaire de coucou747 le 22/08/2004 17:55:09

lol c'ets un livre d'or pas un forum...
et il a juste a récupérer/mofifier/remplacer le fichier contenant les messages

signaler à un administrateur
Commentaire de MadM@tt le 11/11/2004 13:56:27

Excusez moi mais je débute totalement en php et j'aimerais savoir comment utiliser le fichier .php :
avec quoi le lit-on, ou alors est ce qu'il faut appeler les fonctions à partir d'une page web html ?

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 4,384 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.