1

我已经更新了我的代码。除非我一次选择更多选择框,否则它可以工作。例如,如果我同时选择 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";
?>
4

2 回答 2

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>";
于 2013-04-09T11:48:36.140 回答
-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>";**
于 2013-04-09T11:48:01.360 回答