2013-04-09 19 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

相關問題