2014-12-19 34 views
-1

我試圖讓那些未選中的複選框。在這一刻,我只是得到那些被檢查。這是我的代碼。該值將關於這一點我不想離開它空表中插入,這就是爲什麼我需要得到這些複選框選中,這樣我就可以對選中插入1託運或0:檢查是否未選中複選框。兩種狀態需要(選中和未選中)

<?php 

    if (!empty($_POST['menu'])) { 
    # code... 
      foreach ($_POST['menu'] as $value) { 
    # code... 
       echo "<p>ID Checkbox checked: ".$value; 
      } 
    } 

    ?> 

一我需要獲得兩種狀態的原因:選中或取消選中是因爲我不想將數據庫字段留空。

+0

的可能重複[如何獲得價值當表單發佈時,複選框元素未勾選複選框?](http:// stackoverflow。COM /問題/ 19239536 /如何-獲得價值換選中-複選框功能於複選框元素 - 當外形貼) –

回答

2

未經檢查的複選框不會被髮送。如果你知道哪些字段應該在那裏,你可能不得不手動列出它們。

1

關於複選框的奇妙之處在於,如果您沒有選中某個複選框並提交表單,則不會向服務器發送任何消息。取此複選框例如:

<input type="checkbox" name="test"/> 

如果你離開它選中,尋找$_POST['test']它會報錯了,因爲它沒有設置。

因此,嘗試這樣做:

if(!isset($_POST['name_of_checkbox'])){ 
    // Fill database with some empty value. 
} else { 
    // Do what you need to do for checked value. 
} 

希望給你一些見解!

+0

非常感謝您抽出時間來回答。你給我的解決方案的問題是,我真正需要的複選框unckecked這樣的名字我可以插入一個0那場這樣的:$ inserta_menus =請求mysql_query(「INSERT INTO menus_usuarios(id_menu,id_usuario,埃斯塔)值( '$ id_menu','$ id_user [0]','$ activo')「);凡id_menu是$ _ POST [「菜單」]變量 –

+0

啊我理解的名稱。在這種情況下,請看Artur的答案。使用模仿複選框的狀態隱藏元件和發送該到'$ _POST []'陣列代替複選框是一個很好的解決方案。 –

+0

好吧,我會嘗試它!非常感謝 –

0
<input type="hidden" name="checkbox[8]" value="0"> 
<input type="checkbox" name="checkbox[8]" value="8"> 

這將是獲得0張貼的方法之一。重要的部分是名稱是相同的。所以如果複選框被選中,它的值將覆蓋隱藏的輸入值。

1

說,如果它們被命名爲相同的,你知道複選框的數量,您可以使用一個for循環:

if (!empty($_POST['menu'])) { 
    for ($i=0; $i < 10; $i++) { 
     if(isset($_POST['menu'][$i])){ 
      echo "Checkbox checked: " . $_POST['menu'][$i]; 
     }else{ 
      echo "Checbox uncheck #" . $i; 
     } 
    } 
} 

你可以把名字中的數組,然後遍歷:

$checkboxes = array('cbx1', 'cbx2', 'cbx3'); 
foreach ($checkboxes as $checkbox) { 
    if (isset($_POST[$checkbox])) { 
     echo "<p>ID Checkbox checked: " . $_POST[$checkbox]; 
    } else { 
     echo "Checbox uncheck :" . $checkbox; 
    } 
} 

所以是很多方式來實現這一點,這取決於情況。 檢查@Artur方法以及客戶端解決方案。

+0

你好@meda爲你分享知識。我嘗試過你的第二種方式,但這不起作用。感謝您分享 –

+0

@Alejo_Blue如果你告訴我沒有工作,這將是有益的,這樣我可以回去給你一個解決方案 – meda

+0

看我甚至爲你https://eval.in/236740 @Alejo_Blue – meda

0

謝謝大家的時間,並且非常友好地回答我的問題。我需要這些複選框未選中和檢查的原因是因爲我有一個動態菜單,所以我將菜單分配給用戶。以下是我與我的一位朋友在工作中找到的解決方案:

複選框的代碼。我查詢所有可用的菜單上我的表菜單,這樣我會告訴管理員所有的菜單可獲取這樣的話,他可以選擇他會分配給用戶哪些菜單:

´ 
    <table> 
    <tr> 
    <td>Menus a asignar:</td> 
    <td> 
    <?php 
    $query_menus_checkbox = mysql_query("SELECT id_menu, nombre_menu FROM menus"); 
    while ($checkbox_mostrar = mysql_fetch_row($query_menus_checkbox)) { 
    # code... 
    ?> 
    <input type="checkbox" name="menus[<?php echo $checkbox_mostrar[0]; ?>]" value="<?php echo  $checkbox_mostrar[0] ?>"><?php echo $checkbox_mostrar[1] ?> 
    <p></p> 
    <?php 
    } 
    ?> 
    </td> 
    </tr> 
    </table> 

´ 

當年這裏是處理代碼複選框被選中或不上我的表中插入(id_user沒有顯示,但我已經從圖中未顯示,所以你要查詢自己另一個查詢獲取):

´ 
$res=mysql_query("select id_menu from menus"); 
        $arid=array(); 
        while($xd=mysql_fetch_assoc($res)){ 
         $arid[]=$xd['id_menu']; 
        } 

        for($i=0;$i<count($arid);$i++){ 
         $id_menu=$arid[$i]; 
         $activo=(isset($_POST['menus'][$id_menu]) && $_POST['menus'][$id_menu]!="")?1:0; 
         $inserta_menus = mysql_query("INSERT INTO menus_usuarios(id_menu, id_usuario, estado) values ('$id_menu', '$id_user[0]', '$activo')"); 
        } 
´ 
相關問題