2011-10-08 36 views
0

我在我的HTML表中有一個複選框字段。該表是動態生成的,並且該字段被存儲在數組中,如下所示:發送未選中的複選框到PHP

<input type="checkbox" name="checked[]" value="1">

在PHP,我將所述檢查行到表中,但是我還需要顯示具有行在提交後沒有被檢查給用戶,但是沒有辦法知道哪些行沒有被傳遞,因爲checked[]未被檢查的複選框沒有被提交。

我想實現的是用戶顯示一個包含多行的表格,他檢查他想要添加到數據庫的行。表單提交後,頁面將顯示哪些行被插入,哪些行未被用戶選擇。未經檢查的行不需要插入到任何數據庫中,但應在提交後立即向用戶顯示,以便他可以打印該頁面用於記錄目的。

解決此問題的最佳方法是什麼?

+0

用ajax提交表單?這樣用戶即使在提交表單後也可以保持在同一頁面上。 –

+0

@Damchey如果在任何情況下你想在javascript中這樣做,你可以這樣做來取消選中複選框,然後在提交之前檢查它們的狀態。所以,如果你使用任何選擇器引擎,你會附加事件來提交事件, $(「input [type = checkbox]:not(:checked)」)。each(function(){//檢查這些複選框})' – Deeptechtons

回答

0

使用3個數組,其中1個包含您要發送的選項,一個包含來自用戶的響應和一個包含差異的空白。兩者之間的差異會讓你獲得未經檢查的領域。

<?php 

$myOptions = array('option1', 'option2', 'option3'); 
$userArray = array('option2'); // This is your $_POST['checkboxes'] array 
$leftOptions = array(); 

foreach ($myOptions as $value){ 
    if (!in_array($value, $userArray)){ 
    $leftOptions[] = $value; 
    } 
} 

?> 

注意:你可以用array_diff替換foreach,就像在評論中提到的@deceze一樣。

+0

或簡單地'array_diff'。 – deceze

+0

@dAngelov我如何獲得option1?行數將動態生成,並且每次都會有所不同。如果用戶沒有檢查它,該行根本不會被傳遞給PHP腳本。 – WebNovice

+0

@Damchey,你最初生成的選項,所以只是重新創建相同的集合。 – dAngelov

0

因爲您首先創建了chekbox,因此您知道複選框的總數。

總複選框減選中複選框會給你你想要的,即未經檢查的框。

unchecked boxes = total checkboxes - checked checkboxes ;