Pb livre d'or et son panneau d'administration

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Pb livre d'or et son panneau d'administration

par tintinak » 15 mars 2007, 10:09

merci desole pour la lisibilité

par zeus » 14 mars 2007, 21:12

Modération :
tintinak, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ

par @rthur » 14 mars 2007, 20:04

Essaye de mettre ton fichier livredor.dat dans le répertoire d'admin

En clair, ça va te faire ça dans ton fichier d'admin:
define('FICHIER_MESSAGES', 'livredor.dat'); 
et il faut que tu modifie ton fichier du livre d'or:
define('FICHIER_MESSAGES', 'NOM-DU-DOSSIER-ADMIN/livredor.dat'); 
en remplaçant bien sûr "NOM-DU-DOSSIER-ADMIN" par le nom du dossier d'admin...

par tintinak » 14 mars 2007, 18:02

Probleme avec l'administration maintenant: voila ce que cela me amrque quand je vais sur mon panneau d'administration:
Warning: fopen(): open_basedir restriction in effect. File(../livredor.dat) is not within the allowed path in admin.php on line 31

Warning: fopen(../livredor.dat): failed to open stream: Operation not permitted in admin.php on line 31

Warning: fputs(): supplied argument is not a valid stream resource in admin.php on line 33

Warning: fclose(): supplied argument is not a valid stream resource in admin.php on line 34

Warning: file(): open_basedir restriction in effect. File(../livredor.dat) is not within the allowed path in admin.php on line 55

Warning: file(../livredor.dat): failed to open stream: Operation not permitted in admin.php on line 55
Voila on script d'administration:
<?php
echo '<?xml version="1.0" encoding="iso-8859-1"?>' . "\n";
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">

<head>
	<title>Administration du livre d'Or</title>
	<link rel="stylesheet" type="text/css" href="style.css" />
</head>

<body>

<?php

							/* PARAMETRES A DEFINIR */
// Chemin du fichier qui stocke les messages du livre d'or
define('FICHIER_MESSAGES', '../livredor.dat');
// Nombre maximal de caractères par mot
// pour éviter une augmentation de la largeur des tableaux
define('LONGUEUR_MAX_MOT', 70);

$action = (isset($_POST['action'])) ? $_POST['action'] : "";

//************************************************
// Création du fichier livredor.dat s'il n'existe pas
//************************************************

if(!file_exists(FICHIER_MESSAGES)){
	$FichierLivre=fopen(FICHIER_MESSAGES,"w+");
	$ligne1 = "Fichier livre d'Or, ne pas &eacute;diter !\n";
	fputs($FichierLivre, $ligne1);
	fclose($FichierLivre);
}

//************************************************
//Définition de la fonction CoupeLongsMots pour couper
//des mots contenant plus de $nbcarac caractères
//(pour ne pas étirer la mise en page)
//************************************************

function CoupeLongsMots($chaine,$len)
{
	$pattern = '/([^ ]{'.$len.'})/si';
	$replace = '\1'.' <br/> ';
	return preg_replace($pattern, $replace, $chaine);
}

//************************************************
//Lecture des messages déjà postés dans le livre
//et stockage des données dans les tableaux
//************************************************

$TabLivre=file(FICHIER_MESSAGES);
$nLignesTabLivre=count($TabLivre)-1;
$nbCom=$nLignesTabLivre/2;

for($cpt=1;$cpt<=$nbCom;$cpt++){
	$noms[$cpt]=strtok($TabLivre[($cpt*2)-1],"|");
	$dates[$cpt]=strtok("|");
	$comments[$cpt]=$TabLivre[($cpt*2)];
	$noms[$cpt]=trim(stripslashes($noms[$cpt]));
	$dates[$cpt]=trim(stripslashes($dates[$cpt]));
	$comments[$cpt]=trim(stripslashes($comments[$cpt]));
}

//************************************************
//Bref message d'accueil du script
//************************************************

echo "<h1>Administration du livre d'or</h1>";

echo "<p>";
echo "Ce script d'administration affiche tous les ";
echo "commentaires du livre d'Or et permet de supprimer ";
echo "les ind&eacute;sirables.";
echo "<br/></p>";

//************************************************
// Cas où aucun commentaires n'a été posté sur le livre d'Or
//************************************************

if(!$nbCom){
	echo"<p><b>";
	echo"Aucun commentaire n'a encore &eacute;t&eacute; post&eacute;.";
	echo"</b></p>";
	exit;
}

//************************************************
//Cas où vous demandez la suppression des messages
//************************************************

