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 :

[Dates] Comparaison de date entre deux IP (anti-flood)


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut [Dates] Comparaison de date entre deux IP (anti-flood)
    Bonjour,
    Je suis en train de placer un système de commentaire sur un site et pour éviter le flood, je vais devoir comparer le temps qui s'est écoulé entre deux post d'une même ip.

    Pour ce faire je récupère l'ip du posteur dans un champ hidden ainsi que l'heure de son post, et je compare ces données avec l'heure du post ayant la même IP.

    Bon


    Je vais farfouiller sur internet pour savoir comment comparer deux IP dans le temps, mais si vous avez déjà une idée de requête SQL, ce serait sympa.

    Autre question : Le temps raisonnable à fixer entre deux posts est de combien ? 10s, 20 sec, 30 sec?



    merci d'avance.

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Pour ce faire je récupère l'ip du posteur dans un champ hidden
    Pourquoi dans le formulaire ?

    Comment gère tu les utilisateurs différents qui partagent la même ip (meme entreprise) ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Merci pour ta réponse

    Tu sais ce n'est pas un site qui va faire 4.000.000 visites par jours...
    Je n'ai pas besoin du summum en matière de système anti-flood.

    Maintenant si tu as un système simple et efficace je veux bien le connaître.

    Pour récupérer l'IP dans un champ hidden du formulaire ? Je ne vois pas comment insérer l'ip dans la base autrement.

    Pour la requête, ça donnerait quoi ? Je dois vérifier dans la base si une adresse IP identique à celle venant de poster date de moins de 30 sec.

  4. #4
    Membre averti
    Avatar de Julien.alkaza
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 239
    Points : 363
    Points
    363
    Par défaut
    Salut,

    Avant d'insérer ton message dans ta base, tu fais un select des IP qui viennent de poster (dans les x dernières secondes), puis tu compare les résultat avec ton champ hidden...


    Plus simple, au lieu de passer une variable de plus en hidden, tu récupère directmement l'IP au moment de la comparaison!!

  5. #5
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Et qui c'est qui va remplir ce champ hidden avec la bonne ip ?

    tu as une variable dans $_SERVER qui te renseigne automatiquement l'ip du client. Pas besoin de passer par le formulaire pour ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    COMMENTAIRE(id, content, author, ip, date)
    COMMENTAIRE_ARTICLE(id_article, id_commentaire)
     
    SELECT date
    FROM commentaire AS c INNER JOIN commentaire_article AS ca
       ON (c.id = ca.id_commentaire )
    WHERE ca.id_article = $id_article 
       AND c.ip = $ip_client
    ORDER BY date DESC
    LIMIT 1
    un truc dans ce genre plus une comparaison de date, rechercher dans http://mysql.com/now

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Ah ok,

    En récupérant l'ip au moment de la comparaison, cela répond à la question de Mr N, si je vous suis. Ok en effet on gagne un champ.

    Je récupère la date de cette manière, avant l'insertion dans la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date=strftime("%y/%m/%d %H:%M:%S"); echo"$date"
    Mais quelle est la syntaxe pour enlever 30 secondes à cette date ?

    **edit**
    Mr N vient de poster avant moi, je précise que le champ hidden est rempli par cette fonction php, je débute mais tout de même, demander au visiteur d'écrire sa propre IP, là j'aurais pas osé !

  7. #7
    Membre averti
    Avatar de Julien.alkaza
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 239
    Points : 363
    Points
    363
    Par défaut
    Selon ta version de mysql, tu as "INTERVAL" que tu peux mettre dans tes requettes!!!!
    Cherche sur le forum, je l'ai déjà vu passer!!

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Pardon Mr N mais ta requête me parait épouvantablement complexe pour le résultat que je souhaite obtenir.

    Un SELECT ip from table_ip where IP = "l'ip" and temps>" $var_temps

    ne serait-il pas plus simple ?
    Si il n'y a pas de résultat, je valide l'enregistrement, sinon un message dit, "oh la mon pote, attend un peu ".

    Qu'en pensez-vous ?

    **edit** je vais regarder pour "interval"

  9. #9
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    je précise que le champ hidden est rempli par cette fonction php
    Quel intéret ? tu connais l'ip depuis php. A quoi ca sert de la mettre dans un formulaire, puisque tu la connais... Surtout que c'est dangereux puisque l'utilisateur pourrait renvoyer (hidden ou pas) une fausse ip est donc berner ton systeme.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Oui je suis bien d'accord, je viens de me rendre compte de cela, merci de la remarque.

    Une question, mais je ne voudrais pas trop détourner la conversation du sujet initial:
    Comment peut-on trafiquer un champ hidden ?

  11. #11
    Inscrit
    Avatar de Caerbannog
    Inscrit en
    Novembre 2004
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 206
    Points : 273
    Points
    273
    Par défaut
    Oula ! T'es pas passé loin de la faille... Parce que si c'est au browser de t'indiquer ton ip, n'importe quel petit malin peut faire un script qui la change à chque fois, et ton truc sert plus à rien....

  12. #12
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Facile :
    tu enregistres la page ou il y a le formulaire .
    tu changes hidden en text
    tu corriges l'attribut action du formulaire
    tu lances ta page local et tu peux modifier ton champ soi disant hidden. Il faut le vouloir mais bon c'est faisable, et automatisable.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Il faut quand même la placer sur le serveur du site visé, cette page enregistrée et modifiée ?

    Sinon je ne vois pas comment déduire 30 seconde à l'heure indiquée par la fonction strftime("%y/%m/%d %H:%M:%S").

    Tout en cherchant et en espérant vos lumières, je vais corriger ce champ hidden.

    Merci

  14. #14
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    quelle version de mysql ?

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Je saurais pas te dire malheureusement, mais il suffit de déduire 30 seconde grâce à php, pas avec mysql. Non ?


    edit: j'avais mis le champ date en hidden aussi

  16. #16
    Membre émérite
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Points : 2 791
    Points
    2 791
    Par défaut
    regarde du cote de INTERVAL dans la doc mysql
    http://dev.mysql.com/doc/refman/5.0/...functions.html

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    D'accord je viens d'ouvrir la page. Mais n'est-il pas possible, avec PHP, de déduire 30 seconde à une date, nonobstant mysql ?

  18. #18
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Si tu peux le faire avec mysql, c'est ça de gagné...

  19. #19
    Membre émérite
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Points : 2 791
    Points
    2 791
    Par défaut
    si comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $date = date("ton_format_de_date", mktime(0,0,0-30,date("m"),date("d")-3,date("Y")));
    EDIT:
    chuis pas sur que cela fonctionne a toi d'esayer et d'adapter
    mais fait plutot confiance a mysql tu fais tout dans un seul query et comme cela tu n'utilise pas de fonction php

  20. #20
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par psychoBob
    Je saurais pas te dire malheureusement,
    mauvaise réponse

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. [Date] calcul de jours entre deux dates
    Par skyangel dans le forum Général Java
    Réponses: 5
    Dernier message: 05/03/2008, 15h59
  2. [Dates] Nombres de jours entre deux dates ?
    Par Metallic-84s dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2007, 17h14
  3. [Dates] nombre de mois entre deux dates
    Par Mat_DZ dans le forum Langage
    Réponses: 14
    Dernier message: 23/11/2006, 16h10
  4. [Dates] Nombre jours ouvrés entre deux dates
    Par Yali dans le forum Langage
    Réponses: 4
    Dernier message: 28/12/2005, 12h05
  5. [Dates] Nombre de jours entre deux dates
    Par cmoiscrat dans le forum Langage
    Réponses: 3
    Dernier message: 22/09/2005, 15h25

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