Timer pour une requête SQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Timer pour une requête SQL

Re: Timer pour une requête SQL

par moogli » 25 avr. 2013, 22:01

il est impératif de récupérer et d'affiche les erreurs lorsque l'on développe.

ta requête sql n'est pas correcte pour la simple raison que l'ip est forcément stockée dans un varchar et que tu n'as pas délimité la chaîne de caractère.
en gros select * from table where ip='1.1.1.1'.

Attention l'ip n'est pas une données fiable car volatile pour la plus part des gens.

Pour ce qui est du timestamp cela dépend de la façon dont tu stock la date dans la table. un champ de type timestamp semble préférable ;)
sinon utilise la fonction mysql timestamp.

@+

Re: Timer pour une requête SQL

par toss » 25 avr. 2013, 20:02

Bonjour merci de ta réponse, en faite j'ai modifié un peu, avec une verification d'ip et d'heures. Mais je bloque encore :s

Je n'arrive pas à recuperer l'heure stocké sous forme de timestamp (pour faire une différence)
De plus, je parviens à recuperer l'IP mais pas a l'enregistrer dans la BDD.

Merci d'avance, pour le moment j'ai:

Code : Tout sélectionner

if ($_POST['pseudo'] != null) { $pseudo = $_POST['pseudo']; $ip1 = $_SERVER["REMOTE_ADDR"]; $reponse_ip = $bdd->query("SELECT * FROM iconomy WHERE adresse=$ip1); while ($donnees = $reponse_ip->fetch()) { /** Je voudrais que les valeurs de dessous soit sous forme de timestamp */ $h0 = $donnees['heure']; $h1 = gettimeofday(true); } $reponse_ip->closeCursor(); if ($h1 - $h0 >= 2) { [...] $bdd->exec('UPDATE iconomy SET heure=$h1 WHERE username=$pseudo'); } else { echo 'Tu as déjà voté il y a moins de 2 heures!'; } } else { echo 'Tu n\'as pas choisi de pseudo mais merci de voter!'; }

Re: Timer pour une requête SQL

par moogli » 24 avr. 2013, 10:21

salut,


effectivement il te faut logger l'heure du dernier vote.
plusieurs solutions sont possible, la p lus "propore" a mon goût (et la plus proche de quelque chose de bien normé) c'est d'ajouter cette infos de manière unique.
donc si ta table iconomy stock quelque chose d'unique par utilisateur c'est un bon candidat pour y ajouter une colonne datetime.

ensuite deux écoles :
- ceux qui stock la date de modification (now() )
- ceux qui stock a partir de laquelle on pourra mettre a jour (now() + durée de validité).

à toi de voir.

dans le premier cas il te faut comparer la date stockée + la durée de validité à l'instant présent
dans le second cas tu compare l'instant présent avec la date stockée (lechamps < now()).

Attention pas de champs date il te faut l'heure d'ou le datetime :)

@+

Timer pour une requête SQL

par toss » 24 avr. 2013, 00:01

Bonjour à tous, je suis nouveau sur le forum et en PHP, excusez moi pour mes maladresses.

J'ai un petit soucis. Je crée un systeme de vote. J'ai crée une requête SQL (qui augmente une variable):

$bdd->exec('UPDATE iconomy SET balance=' . $balance .' WHERE username=\'' . $pseudo . '\'');

et en faite, j'aimerais que pour un $pseudo donné, la requête ne puisse pas s'exécuter plus d'une fois toute les 2 heures.
En gros, ajouter un timer de 2h par requête par pseudo.

J'ai pensé à recupérer l'heure du vote, et à la comparer avec l'heure actuel du nouveau vote. Si la différence est < 2, alors... etc

Mais je n'y arrive pas, c'est possible en passant par là?

Merci d'avance, Toss.