我有一个以一组HTML代码命名的PHP文件,这段代码显示了为下一个进程选择的几个ID位置(Form是GET)。
$sqloc = mysql_query("SELECT loc_id FROM location");
while ($row = mysql_fetch_array($sqloc)){
echo "<tr><td>
<label><input type=\"checkbox\" name=\"chk_loc[]\" value=". $row['loc_id'] ." />
</td><td>" . $row['loc_id'] . "</td></tr></label>"; }
然后在其他PHP文件中,我使用此代码根据选中的ID使用复选框选择数据。
$cbarray = array();
if (isset($_GET['submit_location'])) {
$cbarray = $_GET['chk_loc']; }
for ($i=0; $i<count($cbarray); $i++) {
$sqlcb = mysql_query("SELECT * FROM location WHERE loc_id = '$cbarray'");
while($ccb= mysql_fetch_row($sqlcb)) {
print_r($ccb); }
}
但是当我运行它时,它会出现通知:
在第62行的数组到字符串转换
在第62行上($ sqlcb = mysql_query)部分。我已经使用var_dump来检查数组,并按如下方式打印数组:
array(4) { [0]=> string(5) "LO001" [1]=> string(5) "LO003" [2]=> string(5) "LO004" [3]=> string(5) "LO005" }
有没有解决这个问题?谢谢。
答案 0 :(得分:3)
php中的Checkbox作为数组处理。在代码中,id为chk_loc的复选框作为数组存储在$ cbarray中。
$sqlcb = mysql_query("SELECT * FROM location WHERE loc_id = '$cbarray'");
在此代码中,where子句接受一个字符串,并提供一个数组。
并使用PDO来阻止sql注入PDO PHP
答案 1 :(得分:1)
问题在于这个陈述,
$sqlcb = mysql_query("SELECT * FROM location WHERE loc_id = '$cbarray'");
^ see here
$cbarray
实际上是一个数组,而不是一个字符串。您可以使用var_dump($cbarray);
查看其结构。
所以解决方案是:
使用implode()
函数将数组元素与字符串连接起来并在查询中使用它,如下所示:
$cbarray = array();
if (isset($_GET['submit_location'])) {
$cbarray = $_GET['chk_loc'];
$query = "SELECT * FROM location WHERE loc_id IN ('" . implode("','", array_map('mysql_real_escape_string', $cbarray)) . "')";
$sqlcb = mysql_query($query);
while($ccb= mysql_fetch_row($sqlcb)) {
print_r($ccb);
}
}
旁注:不使用mysql_*
函数,从PHP 5.5开始不推荐使用它们,在PHP 7.0中完全删除它们。请改用mysqli
或pdo
。 And this is why you shouldn't use mysql_*
functions