我有一个名为products的表,其中包含:
id : int,主键,自动增量 product_name : varchar 突出显示: int(1或0)
所以,我希望突出显示的字段可以通过我的管理页面完全更新,所以每当我得到每个产品的(或行的)数据时,我在产品名称旁边都有一个复选框,表明它是否突出显示(1)或不突出显示(1) 0)。
这是我的代码:
<?php
$host = "localhost";
$user = "root";
$pass = "usbw";
$db = "test";
mysql_connect($host,$user,$pass);
mysql_select_db($db);
?>
<?php
if(isset($_POST['submit']))
{
foreach (isset($_POST['checkBox']) as $id => $value)
{
mysql_query("UPDATE products SET highlighted='$value' WHERE id='$id'");
}
echo "Updated! <a href='index.php'>Back</a>";
}
else
{
echo "<form action='index.php' method='POST'>";
$result = mysql_query("SELECT * FROM products");
while($q = mysql_fetch_assoc($result))
{
echo "".$q['product_name']."";
if($q['highlighted'] == '1')
{
echo "<input type='checkbox' checked value='1' name='checkBox['"; ?><?php echo $q['id']; ?><?php echo "']'>";
}
else
{
echo "<input type='checkbox' value='1' name='checkBox['"; ?><?php echo $q['id']; ?><?php echo "']'>";
}
echo "<br>";
}
echo "<input type='submit' value='submit' name='submit'>";
echo "</form>";
}
?>
出于某种原因,每当我尝试更新表单时,我都会收到以下错误:
Warning: Invalid argument supplied for foreach() in C:\Users\Badsector\Desktop\USBWebserver v8.5\8.5\root\teszt\index.php on line 15
感谢你提前给予帮助,我现在感到困惑,我已经挣扎了好几个小时了!
答案 0 :(得分:0)
更改
foreach (isset($_POST['checkBox']) as $id => $value)
到
foreach ($_POST['checkBox'] as $id => $value)
isset()返回一个布尔值,foreach
需要一个数组。
你也很容易注入mysql。
答案 1 :(得分:0)
除了blake305所说的,你需要改变这个:
echo "<input type='checkbox' checked value='1' name='checkBox[]'>";
这会在$_POST['checkBox']
给你一个数组 - 不幸的是你的身份已经消失了。
如果有必要,您需要明确地获取每个框:
name='checkBox_<?php echo $q['id']; ?>
并且不要在名称后使用[]
,因为它在PHP中有一些含义:POST结果将是一个数组而不是一个字符串。
添加:这看起来很奇怪:name='checkBox['"; ?><?php echo $q['id']; ?><?php echo "']'>
不应该是name='checkBox[\"" . $q['id']. "\"]...