if($action=="del"){
	//On réécrit le fichier du livre d'or
	$HfichierLiv=fopen(FICHIER_MESSAGES,"w+");
	$ligne1 = "Fichier du livre d'Or, ne pas &eacute;diter !\n";
	fputs($HfichierLiv,$ligne1);
	
	//Nombre de commentaires réécrits
	$nbComReecrits=0;
	
	for($cpt=1;$cpt<=$nbCom;$cpt++){
		$nomVar="check".$cpt;
		// On réécrit tout sauf les checkbox sélectionnées
		if($_POST[$nomVar]!="1"){
			// 1er ligne : nom et dates.
			fputs($HfichierLiv,$nom[$cpt]);
			fputs($HfichierLiv,"|");
			fputs($HfichierLiv,$dates[$cpt]."|\n");
			// ligne commentaire
			fputs($HfichierLiv,$comments[$cpt]."|\n");
			$nbReecrits++;
		}
	}
	
	// Fermeture du fichier
	fclose($HfichierLiv);
	
	// calcul du nombre de commentaires supprimés
	$nbComSupprimes=$nbCom-$nbComReecrits;
	
	// message(s) de confirmation
	if($nbComSupprimes>0){
		echo "<p>";
		echo "Vous venez de supprimer <b>";
		echo $nbComSupprimes . "commentaire(s) </b>";
		echo "</p>";
		if($nbComSupprimes=$nbCom){
			echo "<p>";
			echo "La liste des commentaires postés par les utilisateurs est maintenant vide.";
			echo "</p>";
			exit;
		}
	}
	
	// Relecture du fichier livredor.dat
	// pour afficher actualiser les commentaires
	
	$TabLiv=file(FICHIER_MESSAGES);
	$nLignesTabLivre=count($TabLivre)-1;
	$nbCom=$nLignesTabLivre/2;
	
	for($cpt=1;$cpt<=$nbCom;$cpt++){
		$noms[$cpt]=strtok($TabLivre[($cpt*2)-1],"|");
		$dates[$cpt]=strtok("|");
		$nom[$cpt]=trim(stripslashes($noms[$cpt]));
		$dates[$cpt]=trim(stripslashes($dates[$cpt]));
		$comments[$cpt]=trim(stripslashes($comments[$cpt]));
	}
}

//************************************************
// Affichage de la liste des commentaires postés
// + checkbox pour supprimer les messages indésirables
//************************************************

// Affichage du formulaire

echo "<from method='post' action='admin.php'>";

echo "<table border='1' cellspacing='1' width='80%'>";
for($cpt=$nbCom;$cpt>=1;$cpt--){
	echo "<tr>";
	echo "<td>";
	echo "<input texte='checkbox' name='check".$cpt."' ";
	echo "value='1' />";
	echo "</td>";
	echo "<td>";
	echo "<p>";
	echo "<b>".$noms[$cpt]."</b> a &eacute;crit,";
	echo " le ".$dates[$cpt]." : <br/>";
	echo CoupeLongsMots($comments[$cpt], LONGUEUR_MAX_MOT);
	echo "</p>";
	echo "</td>";
	echo "</tr>";
}

echo "<tr>";
echo "<td colspan='2'>";
echo "<input type='hidden' name='action' value='del' />";
echo "<input type='submit' value='Supprimer' name='submit' />";
echo "</p>";
echo "</td>";
echo "</tr>";
echo "</table>";

echo "</form>";

?>
</body>
</html>
Si quelqu"un peut m aider à nouveau vous rendrez un débutant heureux merci d'avance.

Je suis hébergé chez online.fr, le probleme vient il de la?

Merci à tres vite

par tintinak » 14 mars 2007, 17:44

Je viens de resoudre mon probleme j avais oublié _ dasn $_POST[]
Merci

par tintinak » 14 mars 2007, 16:55

Voila les warning ont disparu mais je remplis le formulaire je clic sur envoyer et rien ne se passe pouvez vous m aider merci

par tintinak » 14 mars 2007, 16:45

lol cela fait 2 jours que je bataille, je n y crois pas merci beaucoup l'amis j'essaye de suite et vous tiens au courant

par @rthur » 14 mars 2007, 16:32

Bonjour,
//Lecture du fichier des commentaires
$TabLivre=file(FICHIER_MESSSAGES); 
Avec juste 2 "s" à messages, ça marchera probablement mieux ;)

Pb livre d'or et son panneau d'administration

par tintinak » 14 mars 2007, 16:28

Voila je viens de creer mon livre d'or, j ai corrigé les erreurs mais maintenant j ai des warning et le script ne marche pas. Pouvez vous m'aider?

Les warning en questions:

Code : Tout sélectionner

Warning: file(): Unable to access FICHIER_MESSSAGES in livredor.php on line 145 Warning: file(FICHIER_MESSSAGES): failed to open stream: No such file or directory in livredor.php on line 145
Le fichier livredor.php:
<?php
echo '<?xml version="1.0" encoding="iso-8859-1"?>' . "\n";
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">

