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

PHP & Base de données Discussion :

Qu'est ce qu'elle a ma requête UPDATE ? [MySQL]


Sujet :

PHP & Base de données

  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 Qu'est ce qu'elle a ma requête UPDATE ?
    Bonjour,

    Qui peut me dire pourquoi cette requête plante avec obstination ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     $connexionRatee=
    "UPDATE ipBloque 
    SET tentative=tentative+1, dateLimite='".$dateUnix."'  
    WHERE ip='".$ip."' AND dateLimite > '".$dateMaxi."'
    ";
    mysql_query($connexionRatee);
    ça ne donne pas de message d'erreur, mais ça n'update pas non plus.

  2. #2
    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
    SET tentative=tentative+1
    Je pense que ca vient de là...
    Je ne crois pas que tu puisse utiliser la valeur d'un champs comme ca...
    Il faut que tu récupère sa valeur via un "SELECT tentative FROM IPBloquee WHERE IP = '$IP';";

    Puis après tu incrémente ta valeur tentative ( $tentative++, et seulement ensuite tu fais un UPDATE avec tentative = '$tentative'...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Salut,

    Pê qu'aucun enregistrement ne satisfait la condition.
    Fais un select avec la même clause WHERE pour voir si ca te retourne des enregistrements.

  4. #4
    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
    En fait c'est tout le script qui foire...
    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
    //on récupère l'IP
    $ip = $_SERVER["REMOTE_ADDR"];
    // la date unix
    $dateUnix=time();
    // la date unix - 15 minutes
    $dateMaxi=$dateUnix-900;
    //on va chercher si des ip ont été enregistrée dans les 15 minutes.
    $affiche="
    SELECT ip  FROM ipBloque 
    WHERE ip='".$ip."' AND dateLimite > '".$dateMaxi."'";
    $resultat = mysql_query("$affiche");
    $ipBloque=mysql_num_rows($resultat);
    //si on a trouvé aucune ip, on insère celle ci (ça n'insère rien).
    if($ipBloque=0)
    {
    $connexionRatee="INSERT INTO `ipBloque` (`ip`,`dateLimite`,`tentative`) 
    VALUES
    (
    '$ip','$dateUnix','1'
    )";
    mysql_query($connexionRatee);
    }
    //si on a trouvé un résultat, on update le tuple en 
    incrémentant de 1 le nombre de tentative, 
    ainsi que la date, pour 
    bloquer 15 minute si tentative est à 5 (ça c'est dans un autre script): 
    ça n'update rien non plus.
    if($ipBloque==1)
    {
    $connexionRatee="
    UPDATE ipBloque 
    SET tentative='tentative+1', dateLimite='".$dateUnix."'  
    WHERE ip='".$ip."' AND dateLimite > '".$dateMaxi."'";
    mysql_query($connexionRatee);
    ;}
    mysql_free_result($resultat);

  5. #5
    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
    Citation Envoyé par billoum
    Salut,

    Pê qu'aucun enregistrement ne satisfait la condition.
    Fais un select avec la même clause WHERE pour voir si ca te retourne des enregistrements.
    Oui mais comme je viens de dire dans la réponse que j'écrivais pendant que tu faisais du même, si ça ne trouve rien, ça doit quand même insérer un tuple, justement. Et si ça en trouve un, celui qui vient d'être inséré, alors on l'update.

    Je me demande si ça ne viendrait pas du fait que les variables tout en haut ($dateMaxi et $ip) ne sont pas transmise à l'intérieur du script, mais je ne comprend pas pourquoi alors.

  6. #6
    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
    Tes requêtes marchent ou pas??
    J'entends par là dans PHPMyAdmin (ou autre)??

    Sinon, tu n'as pas besoin de faire tout un fouilli comme celui là :
    ip='".$ip."'
    Si tu mets ta requête entre "", tu fais juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "...WHERE ip = '$ip'..."
    et c'est bon!!

  7. #7
    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
    La requête insert fonctionne bien dans phpMyAdmin, avec des chiffres comme 1 à la place des variables.
    Mais dans le script ça ne fonctionne pas.

    L'update j'ai pas testé dans phpMyAdmin, je veux déjà régler le INSERT.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    T'as fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqlquery($requete) or die($requete.':<br>'.mysql_error());
    après chaque requête?
    Et aussi (même si jpense pas que ca changera gd chose), c'est une faute de frappe là (manque '=='):
    ?

  9. #9
    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
    Bon alors, c'est réglé pour ce script, il manquait un = à if(ipBloque=0).

    Maintenant c'est celle là qui foire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    "
    SELECT ip  
    FROM ipBloque 
    WHERE ip='".$ip."' AND dateLimite > '".$dateMaxi."' AND tentative <= 5
    "
    ça doit être au niveau du 5 je pense...



    **edit**

    On a posté ensemble, Billoum
    Et aussi (même si jpense pas que ca changera gd chose), c'est une faute de frappe là (manque '=='):

    Code :
    if($ipBloque=0)
    Bah si c'était radical même comme erreur

  10. #10
    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
    Tiens...j'l'avais pas vu celui là

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Ben en fait j'avais testé chez moi un if pareil mais ca n'empêchait pas de rentrer dans la boucle ( ca t'aurait juste empêché de rentrer dans la seconde vu que 0 serait affecté à la variable, enfin bon...).

    Sinon, pour tester tes requêtes,est-ce que tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqlquery($requete) or die($requete.':<br>'.mysql_error());
    ?

  12. #12
    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 viens de faire le mysql_error mais ça ne retourne pas d'erreur. ça ne trouve pas le tuple, pourtant il y en a un qui correspond.

    ça doit encore être une erreur bidon, mais bon...

  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
    Bon déjà l'opérateur était à l'envers, c'était >= et non <= .


    Mais c'est pas ça quand même

  14. #14
    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
    Essaye ce que je te dis...
    remplace tes '".$ip."' par '$ip'

    Ca simplifie grandement les choses....et ca vient peut être de là...

    EDIT : par "datelimite" tu entends quoi dans ta table??

  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
    J'ai réussi, j'avais pas changé la logique du script, je fais toujours des if $ipBloque<=5 alors qu'il fallait désormais juste tester si il y a avait un tuple donc if$ipBloque==1.

    Pour les '".$ip."' à remplacer par '$ip', on m'avait expliqué que les ".." renforçait la sécurité en gênant les injection sql.


    Pour le dateLimite, t'étais sur la piste Julien.alkaza, mais sans le script en entier...

    Merci à tous en tout cas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. est ce possible de mettre une requête sql en javascript
    Par mioke dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/04/2008, 11h35
  2. Est-il possible de faire une requête hiérarchique ?
    Par Christophe Charron dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 21/03/2007, 14h32
  3. OU est passé la liste de mes requêtes & formulaires...
    Par DenissLaMaliss dans le forum Access
    Réponses: 2
    Dernier message: 13/04/2006, 06h42
  4. [MySQL] Est-ce que php supporte les requêtes imbriquées ?
    Par dahan dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 08/03/2006, 18h50
  5. Ma requète update est elle conforme ?
    Par CBTech dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 24/05/2005, 21h25

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