2016-07-25 135 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来计数,但说它已被记录 –