Xampp 未定义的$_POST索引(noob问题!)

Xampp 未定义的$_POST索引(noob问题!),xampp,php,Xampp,Php,可能重复: 我只是在学习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 thi

可能重复:

我只是在学习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 />';


//对于HTML中的每个表单字段,PHP都以这样一行开头 $how_long=$_POST['howlong']; //这样的每一行都有一行输出表单数据: 回声“和我们去了”$多长时间?”
我正在使用的示例有大约12个表单字段

奇怪的是,并不是所有的变量都会抛出这个错误,但我看不到它的模式

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

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


如果有区别,我将在XAMPP 1.7.4和Windows 7 Home Premium上使用PHP 5.3.5。

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


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

您需要检查表单是否已提交,然后您可以尝试使用$\u POST数组,因此您应该将以下代码放在上面:

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

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

记住设置要在表单标签上发布的方法

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

在名为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()的最佳方式是什么?Pffft。我让一个简单的语法错误滑了三次…使用了一个美元符号,我不应该
$\u POST['$howlong']
。如果我没有运行你推荐的isset,我可能仍然会挠头。现在工作!谢谢这种情况经常发生。。。我个人讨厌用美元符号表示变量。关于你的第一个评论,我想到的一件事是在一个数组中有一个你想要测试的键(让我们称它为
a={“name”,“passwd”,“email”,…};
),然后在它中迭代调用类似
isset($\u POST[$a[i]])
,在
中一次循环测试每个键。虽然我从来没有这样做过,但我总是一次测试每个键。然而,我认为你应该尽可能地保持你的表单尽可能的简短,以达到“用户友好”的目的。呵呵,是的,我使用了NetBeans,并且有一个代码模板来加快从$_POST插入这些变量的过程……只是出于某种原因,我在表单字段名称所在的模板上添加了一个$符号,所以NetBeans按照我的要求做了,并添加了它:)最后我也一次一个地检查字段,看起来不那么麻烦。谢谢你的帮助。