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 :

[SQL] Erreur de requête mais dans rapport


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut [SQL] Erreur de requête mais dans rapport
    Salut,

    J'ai un problème très bizarre: j'ai des fonctions qui simplifient la manière de trouver le nombre de lignes d'un table, d'éditer, de supprimer ou d'insérer des lignes (une class SQL).

    Deja voila mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $db->where = array("ip" => $_SERVER['REMOTE_ADDR']);       
    if ($db->linesw("_antiflood") > 0) {
       $db->insert = array("id" => "", "ip" => $_SERVER['REMOTE_ADDR'], "start" => $timestamp);
       $db->insert("_antiflood");
    }
    Dans le if(), je mets > 0, je n'ai pas d'erreur de requête mais mon script fonctionne pas ce qui est normal puisque je dois mettre == 0.
    Mais quand je mets ça, j'ai l'erreur Champ 'Note' inconnu dans la fieldlist.

    A première vue, sans connaitre mes tables ou fonctions, pouvez-vous avoir une idée logique? Sinon voulez du code?
    Merci

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    bonjour,

    quElques questions :

    que signifie cette ligne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db->linesw("_antiflood") > 0
    passe t'on ce test lorsqu'on est >0?

    peux tu poster le code ou intervient ton champ note?
    Comment est il renseigné?

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Par défaut
    Bonjour,

    Peut être que simplement le champ Note de la table ne doit pas être null, et tu le donne pas en paramètre pour ta requete d'insertion ?

    Mais faudrait avoir la structure de la table et un peu plus de code !!!

  4. #4
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    Et si tu mets une autre valeur que 0 ? comme 2 par exemple, l'éerreur se produit t'elle encore ?

  5. #5
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Je vais vous expliquer mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # Indique la clause WHERE de ma requete
    $db->where = array("ip" => $_SERVER['REMOTE_ADDR']);
    # Retourne le nombre de lignes en fonction du WHERE     
    if ($db->linesw("_antiflood") > 0) {
       # Si un enregistrement existe, on ajoute les données suivantes dans la table
       $db->insert = array("id" => "", "ip" => $_SERVER['REMOTE_ADDR'], "start" => $timestamp);
       # Execution de la requête
       $db->insert("_antiflood");
    }
    Mes commentaires correspondent au code, mais moi je souhaite == 0 (pour insérer les données si elles n'existent pas...)
    Enfin le plus gros problème, c'est que dans ma table _antiflood, le champ Note n'existe pas (mais dans une autre table), donc l'erreur ne correspond pas à la requête.
    Enfin mettre 2 ou autre ne sert à rien: j'ai fait un echo et j'ai bien 0 (valeur attendue).

    Edit: après vérication (et c'était plutot logique vu ma table), se sont les lignes en rouges qui plantent.
    Edit vainqueur : Ah j'ai trouvé! En fait voila le code de ma fonction insert()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # Insérer des données
    function insert($table) {
       global $configuration, $fields, $entries;
       $table = $configuration['prefix'].$table;
       foreach($this->insert as $key => $value) {
          $fields .= $key.',';
          $entries .= $this->quote_smart($value).",";
       }
       $fields = substr($fields, 0, strlen($fields) - 1);
       $entries = substr($entries, 0, strlen($entries) - 1);
       $this->query("INSERT INTO ".$table."(".$fields.") VALUES(".$entries.")");
       $this->insert = array();
    }
    Le problème était au global $fields, $entries. En fait quand j'executait cette fonction une fois, à la seconde les variables étaient conservées...
    Merci à vous !

  6. #6
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    Donc reprenons avec le code qui pose problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ($db->linesw("_antiflood") == 0)
    {
       $db->insert = array("id" => "", "ip" => $_SERVER['REMOTE_ADDR'], "start" => $timestamp);
       $db->insert("_antiflood");
    }
    C'était bien dans cette configuration que je souhaitais que tu textes avec 2, pour eviter une problème de transtypage.
    Le plus simple serait de mettre === (se serait même vraiment mieux !).

    Premiere question, qui ou quoi affiche l'erreur ? La je ne le voit pas.

    Que contient $db si tu le dumpes ?

  7. #7
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Merci Epox je viens d'éditer le message précédent! L'erreur venait bêtement de ma classe.
    Merci

  8. #8
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    C'est d'un compliqué pour faire une simple insert ! mon dieu :O

  9. #9
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    He bein j'ai travaillé un peu sur un autre script et en revant sur celui-ci je m'en suis bien aperçu Mais tant pis je ne changerai pas! Ca simplifie juste question mysql_escape_real_string(), plus besoin de se poser de question.

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

Discussions similaires

  1. [SQL] erreur sur requête insert
    Par temperature dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/01/2008, 15h27
  2. [SQL] Erreur de requête incompréhensible
    Par lodan dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 06/10/2006, 11h32
  3. [SQL] Erreur de requête incompréhensible
    Par lodan dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/09/2006, 13h42
  4. [SQL] Erreur de requête
    Par Anduriel dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 21/06/2006, 11h24
  5. [SQL] Erreur surement simple mais je ne vois rien ...
    Par kcizth dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/04/2006, 15h00

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