2016-07-25 134 views
2

我有幾天開始學習PHP,並且我有下面的代碼,它會相應地生成3個複選框和3個下拉列表(可能更多,這不是問題)。FOR循環內的IF語句返回錯誤結果

這個想法是一個自定義MySQL查詢字符串將創建多個條件。下拉列表將包含數據庫字段。用戶將通過單擊這些複選框並在下拉列表中設置一個值來決定添加多少個自定義條件。

點擊每個選中複選框的提交按鈕後,如果設置了相應下拉框中的值,則將讀取下拉列表中的值。該代碼工作並僅在所有或僅檢查FIRST複選框時返回正確的結果(來自下拉列表的值)。例如,如果第二個或第三個複選框被選中並且設置了下拉列表的值,那麼if語句會忽略它。很明顯if語句中的if語句有問題(在特定的& &條件中),但是可以修復它嗎?另外,如果我在if語句中只有一個條件,結果是正確的!

<?php 
    echo <<<_query 
    <form action="check_array.php" method="post"> 
    query1<input type="checkbox" name="query[]" value="query0"> 
    query2<input type="checkbox" name="query[]" value="query1"> 
    query3<input type="checkbox" name="query[]" value="query2"> 

    fields0 
    <select name="fields[]"> 
    <option selected value="null">Select field</option> 
    <option value="author">author</option> 
    <option value="title">title</option> 
    <option value="category">category</option> 
    </select> 

    fields1 
    <select name="fields[]"> 
    <option selected value="null">Select field</option> 
    <option value="author">author</option> 
    <option value="title">title</option> 
    <option value="category">category</option> 
    </select> 

    fields2 
    <select name="fields[]"> 
    <option selected value="null">Select field</option> 
    <option value="author">author</option> 
    <option value="title">title</option> 
    <option value="category">category</option></form> 
    </select> 

    <input type="submit" name="submit" value="check"></form> 
    _query; 

    for ($i=0;$i<3;++$i) 
    { 
     if (isset($_POST["query"][$i]) && $_POST["fields"][$i] !="null") 
     { 
      echo $_POST["query"][$i] ."<br>".$_POST["fields"][$i]."<br>"; 
     } 
    }  
?> 

回答

1

瀏覽器不爲未被選中,因此爲query[]陣列索引被揭去有選擇複選框的序列中的間隙的任何時間複選框提交任何東西。你可以通過爲你的複選框指定數組索引來解決這個問題。

變化

query1<input type="checkbox" name="query[]" value="query0"> 
query2<input type="checkbox" name="query[]" value="query1"> 
query3<input type="checkbox" name="query[]" value="query2"> 

query1<input type="checkbox" name="query[0]" value="query0"> 
query2<input type="checkbox" name="query[1]" value="query1"> 
query3<input type="checkbox" name="query[2]" value="query2"> 
+0

亞薩:非常感謝你的快速和準確的響應。這解決了這個問題!很高興知道。 –

+1

@georgepgs不客氣。請不要忘記通過點擊答案左側的複選標記將此答案標記爲正確。此外,我也會讚賞upvote。 – Asaph

+0

我的聲望仍然很低,因爲upvote來計數,但說它已被記錄 –