【问题标题】:Updating MySQL table with PHP and checkboxes使用 PHP 和复选框更新 MySQL 表
【发布时间】:2013-06-12 21:23:47
【问题描述】:

我有一个名为 products 的表,其中包含:

idint、主键、自增 产品名称varchar 突出显示int(1 或 0)

所以,我希望突出显示的字段可以通过我的管理页面完全更新,所以每当我获得每个产品(或行)的数据时,我都会在产品名称旁边有一个复选框,指示它是否突出显示 (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

提前感谢您的帮助,我现在完全糊涂了,我已经挣扎了好几个小时了!

【问题讨论】:

    标签: php html mysql database checkbox


    【解决方案1】:

    除了 blake305 所说的,你还需要改变这个:

    echo "<input type='checkbox' checked value='1' name='checkBox[]'>";
    

    这将在$_POST['checkBox'] 中为您提供一个数组 - 不幸的是,您的 id 已经消失了。

    如果有必要,您需要显式获取每个框:

    name='checkBox_&lt;?php echo $q['id']; ?&gt;

    并且不要在名称后使用[],因为这在 PHP 中有一些含义:POST 结果将是一个数组而不是字符串。

    添加:这看起来也很奇怪:name='checkBox['"; ?&gt;&lt;?php echo $q['id']; ?&gt;&lt;?php echo "']'&gt; 那不应该是name='checkBox[\"" . $q['id']. "\"]...

    【讨论】:

    • 我可能很笨,但这些都不适合我。 :(也许我失败了......但你提到我应该明确地获取每个盒子。我不是只是通过为每个盒子获取一个ID来做到这一点,名称为='....$q['id'] ' 东西?对不起,我完全是初学者。
    • 假设 $id 为 1,从您的代码中,变量的名称为 checkbox[1]。您应该使用$_POST['checkbox[1]'] 检索它,因为这就是它的名称。由于 PHP 中 POST 变量名中 [] 的特殊内部处理,这将不起作用。只需在脚本开头添加 var_dump[$_POST] 并查看 $_POSTarray 中的内容。
    【解决方案2】:

    改变

    foreach (isset($_POST['checkBox']) as $id => $value)
    

    foreach ($_POST['checkBox'] as $id => $value)
    

    isset() 返回一个布尔值,foreach 需要一个数组。

    你也容易被mysql注入。

    【讨论】:

    • 它并没有真正解决我的问题。仍然收到警告,还有这个:注意:未定义索引:第 15 行 C:\Users\Badsector\Desktop\USBWebserver v8.5\8.5\root\teszt\index.php 中的复选框
    猜你喜欢
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 2014-11-14
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多