2010-05-27 7 views
1

J'ai cette forme HTML où j'ai plusieurs éléments d'entrée: texte, radio, etc. Il s'agit d'options, d'éléments conditionnels à appliquer dans une requête SQL afin d'extraire des données plus spécifiques d'une base de données. Par exemple, le premier champ de saisie est une zone de texte, le second un bouton radio et le troisième un SELECT avec deux options. Avec le premier, j'ajouterais une phrase LIKE% name% dans la requête SQL. Le second est un groupe de boutons radio avec, disons, une couleur, donc j'ajouterais un WHERE couleur = $ item en comparant celui choisi avec la colonne de base de données. Le troisième serait à peu près comme le second.Comment faire une requête SQL basée sur certaines règles

Maintenant, je pense que je pouvais utiliser si phrases comparant les trois points, afin de savoir lequel d'ajouter à la requête SQL, mais ma question est la suivante: est-il un moyen plus intelligent de le faire? Comme un tableau vérifiant si ces variables sont définies (j'utilise toujours un si ici, donc nevermind).

Je programme des choses simples de temps en temps, puisque je n'ai jamais rien fait de complexe, mais parfois, même pour des choses simples, peu importe combien je m'efforce de concevoir quelque chose, je ne peux pas.

Dans ce cas, je ne peux vraiment pas comprendre (imaginer, visualiser) comment je structurerais le code PHP avec la requête SQL, afin d'ajouter ces trois conditions à la clause WHERE.

Je serais très reconnaissant si vous pouviez m'aider ici. Si vous avez besoin de plus de détails, faites le moi savoir.

+0

ne contrôle pas nulle et générer une condition where basée sur cette façon simple à organiser cela? – hgulyan

+0

@hgulyan Eh bien, c'est certainement ce que j'ai en tête, quelque chose comme isset() ou empty(), mais je suis curieux de savoir quelle approche utiliser, avec un exemple de code. Merci! –

Répondre

1

Vous pouvez simplement créer votre instruction SQL au fur et à mesure.

Un exemple simple:

$sql = "SELECT ... WHERE 1=1";  // 1=1 is just an example to get the WHERE out of the way 

if (first condition/certain $_POST variable is set) 
{ 
    $sql .= " AND LIKE %...%"; 
} 
if (second condition) 
{ 
    $sql .= " AND something=..."; 
} 
// etc. 

// run query 
+0

Votre code est ce que j'ai en tête, mais je pensais d'une autre façon de le faire.Je suppose que je m'efforce de trouver un autre moyen de le faire, et en fait, en contradiction avec la phrase: «Rendre les choses aussi simples que possible, mais pas plus simples." –

+0

Eh bien, vous pouvez mettre les conditions dans le formulaire dans différents tableaux (un tableau * like *, un tableau "=", etc.), puis faire une boucle dans ces tableaux en ajoutant les conditions similaires, mais je ne pense pas que vous pouvez obtenir c'est plus simple que ça. – jeroen

+0

Oui, je suppose que tu as raison. Comme je l'ai dit, peut-être que je regardais ce qui était juste sous mon nez. Merci encore pour votre aide. –

1

Juste pour ajouter une autre solution, je peux vous suggérer en utilisant la procédure stockée.

http://www.mysqltutorial.org/mysql-stored-procedure-tutorial.aspx

http://www.brainbell.com/tutorials/MySQL/Using_Stored_Procedures.htm

Vous aurez juste besoin de transmettre des valeurs à un sp et générer lorsque l'état à l'intérieur.

Il existe une autre option pour générer une requête paramétrée en PHP pour empêcher les injections SQL.

Voici quelques liens sur ce sujet.

http://us2.php.net/manual/en/security.database.php

http://www.roscripts.com/PHP_MySQL_by_examples-193.html

http://www.webmasterworld.com/php/3110596.htm

http://am.php.net/mysql_real_escape_string

+0

J'aime l'exemple de roScripts. Merci! –

+0

De rien. Ne pas oublier de vérifier les liens. – hgulyan

Questions connexes