Cet effet est normal et il est dù au navigateur qui garde dans le cache d'adresses l'url précédente. Cette dernière est automatiquement renvoyée à chaque actualisation (Refresh) de la page.
Ce mécanisme est totalement indépendant malheureusement du script php qui lui tourne côté serveur Web.
Ton programme php recevera donc suite à toute actualisation les paramètres éventuels existant depuis le précédent envoi.
Ceci dit, il y a des solutions techniques permettant d'éviter l'effet négatif du mécanisme d'actualisation automatique offert par les navigateurs.
La plus judicieuse des solutions et de fixer les contraintes de manipulation des données comme celles du modèle relationnel des BDD.
Par exemple, dans ton cas, tu veux éviter d'enregistrer des messages en double : la solution est de fixer un critère (règle ou index) d'unicité d'un enregistrement soit en inventant un id unique par message ou tout simplement en associant plusieurs champs pour former le critère unique. Par exemple dans ton cas, le critère d'unicité d'un message est la chaîne:
Code : Tout sélectionner
$cjoursem $jourdumois $cmois $yannee, par $nom : <br>$message<br>
Cette chaîne ne doit apparaitre qu'une fois dans le fichier des messages.
L'algorithme qui permet de vérifier ça peut être le suivant:
//si le critère d'unicité n'est pas trouvé dans le fichier news.txt alors c'est un nouveau message
$critère = "$cjoursem $jourdumois $cmois $yannee, par $nom : <br>$message<br>";
if ( file_exists("news.txt") && strpos(file_get_contents("news.txt") , $critère) === false ) {
//Enregistrer ce nouveau message
.....
}
else echo "<p>Ce message existe déjà!</p>";
En définitif ton code doit resembler à un truc comme ça:
<td CLASS = menu align="center" width="80%"><br>
<h4 align=center>Les News : Infos sur le site, messages et commentaires</h4>
<form action="<?php echo $PHP_SELF ?>" method="POST">
Ki me parle : <input name="nom" value="<?php echo (isset($_POST['nom'])?$_POST['nom']:""); ?>"> Kes ki dit : <br>
<textarea align=center cols=60 rows=5 name="message" wrap=virtual><?php echo (isset($_POST['message'])?$_POST['message']:""); ?></textarea><br><br>
<input type="submit" value="Deposer votre message ">
</form>
<?php
if (isset($_POST['nom']) && isset($_POST['message'])
&& trim($_POST['nom']) != "" && trim($_POST['message']) != "") { //test si un postage a eu lieu
$mon = getdate();
$cjoursem = $mon['weekday'];
$jourdumois = $mon['mday'];
$cmois = $mon['month'];
$yannee = $mon['year'];
$nom = $_POST['nom'];
$message = $_POST['message'];
//si le critère d'unicité n'est pas trouvé dans le fichier news.txt alors c'est un nouveau message
$critère = "$cjoursem $jourdumois $cmois $yannee, par $nom : <br>$message<br>";
if ( file_exists("news.txt") && strpos(file_get_contents("news.txt") , $critère) === false ) {
//Enregistrer ce nouveau message avec test d'erreurs d'ouverture et d'écriture
if ( ($fp = @fopen("news.txt","a"))
&& @fwrite($fp,"<h4 align=left>-----------------------------------------------------------------------------------------<br>
$cjoursem $jourdumois $cmois $yannee, par $nom : <br>$message<br>
-----------------------------------------------------------------------------------------</h4>\n")){
echo "<p>Message enregistré</p>";
} //fin if (test enregistrement)
else echo "<p>Message non enregistré</p>";
if ($fp) @fclose($fp); //fermer le fichier dans tous les cas
} //fin if (test unicité)
else echo "<p>Ce message existe déjà!</p>";
}//fin if (test postage)
else echo "<p>Veuillez remplir les champs obligatoires!</p>";
?>
<p align=left>Ci dessous les messages precedents : </p>
<?php
if (file_exists("news.txt")) readfile("news.txt");
?>
</td>