Aller au contenu

pb de raffraichissement avec la méthode POST


Messages recommandés

Hello World!

J'ai réalisé en php une page de "forum" du type système de commentaire des news de PCInpact :transpi:

(y avait pas besoin de sortir mysql pour le besoin)

Le contenu du champs texte est envoyé au formulaire par l'intermédiaire d'une méthode POST. Le problème, c'est que lorsque quelqu'un vient de poster, s'il raffraichit son affichage avec actualiser, le post apparait en double.

Comment peut-on effacer les variables restée dans le cache?

J'ai essayé avec unset() mais ça correspond pas à ce que je cherche

Si quelqu'un a une idée (à part mettre un avis du genre : SVP ne raffraichissez pas votre navigateur :ouioui: )

Merci d'avance

Surfinggohy


<script type="text/javascript" src="Forum/MisePage.js"></script> 

<?

// Avis.php



$Section = $_GET["Section"];	//Section contient le nom du fichier txt appelé

if (isSet($_POST["commentaire"]))
{
$commentaire = $_POST["commentaire"];
$fichier = fopen("Forum/Message/$Section", "a");
if ($fichier)
{
	$entete = " le " .date("d/m/Y") ." à " .date("H:i") ."#;#";
	fputs($fichier, "\n");
	fputs($fichier, $entete);
	fputs($fichier, "$commentaire\t");
	fclose($fichier);
	unset($commentaire);
	unset($entete);
}
}

$fichier = fopen("Forum/Message/$Section", "r");
$i = 0;
while(!feof($fichier))
{
//lire une ligne du fichier
$ligne = fgets($fichier);
$i++;
echo "<table style=\"border:1px solid #666666;width:100%\" cellpadding=\"0\" cellspacing=\"0\">\n";
echo "<tr>\n";
$ext=explode('#;#',$ligne);
	echo "<td style=\"width:85%px;padding-top:2px;padding-bottom:2px;background-color:#CCCCFF;\">$ext[0]</td>\n";

	echo "<td style=\"width:15%;border-left:1px solid #666666;background-color:#CCCCFF;text-align:center;\">#$i</td>\n";
echo "</tr>\n";
echo "<tr>\n";
	echo "<td colspan=\"4\">\n";
		echo "<table style=\"width:100%;border-top:1px solid #666666\" cellpadding=\"0\" cellspacing=\"0\">\n";
			echo "<tr>\n";
				echo "<td style=\"padding:5px;text-align:justify;border-left:0px solid #666666;background-color:#CCCCCC\">\n";
					$affichage = ereg_replace("[\]", "", $ext[1]);
					echo "$affichage<BR>\n";
				echo "</td>\n";
			echo "</tr>\n";
		echo "</table>\n";
	echo "</td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "<br />\n";
}
fclose($fichier);

?>

<form method="post" name="principal" action=<?"index.php?Page=Avis/avis.php&Section=$Section"?>>
<div>
	<div style="position:relative;float:left;width:792px;text-align:center;">
		<div style="position:relative;float:left;margin-left:10px;border:1px solid #666666;width:555px;height:325px;">
			<table cellpadding="0" cellspacing="0" align="center">
				<tbody>
					<tr>
						<td> </td>
					</tr>
					<tr>
						<td>
							<table cellspacing="0" cellpadding="0" align="center">
								<tbody>
							   		<tr>
										<td height="15" style="text-align:center;padding-left:3px;padding-right:3px;"> <input type="button"  onmouseup="TAinsert('<b>','</b>');" title="Mettre en gras le texte. Syntaxe : <b>texte</b>" value="G" /></a></td>
										<td style="text-align:center;padding-left:3px;padding-right:3px;"> <input type="button" onmouseup="TAinsert('<i>','</i>');" title="Mettre en italique le texte. Syntaxe : <i>texte</i>"  value="I" /></a></td>
										<td style="text-align:center;padding-left:3px;padding-right:3px;"> <input type="button" onclick="TAinsert('<u>','</u>');" title="Souligner le texte. Syntaxe : <u>texte</u>"  style="text-decoration:underline" value="S" /></a></td>
								 	</tr>
								 </tbody>
							</table>
						<td>
					</tr>
					<tr>
						<td><textarea cols="65" tabindex="1" rows="15" name="commentaire" id="commentaire"></textarea></td>
					</tr>
					<tr>
						<td> </td>
					</tr>
					<tr>
						<td><input name="submit" type="submit" accesskey="s" tabindex="2" value="Envoyer" /></td>
					</tr>
					<tr>
						<td> </td>
					</tr>
				</tbody>
			</table>
		</div>
	</div>
</div>
</form>

<br />
<br />


Lien vers le commentaire
Partager sur d’autres sites

Il faut utiliser la technique du "Post & redirect", c'est-à-dire utiliser la fonction "header" pour rediriger l'utilisateur vers la page de ton choix après avoir enregistré sa réponse.

Grosso modo, ta page de traitement ressemble à ça :

<?
// 1. récupération des valeurs des champs de saisie...
...

// 2. mise en base de données / fichiers / etc
...

// 3. Redirect !
$nextpage = "index.php?param1=val1&param2=val2";
header("Location: " . $nextpage );
?>

Dasn ton cas apparemment, c'est la même page qui sert de formulaire, puis de page de traitement. Cela ne change rien à la technique :

1. ta page est utilisée comme formulaire; l'utilisateur valide.

2. cela appelle la même page, et tu enregistres les infos. Ensuite, tu utilises la fonction "header" pour renvoyer vers...

3. ... encore la même page ! Mais sans les paramètres du formulaire dans l'URL.

Et là tout fonctionne correctement :transpi:

Par contre attention, comme on utilise une fonction header, il faut bien veiller à ce qu'aucune donnée n'ait encore été envoyée au client. Il faut donc que le code PHP d'enregistrement des infos soit TOUT EN HAUT DE LA PAGE. Il ne faut pas une seule balise, pas une seule ligne blanche, pas un seul espace avant le <? qui ouvre le bloc php.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...