J'essaie de comprendre et de mettre en application un conseil que Ryle m'avait donné afin de simplifier une expression qui était composée de plusieurs if...else.
Voici mon expression:
if ((isset($_POST['1p'])) && (isset($_POST['2p'])) && (isset($_POST['3p'])) && (isset($_POST['4p'])) && (isset($_POST['5p']))) {
$piece = " AND nb_piece <= 1 ";
} elseif ((isset($_POST['1p'])) && (isset($_POST['2p'])) && (isset($_POST['3p'])) && (isset($_POST['4p']))) {
$piece = " AND nb_piece <= 4 ";
} elseif ((isset($_POST['1p'])) && (isset($_POST['2p'])) && (isset($_POST['4p'])) && (isset($_POST['5p']))) {
$piece = " AND (nb_piece <= 2 OR nb_piece >= 4) ";
} elseif ((isset($_POST['1p'])) && (isset($_POST['2p'])) && (isset($_POST['3p'])) && (isset($_POST['5p']))) {
$piece = " AND (nb_piece <= 3 OR nb_piece >= 5) ";
} elseif ((isset($_POST['1p'])) && (isset($_POST['3p'])) && (isset($_POST['4p'])) && (isset($_POST['5p']))) {
$piece = " AND (nb_piece = 1 OR nb_piece >= 3) ";
} elseif ((isset($_POST['2p'])) && (isset($_POST['3p'])) && (isset($_POST['4p'])) && (isset($_POST['5p']))) {
$piece = " AND nb_piece >= 2 ";
} elseif ((isset($_POST['1p'])) && (isset($_POST['2p'])) && (isset($_POST['3p']))) {
$piece = " AND nb_piece <= 3 ";
} elseif ((isset($_POST['1p'])) && (isset($_POST['2p'])) && (isset($_POST['4p']))) {
$piece = " AND (nb_piece <= 2 OR nb_piece = 4) ";
} elseif ((isset($_POST['1p'])) && (isset($_POST['2p'])) && (isset($_POST['5p']))) {
$piece = " AND (nb_piece <= 2 OR nb_piece >= 5) ";
} elseif ((isset($_POST['1p'])) && (isset($_POST['3p'])) && (isset($_POST['4p']))) {
$piece = " AND (nb_piece = 1 OR nb_piece = 3 OR nb_piece = 4) ";
} elseif ((isset($_POST['1p'])) && (isset($_POST['3p'])) && (isset($_POST['5p']))) {
$piece = " AND (nb_piece = 1 OR nb_piece = 3 OR nb_piece >= 5) ";
} elseif ((isset($_POST['1p'])) && (isset($_POST['4p'])) && (isset($_POST['5p']))) {
$piece = " AND (nb_piece = 1 OR nb_piece >= 4) ";
} elseif ((isset($_POST['2p'])) && (isset($_POST['3p'])) && (isset($_POST['4p']))) {
$piece = " AND (nb_piece = 2 OR nb_piece = 3 OR nb_piece = 4) ";
} elseif ((isset($_POST['2p'])) && (isset($_POST['4p'])) && (isset($_POST['5p']))) {
$piece = " AND (nb_piece = 2 OR nb_piece >= 4) ";
} elseif ((isset($_POST['2p'])) && (isset($_POST['3p'])) && (isset($_POST['5p']))) {
$piece = " AND (nb_piece = 2 OR nb_piece = 3 OR nb_piece >= 5) ";
} elseif ((isset($_POST['3p'])) && (isset($_POST['4p'])) && (isset($_POST['5p']))) {
$piece = " AND nb_piece >= 3 ";
} elseif ((isset($_POST['1p'])) && (isset($_POST['2p']))) {
$piece = " AND nb_piece <= 2 ";
} elseif ((isset($_POST['1p'])) && (isset($_POST['3p']))) {
$piece = " AND (nb_piece = 1 OR nb_piece = 3) ";
} elseif ((isset($_POST['1p'])) && (isset($_POST['4p']))) {
$piece = " AND (nb_piece = 1 OR nb_piece = 4) ";
} elseif ((isset($_POST['1p'])) && (isset($_POST['5p']))) {
$piece = " AND (nb_piece = 1 OR nb_piece >= 5) ";
} elseif ((isset($_POST['2p'])) && (isset($_POST['3p']))) {
$piece = " AND (nb_piece = 2 OR nb_piece = 3) ";
} elseif ((isset($_POST['2p'])) && (isset($_POST['4p']))) {
$piece = " AND (nb_piece = 2 OR nb_piece = 4) ";
} elseif ((isset($_POST['2p'])) && (isset($_POST['5p']))) {
$piece = " AND (nb_piece = 2 OR nb_piece >= 5) ";
} elseif ((isset($_POST['3p'])) && (isset($_POST['4p']))) {
$piece = " AND (nb_piece = 3 OR nb_piece = 4) ";
} elseif ((isset($_POST['3p'])) && (isset($_POST['5p']))) {
$piece = " AND (nb_piece = 3 OR nb_piece >= 5) ";
} elseif ((isset($_POST['4p'])) && (isset($_POST['5p']))) {
$piece = " AND nb_piece >= 4 ";
} elseif (isset($_POST['1p'])) {
$piece = " AND nb_piece = 1 ";
} elseif (isset($_POST['2p'])) {
$piece = " AND nb_piece = 2 ";
} elseif (isset($_POST['3p'])) {
$piece = " AND nb_piece = 3 ";
} elseif (isset($_POST['4p'])) {
$piece = " AND nb_piece = 4 ";
} elseif (isset($_POST['5p'])) {
$piece = " AND nb_piece >= 5 ";
}
Conseil de Ryle:
J'avoue que j'aimerais bien arriver à mettre en pratique ce conseil mais que j'éprouve quelques difficultés à y arriver.Sinon, plutôt que ta tonne de elseif pour le nombre de pièce, pourquoi ne pas faire un IN (...) en spécifiant les nombres de pièces sélectionnés ?
Genre nommer toutes tes cases "nb_piece[]", récupérer le tableau $_POST['nb_piece'] et s'il est défini (donc au moins une case de cochée) tu fais un implode(',', $_POST['nb_piece']) pour générer la liste des "nombres de pièces" séparés par des virgules, à utiliser directement dans le IN
Ma variable $piece est ensuite réutilisée dans cette requête:
$query_rs_resultat = "SELECT * FROM tbl_bien, tbl_ville WHERE tbl_bien.ville_bien=tbl_ville.id_ville ".$type.$piece.$budget.$ville.$tri ;
J'ai changé les noms de mes checkbox par nb_piece[]. Quand j'ai fait un echo de $_POST['nb_piece'] après avoir coché certaines de mes checkbox, ca m'affiche bien la valeur de ces dernières du genre 1,3,4.Mais comment réutiliser ce résultat pour arriver au même résultat qu'avec ma série de if...else?
Comment utilise t-on le IN(...) évoqué par le conseil?
Un ptit coup de main s'il vous plait !!!