<head>
	<title>Mon livre d'or</title>
	<link rel="stylesheet" type="text/css" href="style.css" />
</head>

<body>

<?php

							/* PARAMETRES A DEFINIR */

//Nombre maximal de commentaires à afficher par page
define('NB_COM_PAR_PAGES',10);

//Nombre maximal de pages de commentaires affichées
define('NB_MAX_PAGES',10);

//Nombre maximal de caractères possibles dans un commentaire
define('LONGUEUR_MAX_COM',1500);

//Nombre maximal de caractères par mot
//Pour eviter une augmentation de la largeur des tableaux
define('LONGUEUR_MAX_MOT',15);

//Chemin de fichier où l'on stocke les messages du livre d'or
define('FICHIER_MESSAGES', 'livredor.dat');

$message= (isset($POST['message'])) ? $_POST['message'] : "";
$nom= (isset($POST['nom'])) ? $_POST['nom'] : "";
$email= (isset($POST['email'])) ? $_POST['email'] : "";
$page= (isset($POST['page'])) ? $_POST['page'] : 1;

//************************************************
//Vérification du nombre de caractères envoyés dans 
//le commentaire éventuellement posté par sécurité
//contre certains utilisateurs mal intentionés.
//************************************************
if((strlen($nom)>LONGUEUR_MAX_COM)
	|| (strlen($message)>LONGUEUR_MAX_COM)){
	echo'D&eacute;sol&eacute;, la taille maximale des commentaires ';
	echo'pouvant &ecirc;tre post&eacute;s est limit&eacute; &agrave; ';
	echo LONGUEUR_MAX_COM . ' caract&egrave;.<br/>'."/n";
	echo '<a href=' .$_SERVER['PHP_SELF'] . '>';
	echo 'Retour au livre d\'Or</a>'."\n";
	exit;
}

//************************************************
//Création du fichier livredor.dat s'il n'existe pas
//************************************************
if(!file_exists(FICHIER_MESSAGES)){
	//Attention le répertoire doit avoir les droits en écriture
	//pour lcréation du fichier
	$FichierLivre=fopen(FICHIER_MESSAGES,'w+');
	$ligne1 = "Fichier livre d'or, ne pas &eacute;diter !\n";
	fputs($FichierLivre, $ligne1);
	fclose($FichierLivre);
}

//************************************************
//Définition de la fonction CoupeLongsMots pour 
//couper les mots contenant plus de $lencaractères
//(pour ne pas étirer la mise en page)
//************************************************
function CoupeLongsMots($chaine,$len)
{
	$pattern ='/([^ ]{'.$len.'})/si';
	$replace = '\1'.' <br/> ';
	return preg_replace($pattern, $replace, $chaine);
}

//************************************************
//Nettoyage et enregisterment des nouveaux commentatires
//envoyés par le formulaire d'ajout
//************************************************
if($message && $mail &&$nom){

	//Formatagede la date courante
	$tsnow=time();
	$jour=date("d/m/Y", $tsnow);
	$heure=dpte("H:i", $tsnow);
	$d=$jour.' &agrave; '.$heure;
	
	//Nettoyage du nom
	$nom=htmlentities($nom);
	$nom=stripslashes($nom);
	$nom=trim($nom);
	
	//Nettoyage du mail
	$email=htmlentities($email);
	$email=stripslashes($email);
	$email=trim($email);
	
	$arobas=strstr($email, '@');
	//ajout du commentaire que si @ dans le mail
	if($arobas){
		//Nettoyage du commentaire
		$message=htmlentities($message);
		$message=stripslashes($message);
		$message=trim($message);
		//On change les nouvelles lignes en <br/>
		$message=str_replace(chr(10)," <br/> ",$message);
		//On supprime les retour de chariots
		$message=str_replace(chr(13),"",$message);
		
		//Ouverture du fichier des commentaires
		$FichierDesCom=fopen(FICHIERS_MESSAGES,"a+");
		//Ecriture du mail, auteur et date sur une ligne
		fputs($FichierDesCom,"<a href=\"mailto:".$email."\">");
		fputs($FichierDesCom,$nom);
		fputs($FichierDesCom,"</a>");
		fputs($FichierDesCom,"|");
		fputs($FichierDesCom,$d."|\n");
		//Ecriture du message sur une 2 ligne
		fputs($FichierDesCom,$message."\n");
		fclose($FichierDesCom);
		
		//Affichage d'un remerciement pour le commentaire
		echo"<div class='avertissement' align=\"center\">";
		echo"Merci pour votre participation!";
		echo"</div>";
		echo"<br/>";
	}else{
		//Affichage d'un message d'erreur mail non valide
		echo"<div class='avertissement' align='center'>";
		echo"Adresse E-Mail non valide !";
		echo"</div>";
		echo"<br/>";
	}
}

