【发布时间】:2016-09-07 02:45:32
【问题描述】:
我有一个以 HTML 代码集命名的 PHP 文件,此代码用于显示要为下一个进程选择的几个位置 ID(表单为 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 行
在 ($sqlcb = mysql_query) 部分的第 62 行。我已经使用 var_dump 来检查数组,它会像这样打印数组:
array(4) { [0]=> string(5) "LO001" [1]=> string(5) "LO003" [2]=> string(5) "LO004" [3]=> string(5) "LO005" }
有没有办法解决这个问题?谢谢。
【问题讨论】:
-
所以,$cbarray 是数组,您正在尝试将其转换为字符串(在 sql 查询内部),您还能期待什么?还要注意sql注入问题
-
简单的解决方法 - 你需要使用
... WHERE loc_id='$cbarray'");而不是... WHERE loc_id='".$cbarray[$i]."'");.. 我想建议使用PDO/mysqli而不是弃用的myqsl_-functions 和foreach而不是for。 Ofc 收到的参数需要清理或使用bind-ing 变量(使用 PDO/mysqli)。