Probleme pour une requete avec WHERE et AND

Fermé
apprentiDev Messages postés 154 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 1 mai 2013 - 6 mai 2010 à 12:05
apprentiDev Messages postés 154 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 1 mai 2013 - 1 juil. 2010 à 12:14
Bonjour à tous,

Je suis en train de faire un formulaire en PHP et dans la page qui doit traiter les données reçus je dois prévoir les différents possibilités selon les champs qui sont remplis ou non par l'utilisateur.

J'ai parmi les différents champs un champ pays et un autre date. J'ai fait la requête pour le cas ou la personne rempli juste le champ pays et une autre requête pour le cas ou il n'y a que le champ date qui est rempli.Ces deux requêtes fonctionnent sans aucun problème.

Aprés je veux faire la requête pour le cas ou la personne rempli le champ pays et le champ date. La requête me retourne bien des résultats mais ce n'est pas la date précisé qui apparait. Si j'ai mis en date 1972 alors j'ai comme réponse tous les résultats se trouvant dans les années 70.

J'ai pourtant bien utilisés le WHERE associé à un AND pour restreindre ma requête mais pourtant ca ne veut rien savoir. J'ai aussi vérifier il n'y a pas de champ manquant ou quelque chose comme ça.

Ma requête est la suivante :

else if ( $pays != '' && $date != '' ) {
// Si la date, le pays est renseigne
$sql="SELECT pa.nom_pays, sc.date_scene,
FROM (scene sc, image im, canal ca, source src, pays pa, est_localisee est)
WHERE ('".$pays."'= pa.nom_pays)
AND ('".$date."'==YEAR(sc.date_scene))";


Je voudrais donc avoir votre avis.

En vous remerciant d'avance.

2 réponses

Salut

l'opérateur de comparaison == n'existe pas en sql. c'est = comme tu l'avais écrit précédemment.
en outre, tu peux te passer des guillemets (") qui délimitent tes chaines lors des concaténations et économiser tes parenthèses qui ne sont utiles que pour lever des ambiguités. on a donc
$sql="SELECT pa.nom_pays, sc.date_scene,
FROM scene sc, image im, canal ca, source src, pays pa, est_localisee est
WHERE '$pays'= pa.nom_pays
AND '$date'=YEAR(sc.date_scene)";
0
apprentiDev Messages postés 154 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 1 mai 2013 4
6 mai 2010 à 19:49
Merci Fiu, c'est l'erreur bête que j'ai pas repéré.

Merci à toi.
0
apprentiDev Messages postés 154 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 1 mai 2013 4
Modifié par apprentiDev le 1/07/2010 à 12:22
Désolé de reposté sur un sujet ancien mais j'ai encore le même problème et cette fois j'ai corrigé mes erreurs.

Comme précédemment je veux que la liste de résultat donné a la fin prenne en compte le nom du pays et de la date ( année donné par l'utilisateur)
Le problème c'est que le résultat donné par la requete ne prend pas en compte l'année indiquée.

Voici mon code :
if ($pays != ''  && $lieu == ''  && $longitude =='' && $latitude == '' && $trace =='' && $rang == '' && $date != '' && $canal == '') {  
 // Si la date, le pays est renseigne  
$sql="SELECT pa.nom_pays, sc.lieu_scene, sc.date_scene, sc.trace_scene, sc.rang_scene, ca.libelle_canal, src.libelle_src, X(coord_scene),Y(coord_scene), sc.commentaire_scene, sc.angle_scene, AsText(sc.coord_scene), sc.resolution_scene   
FROM scene sc, image im, canal ca, source src, pays pa, est_localisee est  
WHERE '$pays'= pa.nom_pays  
AND '$date'=YEAR(sc.date_scene)  
 AND Y(coord_scene) IS NOT NULL  
 AND X(coord_scene) IS NOT NULL  
 AND (pa.iso_pays = est.iso_pays)  
 AND (est.id_scene = sc.id_scene)  
 AND (sc.id_src = src.id_src)   
 AND (est.id_scene = sc.id_scene)   
 AND (im.id_scene = sc.id_scene)  
 AND (ca.id_canal = im.id_canal)";  
}



Si quelqu'un voit une erreur qui m'aurait échappée.
Cordialement,
ApprentiDev
0