2011-02-17 93 views
0

繼續從previous post,我試圖更新數據庫字段與1或0,具體取決於是否複選框被選中或不。PHP/MySQL更新複選框選擇到數據庫2

它似乎工作時複選框被選中,但沒有時爲空。

任何想法如何解決這個問題?下面的代碼。非常感謝,S.

這裏是我的表單中的代碼:

$query = "SELECT * FROM istable WHERE assocProp = '".$_POST['id']."'"; 
    $result = mysql_query($query);    
    while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
     {           
     echo '<li>       
       <label for="changePP'.$row['id'].'"><input id="changePP'.$row['id'].'" type="checkbox" name="showPP_ids[]" value="'.$row['id'].'"'.($row['showPP']=='1' ? ' checked="checked"':NULL).' /> Display</label> 
       </li>'. PHP_EOL;           
     } 

而且PHP程序代碼(更新):

$newQuery=mysql_query("select * from istable where assocProp = '".$_POST['id']."'"); 
    $newResult=mysql_fetch_array($newQuery);  

    foreach ($newResult as $showPP_ids) { 
     $val = (int) isset($_POST['showPP_ids']); 
     mysql_query("UPDATE istable SET showPP = $val WHERE id = ".mysql_real_escape_string($showPP_ids)); 
    } 

回答

1

我不認爲代碼可以以這種方式工作你...的事情是,如果你不勾選頁面上的複選框,其值不能與表單提交的數據,因此,你不能設置showPP到在你的數據庫

我心裏有兩個可能的解決方案:

如果所有RECO RDS 以外勾選頁面上的那些應被設置爲0,你可以這樣說:

$values = mysql_real_escape_string(implode(',', $showPP_ids)); 
mysql_query("UPDATE istable SET showPP = 1 WHERE id IN('$values')"); 
mysql_query("UPDATE istable SET showPP = 0 WHERE id NOT IN('$values')"); 

另一個解決辦法是將所有的ID存儲在隱藏字段(S)與HTML表單的頁面並檢查它們中你要在$ showPP_ids陣列 - 那些將被設置爲1 - 和他們是從變量的缺失 - 那些將被設置爲0

$query = "SELECT * FROM istable WHERE assocProp = '".$_POST['id']."'"; 
$result = mysql_query($query);    
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    echo '<li>       
      <label for="changePP'.$row['id'].'"> 
       <input id="changePP'.$row['id'].'" type="checkbox" name="showPP_ids[]" value="'.$row['id'].'"'.($row['showPP']=='1' ? ' checked="checked"':NULL).' /> Display 
      </label> 
      <input type="hidden" name="original_ids[]" value="'.$row['id'].'" /> 
      </li>'. PHP_EOL; 
} 

...和PHP中的f ile(根本不需要MySQL SELECT):

foreach ($_POST['original_ids'] as $id) { 
    if (isset($_POST['showPP_ids']) && in_array($id, $_POST['showPP_ids'])) { 
     $val = 1; 
    } else { 
     $val = 0; 
    } 
    mysql_query("UPDATE istable SET showPP = $val WHERE id = ".mysql_real_escape_string($id)); 
} 
+0

嗨,感謝您的回覆。第一個選項效果很好,但會影響我所有的數據庫條目,而任何時候只有一個選項可能在頁面上。第二個選項我似乎無法正常工作... S – ss888 2011-02-17 12:08:41

3
$val = (int) isset($_POST['showPP_ids']); 

是一個數組。它應該是

foreach ($newResult as $showPP_ids) { 
$val = (int) isset($_POST['showPP_ids'][$showPP_ids]); 

我猜

0

您正在測試是否數組$ _ POST [ 'showPP_ids']時,它總是會。

我覺得你的測試應該是:

$val = (int) isset($_POST['showPP_ids'][$showPP_ids]);