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 04/09/2007, 10h27   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 62
Points : 12
Points : 12
Par défaut [SQL] Pb avec une requete et plusieurs conditions

Bonjour,

j'ai un souci avec une requete et si quelqu'un pouvait me donner une explication...

Si je fais :
Code :
$gagnant="SELECT temps_rep FROM participants WHERE id_partie=$id ORDER BY temps_rep";
J'affiche bien mon temps_rep.

Maintenant j'ajoute une condition supplémentaire :

Code :
$gagnant="SELECT temps_rep FROM participants WHERE (id_partie=$id) AND (reponse_donnee=$repexact) ORDER BY temps_rep";
Cela me met une erreur de syntaxe.

Si je mets :
Code :
$gagnant="SELECT * FROM participants WHERE (id_partie=$id) AND (reponse_donnee=$repexact) ORDER BY temps_rep";
Cela fonctionne, mais cela m'affiche l'id_partie...

Et je voudrais afficher le temps_rep à partir des deux conditions where...

Je suis désolé, cela doit être un pb de syntaxe mais je ne trouve pas
syl2042 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2007, 10h29   #2
Membre éprouvé
 
Homme
Développeur informatique
Inscription : janvier 2005
Messages : 349
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 50
Localisation : Belgique

Informations professionnelles :
Activité : Développeur informatique
Secteur : Conseil

Informations forums :
Inscription : janvier 2005
Messages : 349
Points : 439
Points : 439
Salut,
Essaie avec :

Code :
$gagnant="SELECT temps_rep FROM participants WHERE (id_partie='$id') AND (reponse_donnee='$repexact') ORDER BY temps_rep";
beeboo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2007, 10h37   #3
Membre habitué
 
Avatar de mimagyc
 
Inscription : novembre 2006
Messages : 310
Détails du profil
Informations personnelles :
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : novembre 2006
Messages : 310
Points : 115
Points : 115
Code :
1
2
 
$gagnant="SELECT temps_rep FROM `participants` WHERE id_partie='$id' && reponse_donnee='$repexact' ORDER BY temps_rep ASC";
mimagyc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2007, 11h44   #4
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 62
Points : 12
Points : 12
Ben oui, cela correspond à ma deuxième ligne de code...

Donc, c'était juste, mais c'est ailleurs que se pose le problème...

J'ai ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//On enregistre dans la base toutes les réponses tant que datefinpartie >= dateactuelle
if ($compt3>=$dateenvoitime) {
$infos="INSERT INTO participants (id_partie,date,ip_participant,ipproxy,fai_visiteur,reponse_donnee,temps_rep) VALUES ('$id_partie','$date_part','$ip_simple','$ipproxy','$fai_visiteur','$rep','$temps_rep')";
$infos2=mysql_query($infos)
or die('Erreur SQL !'.$infos2.'
'.mysql_error());
 
//Dès le délai dépassé, on récupère le gagnant
}else{
$gagnant="SELECT temps_rep,reponse_donnee FROM participants WHERE (id_partie=$id) AND (reponse_donnee=$repexact) ORDER BY temps_rep";
$gagnant2=mysql_query($gagnant)
or die('Erreur SQL !'.$gagnant2.'
'.mysql_error());
$gagnant3=mysql_fetch_array($gagnant2);
 
echo $gagnant3[0];
Tout marche bien tant que ma condition if est respectée, mais j'ai ce message dès qu'il arrive sur le else :

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near "là, il affiche la réponse donnée...


Une idée?
syl2042 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2007, 11h51   #5
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Pourrais-tu donner l'erreur EXACTE, avec la requete correspondante (pas le code PHP mais la vraie requete créée)
Et comme ils te l'ont dit, il faut surement mettre des ' ' avant et apres la réponse donnée pour délimiter le champ. Et s'il y a un ' dans ta réponse ca va faire une erreur, il faut donc utiliser mysql_real_escape_string()

Ce qui donne:
Code :
$gagnant="SELECT temps_rep,reponse_donnee FROM participants WHERE id_partie=$id AND reponse_donnee='". mysql_real_escape_string($repexact) ."' ORDER BY temps_rep";
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2007, 11h58   #6
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 62
Points : 12
Points : 12
Merci à tous, c'est bien le problème des '...

Désolé, mais j'ai encore du mal avec la syntaxe... Je ne comprends pas pourquoi des moments cela fonctionne sans les ' et pas d'autres...

Est ce que c'est lorsqu'on met plus d'une condition ou plus d'un champs?
syl2042 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2007, 12h00   #7
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
il faut utiliser les ' ' quand ta colonne est de type TEXT, VARCHAR, DATETIME, etc.
Ou plutot dès que c'est pas un type numérique.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2007, 12h02   #8
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 62
Points : 12
Points : 12
merci beaucoup...

Affaire classée...
syl2042 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 09h22.


 
 
 
 
Partenaires

Hébergement Web