【问题标题】:Form not passing POST data表单未传递 POST 数据
【发布时间】:2012-11-02 05:53:08
【问题描述】:

我遇到这个问题已经有一段时间了,这是我的表单的代码:

    <form action="site/Main.php" method="post">
        <p><label for="user" style="text-indent:415px;">User</label> <input type="text" name="user" /></p>
        <p><label for="password">Password</label> <input type="password" name="password" /></p>
        <p class="submit"><input type="submit" value="log in" /></p>
    </form>

此表单位于我的 admin.php 页面,我想将变量“user”和“password”传递给我的 site/main.php 页面,但是,当我尝试访问变量时,php 告诉我他们这样做了不存在,这是我在我的 site/main.php 页面上的代码:

    <?php
    if(isset($_POST)){
        if($_POST["user"] == "Project" && $_POST["password"] == "Project2012"){
            echo "Welcome!";
        } else{
            echo "Wrong username or password!";
        }
    }
    ?>

我不断收到以下错误:

(!) 注意:未定义索引:第 10 行 C:\wamp\www\site\Main.php 中的用户

知道为什么 $_POST 变量似乎没有发送到我的主页吗?

非常感谢您提前提供的帮助!

【问题讨论】:

  • 首先——var_dump($_POST);
  • 其次,不要只是盲目地访问数组元素。 if(isset($_POST['user']) 然后 if($_POST['user'] == 'Project').
  • 我不知道您的问题的答案,但请注意isset($_POST) 始终是true。如果没有发布任何内容,$_POST 是一个空数组,但它仍然存在。但是,空数组的计算结果为 false,所以 if($_POST) 会做你想做的事情。
  • @octern:更好的是,if ($_SERVER['REQUEST_METHOD'] == 'POST')。为什么要检查可能存在或不存在的变量/值,当您可以做到这一点并且每次都 100% 准确时。
  • @MarcB 你是对的,作为一个政策问题,最好测试你正在测试的东西,而不是测试由于一个怪癖而碰巧是同一件事的东西语言。

标签: php forms variables post send


【解决方案1】:

使用empty() 而不是isset() 检查$_POST 数组。此外,在尝试比较或使用之前,请务必检查数组的索引。

<?php
   if(!empty($_POST)){
     if(isset($_POST["user"])  && 
       isset($_POST["password"]) && 
       $_POST["user"] == "Project" && 
       $_POST["password"] == "Project2012"){
         echo "Welcome!";
     } else{
         echo "Wrong username or password!";
     }
 ?>

【讨论】:

  • 这看起来像是一种更细致的方法,但我认为它不能回答这个问题:为什么在表单发布后 $_POST 中缺少一个或两个变量?
【解决方案2】:

C:\wamp\www\site\Main.php

实际上是正确的文件夹/文件吗?
正如其他用户所提到的,您应该使用

if(isset($_POST['user']))

但是,您仍然在表单中使用 site/Main.php 作为路径。您发布的错误消息告诉我们 $_POST 数据正在发送到C:\wamp\www\site\Main.php - 那是您的文件所在的位置吗?如果不是,那就是错误。

最好的问候,

斯蒂芬·S.

编辑: 如前所述,这实际上不可能是错误。我建议只在 Main.php 中使用 var_dump($_POST);print_r($_POST);

并且:这实际上是你的代码吗?我的意思是在您的代码示例中,您的 Main.php 中甚至不存在第 10 行

【讨论】:

  • HTML 表单总是将您定向到发布数据的页面,对吗?因此,即使 OP 对他们要去哪个页面感到困惑,他们最终到达的页面也应该可以访问发布的数据。
  • 你说得对。我的错。但是由于它提到了第 10 行(脚本),所以他发布的代码有问题。因为没有第 10 行。
  • 我已经解决了,一旦网站允许我会发布它作为答案。感谢大家的帮助!
【解决方案3】:

这很奇怪,但经过几次尝试,我所做的是改变:

    <form action="site/Main.php" method="post">

为:

    <form action="Main.php" method="post">

它开始工作,然后我把它改回原来的形式,它继续工作。感谢大家的 cmets,他们都以不同的方式帮助我检查我的变量,感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 2013-09-07
    • 2019-09-26
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多