problème raffraichissement de page et mysql

noobphp
Invité n'ayant pas de compte PHPfrance

26 nov. 2013, 14:49

Bonjour à tous

J'ai un problème sur mon site PHP fait sur notepad++


Dans le back office de mon site, lorsque je remplis le formulaire pour ajouter des données dans ma BDD(mysql), si je raffraichi la page, les données que je viens d'intégrer s'ajoutent à nouveau et ce à chaque fois que j'appuie sur F5.

Voici le code PHP de ma page

if(isset($_POST['enregistrement']))
	{
			if(empty($msg))
			{
				execute_requete("REPLACE INTO avis(id_avis, id_membre, id_salle, commentaire, note, date_avis) VALUES ( '$_POST[id_avis]', '$_POST[id_membre]', '$_POST[id_salle]', '$_POST[commentaire]', '$_POST[note]','$_POST[date_avis]')");
				$_GET['action'] = "affichage";
			}			
				
	}	
	

//::::::::::::::::::::::::::::::::::::::::::::::::::::://
//::::::::::::::  Suppression article ::::::::::::::::://
if(isset($_GET['action']) && $_GET['action'] == "suppression" )
	{
		// $msg .= "test suppression";
		$resultat = information_sur_un_avis_backoffice($_GET['id']);
		$article_a_supprimer = $resultat->fetch_assoc();
		execute_requete("DELETE FROM avis WHERE id_avis=$_GET[id]");
		$_GET['action'] = "affichage";
	}

require_once("../inc/header_inc.php");
?>
<div id="conteneur">
<?php
require_once("../inc/nav_inc.php");
echo $msg;
echo "<div id='menu_gestion'>";
include("../inc/menu_gestion_inc.php");
echo "<h1>Gestion avis</h1>";
echo "<a href='?action=ajout'>Ajouter un avis</a><br />";
echo "<a href='?action=affichage'>Afficher les avis</a><br/>";

//:::::::::::::::::::::::::::::::::::::::::::::::::::://
//::::::::::::::  Affichage boutique ::::::::::::::::://
if(isset($_GET['action']) && $_GET['action'] == "affichage" )
{
	echo "<h1>Affichage des Avis</h1>";
	$resultat = execute_requete("SELECT * FROM avis");
	echo "Nombre de membre: " .$resultat->num_rows;
	$nbcol = $resultat->field_count;	
	echo "<table border=5><tr>";
	for($i=0; $i<$nbcol; $i++)
	{
		$colonne = $resultat->fetch_field();
		echo "<th>". $colonne->name ."</th>";
	}
	echo "<th>Modification</th>";
	echo "<th>Suppression</th>";
	echo "</tr>";
	while($ligne = $resultat->fetch_assoc())
		{
			echo "<tr>";	
			foreach($ligne as $indice => $valeur)
				{
						echo "<td>" . $valeur . "</td>";
				}			
echo "<td><a href='?action=modification&id=" . $ligne['id_avis'] . "'>---</a></td>"; 	
echo "<td><a href='?action=suppression&id=" . $ligne['id_avis'] ."' onClick=\"return(confirm('En etes vous certain?'));\">x</a></td>"; 	
echo "</tr>";
		}

	echo "</table>";
}
//:::::::::::::::::::::::::::::::::::::::::::::::::::://
//:::::::::::::  Affichage / Modification formulaire :::::::::::::::://
if(isset($_GET['action']) && ($_GET['action'] == "ajout" || $_GET['action'] == "modification"))
{
	if(isset($_GET['id']))
		{
			 echo "test modification";
			$resultat = information_sur_un_avis_backoffice($_GET['id']);
			$article_actuel = $resultat -> fetch_assoc();
		
		}
?>

Eléphant du PHP | 77 Messages

26 nov. 2013, 14:58

Ben si tu fais F5 c'est normal car tu renvoies dans l'entête les données fournies dans le formulaire donc tu envoies à chaque fois le tableau $_REQUEST avec ces valeurs.
Développeur PHP/Javascript/HTML

Mes sites perso :
construire une piscine => http://www.construire-sa-piscine.com
Le cadre végétal => http://www.cadre-vegetal.org

noobphp
Invité n'ayant pas de compte PHPfrance

26 nov. 2013, 15:10

Merci de ta réponse, aurais tu une solution pour palier à ce problème.

noobphp
Invité n'ayant pas de compte PHPfrance

26 nov. 2013, 15:12

Jai lu sur un forum que la seule solution pour régler ca c'était de faire une redirection via un header(location). Il n y a pas d'autres solutions ?

ViPHP
xTG
ViPHP | 7331 Messages

26 nov. 2013, 19:29

Non, et c'est pour cela qu'on différencie toujours le traitement de l'affichage.
Car header() et affichage ça fait mauvais ménage. ^^

Eléphanteau du PHP | 46 Messages

27 nov. 2013, 09:37

j'ai déjà eu ce problème et je l'ai réglé de la manière suivante:

page 1 :
- formulaire + saisie des données par l'utilisateur
- déclaration d'une variable de session par ex
$_SESSION['autorise_query'] = TRUE
page 2 :
- réception des données du formulaire
- test sur $_SESSION['autorise_query']
si $_SESSION['autorise_query'] == TRUE on execute le SQL ET ENSUITE on met la variable à FALSE
si $_SESSION['autorise_query'] == FALSE c'est que la page a déjà été appelée précédement
if($_SESSION['autorise_query'] )
{
    // requetes SQL ....

    $_SESSION['autorise_query'] = FALSE ;
}
else
{
    // message utilisateur du style vos données ont déjà été prises en compte 
    // retourner page accueil (ou autre) en cliquant sur ce lien
}
comme çà même si on rappelle la page avec F5 les instructions SQL ne sont pas exécutées à nouveau
et ca évite de faire une redirection
voilà si ca peut t'être utile ... :D