Un livre d'or sans mysql, mais avec txt

Description

Soyez indulgent, c'est ma première source. J'ai mis beaucoup de commentaire, c'est pour moi, si j'oublie.
C'est un livre d'or qui fonctionne sans base de données MySQL, mais qui utilise des fichiers textes.
Elle n'est pas très complète, vous pouvez l'améliorer assez facilement.

Source / Exemple :


//le fichier 'Index.php'
<HTML>
<HEAD>
	<TITLE>Livre d'or</TITLE>
</HEAD>
<BODY background="images/filigrane.bmp" bgproperties="fixed">
<H1>Livre d'or</H1>
<table border="0" width="100%">
<a href="livredor_enregistrer.php" class=lien>Insérer un commentaire</a>
<?php
//on ouvre le dossier
$dossier = "livredor/";
$dir = opendir("$dossier");
//Pendant que la variable file peut prendre la valeur de readdir($dir)
While ($file=readdir($dir)) {
	//on demande le type du fichier (lettres a partir du point)
	$filetype = strstr("$file",".");
	//si le fichier est un document texte
	if ($filetype=='.txt') {
		//On récupère les données inclues dans le nom (pseudo,date d'écriture, commentaire/email)
		$date_ecrit=strtok($file,'_');
		$pseudo_2=strtok('_');
		$type=strtok('_');
		//Si c'est un fichier contenant l'e-mail
		if ($type=="aemail.txt") {
			echo("<TR><TD colspan=\"2\"><HR></TD></TR><TR><TD valign=top bgcolor=\"#99CCFF\">$pseudo_2</TD><TD valign=top>$date_ecrit");
			//on l'ouvre (dans le dossier 'livredor'),
			$fichier = "$dossier"."$file";
			$fpe = fopen("$fichier","r+");
			//et on récupère le contenu du fichier (pas besoin de tester la fin du fichier, un e-mail tient sur une ligne)
			$size_email=filesize("$fichier");
			$size_email++;
			$email = fgets($fpe,$size_email);
			stripslashes($email);
			fclose($fpe);
			if ($email) {
				echo " <a href=\"mailto:$email\" class=lien><img src=\"envoyer.bmp\" border=\"0\"></img></TD>";
			}
		//Si c'est un fichier contenant le commentaire
		} else if ($type=="bcommentaire.txt") {
			//on l'ouvre (dans le dossier 'livredor'),
			$fichier = "$dossier"."$file";
			$fpcomm = fopen("$fichier","r+");
			//et on insere le contenu du fichier dans la variable commentaire, en testant la fin du fichier.
			while (!feof($fpcomm)) {
			//Si c'est un fichier contenant les commentaires
			if ($commentaire) {
				$commentaire = "$commentaire"."<br>";
			}
			$size_comm=filesize("$fichier");
			$size_comm++;
			$commentaire_part = "$commentaire".fgets($fpcomm,$size_comm);
			$commentaire = "$commentaire_part";
			}
			//On enlève les anti-slashes, qui perturbent tout
			stripslashes($commentaire);
			//On ferme le fichier
			fclose($fpcomm);
			echo "</TR><TR><TD></TD><TD valign=top>$commentaire</TD></TR>";
			$commentaire='';
		}
	}
}
closedir($dir)
?>
</table>
</BODY>
</HTML>

//Le fichier 'livredor_enregistrer.php'
<SCRIPT language="JavaScript">
<!--
function ControleVide_lo()
{
        if(document.Livredor.pseudo.value=='') {
        	alert('Vous devez indiquer votre pseudo');
                document.Livredor.pseudo.focus();
        } else if(document.Livredor.commentaire.value=='') {
        	alert('Vous devez mettre un commentaire');
                document.Livredor.commentaire.focus();
        } else {
		document.Livredor.method = "POST";
                document.Livredor.action = "livredor/livredor_inser.php";
                document.Livredor.submit();
	}
}
//-->
</script>
<html>
<head>
	<title>Livre d'or</title>
</head>
<body background="images/filigrane.bmp" bgproperties="fixed">
<H1>Livre d'or</H1>
<table width="100%">
<form Name="Livredor" action="livredor/livredor_inser.php">
    <TR>
	<TD>Pseudo ou prénom:</TD>
        <TD><Input Type="text" Name="pseudo" Size="50" Maxlength="100"></TD>
    </TR>
    <TR>
	<TD>e-mail*:</TD>
        <TD><Input Type="text" Name="email" Size="50" Maxlength="100"></TD>
    </TR>
    <TR>
    	<TD valign=top>commentaires:</TD>
        <TD><Textarea Name="commentaire" Rows="10" Cols="70"></Textarea></TD>
    </TR>
    <TR>
    	<TD colspan="2"><div align="center"><Input Type="button" OnClick="ControleVide_lo()" Value="Soumettre"></TD>
    </TR>
</table>
</form>

  • :facultatif<br>
Vous ne pouvez enregistrer plus d'un commentaire par jour, sinon, le deuxième commentaire effacera le précédent. </body> </html> //Le fichier 'livredor_inser.php' <html> <head> <META http-EQUIV="Refresh" CONTENT="1; url=http://www.votresite.com/livredor.php"> <title>Livre d'or</title> </head> <body> <?php global $pseudo; global $commentaire; global $email; //On récupère les variables du formulaire $pseudo = $HTTP_POST_VARS['pseudo']; $commentaire = $HTTP_POST_VARS['commentaire']; if ($HTTP_POST_VARS['email']!='') { $email = $HTTP_POST_VARS['email']; } //On récupère la date $date = date("j"); if (strlen($date) < 2) { $date = "0".$date; } $date .= date("-m-Y"); //On définit un nom de fichier (date_pseudo_noaemail) $nom = "$date"."_$pseudo"."_noaemail"; //On le crée (avec l'option ériture) $fp = fopen($nom.'.txt','w+'); //On se place en début de fichier fseek($fp,0); //On écrit l'e-mail à l'intérieur fputs($fp,$email); //On le ferme fclose($fp); //On définit un nom de fichier (date_pseudo_nobcommentaire) $nom = "$date"."_$pseudo"."_nobcommentaire"; //On le crée (avec l'option ériture) $fp = fopen($nom.'.txt','w+'); //On se place en début de fichier fseek($fp,0); //On écrit le commentaire à l'intérieur fputs($fp,$commentaire); //On le ferme fclose($fp); mail("vous@votresite.com","Un commentaire dans le livre dor","Un commentaire a été inséré dans le livre d'or de votre site","From:robot-livredor@votresite.com\nReply-To: no@reply.com"); ?> </body> </html>

Conclusion :


Et voilà!
Dans 'livredo_inser.php', n'oubliez pas de changer l'adresse de redirection (ligne 3) et l'e-mail du webmaster (ligne47).
Bien sûr, ce code n'est pas très complet, mais il est toujours en cours d'amélioration. Vous pouvez ajouter des fonctions pour la mise en forme du message (gras, url, smiley,...), ou ajouter une fonction pour vérifier l'e-mail.

N'oubliez surtout pas de placer les fichiers texte dans le dossier 'livredor'(a créer), Avec Ultimate Zip, je n'ai pas réussi à garder des dossiers, que des fichiers.

N'hésitez pas à relever les bugs et les lourdeurs du code, et à me les signaler.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.