【问题标题】:$_POST is not being set correctly$_POST 设置不正确
【发布时间】:2013-05-03 17:48:50
【问题描述】:

前端代码

    <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!!!!我正在制作一个 Web 应用程序可搜索列表,因此为此提供了 cod

【问题讨论】:

    标签: php post


    【解决方案1】:

    复选框不是单选按钮。他们的名字必须不同,否则你只会返回最后一个!

    如果要全部检索它们,则必须将每个复选框名称从 search 更改为 search[]。这样,您就可以将它们全部检索到单个数组中,该数组位于 $_REQUEST['search'] (*)

    如果您只想选择一个选项,请将输入类型从复选框更改为单选按钮并保留当前名称。

    (*) $_REQUEST 是一个超全局变量,它包含与$_POST$_GET 相同的值。通常编写灵活的脚本是最好的选择(您可能需要更改表单的方法,使用$_REQUEST,您不必在后端重写整个 PHP 脚本。

    【讨论】:

    • 您也可以命名元素。例如。 "search[1]" 让您可以更轻松地提取与特定 id 等相关的值...
    • 当然。我也经常以更复杂的形式这样做。我认为最好从现在的基础开始,至少对于这个问题。感谢您的提醒。 :)
    • 我不认为 OP 只想要一个选择,那么就没有理由计算选择的数量。 +1 用于发布问题并很好地解释它。
    • 评论的目的更多是作为此答案之上的 OP 的附加信息。不认为它保证它自己的答案:)。
    【解决方案2】:

    您可以使用name="search[]" 而不是name="search",这样,当$_POST 填充到PHP 中时,它会创建一个值数组。您现在拥有的只是其中一个元素,因为它们的名称都相同。

    【讨论】:

      【解决方案3】:

      我认为你想要做的是将你的结果放在一个数组中,因为我可以看到你正在尝试执行:

      $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']
      ...
      

      【讨论】:

        【解决方案4】:

        尝试命名所有复选框:

        <input type="checkbox" name="search[]" ...
        

        进入php

        if (isset($_POST['search'])) {
            print_r($_POST['search']);die();
        }
        

        【讨论】:

        • 只是为了确保他得到了变量的结构。
        • die() 仅确保 PHP 停止执行。但在 OP 的情况下,这无论如何都会发生?
        • 它停止执行,因此开发人员可以看到变量的结构,然后可以看到如何访问值并将其删除以正确实现其余部分,它只是为了调试目的。
        【解决方案5】:

        用“search[]”更改复选框“search”的名称,同时从提交按钮中删除操作属性。

        【讨论】:

          【解决方案6】:

          你需要写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>
          

          搜索.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>";
          
           }
          

          【讨论】:

          • 试过了,它什么也没返回。通过 xammp 使用本地主机
          • @user2346125 请仔细检查代码并再次运行。它在我的本地主机中运行良好...
          【解决方案7】:

          已给出将元素名称从 search 更改为 search[] 的答案,这当然是正确的,但也请查看您的 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>";
           }
          
           }
          

          我不会像您那样制作复选框,而是将所有项目放入一个数组中,然后进行迭代以创建 &lt;li&gt;-tags 及其内容。 (因为它更灵活,你不必一遍又一遍地重写相同的东西)

          代码看起来像这样:

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

          【讨论】:

          • 为什么在提交按钮中有action="search.php"属性?
          • @6339 - 当然,没有必要。谢谢! (我刚刚从 OP 复制了 html 的那部分)我已经删除了那部分。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-08-16
          • 2020-10-14
          • 2011-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多