IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Limiter un nombre d'action


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Par défaut Limiter un nombre d'action
    Bonjour à tous.

    Je vais vous expliquer mon problème

    Tous d'abord sur mon site ( qui est un site de jeu en ligne ) j'ai intégrer deux boutons ( root-top ) qui permette de faire un vote sur un autre site. ( le but est qu'il y à un classement réaliser par le site en question et donc c'est une sorte de pub gratuite )

    Voici le code que j'ai créer pour effectuer les votes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    			//Partie vote 
    			// rt A = root-top mmorpg
    			// rt B = root_top ogame
     
    			//pour le root-top mmorpg 
    				$dernier_vote_mmorpg = $user['bonus_temps_mmorpg'];
    				$temps        = time();
    				$Temps_entre_deux_rt_A = $temps - $dernier_vote_mmorpg;
    				$points_bonus = $user['points_bonus'];
    			//pour le roo-top ogame
    				$dernier_vote_ogame = $user['bonus_temps_ogame'];
    				$temps        = time();
    				$Temps_entre_deux_rt_B = $temps - $dernier_vote_ogame;
    				$points_bonus = $user['points_bonus'];
    			//pour les officier ( points )
    				$points_officier = $user['rpg_points'];
     
    		//vote du root_top mmorpg
    			if ($Temps_entre_deux_rt_A >=7200){
     
     
    				$mmorpg_A = "<table width=650><tr><th align=center width=325>
    				<img src=http://img.root-top.com/topsite/mmorpg/banner.gif border=0><br />
    				<a href=rt_mmorpg.php onclick=window.open('frames.php');>Voter<a/></th>";
    				$parse['mmorpg'] = $mmorpg_A;
     
    				if ($Temps_entre_deux_rt_B <=60) {
     
    					$mmorpg_C = "<table width=650><tr><th align=center width=325><img src=http://img.root-top.com/topsite/mmorpg/banner.gif border=0><br />Veuillez attendre 60 seconde entre chaque vote !</th>";
    					$parse['mmorpg'] = $mmorpg_C;
     
    				}
    			} else {
     
    				$mmorpg_B = "<table width=650><tr><th align=center width=325><img src=http://img.root-top.com/topsite/mmorpg/banner.gif border=0><br />Vous avez d&eacute;j&agrave; vot&eacute; !</th>";
    				$parse['mmorpg'] = $mmorpg_B;
    			}
     
    		//vote du root_top ogame
    			if ($Temps_entre_deux_rt_B >=7200){
     
    				$ogame_A = "<th align=center width=325>
    				<img src=http://img.root-top.com/topsite/ogame0serveurs/banner.gif border=0><br />
    				<a href=rt_ogame.php onclick=window.open('frames.php');>Votez <a/></th></tr></table>";
    				$parse['ogame'] = $ogame_A;
     
    				if ($Temps_entre_deux_rt_A<=60) {
     
    					$ogame_C = "<th align=center width=325><img src=http://img.root-top.com/topsite/ogame0serveurs/banner.gif border=0><br />Veuillez attendre 60 seconde entre chaque vote !</th></tr></table>";
    					$parse['ogame'] = $ogame_C;
     
    				}
    			} else {
     
    				$ogame_B = "<th align=center width=325><img src=http://img.root-top.com/topsite/ogame0serveurs/banner.gif border=0><br />Vous avez d&eacute;j&agrave; vot&eacute; !</th></tr></table>";
    				$parse['ogame'] = $ogame_B;
    			}
    Ici il tous fonctionne ( enfin ça marche mais peut être qu'il peut y avoir des amélioration )
    Ce script s'oriente sur les fichiers rt_mmorpg et rt_ogame
    Voici le script : ( ils sont identique )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
    define('INSIDE'  , true);
    define('INSTALL' , false);
     
    $ugamela_root_path = './';
    include($ugamela_root_path . 'extension.inc');
    include($ugamela_root_path . 'common.' . $phpEx);
     
    //pour les root-tops on ajoute 10 points bonus !
    $temps = time();
    $id = $user['id'];
     
     
    	if(isset( $user['id'])) {
     
    		$id = $user['id'];
    		doquery("UPDATE {{table}} SET bonus_temps_mmorpg=".$temps.", points_bonus=points_bonus+10 WHERE id=".$id."",'users');
    	}
     
    ?>
    <script language="javascript" type="text/javascript">
    <!--
    window.location.replace("http://www.root-top.com/topsite/mmorpg/in.php?ID=1360");
    -->
    </script>
    Quand un joueur vote il reçoit 10 points-bonus ( ce qui permet de les convertir en ressource ou autre enfin c'est pour le jeu )

    Le gros problème est qu'un joueur fouineur peut tricher facilement avec c'est codes, car si on ouvre deux fenêtres ou les boutons de votes sont présents ba on peut ni plus ni moin faire deux clics ( voir plus celon le nombre d'onglet ouvert ) sur le même bouton et donc aquérir 20 points au lieu de 10 maximun !!!

    Comment je peut sécuriser cela et ainsi réparer ce "bug" ( qui n'est pas vraiment un bug )

    Edit : j'ai fortement oublier de vous précisez que le clic de la mollette permet aussi de tricher !
    Car effectivement si on clic avec avec cette technique, le vote est obligatoirement validé est donc on obtient autant de points que l'on souhaite.

    J'espére que je suis assez explicite et que vous allez pouvoir me venir en aide.

    Dans tous les cas je vous dit merci par avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il suffit d'enregistrer le vote dans une table.
    Avant de valider un vote, tu controles si l'utilisateur a déjà voté ou non.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Par défaut
    Je ne comprend trop, tu me dit de faire un udate sur un nouveau champ de la bdd ?

    Par exemple ma variable a pour nom $oui ( qui définie si on a voter ou pas )

    Donc au moment du vote on udate $oui, il y à le traitement des infos sur rt_mmorpg.php et sur ce même fichier je mais pour condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if ( user['vote'] = $oui ) {
     
    // on udate pas car il a deja voter !
     
    else {
    	$id = $user['id'];
    	doquery("UPDATE {{table}} SET bonus_temps_mmorpg=".$temps.", points_bonus=points_bonus+10 WHERE id=".$id."",'users');
    	}
    }
    Je voit pas comment ça peut fonctionner car dans tous les cas quand on vote on va udaté $oui

    Je pense que j'ai pas compris la dls !

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Es possible d'interdire le clic de la mollette ?
    toute solution basée sur le navigateur est une solution bidon.

    comment insérer un booléen ?
    un boolen en mysql c'est 0 ou 1, tout simplement.

    quand une personne vote le temps udate sur la bdd, ensuite je vérifie si le temps et correct on vote sinon on ne peut pas
    Tu as une condition avec le temps B dans le temps A puis apres le temps A dans le temps B ... honnetement c'est un peu difficile a relire sans connaitre tout ton contexte.

    Par contre etant donné qu'apparement la verification est l'update ne sont pas sur le meme fichier, que se passe t'il si quelqu'un appelle le fichier d'update plusieurs fois manuellement ?


    Au passage : tout ton HTML est incorrect tu n'as mis aucun guillemets aux valeurs.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Par défaut
    Erf si on passe directement sur le fichier udate les points sont crédité.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tes vérifications doivent avoir lieu directement dans le fichier qui fait l'update.
    Ou alors il faut verouiller la validation de l'update en utilisant un indicateur placé en session.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/01/2013, 11h36
  2. Réponses: 4
    Dernier message: 05/05/2009, 10h54
  3. [MFC] Limitation du nombre de fichiers...
    Par chronos dans le forum MFC
    Réponses: 5
    Dernier message: 02/06/2004, 11h40
  4. Limiter le nombre d'enregistrement
    Par BXDSPORT dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/04/2004, 17h26
  5. [débutant] Limitation du nombre d'enregistrement renvoyé
    Par tmcgrady dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/11/2003, 10h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo