PHP& MYSQL:根据用户的多个输入值构建查询

时间:2010-09-04 10:24:45

标签: php mysql append user-input

假设我有三张桌子: *食谱 - 包含食谱 *成分 - 项目清单 *餐 - 吃饭清单

我有一个表单,可以生成如下选项:

Choose what ingredients you have:
- apples
- bananas 
- cherries

Choose the meal this is for:
- breakfast
- lunch
- dinner

我希望用户能够选择上述任何一种,或者不选择任何一种,即他们可以选择苹果或樱桃OR(香蕉和午餐)

当我查询MySQL时,我的查询大致是

select recipes.* from recipes

select recipes.* from recipes, ingredients 
where recipes.id= ingredients.id and ingredients.list in ('apple');

select recipes.* 
from recipes, ingredients, meal 
where recipes.id= ingredients.id 
      and ingredients.list 
      and ingredients.id = meals.id 
      and ingredients.list ('apple') 
      and meals.list in ('lunch');

是否存在一种很好的说法(在PHP中),如果这个数组存在(即is_array(成分)添加到查询表(成分)和最后粘贴(“.ingredients.list in('apple') ))...

无需编写所有可能的组合或可能的输入(即用户从成分列表中选择,或从成分和膳食列表中选择,或从无列表中选择)?

3 个答案:

答案 0 :(得分:0)

有几种方法可以解决这个问题。

如果您想知道数组中是否存在密钥,可以使用array_key_exists

答案 1 :(得分:0)

您可以为可能的表和块创建两个数组,然后进行收集所有内容的查询:

$wheres=array();
$tables=array();
if(isset($_POST['ingredients'])) {
  $tables[]='ingredients';

  $ingredients=array_map('mysqL_real_escape_string', $_POST['ingredients']);
  $wheres[]='ingredients.list IN (\''. join(', ', $ingredients). '\')';
  //add other wheres if you want
}
if(isset($_POST['meals'])) {
  $tables[]='meal';

  $meals=array_map('mysqL_real_escape_string', $_POST['meals']);
  $wheres[]='meals.list IN (\''. join(', ', $ingredients). '\')';
  //add other wheres if you want
}

if(!$tables) {
  echo 'You have not chose anything!';
} else {
  $query = 'SELECT * FROM '. join(',', $tables). ' WHERE '. join(' AND ', $wheres);
  //do other stuff..
}

答案 2 :(得分:0)

我在这里看不到“所有可能的组合或可能的输入”,而只是所有可能的输入 我会检查所有可能的输入并将其添加到查询中(如果已填充)。