我正在尝试将复选框连接到 PHP 中的 SQL 语句中

I am trying to concatenate checkboxes into an SQL statement in PHP

我有一个非常简单的 HTML 表单,其中 POST 方法发送某些活动的名称,这些活动是否被选中...

<input type="checkbox" name="games[]" value="darts=1">Darts</input>
<input type="checkbox" name="games[]" value="e-darts=1">e-Darts</input>
<input type="checkbox" name="games[]" value="pool=1">Pool</input>
<input type="checkbox" name="games[]" value="snooker=1">Snooker</input>
<input type="checkbox" name="games[]" value="airhockey=1">Air Hockey</input>
<input type="checkbox" name="games[]" value="quizmachine=1">Quiz Machine</input>
<input type="checkbox" name="games[]" value="food=1">Food</input></br></br>

这不是问题所在,我正在获取这些值,非常棒。

然后我尝试从数组中获取 foreach 循环中的任何检查值,并通过在所有值之间添加“和”直到最后一个值将这些值连接到 where 子句中。但是,它们并没有连接,只是输出最终的复选框结果——我该如何连接?这是我的 php 代码:

<?php
$i = 0;
if(!empty($_POST['games'])) {
    foreach($_POST['games'] as $check)  {
        if(++$i === count($_POST['games']))     {
            /*echo $check;*/
        }
        else    {
            $check = $check . " and ";
            /*echo $check;*/
        }
    }
}


try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,         $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    foreach($conn->query("SELECT * from Establishments where town like '".$publocation."' and ".$check."") as $row) {
        print $row['name'] . "</br>";

    }
    $conn = null;
} 
catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

implode(' AND ', $_POST['games']); 是一种更简单的方法。

您这样做的方式只是获取最后一个值的原因是 $check 变量是在 foreach 循环中定义的,因此每次迭代都会重新创建它。

不过,任何直接在 SQL 中使用 $_POST 值的方法都容易受到 SQL 注入的攻击。

要连接复选框,请使用内爆函数 你的代码如下

$i = 0;
  if(!empty($_POST['games'])){ 
    $check=implode(' AND ',$_POST['games']);
    }
try 
  {
  $conn = newPDO("mysql:host=$servername;dbname=$dbname",$username,$password);
  $conn >setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  foreach($conn>query("SELECT * from Establishments where town like '".$publocation."' and ".$check."") as $row)
    { 
    print $row['name']</br>"; 
    }
$conn = null; 
  } 
catch (PDOException $e)
 {
  print "Error!: " . $e->getMessage() . "<br/>";
  die();
}

谢谢你