2012-04-26 36 views
0

你好,我有以下問題:如何處理與報表複選框和呼應他們

我想創建一個搜索引擎的過濾器。我有一些特定搜索條件的輸入字段,並在各自的複選框旁邊。所以,看起來像:

inputfield一個:[_ ____]過濾器用於:開/關:[]

inputfield B:_ ____]對於b濾波器:上開/關:[]

inputfield C:[_ ____]爲C濾波器:開/關:[]

的代碼結構如下:

首先檢查inputfield是否爲空,並選中複選框。如果選中,提交後將取消選中。反過來,如果只是輸入字段被填充並且複選框未被選中,它也會出錯,出現錯誤並且過濾器無法工作。所以我使用每個濾波器的自己的錯誤陣列等(the name and value of the first checkbox is name="filter_a" value="1")

... 
$checkbox_filter_a = $db->real_escape_string(htmlentities(trim($_POST['filter_a']))); 
... 
$filter_a = (!empty($checkbox_filter_a)) ? 1 : 0; 
... 
$errors_a = array(); 
if ($filter_a == 1){ 
    if (empty($input_a)){ 
     $errors_a[] = 'the filter needs some input'; 
    } 
} 

if (!empty($input_a)){ 
    if ($filter_a == 0){ 
     $errors_a[] = 'filter is not activated'; 
    } 
} 

如果沒有錯誤,這兩個標準都滿足的過濾器或者是上或沒有。 所以邏輯背後的是,當加載頁面時,複選框必須被取消選中。在關於過濾的標準之後它是。

要在下面的條件下顯示已選中或未選中狀態,應在提交後檢查狀態或未選中狀態。爲此,我爲每個過濾器代碼(各自checkbox_filter_b,...)的inputfield後的複選框的一部分:

<?php 
if (checkbox_filter_a == 0) { 
    echo '<input type="checkbox" name="checkbox_filter_a" value="1" checked/>'; 
}else { 
    echo '<input type="checkbox" name="checkbox_filter_a" value="1"/>'; 
} 
?> 

還有什麼不滿足的。這是因爲以下問題:

當加載頁面時,它會顯示所有複選框未選中。如果我嘗試因沒有填充輸入而導致錯誤,或者只檢查其中一個過濾器的複選框,在提交所有其他複選框後會自動檢查。

所以如果有人能夠幫助我,我真的很感激。非常感謝。

回答

1

也許你可以這樣做,通過在腳本開始處爲複選框和值定義默認值。然後,如果有或沒有設置,則使用POST的值更改它們。

<?php 
//Setup Variable Defaults, if POST dont change them then there no complicated ifelse's 
$filter_a=null; 
$checkbox_filter_a='<input type="checkbox" name="checkbox_filter_a" value="1"/>'; 
$filter_b=null; 
$checkbox_filter_b='<input type="checkbox" name="checkbox_filter_b" value="1"/>'; 
$filter_c=null; 
$checkbox_filter_c='<input type="checkbox" name="checkbox_filter_c" value="1"/>'; 

//Check for post 
if($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    //If the check box is not checked checkbox_filter_a will fail this part 
    // so $filter_a will still be null 
    if(isset($_POST['filter_a']) && isset($_POST['checkbox_filter_a'])){ 
     $filter_a = trim($_POST['filter_a']); 
     $checkbox_filter_a ='<input type="checkbox" name="checkbox_filter_a" value="1" checked/>'; 
    } 

    if(isset($_POST['filter_b']) && isset($_POST['checkbox_filter_b'])){ 
     $filter_b = trim($_POST['filter_b']); 
     $checkbox_filter_b = '<input type="checkbox" name="checkbox_filter_b" value="1" checked/>'; 
    } 

    if(isset($_POST['filter_c']) && isset($_POST['checkbox_filter_c'])){ 
     $filter_c = trim($_POST['filter_c']); 
     $checkbox_filter_c = '<input type="checkbox" name="checkbox_filter_c" value="1" checked/>'; 
    } 

} 

echo <<<FORM 
<form method="POST" action=""> 
    <p>Inputfield a: <input type="text" name="filter_a" value="$filter_a" size="20"> filter for a: on/off:$checkbox_filter_a</p> 
    <p>Inputfield b: <input type="text" name="filter_b" value="$filter_b" size="20"> filter for b: on/off:$checkbox_filter_b</p> 
    <p>Inputfield c: <input type="text" name="filter_c" value="$filter_c" size="20"> filter for c: on/off:$checkbox_filter_c</p> 
    <p><input type="submit" value="Submit"></p> 
</form> 
FORM; 

//now here all you have to do is see if these values are not null and build your query 
echo $filter_a.'<br />'; 
echo $filter_b.'<br />'; 
echo $filter_c.'<br />'; 
?> 
+0

你好,謝謝你回答我剛剛測試過,但它有問題,呼應複選框本身。他們不會被顯示。 – bonny 2012-04-26 08:11:04

+0

@bonny我不知道你的意思,看到它在這裏工作:http://codepad.org/cFjKBvKh – 2012-04-26 08:58:35

+0

你好,對不起。今天我有點bu isy。好的,我發現了錯誤。在html中仍然有舊的代碼。另一件我有問題的是設置每個錯誤數組:我使用:if(($ input_a === null)&&(isset($ _ POST ['checkbox_filter_a']))){ \t \t $ errors_1 [] =「過濾器需要輸入」; \t} else if(($ input_a!== null)&&(!isset($ _ POST ['checkbox_filter_a']))){ \t \t $ errors_1 [] =「過濾器未被激活」; \t} – bonny 2012-04-26 12:54:52