Besoin d'explication pour alléger ma syntaxe php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Besoin d'explication pour alléger ma syntaxe php

par dread » 18 sept. 2007, 18:12

Merci Ryle pour tes explications, ca va grandement me faciliter la vie et en plus, j'en apprend un peu plus sur le php et son langage.
Merci encore et bonne continuation à tout le monde!!

par Ryle » 18 sept. 2007, 16:15

En SQL la commande IN correspond à une égalité avec un série de valeurs. Le plus simple étant un exemple :

Code : Tout sélectionner

WHERE champ IN (1, 2, 3) -- équivaut à WHERE champ = 1 OR champ = 2 OR champ = 3
Il te suffit donc de tester si des cases ont été cochées et si c'est le cas d'ajouter l'opérateur IN en remplissant les valeurs possible en fonctions des cases qui ont été cochés.
Cela va grandement simplifier ton code et le rendra donc plus lisible et plus maintenable :)

A noter que l'opérateur IN fonctionne avec n'importe quelle liste de valeur, aussi bien des chaines que même une sous requête :

Code : Tout sélectionner

SELECT ... FROM xxx WHERE champ IN ( SELECT champ FROM yyy )

Besoin d'explication pour alléger ma syntaxe php

par dread » 18 sept. 2007, 15:57

Bonjour à tout le monde!

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:
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
J'avoue que j'aimerais bien arriver à mettre en pratique ce conseil mais que j'éprouve quelques difficultés à y arriver.
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 !!!