8791 sujets

Développement web côté serveur, CMS

Salut à tous.

Je suis en train de faire un petit site web.
La j'essaye de faire une systeme de commentaire de news.

voila mon code:


<?php
if (isset($_SESSION['pseudo']))
{ 
?>
	<h4>Commenter la news</h4> 
	<form method="post" action="<?php echo $_SERVER["REQUEST_URI"];?>">
		<p>
			<label>Laissez votre message ! <br/>
			<textarea name="message" rows="10" cols="75"></textarea><br/></label>
			<br/><br/>
			<input type="hidden" name="pseudo" value="<?php echo $_SESSION['pseudo']; ?>" />
			<input type="hidden" name="idcomment" value="<?php echo $donnees['id']; ?>" />
			<input type="submit" value="Envoyer !" />
		</p>
	</form>
<?php	
	if (isset($_POST['message']) AND isset($_POST['pseudo']))
	{
		if($_POST['message'] != '' AND $_POST['pseudo'] != '')
		{
			$auteur = addslashes(htmlentities($_POST['pseudo'], ENT_QUOTES));
			$message = addslashes(htmlentities($_POST['message'], ENT_QUOTES));
			$idcomment = $_POST['idcomment'];

			mysql_query ("INSERT INTO comment VALUES('', '" . $auteur . "', '" . $message . "', '" . $idcomment . "')")or die (mysql_error());
		}
	}
}
else
{
?>
	<h3>Vous devez être enregisté pour poster un commentaire</h3>
<?php
}



En gros si je suis connecté, il m'affiche un form pour que je poste un commentaire sinon il m'affiche un message.

Mon script marche, j'ia juste un petit probleme lorsque je poste mon commentaire.
En effet, lorsque je clique sur le bouton, le commentaire est bien envoyé dans la base mais ma page est pas actualisé !!

Je ne vois pas mon commentaire apparaitre, il faut que je reload la page (ce qui fait double post) ou il faut que je retourne sur la page d'accueil et que je reviennesur la page en cliquant sur le bon lien.

Comment je pourrais faire pour que ma page soit actualisée avec le commentaire que je viens de poster ??
Fau-til que je fasse une nouvelle page qui traite mes infos et qui me renvoi sur la page précédente (Je ne connais pas la fonction mais je sais que ca se fait) ou puis-je faire autrement ?

J'espere que j'ai été assez claire et je vous remercie d'avance pour votre aide !!
Modifié par nonolerobot (01 Apr 2008 - 01:09)
Salut,

remplace sa :
a écrit :
<form method="post" action="<?php echo $_SERVER["REQUEST_URI"];?>


par sa :
a écrit :
<form method="post" action="fichier.php">


De plus je te conseillerai d'utiliser mysql_real_escape_string() a la place de tes addslash et htmlentities Smiley smile
Salut

Merci pour ta réponse rapide !!

Mon probleme c'est que dals cette page, j'ai un parametre dans l'URL !!
Par exemple, http://www.bla.com/page_news.php?article=5
Hors, l'id de l'article est différent donc je ne peux pas le savoir a chaque fois !!

A moins que je ne mette page_news.php?aticle= <?php echo $_GET['article']; ?> ???

Sinon, atre petite question, mysql_real_escape_string remplace addslash et htmlentities ?
Faut-il que j'utilise htmlspecialchars aussi ?? Je pense que c'est mieux !!

Merci pour ton aide !!

EDIT: J'ai essayé de mettre ca: action="page_news.php?article=<?php echo $_GET['article'];?>" mais ca ne parche pas !!

Au lieu de me renvoyer la: http://www.blabla.com/page_news.php?article=5 ca me renvoi la: http://www.blabla.com/page_news.php?article=%205 ??? Qu'est-ce que %20 vient faire la ??


EDIT:

J'ai trouvé une solution
J'ai mis une redirection grace à header apres l'insertion dans la base de donnée !!
Qu'est-ce que tu penses de cette solution ??

Merci !!
Modifié par nonolerobot (31 Mar 2008 - 23:25)
a écrit :
Au lieu de me renvoyer la: http://www.blabla.com/page_news.php?article=5 ça me renvoi la: http://www.blabla.com/page_news.php?article=%205 ??? Qu'est-ce que %20 vient faire la ??


Tu as du mettre un espace en trop ( %20 = espace ).

En ce qui concerne mysql_real_escape_string apriori sa tu peu omettre les fonctions addslash/htmlentities/htmlspecialchars. Je t'invite quand même a lire attentivement la documentation concernant la fonction mysql_real_escape_string ici : http://fr.php.net/mysql_real_escape_string .

De plus n'oublie pas de vérifier que ta variable $_GET['article'] est bien un nombre (via is_numeric() ) pour éviter d'ouvrir des failles aux visiteurs !
Humm,

le header en php doit etre placer avant tous autre chose en debut de page (code). Un peu comme le session_start() !
Donc si a l'avenir du fait un include ou autre chose, si le header n'est pas bien placer ton script risque de ne plus fonctionner.
Je te conseillerai de faire une redirection en html ou javascript Smiley smile
Bonjour,

nonolerobot a écrit :

EDIT:

J'ai trouvé une solution
J'ai mis une redirection grace à header apres l'insertion dans la base de donnée !!
Qu'est-ce que tu penses de cette solution ??

Merci !!


C'est la meilleure solution car elle évite une multiple insertion en BDD s'il y a un rafraichissement de page de la part de l'utilisateur.

FunK a écrit :

le header en php doit etre placer avant tous autre chose en debut de page (code). Un peu comme le session_start() !
Donc si a l'avenir du fait un include ou autre chose, si le header n'est pas bien placer ton script risque de ne plus fonctionner.
Je te conseillerai de faire une redirection en html ou javascript


Hum, ce n'est pas vraiment un bon conseil étant donné que ces méthodes de redirection ne sont pas l'idéal sur le plan du référencement :
Les différentes formes de redirection

Bonne journée