Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/09/2006, 21h59   #1
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
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 :
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
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 08h27   #2
Modérateur
 
Avatar de Cybher
 
Homme Michel
Consultant informatique
Inscription : mai 2005
Messages : 3 006
Détails du profil
Informations personnelles :
Nom : Homme Michel
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : mai 2005
Messages : 3 006
Points : 4 039
Points : 4 039
bonjour,

quElques questions :

que signifie cette ligne?
Code :
$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é?
Cybher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 09h38   #3
Membre du Club
 
Inscription : octobre 2005
Messages : 63
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : octobre 2005
Messages : 63
Points : 41
Points : 41
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 !!!
noirot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 09h49   #4
Membre Expert
 
Inscription : juillet 2004
Messages : 1 033
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 1 033
Points : 1 050
Points : 1 050
Et si tu mets une autre valeur que 0 ? comme 2 par exemple, l'éerreur se produit t'elle encore ?
ePoX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 18h38   #5
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Je vais vous expliquer mon code:

Code :
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 :
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 !
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 18h52   #6
Membre Expert
 
Inscription : juillet 2004
Messages : 1 033
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 1 033
Points : 1 050
Points : 1 050
Donc reprenons avec le code qui pose problème.
Code :
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 ?
ePoX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 18h55   #7
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Merci Epox je viens d'éditer le message précédent! L'erreur venait bêtement de ma classe.
Merci
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 18h57   #8
Membre Expert
 
Inscription : juillet 2004
Messages : 1 033
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 1 033
Points : 1 050
Points : 1 050
C'est d'un compliqué pour faire une simple insert ! mon dieu :O
ePoX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 20h42   #9
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
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.
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h11.


 
 
 
 
Partenaires

Hébergement Web