Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/08/2007, à 00:58

Feral

[Résolu] PHP: Rendre Inactive une clause: WHERE ? :-(

Bonjour à tous!

Je suis débutant en PHP depuis 1 mois...

J'ai une table de donné (bien) avec des noms d'objets et des catégories...:
ID-Cat-Name

Sur mon interface je voudrais que grace à un menu déroulant faisant partie d'un menu de recherche je puisse choisir l'un des objets.
Cependant, si je n'en choisi aucun, je souhaiterais qu'ils soient tous affichés.

Dans mon menu, j'ai:

<?php
if (isset($_POST['name'])) {$name=$_POST['name'];} else {$name=NULL;}
?>

<form action="index.php" method="post">

<p>
<label for="name">Name</label><br />
<select name="name" id="name">
<option value="<?php NULL?>">No Selection</option>
<?php
$retour1 = mysql_query('SELECT * FROM bien WHERE cat=\'' . $_SESSION['cat'] . '\' AND active=1 ORDER BY name;');
while ($donnees1 = mysql_fetch_array($retour1))
	{
	echo '<option value="' . $donnees1['name'] . '" ';
	if ($name == $donnees1['name'])
		{
		echo 'selected="selected"';
		}
	echo '>' . $donnees1['name'] . '</option><br/>';
	}
?>
</p>
<input type="submit" value="Search" />
</form>

Jusque là, tout va bien même si je suis sûr que mon code n'est pas super top... :-)

Voici donc ma page d'affichage:

<?php
$retourm = mysql_query('SELECT * FROM bien WHERE cat=\'' . $_SESSION['cat'] . '\' AND name=\'' . $name . '\' AND active=1 ORDER BY name;');
while ($donneesm = mysql_fetch_array($retourm))
	{
	echo $donneesm['name'] . '-' . $donneesm['id'] . '<br/>';
	}
?>

Tout ça marche bien tant que je sélectionne l'un des nom, si je ne sélectionne rien (No Selection) et bien ça ne m'affiche rien... Ce qui est totalement normal bien sûr!!

Donc ce que je cherche à faire est de donner une valeur à $name qui invaliderait le filtrage de la clause WHERE. Sinon, la seule autre solution serait de faire une clause if(isset(...)) mais comme je vais avoir 10 autres options de filtrage en plus du nom je n'ai pas du tout envie de me faire toutes les combinaisons de if.

Il doit bien y avoir une solution toute simple en SQL non puisque cette option est valable dans tous les menus de filtrage que j'ai vu sur le web?

Merci beaucoup!

Dernière modification par Feral (Le 01/08/2007, à 16:50)

Hors ligne

#2 Le 01/08/2007, à 11:53

alexduf

Re : [Résolu] PHP: Rendre Inactive une clause: WHERE ? :-(

Feral a écrit :

Donc ce que je cherche à faire est de donner une valeur à $name qui invaliderait le filtrage de la clause WHERE. Sinon, la seule autre solution serait de faire une clause if(isset(...)) mais comme je vais avoir 10 autres options de filtrage en plus du nom je n'ai pas du tout envie de me faire toutes les combinaisons de if.

Il doit bien y avoir une solution toute simple en SQL non puisque cette option est valable dans tous les menus de filtrage que j'ai vu sur le web?

Merci beaucoup!

en fait ton problème est uniquement un problème SQL.

Il faut construire ta requête en fonction des paramètres que tu as.

par exemple en faisant :

$requete = "SELECT * FROM bien WHERE active = 1"; // si tu n'as aucun critère par défaut tu peux aussi mettre WHERE 1 = 1
if (isset(param1)) {
    $requete = $requete . " AND nomcolonne = '" . param1 . "'";
}
if (isset(param2)) {
    $requete = $requete . " AND nomcolonne2 = '" . param2. "'";
}
...

après tu peux même généraliser en faisant une fonction d'ajout de critère à une requete.

function ajouterCritere(requete, colonne, valeur) {
if (isset(valeur)) {
    $requete = $requete . " AND " . $colonne . " = '" . valeur ."'";
}
return $requete
}

que tu appelleras comme ca :

$requete = "SELECT * FROM bien WHERE active = 1";
$requete = ajouterCritere($requete,"nomcolonne",$param1);
$requete = ajouterCritere($requete,"nomcolonne2",$param2);

ca répond à tes interrogations?
Bonne continuation !

Hors ligne

#3 Le 01/08/2007, à 14:23

Feral

Re : [Résolu] PHP: Rendre Inactive une clause: WHERE ? :-(

Superbe!
Merci beaucoup!

Je teste ça tout de suite. ;-)

Bonne journée!

Hors ligne

#4 Le 01/08/2007, à 16:50

Feral

Re : [Résolu] PHP: Rendre Inactive une clause: WHERE ? :-(

Ca marche nickel!
Merci beaucoup.

Voici mon code si ça intéresse quelqu'un:

<?php

function critadd($requete, $colonne, $valeur)
	{
	if (isset($valeur))
		{
		$requete = $requete . " AND " . $colonne . " = '" . $valeur ."'";
		}
	return $requete;
	}

$requete = "SELECT * FROM bien WHERE cat='" . $_SESSION['cat'] . "' AND active='1'";
$requete = critadd($requete,"name",$name);

$requete=mysql_query($requete . " ORDER BY name;");

while ($requete2 = mysql_fetch_array($requete))
	{
	echo $requete2['name'] . '-' . $requete2['id'] . '<br/>';
	}
?>

Dernière modification par Feral (Le 01/08/2007, à 17:54)

Hors ligne