Page qui ne se charge qu'une fois !

Page qui ne se charge qu'une fois ! - PHP - Programmation

Marsh Posté le 06-09-2005 à 21:49:07    

Bonsoir à tous,
Un gros problème se présente à moi, je vais essayer de l'expliquer ..
Une page compte.php contient un lien vers la page valid.php, qui crédite l'user de 100 points SI l'user est contenu dans la table BANQUE (et donc utilisation d'un IF). Si l'user est crédité, son enregistrement dans BANQUE est supprimé.
Le problème est que certains users ayant une connexion très rapide cliquent plusieurs fois très rapidement sur le lien vers valid.php et se voient crédités de plusieurs centaines de points. Pourquoi ? Je n'en sais rien puisque l'enregistrement aurait du etre effacé.
Comment éviter alors cette méthode de triche ?
Merci infinniment !

Reply

Marsh Posté le 06-09-2005 à 21:49:07   

Reply

Marsh Posté le 06-09-2005 à 22:48:31    

Ben je sais pas, dans le doute vire l'utilisateur de ta table banque avant de le créditer ?
 
Fait voir ton code quand même.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 06-09-2005 à 22:57:43    

C'est déjà le cas, l'utilisateur est viré avant le crédit .. :s
C'est pour ça que ça m'intrigue !
Le code :
 
$result5=mysql_query("SELECT argent FROM banque WHERE pseudo='$pseudo'" );
$nb_result5 = mysql_num_rows($result5);
if ($nb_result5>=1){
$result4=mysql_query("DELETE FROM banque WHERE pseudo='$pseudo'" );
$result6=mysql_query("UPDATE base SET argent=argent+100 WHERE pseudo='$pseudo'" ); }
 
Une idée ?

Reply

Marsh Posté le 06-09-2005 à 23:59:33    

foxbond a écrit :

C'est déjà le cas, l'utilisateur est viré avant le crédit .. :s
C'est pour ça que ça m'intrigue !
Le code :
 
$result5=mysql_query("SELECT argent FROM banque WHERE pseudo='$pseudo'" );
$nb_result5 = mysql_num_rows($result5);
if ($nb_result5>=1){
$result4=mysql_query("DELETE FROM banque WHERE pseudo='$pseudo'" );
$result6=mysql_query("UPDATE base SET argent=argent+100 WHERE pseudo='$pseudo'" ); }
 
Une idée ?


vu le peu de code non, mais :
- si ton $pseudo contient des caractères spéciaux...toutes tes requetes plante, à moins que tu ne l'ai protégé avant
- utilise plutot des identifiants que du texte
- place un echo dans ton if pour savoir s'il y passe, ca s'appelle du debogage et c'est ce qu'on fait avant de poser des questions normalement
- ca peut provenir du code de compte.php qui crée un éventuel enregistrement dans la table banque pour ce pseudo  
 
 
 
 
 

Reply

Marsh Posté le 07-09-2005 à 07:06:41    

Pour les quatres tirets, non, cela n'est pas ça ..
Une autre idée, quelqu'un ? :(

Reply

Marsh Posté le 07-09-2005 à 07:10:11    

tu peux peut etre creer une session/cookies au moment de l'update de la base de donnée, et vérifier, avant update, la présence ou non de la dite session/cookies...

Reply

Marsh Posté le 07-09-2005 à 07:29:08    

Je vais essayer ça .. ! Sinon, y'a t il un moyen pour qu'une meme page refuse de se chargée si elle a été visitée moins de 10 minutes avant ?

Reply

Marsh Posté le 07-09-2005 à 07:57:10    

ben enregistres l'ip du visiteur dans une table ainsi que l'heure des la connexion a cette page ,et fais les verifs en consequences

Reply

Marsh Posté le 07-09-2005 à 13:03:23    

betsamee a écrit :

ben enregistres l'ip du visiteur dans une table ainsi que l'heure des la connexion a cette page ,et fais les verifs en consequences


super le test, si tu tombes sur un proxy tu bloques donc tous les utilisateurs si un seul a vu la page ?

Reply

Marsh Posté le 07-09-2005 à 13:21:49    

misterpinguin a écrit :

super le test, si tu tombes sur un proxy tu bloques donc tous les utilisateurs si un seul a vu la page ?


 
 :sarcastic:

Reply

Marsh Posté le 07-09-2005 à 13:21:49   

Reply

Marsh Posté le 07-09-2005 à 13:28:55    


c'est constructif comme réponse  [:mumu]  

Reply

Marsh Posté le 07-09-2005 à 13:44:06    

misterpinguin a écrit :

c'est constructif comme réponse  [:mumu]


bon je vais faire plus constructif:
 
bravo tu m'as brise en deux  
 
qu'as tu de constructif a proposer pour resoudre ce probleme?

Reply

Marsh Posté le 07-09-2005 à 19:05:00    

betsamee a écrit :

bon je vais faire plus constructif:
 
bravo tu m'as brise en deux  
 
qu'as tu de constructif a proposer pour resoudre ce probleme?


 
le but n'était pas de te "briser en deux" mais il faut éviter de donner des réponses dont tu ne connais pas la portée, et qui peuvent avoir des conséquences plus ou moins graves en programmation...
 
Et donc pour répondre à la question, il faut utiliser une page de redirection :
ton formulaire >> page de traitement >> page de résultat
 
qui empeche un multi-submit  
 
comme le fait ce forum...

Reply

Marsh Posté le 07-09-2005 à 19:06:49    

Et donc pour répondre à la question, il faut utiliser une page de redirection :  
ton formulaire >> page de traitement >> page de résultat  
 
C'est à dire ? Je suis désolé de ne pas avoir très bien compris, mais qu'est-ce que je dois changer exactement ? :$

Reply

Marsh Posté le 07-09-2005 à 19:10:54    

foxbond a écrit :

Et donc pour répondre à la question, il faut utiliser une page de redirection :  
ton formulaire >> page de traitement >> page de résultat  
 
C'est à dire ? Je suis désolé de ne pas avoir très bien compris, mais qu'est-ce que je dois changer exactement ? :$


 
tu utilises 3 fichiers :
 
1/ celui avec ton formulaire
2/ celui qui reçoit les données à traiter et les traite
3/ celui sur lequel tu arrives apres traitement
 
tu peux aussi en complément utiliser un petit bout de code en JS pour désactiver le bouton d'envoi de mémoire qqchose comme OnClick="this.disable";

Reply

Marsh Posté le 07-09-2005 à 19:38:38    

Merci :)

