Page 1 sur 1

Limiter un clic tous les 24 heures.

Posté : 06 juil. 2016, 12:12
par ISoon
Bonjour,

Je viens à vous pour un problème que j'ai pour coder mon site en php.

En fait, j'ai une page qui fait gagner des points et quand on clique sur le lien. On est redirigé vers une page qui attribue les points aux joueurs.

Voici le code de le page qui attribut les points :

Code : Tout sélectionner

<?php include('include/mysql.php'); $id = $_GET["id"]; $id_membre =$_SESSION['userid']; if(isset($_SESSION['username'])) { $sql = 'SELECT * FROM echange WHERE id_membre ="'.$id_membre.'" ORDER BY id DESC LIMIT 1'; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); while ($data = mysql_fetch_array($req)) { $date = $data['date']; } $sql2 = 'SELECT * FROM liens WHERE id="'.$id.'"'; $req = mysql_query($sql2) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); while ($data = mysql_fetch_array($req)) { $lien = $data['lien']; $id_lien = $data['id_lien']; } mysql_free_result ($req); $my_new_date=$date+30; $id_membre =$_SESSION['userid']; date_default_timezone_set('Europe/Paris'); $time= time(); if(time()>=$my_new_date) { echo $id_membre; echo'<br/>'; echo $id_lien; $sql4 = "SELECT COUNT(*) as nb FROM echange WHERE id_membre ='".$id_membre."' AND id_lien ='".$id."'"; $req4 = mysql_query($sql4) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); $row4 = mysql_fetch_assoc($req4); $dn = $row4['nb']; echo $dn; if($dn==0) { ?> <SCRIPT LANGUAGE="JavaScript"> window.setTimeout("location=('<?php echo $lien; ?>');",10); </SCRIPT> <?php $vu = "UPDATE liens SET vu=vu+1 WHERE id='".$id."'"; mysql_query($vu); $point = "UPDATE point SET nbr=nbr+2 WHERE id='".$id_membre."'"; mysql_query($point); $point2 = "UPDATE liens SET point=point-2 WHERE id='".$id."'"; mysql_query($point2); $echange = 'insert into echange(id_lien, id_membre, date) values ("'.$id.'", "'.$id_membre.'", "'.time().'")'; mysql_query($echange); } if($dn>0) { echo'<br/>Tu as cliqué sur ce lien '.$dn.' fois<br/>'; $req2 = mysql_query("SELECT * FROM echange WHERE id_lien='".$id."' AND id_membre='".$id_membre."' LIMIT 1 ORDER BY id DESC"); //On récupère tous les membres pas actifs while ($donnees = mysql_fetch_array($req2)) { $date_inscription = $donnees['date']; date_default_timezone_set('Europe/Paris'); $date2 = time(); $difference = $date2 - $date_inscription; $nbreSecondesEn2Jours = 86400; if ($difference >= $nbreSecondesEn2Jours)//On supprime le membre { $vu = "UPDATE liens SET vu=vu+1 WHERE id='".$id."'"; mysql_query($vu); $point = "UPDATE point SET nbr=nbr+2 WHERE id='".$id_membre."'"; mysql_query($point); $point2 = "UPDATE liens SET point=point-2 WHERE id='".$id."'"; mysql_query($point2); $echange = 'insert into echange(id_lien, id_membre, date) values ("'.$id.'", "'.$id_membre.'", "'.time().'")'; mysql_query($echange); ?> <SCRIPT LANGUAGE="JavaScript"> window.setTimeout("location=('<?php echo $lien; ?>');",10); </SCRIPT> <?php }else{ $id_lien = $data['id']; // Requette SQl $strSQL = " SELECT echange.date, liens.id, users.id FROM echange, liens, users WHERE echange.id_lien = '".$id."' && echange.id_membre = users.id LIMIT 1"; // Envoyer la requete $resultat = mysql_query($strSQL); // Boucle sur le retour pour les résultats while ($ligne = mysql_fetch_array($resultat)) { $date = $ligne['date']; $new = $date+86400; } echo'Prochain clic <br/>'; echo date('Y/m/d H:i:s', $new); } } } }else{ $tps_restant= $my_new_date - time(); echo'Vous avez cliqué il y a moins de 30 secondes<br/> <a href="go2.php?id='.$id.'">Actualise la page</a><br/> Il vous reste '; echo $tps_restant; echo' secondes à attendre.'; } }else{ ?> <SCRIPT LANGUAGE="JavaScript"> document.location.href="/connexion.php" </SCRIPT><?php } ?> <br/><br/>
Dans ma base de donnée, j'ai une table échange avec id, id_membre, id_lien et date.

Mon problème, c'est que lorsque je clique sur le lien après les 30 secondes, sa me redirigie vers le le lien même si j'ai cliqué avant les 24 heures imposé :/

Je ne vois pas comment faire.

Pouvez-vous m'aider ?

Merci

Re: Limiter un clic tous les 24 heures.

Posté : 06 juil. 2016, 12:23
par Ryle
Bonjour,

Je n'ai pas regardé le détail de ton code, mais tu pourras difficilement empêcher un utilisateur d'accéder à un lien ou à une page s'il en connait ou peut en trouver l'url. A mon avis, il te faudrait stocker la date/heure à laquelle chaque utilisateur vient cliquer sur le lien quand tu ajoutes les points (ex : +X points le 6 juillet à 21h12m14s), et avant d'ajouter des points aller regarder si tu 24h se sont écoulés entre cette date et la date du jour.

Si c'est le cas, tu gardes ton traitement tel quel et tu ajoutes les points et enregistre la nouvelle heure ; et sinon, tu ne donnes pas de point et affiches un message indiquant à l'utilisateur de revenir plus tard, demain, dans 6h 12mn 53 sec ... :)

Re: Limiter un clic tous les 24 heures.

Posté : 06 juil. 2016, 12:54
par ISoon
Bonjour,

Je n'ai pas regardé le détail de ton code, mais tu pourras difficilement empêcher un utilisateur d'accéder à un lien ou à une page s'il en connait ou peut en trouver l'url. A mon avis, il te faudrait stocker la date/heure à laquelle chaque utilisateur vient cliquer sur le lien quand tu ajoutes les points (ex : +X points le 6 juillet à 21h12m14s), et avant d'ajouter des points aller regarder si tu 24h se sont écoulés entre cette date et la date du jour.

Si c'est le cas, tu gardes ton traitement tel quel et tu ajoutes les points et enregistre la nouvelle heure ; et sinon, tu ne donnes pas de point et affiches un message indiquant à l'utilisateur de revenir plus tard, demain, dans 6h 12mn 53 sec ... :)
Merci pour ta réponse,

Mon code fais ce que tu as dis mais il doit y avoir un problème sa ne marche pas.

Je mets une limitation de 30 secondes entre tous les clics,

ensuite il cherche le nombre d'échange qu'il y a eu avec l'id_membre et l'id_lien. S'il n'y a pas d'enregistrement dans la base de donnée, il donne les points directement et il ajoute l'échange dans la base de donnée.

S'il y a déjà un échange avec l'id_membre et l'id_lien, il cherche à quelle heure le dernier échange à eu lieu. S'il y est dans les 24 heures, il y a un message d'erreur et s'il a lieu apres 24 heures, il gagne les points et il y a un nouveau échange dans la base de donnée.

Je ne comprends pas trop l'erreur dans mon code :/