【问题标题】:Undefined Index for $_POST (noob question!) [duplicate]$_POST 的未定义索引(菜鸟问题!)[重复]
【发布时间】:2011-09-04 10:08:03
【问题描述】:

可能重复:
PHP: “Notice: Undefined variable” and “Notice: Undefined index”

我刚刚学习 PHP,但我不断收到未定义索引错误。我正在学习的这本书有一个 HTML 表单和一个处理表单的 PHP 页面,使用以下格式:

<!-- The form fields are all set up something like this -->
<input type="text" id="howlong" name="howlong" /><br />

// The PHP starts with one line like this for each of the form fields in the HTML
$how_long = $_POST ['howlong'];

// And there is one line for each one like this to output the form data: 
echo ' and were gone for ' . $how_long . '<br />';

我正在使用的示例有大约 12 个表单域。

奇怪的是,并非所有变量都会引发此错误,但我看不到它的规律。

我检查了所有 HTML 字段名是否与我输入的 PHP $_POST 变量名匹配,并且我确定当我填写并提交表单时,所有字段都填写了一些内容。有趣的是,可以为本书下载的完整代码也抛出了这个错误。

我意识到这段代码可能没有反映最佳实践,它来自本书的第一章,显然我是一个菜鸟 :)

以防万一,我在 XAMPP 1.7.4 和 Windows 7 Home Premium 上使用 PHP 5.3.5。

【问题讨论】:

    标签: xampp php


    【解决方案1】:

    您可以使用isset() 函数测试是否设置了变量。

    此外,并非所有 HTML 表单元素都会在所有情况下发布值。常见的例子是复选框;未选中的复选框不构成发回服务器的数据的一部分。因此,您期望设置的 $_POST 元素不会是。

    【讨论】:

      【解决方案2】:

      你需要检查表单是否提交,然后你可以尝试使用 $_POST 数组,所以你应该把这段代码放在上面:

      if(isset($_POST['send'])) {
      

      其中“发送”是提交按钮的名称

      【讨论】:

        【解决方案3】:

        记得在表单标签上设置方法为 POST...

        这是我用来尝试你的代码,它对我有用:

        在名为 test.php 的文件中:

        <html>
          <body>
            <form method="POST" action="testProc.php">
              <input type="text" id="howlong" name="howlong" /><br/>
              <input type="submit" value="submit"/>
            </form>
          </body>
        </html>
        

        在 testProc.php 中:

        <?php
        if (isset($_POST)) {
          if (isset($_POST["howlong"])){
            $howlong = $_POST['howlong'];
            echo ' and were gone for ' . $howlong . '<br />';
          }
        }
        ?>
        

        作为一个建议,要使用样式表进行显示操作,我建议将表单放在表格中,如下所示:

        <html>
          <body>
            <form method="POST" action="testProc.php">
              <table>
                <tbody>
                  <tr>
                    <th>
                      <label for="howlong">How long? :</label>
                    </th>
                    <td>
                      <input type="text" id="howlong" name="howlong" />
                    </td>
                  </tr>
                  <tr>
                    <input type="submit" value="submit"/>
                  </tr>
                </tbody>
              </table>
            </form>
          </body>
        </html>
        

        希望你能用这个...

        【讨论】:

        • 对十几个表单字段使用 isset() 的最佳方法是什么?
        • 噗。我让一个简单的语法错误出现了三遍……在我不应该$_POST['$howlong']的地方使用了一个美元符号。如果我没有运行您推荐的 isset,我仍然会摸不着头脑。现在工作!谢谢!
        • 这种情况经常发生...我个人讨厌使用美元符号作为变量。关于您的第一条评论,我想到的一件事是拥有一个包含您要测试的键的数组(我们称之为a = {"name", "passwd", "email", ... };)并在for 循环测试每个循环中调用类似isset($_POST[$a[i]]) 的东西一次关键。虽然我从来没有这样做过,但我总是一次测试每个关键。但是,我认为您应该尽可能缩短表单以“用户友好”呵呵
        • 是的,我使用的是 NetBeans,并且有一个代码模板可以更快地从 $_POST 插入这些变量...只是出于某种原因,我在表单字段所在的模板中添加了一个 $ 符号名字消失了,所以 NetBeans 做了我的要求并添加了它:) 我最终也一次检查一个字段,只是看起来不那么麻烦。感谢您的帮助。
        猜你喜欢
        • 2012-06-04
        • 2016-03-30
        • 2020-01-17
        • 2018-09-11
        • 2016-10-24
        • 1970-01-01
        • 1970-01-01
        • 2018-03-05
        相关资源
        最近更新 更多