【问题标题】:I am trying to concatenate checkboxes into an SQL statement in PHP我正在尝试将复选框连接到 PHP 中的 SQL 语句中
【发布时间】:2017-02-27 23:43:04
【问题描述】:

我有一个非常简单的 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();
}

【问题讨论】:

  • darts=1e-darts=1 等在您的数据中对应于哪些列?这将有助于理解数据,以便正确编写查询
  • 我设置了 darts=1,这样我就可以通过并在连接的 SQL 语句中使用它(即 select * from blah where darts=1 and e-darts=1 等)。
  • 数据库列只是没有“=1”部分的复选框的值

标签: php mysql checkbox concatenation


【解决方案1】:

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

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

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

【讨论】:

  • 哦,我以为那些是布尔列名。
  • 不确定e-darts 是否有效,可能需要反引号。
  • 我会从 edarts 中删除连字符,我想是最简单的方法 :)
【解决方案2】:

对于连接复选框,使用 implode 函数 您的代码如下所示

$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();
}

谢谢你

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-13
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多