$condition = array(); // tableau des conditions
$sql = "SELECT ... FROM ... ";
if (isset($_POST['frequence'])) // si ma valeur est passée, je l'ajoute au tableau des conditions
$condition[] = " frequence = '".mysql_real_escape_string($_POST['frequence'])."'";
if (isset($_POST['constructeur']))
$condition[] = " constructeur = '".mysql_real_escape_string($_POST['constructeur'])."'";
...
if (count($condition) > 0) // si j'ai des conditions, j'ajoute le where et mes conditions séparées par un AND (ou un OR selon ce que tu veux faire)
$sql.= " WHERE " . implode(' AND ', $condition);
echo $sql; // pour voir le résultatT'est-il venu à l'idée de faire afficher ta requête générée à l'écran pour voir de quoi avait l'air le résultat et pour la tester en faisant un copier/coller depuis l'écran vers un client MySQL genre PHPMyAdmin ou MySQL en ligne de commande par exemple ? Sinon, tu devrais essayer : l'erreur est assez mineure mais bloquante et mysql ne peut retourner qu'une erreur du genre « colonne inconnue ».Au debut j'ai fait ca :
SELECT * FROM `tv` WHERE `frequence`= ".$frequence." OR `constructeur`= ".$marque." OR `technologie`= ".$technologie." OR `taille` = ".$taille." OR `resolution`=".$resolution." OR `ports` = ".$ports."
et dans mon menu déroulant j' ai choisi de faire une recherche par " frequence".
mais voila cela ne marche pas =(
$aCols = array('frequence','marque','technologie','taille','resolution','ports');
// Tableau de stockage des conditions de tri
$aWhere = array();
// Chaine de la clause WHERE de la requête.
$sWhere = null;
foreach ($aCols as $col)
{
// si ma valeur est passe, je l'ajoute au tableau des conditions
if (isset($_POST[$col]) && ($_POST[$col] != $col))
{
$aWhere[] = " `". $col ."` = '". $_POST[$col] ."' ";
}
}
if(count($aWhere) > 0)
{
$sWhere = ' WHERE '. implode(' AND ', $aWhere);
}
if (count($condition) > 0)
{
// si j'ai des conditions, j'ajoute le where et mes
// conditions séparées par un AND (ou un OR selon ce
// que tu veux faire)
$sql = "SELECT * FROM `tv`". $sWhere;
}
echo $sql;
Comme ça, si tu rajoutes un jour une colonne dans ta table et le champ correspondant dans ton formulaire, tu n'auras même pas besoin de toucher ce code là sauf pour rajouter le nom de la colonne dans le tableau $aCols : délai d'exécution de ce genre de mise à jour, approximativement 3 à 5 secondes selon le nombre de lettre à taper pour saisir le nouveau nom de colonne Autant pour moi, tu as raison, remplace $condition par $aWhere.tout dabord merci pour votre gentillesse et merci de vouloir m'aider =)
juste une petite question
if (count($condition) > 0) : condition cela correspond a quoi? car je ne le vois pas défini plus haut
$aCols = array('frequence','marque','technologie','taille','resolution','ports');
// Tableau de stockage des conditions de tri
$aWhere = array();
// Chaine de la clause WHERE de la requête.
$sWhere = null;
foreach ($aCols as $col)
{
// si ma valeur est passe, je l'ajoute au tableau des conditions
if (isset($_POST[$col]) && ($_POST[$col] != $col))
{
$aWhere[] = " `". $col ."` = '". $_POST[$col] ."' ";
}
}
// si j'ai des conditions, j'ajoute le where et mes
// conditions séparées par un AND (ou un OR selon ce
// que tu veux faire)
if(count($aWhere) > 0)
{
$sWhere = ' WHERE '. implode(' AND ', $aWhere);
}
$sql = "SELECT * FROM `tv`". $sWhere;
echo $sql;
Désolé pour cette erreur.On, on sait donc que MySQL a retourné une erreur et du coup les fonctions suivantes ne peuvent pas fonctionner. Pour trouver la nature exacte du problème, il faut identifier l'erreur qui a été retournée. Fais donc afficher ta requête générée à l'écran, copie et colle dans phpMyAdmin et reviens avec le résultat : si MySQL a retourné une erreur, tu vas en voir les détails.Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource on line 215
$afficheProduct = mysql_query($sql);
En remplaçant par :$afficheProduct = mysql_query($sql) or die("Erreur lors de la requête SQL<br />\nRequête : <pre>". $sql ."</pre>\nCode d'erreur : ". mysql_errno() ."<br />\nMessage : ". mysql_error());
Et ensuite exécute ton code et regarde ce qui se passe, le résultat devrait être beaucoup plus parlant.