8722 sujets

Développement web côté serveur, CMS

bonjour,

J'ai un problème de code Php qui s'exécute à nouveau quand je recharge ma page dans le navigateur

je créé une page qui affiche un article extrait d'une table (table1) par méthode GET avec une url du type mapage.php?id=10

cette page contient un formulaire pour télécharger un fichier dans une autre table (table2) qui a un champ commun
avec la 1ere table.
la page contient aussi un div qui affiche les images déjà présentes dans la table2 (requête2) en fonction du champ commun.

Lorsque le formulaire est validé, la page se recharge avec la même url et l'image est insérée dans la table2.
Les requêtes dans table1 et table2 sont effectuées à nouveau pour afficher toutes les images de table2 (y compris celle qui
vient d'être ajoutée)

Ce code fonctionne, par contre, dans certains cas, si je recharge la page, la dernière image est insérée à nouveau.

je cherchais une méthode pour remettre à zéro le tableau $_FILES lorsque la requête d'insertion est terminée mais je n'ai pas trouvé.

pour simplifier les choses, j'indique le schéma de ma page en pseudo-code, car le code en lui même il fonctionne.

merci


if isset $_GET['id']  {

	if isset $_FILES['photo']  {

		insertion image dans table2

	}
	
	requete1 sql SELECT * FROM table1 WHERE id = $_GET["id"]

	requete2 sql SELECT * FROM table2 WHERE une_cle = $_GET["id"]

}

<html>
	affiche résultat requête1

	formulaire method="post"
		input type=file name=photo
		bouton submit

	affiche résultat requête2

</html>

Il faut toujours faire une redirection, même si c'est vers la page courante, une fois que tu as validé tes formulaires pour éviter ce genre de désagréments.
jb_gfx a écrit :
Il faut toujours faire une redirection, même si c'est vers la page courante, une fois que tu as validé tes formulaires pour éviter ce genre de désagréments.


tu es mon sauveur !!! Smiley smile

j'ai fait ça, avec $ma_requete désignant la requête d'insertion de l'image.
Apparemment je suis obligé de passer par une variable ($destination) à l'intérieur de la fonction header()


		if ($ma_requete)  {
		  $destination = $_SERVER['REQUEST_URI'];
		  header("location: $destination");
		  exit;
		} else {
		  $error['insert'] = "problème lors de l'insertion dans la base de données";
		}