Php foreach(美元邮政)
因此,我在表单中使用了多个复选框,可以毫无问题地查询数据库。现在我想添加一个下拉列表,并将其与带有复选框的查询相结合。当我运行这个时,我得到一个Php foreach(美元邮政),php,arrays,foreach,Php,Arrays,Foreach,因此,我在表单中使用了多个复选框,可以毫无问题地查询数据库。现在我想添加一个下拉列表,并将其与带有复选框的查询相结合。当我运行这个时,我得到一个 Warning: Invalid argument supplied for foreach() 这是我的表格 <form name="search_form" method="post" action="event_list"> <table> <tr> <
Warning: Invalid argument supplied for foreach()
这是我的表格
<form name="search_form" method="post" action="event_list">
<table>
<tr>
<td>Venue</td>
<td><input type="checkbox" name="check_list[]" value="AAC"><label >AAC</label><br />
<input type="checkbox" name="check_list[]" action="" value="AKC" id="check_list[]"/><label >AKC</label><br />
<input type="checkbox" name="check_list[]" action="" value="ASCA"/><label >ASCA</label><br />
<input type="checkbox" name="check_list[]" action="" value="CKE"/><label >CKE</label><br />
<input type="checkbox" name="check_list[]" action="" value="CPE"/><label >CPE</label><br />
<input type="checkbox" name="check_list[]" action="" value="DOCNA"/><label >DOCNA</label><br />
<input type="checkbox" name="check_list[]" value="NADAC"><label >NADAC</label><br />
<input type="checkbox" name="check_list[]" action="" value="TDAA"/><label >TDAA</label><br />
<input type="checkbox" name="check_list[]" action="" value="UKC"/><label >UKC</label><br />
<input type="checkbox" name="check_list[]" action="" value="UKI"/><label >UKI</label><br />
<input type="checkbox" name="check_list[]" action="" value="USDAA"/><label >USDAA</label><br />
</td>
</tr>
<tr>
<td style="text-align: left;">State:</td>
<td style="text-align: left;">
<select name="state" id="state" onChange="setCities();">
<option name="drop_down[]" value="Alabama">Alabama</option>
<option name="drop_down[]" value="Texas">Texas</option>
</select>
</td>
</tr>
<td align="right"><input type="submit" name="submit" value="Submit"></td>
</tr>
</table>
</form>
地点
AAC
AKC
ASCA
CKE
CPE
DOCNA
NADAC
TDAA
UKC
UKI
USDAA
声明:
阿拉巴马州
得克萨斯州
这是我的PHP
<?php
$options = Array();
$options2 = Array();
foreach ($_POST['check_list'] as $check)
$options[] = 'venue=' . "'$check'";
foreach ($_POST['drop_down'] as $drop)
$options2[] = 'state=' . "'$drop'";
$sql = "SELECT * FROM venue_event_all";
if (count($options))
$sql .= " WHERE " . implode(' OR ', $options);
if (count($options2))
$sql .= " AND " . implode(' OR ', $options2);
$result=mysql_query($sql) or die(mysql_error());
?>
在
输入中,
的值与要发布/获取的选择的名称成对发送
在选项
上设置名称
本身不会起任何作用。下拉列表值仍将与选择项的名称一起使用
你可以用这个来检查它
echo $_POST['state'];
因此,使用此值在查询中设置
编辑:必须-请不要使用MySQL,因为它已被弃用,不再由PHP维护。使用MySQLi或PDO。此外,在查询中使用输入之前,请先清理输入 如果数组为空或未设置,foreach将显示错误,因此您需要首先检查它:
if(isset($_POST[0]) and count($_POST) > 0)
{
foreach...
}
我不会只是抱怨sql注入,而是给你一个解决方案。
使查询安全且代码量合理的唯一方法是使用库
(基于Jeffrey代码,未经测试,但可自由用于生产):
我想得太多了,用了这个,效果很好。谢谢你的帮助。
<?php
include 'safemysql.class.php';
$db = new SafeMysql();
$options = array();
if (!empty($_POST['check_list'])) {
$options[] = $db->parse('venue IN (?a)', $_POST['check_list']);
}
if (!empty($_POST['drop_down'])) {
$options[] = $db->parse('state IN (?a)', $_POST['drop_down']);
}
$sql = "SELECT * FROM venue_event_all";
if ($options) {
$sql .= " WHERE " . implode(' AND ', $options);
}
$data = $db->getAll($sql);