2013-04-09 100 views
1

我已更新我的代码。除了当我一次选择更多选择框时,它正在工作。如果我选择例如2个选择框同时更新它们,数据库更新它们都为0.当我分别更新它们时,一切都很顺利。保存mysql数据库中的复选框

这个代码现在:

<?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"; 
?> 
+0

我不认为''

+0

另外,您正在使用不推荐使用的'mysql_'函数。看看你的代码;有时你正在使用'mysql_real_escape_string',有时你忘记了。我强烈建议你切换到'mysqli_'或PDO - http://net.tutsplus.com/tutorials/php/pdo-vs-mysqli-which-should-you-use/ – 2013-04-09 11:42:34

+0

现在有它:'““'但它没有任何区别。 – user2237168 2013-04-09 11:46:53

回答

-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>";** 
+0

这里的主要问题是使用'status'作为mysql表的列名! – stUrb 2013-04-09 12:06:02

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>"; 
+0

Tnx为您的帮助stub。我改变了表名并使用了你的代码,不幸的是没有任何结果。我仍然有同样的问题。它也不会从数据库中获取值,以填充复选框。 – user2237168 2013-04-09 12:24:34

+0

看我的编辑。我改变了'foreach'循环来表示'while'语句。 – stUrb 2013-04-09 12:34:56

+0

我在编辑之前将它更改为while语句,但它也不起作用。好的; – user2237168 2013-04-09 12:55:59