par
Ryle » 08 févr. 2007, 17:14
Qu'est ce qui ne fonctionne pas ? la requête sql générée est-elle correcte ? est ce les résultats qui ne sont pas bons ? as-tu des messages d'erreurs ?
Dans la mesure où tu utilises des menus déroulants, je suppose que les valeurs que tu proposes proviennent de ta base. Tu as donc en principe des valeurs exactes, utilise plutôt un = à la place du LIKE

(le like sert uniquement quand tu as un élément partiel de requête, et est plus gourmand en ressource, donc a éviter s'il n'est pas nécessaire

)
Par ailleurs pour te simplifier un peu la vie sur tes test, tu peux ajouter un premier critère et ne mettre que des AND, ou bien utiliser une autre chaine (ce qui accessoirement te permet de la réutiliser :
$requete="SELECT * FROM collectionneur WHERE 1 = 1 ";
if($chapitre!='ND')
$requete.= " AND chapitre = '".$chapitre."'"; // les ` n'ont d'intérêt que si le nom de ton champ est un mot clé réservé sql
if($arme!='ND')
$requete.= " AND arme = '".$arme."'";
...
voire donc :
$requete="SELECT * FROM collectionneur ";
$sousRequete = '';
if($chapitre!='ND') {
$sousRequete.= ($sousRequete != '') ? ' AND ' : ' WHERE '; // s'il y a des critères ajoute and, sinon ajoute where
$sousRequete.= " chapitre = '".$chapitre."'";
}
if($arme!='ND') {
$sousRequete.= ($sousRequete != '') ? ' AND ' : ' WHERE ';
$sousRequete.= " arme = '".$arme."'";
}
...
$requete.= $sousRequete; // avantage, tu peux réutiliser les critères dans ta 2nd requête
HTH
Qu'est ce qui ne fonctionne pas ? la requête sql générée est-elle correcte ? est ce les résultats qui ne sont pas bons ? as-tu des messages d'erreurs ?
Dans la mesure où tu utilises des menus déroulants, je suppose que les valeurs que tu proposes proviennent de ta base. Tu as donc en principe des valeurs exactes, utilise plutôt un = à la place du LIKE :) (le like sert uniquement quand tu as un élément partiel de requête, et est plus gourmand en ressource, donc a éviter s'il n'est pas nécessaire ;))
Par ailleurs pour te simplifier un peu la vie sur tes test, tu peux ajouter un premier critère et ne mettre que des AND, ou bien utiliser une autre chaine (ce qui accessoirement te permet de la réutiliser :
[php]$requete="SELECT * FROM collectionneur WHERE 1 = 1 ";
if($chapitre!='ND')
$requete.= " AND chapitre = '".$chapitre."'"; // les ` n'ont d'intérêt que si le nom de ton champ est un mot clé réservé sql
if($arme!='ND')
$requete.= " AND arme = '".$arme."'";
...[/php]
voire donc :
[php]$requete="SELECT * FROM collectionneur ";
$sousRequete = '';
if($chapitre!='ND') {
$sousRequete.= ($sousRequete != '') ? ' AND ' : ' WHERE '; // s'il y a des critères ajoute and, sinon ajoute where
$sousRequete.= " chapitre = '".$chapitre."'";
}
if($arme!='ND') {
$sousRequete.= ($sousRequete != '') ? ' AND ' : ' WHERE ';
$sousRequete.= " arme = '".$arme."'";
}
...
$requete.= $sousRequete; // avantage, tu peux réutiliser les critères dans ta 2nd requête
[/php]
HTH