$ _POST未正确设置

时间:2013-05-03 08:59:10

标签: php post

前端代码

    <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 !!!!我正在制作一个网络应用程序搜索列表,因此这个鳕鱼

7 个答案:

答案 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>