Aller au contenu

pb de raffraichissement avec la méthode POST


Messages recommandés

Posté(e)

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 />


Posté(e)

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.

Posté(e)

Ca ne change rien... Je ne vois pas ou serait le problème... ;) Il s'agit juste de rediriger le visiteur après avoir sauvegardé le contenu du formulaire afin d'aviter les problèmes de refresh de la page... :)

Posté(e)

tu stockes tes commentaires dans un fichier si j'ai bien compris.

On ne peut ouvrir 2 fichiers en même temps en écriture. Donc si 2 personnes envoient un commentaire de ton code, une des 2 va se prendre une erreur.

Archivé

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

×
×
  • Créer...