Page 1 sur 1

Rafraîchissement des pages

Posté : 27 nov. 2006, 13:04
par Kaoteknik
Bonjour à tous,

le bonheur de résoudre un problème est toujours entâché par la venue d'un autre. Cette fois-ci mon soucis vient du rafraîchissement des pages après avoir effectué une requête d'insertion dans une bdd.

Je vais essayer d'être plus clair :

J'ai un fichier "tableau.php" dans lequel un certains nombres d'informations sont inscrites : une liste de joueurs, des informations sur leurs villages, et d'autres sur leurs troupes. Ces informations sont réparties sur trois tables dans la bdd (users, troops, villages).

Chaque joueur a la possibilité de modifier ses propres paramètresou d'ajouter un village, par exemple.

Jusque là tout va bien, même après validation du formulaire par le joueur. Les requêtes s'inscrivent parfaitement dans la bdd et le tableau final affiche correctement les données.

Là où ça ne va plus c'est que, dès l'instant où la page est rafraîchie, les dernières informations enregistrées sont répétées. Faire une actualisation de la page peut donc vite devenir problématique et encombrer la base de données.

J'avoue ne pas savoir comment résoudre ce problème. Si vous avez une idée, mes ouïes (ou plutôt mes yeux) sont grands ouverts ! :)

Merci.

Posté : 27 nov. 2006, 13:08
par DocType
tu le bloque via un id unique stockée en $_SESSION...
Y'a un exemple qui traine sur le forum que j'avais écris y'a une tite année...
Le principe c de faire un rand(0,50000); , de le passer en md5, d'enregistrer ça en session lorsque le mec se connecte. Lors de la validation de ton formulaire, tu mets un champs hidden avec sa valeur que tu vas vérifier dans le traitement du formulaire : voir si "session = formulaire".
Si c'est ok tu insères les données et tu regénères une nouvelle clef en session. Si il reactualise, il aura lancienne clef devenue invalide et sera jeté :wink:

Posté : 27 nov. 2006, 13:13
par Ryle
Je pense qu'il serait plus judicieux d'appliquer le pattern PRG (p'tite recherche sur google ou le forum ;))

Le principe "Post Redirect Get", te permet de récupérer tes données via POST, les enregistrer en base, faire une redirection avec un header (totalement transparente pour l'utilisateur), et afficher les résultat sur une nouvelle page, en passant éventuellement des infos en GET pour afficher celle ci.

Du coup, l'actualisation de la page ne raffraichi que celle ouverte en GET et évite ainsi le double enregistrement des données :)

C'est un principe utilisé par ce forum nottament, lorsque tu envoi un message, tu peux t'acharner sur le bouton F5 lorsqu'il a été envoyé, il n'y aura toujours qu'un seul message de posté ;)
(Cela permet également d'éviter des repostes avec précédent/suivant, etc. )

Posté : 27 nov. 2006, 15:13
par Kaoteknik
Il manque une chose dans ce forum : un smiley pour se prosterner ! Car c'est ce que j'ai envie de faire devant vos compétences ô combien salvatrices.

Un problème résolu de plus. :)

Pour résumer la solution a été le header. Auparavant je faisais ma redirection avec un "include", ce qui évidemment n'était pas très judicieux de ma part. J'ai eu quelques soucis avec le header qui refusait de rediriger l'utilisateur vers le tableau général, cela à cause du fait qu'il y avait des balises HTML dans le traitement de mon formulaire. Mais comme j'ai pu le lire dans la FAQ (ainsi que cela a été maintes et maintes fois répété sur ce forum !, :oops: ), les balises HTML sont une source d'ennuis pour la redirection. D'autant plus impardonnable de ma part : ces balises ne servaient strictement à rien ! :shock:

Puis-je vous appeler "Maîtres", Maîtres ? :lol:

Encore un grand merci à vous.

Posté : 27 nov. 2006, 15:56
par albat
Il manque une chose dans ce forum : un smiley pour se prosterner !
:agenouille: ;)