在mysql数据库中保存复选框

时间:2013-04-09 11:37:33

标签: php mysql checkbox

我已经更新了我的代码。除非我一次选择更多选择框,否则它正在工作。如果我同时选择2个选择框并且我更新它们,数据库将它们都更新为0.当我单独更新它们时,一切都很顺利。

现在这个代码:

<?php
include "header.php";

if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    if(isset($_POST['aan']))
    {
        $doSave = implode(',',$_POST['aan']);
        mysql_query("UPDATE Modules SET 
            aan = '".mysql_real_escape_string('1')."'
            WHERE module_name IN ('".mysql_real_escape_string($doSave)."')") or die (mysql_error());

        mysql_query("UPDATE Modules SET 
            aan = '".mysql_real_escape_string('0')."'
            WHERE module_name NOT IN ('".mysql_real_escape_string($doSave)."')") or die (mysql_error());

    }
    elseif(!isset($_POST['aan']))
    {
        mysql_query("UPDATE Modules SET 
            aan = '".mysql_real_escape_string('0')."'
            WHERE module_name NOT IN ('".mysql_real_escape_string($doSave)."')") or die (mysql_error());
    }

    echo $doSave;

}

echo "<h1>Module beheer</h1>";

$getmodules = mysql_query("SELECT * FROM Modules") or die(mysql_error());

echo "<form id='module' method='post'>";
   while($modules = mysql_fetch_array($getmodules))
   {
        echo "<label>".$modules['module_name']."</label>";
        echo "<input type='hidden' name='module_name' value='".$modules['module_name']."' />";
        if($modules['aan'] == 1) 
        { 
            $set_checked = "CHECKED";
        }
        else
        {
            $set_checked = "";
        }

        echo "<input type='checkbox' name='aan[]' value=".$modules['module_name']." ".$set_checked." /><br />";
    }
   echo "<input type='submit' id='modulesubmit' name='modulesubmit' value='Opslaan'>";

echo "</form>";

include "footer.php";
?>

2 个答案:

答案 0 :(得分:0)

请开始使用PDO访问数据库! mysql_ *函数已弃用,不再维护!

status是MySQL中保留的关键字;使用它作为列名称不是很聪明。您可以通过使用backtiks避免将其用作关键字。但为了避免混淆,我会采取另一个列名称。让我们说:aan

让我们稍微清理你的代码。

你有很多行做同样的'逻辑';每当你在代码中多次写东西时,就会出现问题。当statu字段本身已经在模块行中时,为什么要单独查询状态?

那么同样适用于更新声明?您只想将状态字段更新为1 | 0。

if($_POST){
   if(intval($_POST['aan']) == 1 || intval($_POST['aan']) == 0){
     $aan = intval($_POST['aan']);
   }else{
     $aan = 0; //what if it's not 1|0
   }
   mysql_query("UPDATE Modules SET 
            aan = '".mysql_real_escape_string($aan)."'
            WHERE module_name = '".mysql_real_escape_string($_POST['module_name'])."'") or die (mysql_error());

)

    echo "<h1>Module beheer</h1>";

    $getmodules = mysql_query("SELECT * FROM Modules") or die(mysql_error());


    echo "<form id='module' method='post' action='*****add action parameter*****'>";
       while($m = mysql_fetch_array($getmodules)){
           {
           echo "<label name='module_name'>".$m['module_name']."</label>";
           echo "<input type='checkbox' name='aan' value='".$m['aan']."'>";
           }

       echo "<input type='submit' id='modulesubmit' name='modulesubmit' value='Opslaan'>";

    echo "</form>";

答案 1 :(得分:-1)

您在提交表单时尝试访问标签值,无法按照您的定义访问标签值。  您必须将代码更改为:

mysql_query("UPDATE Modules SET 
            Status = '".mysql_real_escape_string('1')."'
            WHERE module_name = '".mysql_real_escape_string($_POST['uitgeschakeld'])."'") or die (mysql_error());
            echo'bhal';

并在以下行中进行更改 -

**echo "<input type='checkbox' id='ingeschakeld' name='ingeschakeld' value='.$fetchmodules['module_name'].' checked></br>";**