【问题标题】:insert total ammount of selected checkbox values in db在数据库中插入所选复选框值的总量
【发布时间】:2012-12-20 11:05:58
【问题描述】:

我对 PHP 很陌生,并且一直在尝试将复选框值的总数存储在数据库中,但出于某种原因(可能缺乏逻辑)。它不起作用:

<?php
        mysql_connect( 'localhost',  'root', '')or die("cannot connect");
        mysql_select_db('webgame')or die("cannot select DB");

        $perms = array(
                    'writePost' => 1,
                    'readPost' => 2,
                    'deletePost' => 4,
                    'addUser' => 8,
                    'deleteUser' => 16,
        );



        echo "<form method='post' action='v3.php'>";
        foreach($perms as $key => $value)
        {
            echo "<input type='checkbox' value='".$value."'>\n";
            echo "<label for='".$key."'>".ucfirst($key)."</label><br>\n";
        }
            echo "<input type='text' name='name'>";
            echo "<input type='submit' name='submit'>";

        if(isset($_POST['submit']))
        {
            $total = 0; 

            foreach ($_POST as $key => $value) 
            {
                if( isset($perms[ $value ]) )
                    $total += $perms[ $value ]; 
            }



            mysql_query("INSERT INTO perms (name, rights) VALUES(name, $total)") or die(mysql_error());
        }




    ?>

【问题讨论】:

标签: php mysql database checkbox foreach


【解决方案1】:

尝试像这样更改您的复选框标记:

 foreach($perms as $key => $value)
    {
       echo "<input type='checkbox' value='".$value."' name='checkbox[]'>\n";
        echo "<label for='".$key."'>".ucfirst($key)."</label><br>\n";
    }

然后像这样访问它:

  if(isset($_POST['submit']))
    {
        $total = 0; 

        foreach ($_POST['checkbox'] as $checkbox) 
        {
                $total += $checkbox; 

        }


        echo $total;
        mysql_query("INSERT INTO perms (name, rights) VALUES(name, $total)") or die(mysql_error());
    }

【讨论】:

  • 将所有选中复选框的值相加,你知道这是怎么做的吗?
  • 得到这些错误:未定义的索引:复选框第 27 行和为 foreach() 提供的无效参数也在第 27 行
  • 您确定您使用的是上述答案中的代码吗?我建议使用“复选框”而不是“复选框”作为 $_POST 中的变量名和索引。基本上,您必须确保您用作表单元素名称的任何内容与您以后在 $_POST[''] 中检索它所使用的名称相匹配
【解决方案2】:

我发现了一些问题。有些会导致比其他更多的问题。

(1) 您的复选框中缺少name 属性。 (2) 您缺少结束 &lt;/form&gt; 标记。 (3) 你的查询可能失败,因为你有VALUES(name, $total),我假设name 是一个字符串,所以它需要用引号VALUES('name', $total),或者更可能是VALUES('$name', $total)

另外,我不明白您为什么在初始页面加载时连接到数据库。我会把它移到你的isset($_POST['submit']) 中。

试试这个 -

<?php
    $perms = array(
                'writePost' => 1,
                'readPost' => 2,
                'deletePost' => 4,
                'addUser' => 8,
                'deleteUser' => 16,
    );

    echo "<form method='post' action='v3.php'>";
    foreach($perms as $key => $value)
    {
        echo "<input type='checkbox' name='checkboxes[]' value='".$value."'>\n";  
        echo "<label for='".$key."'>".ucfirst($key)."</label><br>\n";
    }
        echo "<input type='text' name='name'>";
        echo "<input type='submit' name='submit'>";
        echo "</form>";

    if(isset($_POST['submit']))
    {
       mysql_connect( 'localhost',  'root', '')or die("cannot connect");
       mysql_select_db('webgame')or die("cannot select DB");

        $total = 0; 
        $name  = mysql_real_escape_string($_POST['name']); 
        foreach ($_POST['checkboxes'] as $keys=>$vals)
        {
                $total += $vals;
        }

    mysql_query("INSERT INTO perms (name, rights) VALUES('$name', $total)") or die(mysql_error()); 
   }
?>

此外,mysql_* 扩展自 PHP 5.5.0 起已弃用,并将在未来删除。相反,应该使用MySQLiPDO_MySQL 扩展名。另请参阅MySQL: choosing an API guiderelated FAQ 了解更多信息。

【讨论】:

    猜你喜欢
    • 2017-07-17
    • 2010-09-19
    • 2016-11-22
    • 1970-01-01
    • 2014-01-23
    相关资源
    最近更新 更多