//************************************************
//Lecture des messages déjà postés dans le livre,
//et stockage des données dans les tableaux
//************************************************

//Lecture du fichier des commentaires
$TabLivre=file(FICHIER_MESSSAGES);
//Nombre de ligne du fichier
$nLignesTabLivre=count($TabLivre)-1;
//Nombre total de commentaires
$nbCom=$nLignesTabLivre/2;

//On récupère les noms, dates, commentaires
for($cpt=1;$cpt<=$nbCom;$cpt++){
	$noms[$cpt]=strtok($TabLivre[($cpt*2)-1],"|");
	$dates[$cpt]=strtok("|");
	$comments[$cpt]=$comments[($cpt*2)];
	$noms[$cpt]=trim(stripslashes($noms[$cpt]));
	$dates[$cpt]=trim(stripslashes($dates[$cpt]));
	$comments[$cpt]=trim(stripslashes($comments[$cpt]));
}

//************************************************
//Affichage des commentaires déjà postés
//************************************************

if($nbCom>0){
	//Nombre de pages de commentaires théorique
	$nbdepages= floor((($nbCom-1)/NB_COM_PAR_PAGES)+1);
	
	echo "<div class='general'>";
	echo "<h1>Livre d'or : Les commentaires des visiteurs";
	echo "</h1>\n";
	echo"<br/><br/>\n";
	
	//Affiche les liens vers les pages suivantes
	//En haut de la page à droite
	if($nbCom>NB_COM_PAR_PAGES){
		echo "<div class='pages'>pages ";
		for($i=1;$i<=min(NB_MAX_PAGES,$nbdepages);$i++){
			//Si c'est le numéro de page courante
			if($i=$page){
				echo $i. ' ';
			//sinon on met un lien dessus
			}else{
				echo '<a href="livredor.php?page='.$i.'">';
				echo $i . "</a>";
			}
		}
		echo "</div>\n";
	}
	// Position du 1er commentaire de la page courante
	// à afficher lecture débutant par la fin)
	$FirstComPage=$nbCom-(($page-1)*NB_COM_PAGES);
	// Position du dernier à afficher (plus ancien)
	$LastComPage= max(1,($nbCom-($page*NB_COM_PAR_PAGES)+1));
	// Affiche les commentaires de la page courante
	for($cpt=$FirstComPage;$cpt>=$LastComPage;$cpt--){
		echo "<div class='auteurdate'><b>";
		echo CoupeLongsMots($noms[$cpt],LONGUEUR_MAX_MOT);
		echo "</b> a &eacute;crit, le ".$dates[$cpt]."</div>\n";
		echo "<div class='commentaire'>";
		echo CoupeLongsMots($comments[$cpt],LONGUEUR_MAX_MOT);
		echo "</div>\n";
	}
	
	// Affiche les liens vers les pages suivantes
	// En bas de spages à droite
	if($nbCom>NB_MAX_PAGES){
		echo "<div class='pages'>pages ";
		for($i=1;$i<=min(NB_MAX_PAGES,$nbdepages);$i++){
			// Si c'est le numéro de page courante
			if($i==$page){
				echo $i.' ';
			// Sinon on met un lien dessus
			}else{
				echo '<a href="livredor.php?page='.$i.'">';
				echo $i . '</a> ';
			}
		}
		echo"</div>";
	}
	echo "<br/> \n";
}

//************************************************
//Avertissement si il n y a pas encore de commentaire
//************************************************

else if ($nbCom<1){
	echo "<div align=\"center\" class=\"avertissement\">";
	echo "Le livre d'or ne comporte encore aucun commentaires.";
	echo "</div>";
	echo "<br/>";
	}

//************************************************
//Formulaire permettant de poster un nouveau commentaire
//************************************************
	
?>
</div>

<p> </p>

<div class="general">
<h1>Ajouter un nouveau commentaire :</h1>

<form method='post' action='livredor.php'>
<table cellpadding='5'>
	<tr>
		<th><b>Votre nom</b> : </th>
		<td>
			<input type='text' name='nom' maxlenght='70' />
		</td>
	</tr>
	<tr>
		<th><b>Votre email</b> : </th>
		<td>
			<input type='text' name='email' maxlenght='100' />
		</td>
	</tr>
	<tr>
		<th><b>Votre message</b> : </th>
		<td>
			<textarea rows='6' name='message' cols='40'></textarea>
		</td>
	</tr>
	<tr>
		<td> </td>
		<td>
			<input type='submit' value='Envoyer !' name='B1' />
		</td>
	</tr>
</table>
</form>
</div>

</body>
</html>
Merci d'avance et à tres bientot