我正在尝试将复选框连接到 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();
}
谢谢你
我有一个非常简单的 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();
}
谢谢你