【问题标题】:Query a database with text field and checkboxes使用文本字段和复选框查询数据库
【发布时间】:2011-06-07 15:08:47
【问题描述】:

首先我花了一整天的时间在互联网上搜索并试图找到自己的解决方案,但没有成功。

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

该网站是关于帆船中心的。

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

Table1 - 航海中心

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

 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 

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

所以我在城市字段中输入 Marseille 并选中 CLUB 和 SCHOOL 复选框。 (我认为很明显,所有这些信息都是帆船中心在注册时插入的)

我想展示所有既是俱乐部又是学校的帆船中心,但也只是学校或俱乐部。

这是关键点。我的帆船中心可以是两者,或者只是俱乐部或学校。

我不知道如何构建一个选择语句来解决这个问题。

关键是我必须在 select 语句中将城市和复选框结合起来。那是我做不到的。

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

希望我已经清楚了。

【问题讨论】:

    标签: php mysql checkbox


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:
      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 .= ')';
      

      【讨论】:

      • 我不敢相信它这么简单。所以很明显我是一个新手。下一步是根据检查的复选框构建 select 语句。
      • 再次感谢 Parkyprg。 Cuold你检查代码是否正确?如果 ($_POST['club']=='ON') $query .= ' OR club = 1 ';
      • 是的,对不起。重新编写脚本。
      【解决方案3】:

      简单的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 的构建可以在某种程度上自动化,根据白名单检查值,然后将它们大写以连接字符串,但上面应该给你一个想法 - 如果你的问题真的是“我如何构建 sql声明?”

      【讨论】:

      • 感谢杯。其实我不太明白你的意思是检查白名单然后大写等的值。我的英语有点有限。
      • $allowed = array('club', 'shop' etc);使用 in_array() 检查传入的 var 是否在该数组中,如果是,则在构建 $and_clause 时重新使用它。例如: $and_clause .= strtoupper( $allowed[$key] ) 。 '= 1 或' ;
      猜你喜欢
      • 1970-01-01
      • 2012-05-28
      • 2014-11-13
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 2013-08-22
      相关资源
      最近更新 更多