使用文本字段和复选框查询数据库

时间:2011-06-07 15:08:47

标签: php mysql checkbox

首先,我整天都在网上搜索并试图找到自己的解决方案,但没有成功。

所以现在我来这里寻求你的帮助。

该网站是关于帆船中心。

我有一个简单的搜索表单,包含文本字段(城市)和4个复选框(俱乐部,学校,商店,旅游)。这些都是数据库的字段。

表1 - carscenters

------+----------+----------+--------+--------+---------+-------

 id    name     city     club     school    shop     tour

------+----------+----------+--------+--------+---------+--------

   1      Sail1       City1     1         0        0        1

   2      Sail2       City2     1         1        0        0

   3      Sail3       City3     0         1        1        0 

假设我想展示马赛的所有俱乐部和学校。

所以我在城市场地中键入马赛并检查CLUB和SCHOOL复选框。 (我认为很明显所有这些信息都是在登记期间由帆船中心插入的)

我想展示所有CLUB和学校的帆船中心,还要展示学校或俱乐部。

这是关键点。我的帆船中心既可以是俱乐部也可以是学校。

我无法弄清楚如何构建一个select语句来解决这个问题。

关键是我必须在select语句中组合城市和复选框。这就是我无法做到的。

我想指出,对于复选框,我在数据库中创建了4个不同的字段。这个可以吗?或者我应该只创建一个文本字段并使用IMPLODE函数存储和EXPLODE来检索数据?

希望我已经清楚了。

3 个答案:

答案 0 :(得分:1)

SELECT
  name
FROM 
  sailingcenters
WHERE 
  (club = 1 OR school = 1)
  AND city = 'Marseille'

编辑: 像这样建立您的查询:

$query = "SELECT * FROM sailingcenters WHERE city = 'Marseille' AND (0=1";
if ($_POST['club']=='ON')   $query .= ' OR club   = 1 ';
if ($_POST['school']=='ON') $query .= ' OR school = 1 ';
if ($_POST['shop']=='ON')   $query .= ' OR shop   = 1 ';
if ($_POST['tour']=='ON')   $query .= ' OR tour   = 1 ';
$query .= ')';

答案 1 :(得分:1)

我想,OR应该用括号括起来。

SELECT
  name
FROM 
  sailingcenters
WHERE 
  city = 'Marseille'
  AND
  (club = 1 OR school = 1)

答案 2 :(得分:0)

琐碎的HTML - > PHP - > SQL语句示例

<form method=post>
<input type=checkbox name=club />

发送到回发表单处理程序,其中包括:

$and_clause = "AND ";

// for each of your checkboxes do:
if(isset($_POST['club'])){
$and_clause .= "CLUB = 1 OR ";
}

//then last of all do
$and_clause .= rtrim(" OR ", $and_clause);

然后将$ and_clause添加到您的sql语句

$sql = "SELECT
  name
FROM 
  sailingcenters
WHERE 
  city = 'Marseille' $and_clause";

$ and_clause的构建可以在某种程度上自动化,根据白名单检查值然后UPPERCASE它们连接字符串,但上面应该给你的想法 - 如果你的问题真的是“我如何构建sql语句?“