Bonjour, Hello,
Voici en image la manière dont je souhaite filtrer mes produits.
L'utilisateur peut ajouter autant de filtres qu'il souhaite afin de trouver LA robe.
Tout va bien lorsque chaque colonne de ma table n'affiche qu'1 seule valeur (ex: catégorie = robes, ou couleur = noir), mais ça se complique lorsque la colonne contient plusieurs valeurs (ex : la robe est moitié en cuir / moitié en satin).
Si afficher ces données sur la page produit ne me pose pas de problème, en revanche j'ai du mal à filtrer mes produits en cochant la case satin si la robe est bi matière satin+ cuir.
Je ne sais pas faire ça avec FIND_IN_SET, c'est pour ça que j'ai opté pour LIKE (sur le 4e if isset) mais...
Merci pour la correction là où je fais faux.
Modifié par Vape6 (08 Nov 2020 - 19:28)
Voici en image la manière dont je souhaite filtrer mes produits.
L'utilisateur peut ajouter autant de filtres qu'il souhaite afin de trouver LA robe.
Tout va bien lorsque chaque colonne de ma table n'affiche qu'1 seule valeur (ex: catégorie = robes, ou couleur = noir), mais ça se complique lorsque la colonne contient plusieurs valeurs (ex : la robe est moitié en cuir / moitié en satin).
Si afficher ces données sur la page produit ne me pose pas de problème, en revanche j'ai du mal à filtrer mes produits en cochant la case satin si la robe est bi matière satin+ cuir.
Je ne sais pas faire ça avec FIND_IN_SET, c'est pour ça que j'ai opté pour LIKE (sur le 4e if isset) mais...
Ceci fonctionne nickel,
if (isset($_POST['action']))
{ $where_terms = [];
$params = [];
$where_terms[] = "published = 'Yes'";
if ( isset ($_POST['product_category']))
{ $where_terms[] = 'FIND_IN_SET(p_cat_id,?)';
$params[] = implode(',',$_POST['product_category']);
}
if ( isset ($_POST['product_brand']))
{ $where_terms[] = 'FIND_IN_SET(product_brand,?)';
$params[] = implode(',',$_POST['product_brand']);
}
// mais ça ne fonctionne plus (ou pas) du côté du LIKE et du $where_2.
if ( isset ($_POST['product_material']))
{ $product_material = explode(',',$_POST['product_material']);
foreach ($product_material as $material_id)
{ $search = "%$material_id%";
$where_terms_2[] = 'product_material LIKE ?';
$params[] = implode(',',$search);
}
}
$where = '';
if ( !empty($where_terms))
{ $where = 'WHERE ' . implode(' AND ',$where_terms);
} // Ca c'est Ok
$where_2 = ''; // Ok ou pas ?
if ( !empty($where_terms) && !empty($where_terms_2))
{ $where_2 = implode(' AND ',$where_terms_2);
}
if ( empty($where_terms) && !empty($where_terms_2))
{ $where_2 = 'WHERE ' . implode(' AND ',$where_terms_2);
}
$sql = "SELECT product_id, product_page, product_title, product_brand, product_price,
FROM products $where $where_2 ";
if (! $stmt = $pdo->prepare($sql)) {die(var_export($pdo->errorinfo(), TRUE));} ;
$stmt->execute($params);
Merci pour la correction là où je fais faux.
Modifié par Vape6 (08 Nov 2020 - 19:28)