Requete avec condition

Eléphant du PHP | 294 Messages

09 janv. 2006, 16:23

Bonjour.

J'ai une requète avec des conditions, je ne parvient pas à la faire marcher comme je veux:
$colmarque_rsArticle = "1";
if (isset($_GET['VARmarque'])) {
  $colmarque_rsArticle = (get_magic_quotes_gpc()) ? $_GET['VARmarque'] : addslashes($_GET['VARmarque']);
}
$colCat_rsArticle = "1";
if (isset($_GET['VARCat'])) {
  $colCat_rsArticle = (get_magic_quotes_gpc()) ? $_GET['VARCat'] : addslashes($_GET['VARCat']);
}
mysql_select_db($database_connexioncentrale_db, $connexioncentrale_db);
$query_rsArticle = sprintf("SELECT articles.ID, articles.reference, marque.marque, marque.id, articles.marqueID,categorie.categorie, articles.categorieID  FROM articles, marque, categorie WHERE ( ( articles.marqueID=%s OR articles.categorieID=%s) OR(articles.marqueID=%s AND articles.categorieID= %s)) AND marque.id=articles.marqueID AND categorie.ID=articles.categorieID   ORDER BY articles.prix ASC", $colmarque_rsArticle,$colCat_rsArticle,$colmarque_rsArticle,$colCat_rsArticle);
$query_limit_rsArticle = sprintf("%s LIMIT %d, %d", $query_rsArticle, $startRow_rsArticle, $maxRows_rsArticle);
$rsArticle = mysql_query($query_limit_rsArticle, $connexioncentrale_db) or die(mysql_error());
$row_rsArticle = mysql_fetch_assoc($rsArticle);
Mon Problème vient du Where, la première partie fonctionne mais la seconde est ignorée. En fait je voulais que le script affiche un resultat si une des deux variables existe, sans prendre en compte celle qui n'existe pas. Mais que si les deux variables existes alors la requete les prennent toutes deux en compte. En fait donc, je n'ai jamais de reponse avec une evaluation croisée des deux variables...
merci

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

09 janv. 2006, 21:45

pour simplifier tu peux construire la requete en fonction de l'existence des éléments.
mysql_select_db($database_connexioncentrale_db, $connexioncentrale_db);

$query_rsArticle = "SELECT articles.ID, articles.reference, marque.marque, marque.id, articles.marqueID,categorie.categorie, articles.categorieID  FROM articles, marque, categorie WHERE ";



if ($colmarque_rsArticle != "1")
{
   $query_rsArticle .= sprintf(" articles.marqueID=%s AND", $colmarque_rsArticle);
}



if($colCat_rsArticle != "1")  
{
   $query_rsArticle .=  sprintf(" articles.categorieID=%s ", $colCat_rsArticle); 
} 
else $query_rsArticle .= " 1=1 "; // permet de ne pas avoir un "AND" en fin de requete si la 1ere condition existe et pas la 2nde



$query_rsArticle .=" AND marque.id=articles.marqueID AND categorie.ID=articles.categorieID ORDER BY articles.prix ASC";

$query_limit_rsArticle = sprintf("%s LIMIT %d, %d", $query_rsArticle, $startRow_rsArticle, $maxRows_rsArticle);
$rsArticle = mysql_query($query_limit_rsArticle, $connexioncentrale_db) or die(mysql_error());
$row_rsArticle = mysql_fetch_assoc($rsArticle);

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 294 Messages

10 janv. 2006, 02:08

merci
je vais regarder ça de prêt