Reply

Marsh Posté le 08-09-2005 à 05:39:38    

misterpinguin a écrit :

tu utilises 3 fichiers :
 
1/ celui avec ton formulaire
2/ celui qui reçoit les données à traiter et les traite
3/ celui sur lequel tu arrives apres traitement


Excuse moi pourrais-tu préciser comment ce système empêche une multi-soumission du formulaire ? Je n'ai pas très bien compris :(

Reply

Marsh Posté le 08-09-2005 à 08:45:40    

Djebel1 a écrit :

Excuse moi pourrais-tu préciser comment ce système empêche une multi-soumission du formulaire ? Je n'ai pas très bien compris :(


 
La page 2 est redirigée (de façon transparente) vers la troisième, donc si t'essaies d'actualiser, ça actualise celle-ci et ça rebalance pas les données du form.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 17-09-2005 à 16:28:42    

donc la page 3 c'est celle qui balance les données du form ? Comme ca si tu actualises la page 2, ca retraite les données simplement ? (ouais jsuis un peu con :p)

Reply

Marsh Posté le 17-09-2005 à 16:43:30    

Djebel1 a écrit :

donc la page 3 c'est celle qui balance les données du form ? Comme ca si tu actualises la page 2, ca retraite les données simplement ? (ouais jsuis un peu con :p)


 
Non.
 
La page 1 envoie les données à la page 2 via http (POST le plus souvent).
La page 2 enregistre les données dans la base et redirige de façon transparente vers la page 3.
La page 3 affiche (par exemple) un message pour confirmer que les données ont bien été enregistrées.
 
L'utilisateur ne voit pas le passage par la page 2 et ne peut donc pas l'actualiser.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 19-09-2005 à 19:57:03    

merci bien :)
et ce qui fait que l'utilisateur ne voit pas la page 2, c'est parce que c'est immédiatement redirigé sur la page 3 ? Si le site rame à ce moment là, ca laissera pas la page 2 affichée un moment, laissant la possibilité de la refresh ?


Message édité par Djebel1 le 19-09-2005 à 20:10:08
Reply

Marsh Posté le 19-09-2005 à 20:00:49    

misterpinguin a écrit :

le but n'était pas de te "briser en deux" mais il faut éviter de donner des réponses dont tu ne connais pas la portée, et qui peuvent avoir des conséquences plus ou moins graves en programmation...


 
desole pour la reponse en retard (j'ai autre chose a foutre ne ce moment) mais a part peut etre en php je ne crois pas avoir grand chose a apprendre de toi en programmation. :lol:  
 
Ton arrogance ne te grandis pas
 
sur ce bonne soiree

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed