前端代码
<form action="search.php" method="POST">
<ul data-role="listview" data-filter="true" data-inset="true" data-filter- reveal="true" data-filter-placeholder="Search by Ingredients">
<!-- 1-10 -->
<li>
<input type="checkbox" name="search" id="ing1" class="custom" value="Passion Fruit"/>
<label for="ing1">Passion Fruit</label>
</li>
<li>
<input type="checkbox" name="search" id="ing2" class="custom" value="Banana"/>
<label for="ing2">Banana</label>
</li>
<li>
<input type="checkbox" name="search" id="ing3" class="custom" value="Mango"/>
<label for="ing3">Mango</label>
</li>
<li>
<input type="checkbox" name="search" id="ing4" class="custom" value="Orange Juice"/>
<label for="ing4">Orange Juice</label>
</li>
<li>
<input type="checkbox" name="search" id="ing5" class="custom" value="Ice"/>
<label for="ing5">Ice</label>
</li>
<li>
<input type="checkbox" name="search" id="ing6" class="custom" value="Sausages"/>
<label for="ing6">Sausages</label>
</li>
<li>
<input type="checkbox" name="search" id="ing7" class="custom" value="Bacon"/>
<label for="ing7">Bacon</label>
</li>
<li>
<input type="checkbox" name="search" id="ing8" class="custom" value="Eggs"/>
<label for="ing8">Eggs</label>
</li>
<li>
<input type="checkbox" name="search" id="ing9" class="custom" value="Beans"/>
<label for="ing9">Beans</label>
</li>
<li>
<input type="checkbox" name="search" id="ing10" class="custom" value="Milk"/>
<label for="ing10">Milk</label>
</li>
</ul>
<br />
<input type="submit" action="search.php" value="Search For Recipes">
</form>
PHP代码
if (isset($_POST['search'])) {
$choices = $_POST["search"];
$count = count($choices);
echo "<h1>" . $count . "</h1>";
echo "<h1>" . $choices . "</h1>";
}
当我检查一些盒子时,没有任何东西被返回,所以这表明我没有正确选择复选框:S HELPP !!!!我正在制作一个网络应用程序搜索列表,因此这个鳕鱼
答案 0 :(得分:4)
复选框不是radiobuttons。他们的名字必须不同,否则你只返回最后一个!
如果您想全部检索它们,则必须将每个复选框名称从search
更改为search[]
。这样,您就可以将它们全部检索到一个数组中,位于$_REQUEST['search']
(*)
相反,如果您只想选择一个选项,请将输入类型从复选框更改为单选按钮并保留当前名称。
(*)$_REQUEST
是一个超全局变量,它包含您在$_POST
或$_GET
中找到的相同值。这通常是编写灵活脚本的最佳选择(您可能需要更改表单的方法,并且使用$_REQUEST
您不必在后端重写整个PHP脚本。
答案 1 :(得分:2)
而不是name="search"
您可以使用name="search[]"
,这样,当在PHP中填充$_POST
时,它会创建一个值数组。你现在拥有的只是其中一个元素,因为它们的名字都是一样的。
答案 2 :(得分:0)
我认为您想要做的是将结果放在数组中,因为我可以看到您正在尝试执行:
$choices = $_POST["search"];
$count = count($choices);
如果您希望这样做,则必须更改输入元素的name
属性。
尝试以这种格式给他们一个名字:
<input type="checkbox" id="ing1" name="search[]" .../>
<input type="checkbox" id="ing2" name="search[]" .../>
<input type="checkbox" id="ing3" name="search[]" .../>
我很确定您面临的问题是因为多个元素共享相同的名称,因此它们的值被覆盖。
如果你希望你的结果在一个关联数组中,让你可以单独和按名称访问每个元素,你也可以在name属性中调整id属性的值 - 如下所示:
<input type="checkbox" id="ing1" name="search[ing1]" .../>
<input type="checkbox" id="ing2" name="search[ing2]" .../>
<input type="checkbox" id="ing3" name="search[ing3]" .../>
现在,您将能够访问以下元素:
$_POST["search"]['ing1']
$_POST["search"]['ing2']
...
答案 3 :(得分:0)
尝试命名所有复选框:
<input type="checkbox" name="search[]" ...
进入php
if (isset($_POST['search'])) {
print_r($_POST['search']);die();
}
答案 4 :(得分:0)
使用“search []”更改“搜索”复选框的名称,同时从提交按钮中删除操作属性。
答案 5 :(得分:0)
而不是name="search"
,您需要编写name="search[]"
,以便PHP可以从数组中获取值。
index.php
<form action="search.php" method="POST">
<ul data-role="listview" data-filter="true" data-inset="true" data-filter- reveal="true" data-filter-placeholder="Search by Ingredients">
<!-- 1-10 -->
<li>
<input type="checkbox" name="search[]" id="ing1" class="custom" value="Passion Fruit"/>
<label for="ing1">Passion Fruit</label>
</li>
<li>
<input type="checkbox" name="search[]" id="ing2" class="custom" value="Banana"/>
<label for="ing2">Banana</label>
</li>
<li>
<input type="checkbox" name="search[]" id="ing3" class="custom" value="Mango"/>
<label for="ing3">Mango</label>
</li>
<li>
<input type="checkbox" name="search[]" id="ing4" class="custom" value="Orange Juice"/>
<label for="ing4">Orange Juice</label>
</li>
<li>
<input type="checkbox" name="search[]" id="ing5" class="custom" value="Ice"/>
<label for="ing5">Ice</label>
</li>
<li>
<input type="checkbox" name="search[]" id="ing6" class="custom" value="Sausages"/>
<label for="ing6">Sausages</label>
</li>
<li>
<input type="checkbox" name="search[]" id="ing7" class="custom" value="Bacon"/>
<label for="ing7">Bacon</label>
</li>
<li>
<input type="checkbox" name="search[]" id="ing8" class="custom" value="Eggs"/>
<label for="ing8">Eggs</label>
</li>
<li>
<input type="checkbox" name="search[]" id="ing9" class="custom" value="Beans"/>
<label for="ing9">Beans</label>
</li>
<li>
<input type="checkbox" name="search[]" id="ing10" class="custom" value="Milk"/>
<label for="ing10">Milk</label>
</li>
</ul>
<br />
<input type="submit" value="Search For Recipes">
</form>
的search.php
if (isset($_POST['search'])) {
$choices = "";
$count = count($_POST["search"]);
for($i=0;$i<$count;$i++) {
$choices .= $_POST["search"][$i] . " ";
}
echo "<h1>" . $count . "</h1>";
echo "<h1>" . $choices . "</h1>";
}
答案 6 :(得分:0)
已经给出了将搜索元素的名称更改为搜索[]的答案,这当然是正确的,但也请看看你的php代码:
if (isset($_POST['search'])) {
$choices = $_POST["search"];
$count = count($choices);
echo "<h1>" . $count . "</h1>";
echo "<h1>" . $choices . "</h1>";
}
我相信你想要的是列出被选中的项目,然后你可以像这样在foreach循环中迭代选择:注意我使用的是H2而不是H1,因为在html页面上使用几个H1不会验证正确。 (当然你可以span
或其他东西,这只是一个例子)
if (isset($_POST['search'])) {
$choices = $_POST["search"];
$count = count($choices);
echo "<h1>" . $count . "</h1>";
foreach($choices as $choice) {
echo "<h2>" . $choice . "</h2>";
}
}
不是像我那样制作复选框,而是将所有项目放入数组中,然后进行迭代以创建<li>
- 标记及其内容。 (因为它更灵活,你不必一遍又一遍地重写同样的东西)
代码看起来像这样:
<form action="search.php" method="POST">
<ul data-role="listview" data-filter="true" data-inset="true" data-filter- reveal="true" data-filter-placeholder="Search by Ingredients">
<!-- 1-10 -->
<?php
$ingredientsArray = array('Passion Fruit', 'Banana', 'Mango', 'Orange Juice', 'Ice', 'Sausages', 'Bacon', 'Eggs', 'Beans', 'Milk');
$cnt = 0;
foreach($ingredientsArray as $ingredient) {
$cnt++;
echo '<li>';
echo '<input type="checkbox" name="search[]" id="ing' . $cnt . '" class="custom" value="' . $ingredient. '"/>';
echo '<label for="ing' . $cnt . '">' . $ingredient. '</label>';
echo '</li>';
}
?>
</ul>
<br />
<input type="submit" value="Search For Recipes">
</form>