我有几天开始学习PHP,我有以下代码,相应地制作3个复选框和3个下拉列表(可能更多,这不是问题)。
我们的想法是创建一个具有多个条件的自定义MySQL查询字符串。下拉列表将包含数据库字段。用户将通过单击这些复选框并在下拉列表中设置值来决定将添加多少自定义条件。
单击选中的每个复选框的提交按钮后,如果设置了相应下拉框中的值,则将读取下拉列表中的值。只有在选中了ALL或仅选中FIRST复选框时,代码才能工作并返回正确的结果(来自下拉列表的值)。例如,如果检查第二个或第三个复选框并设置了下拉列表的值,则if语句将忽略它。显然,for循环中的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>";
}
}
?>
答案 0 :(得分: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">