【问题标题】:PHP $_POST not working? [duplicate]PHP $_POST 不工作? [复制]
【发布时间】:2012-02-18 14:52:50
【问题描述】:

我有最简单的形式,我想做的就是回显文本框中写的任何内容。

HTML:

<form action="" method="post">
  <input type="text" name="firstname">
  <input type="submit" name="submit" value="Submit">
</form>

PHP:

if(isset($_POST['submit'])){
  $test = $_POST['firstname'];
  echo $test;
}

问题是它不能在我的服务器上运行(它在另一台服务器上运行)。有谁知道可能出了什么问题?服务器上还有其他表单,工作正常。

【问题讨论】:

  • 我总是建议action 属性有一个值...
  • var_dump($_POST) 会得到什么?来吧,var_dump($_REQUEST)
  • 您的服务器运行的是什么版本的 PHP?
  • 在动作属性中你必须写成例如“test.php”或“#”。试试这个
  • 你试过这个吗:if($_SERVER['REQUEST_METHOD'] == "POST"){

标签: php html forms post


【解决方案1】:

你可以做的几件事:

  1. 确保表单上的“action”属性指向正确的目的地。
  2. 尝试使用 $_REQUEST[] 而不是 $_POST,看看是否有任何变化。
  3. [可选] 尝试同时包含 'name' 和 'id' 属性,例如

    <input type="text" name="firstname" id="firstname">
    

  4. 如果您在 Linux 环境中,请检查您是否具有文件的读/写权限。

此外,这个link 也可能有帮助。

编辑:

你也可以替换

<code>if(isset($_POST['submit'])){</code>

用这个:

<code>if($_SERVER['REQUEST_METHOD'] == "POST"){ </code>

这始终是检查表单是否已提交的最佳方式

【讨论】:

  • 你不需要 id。
  • 谢谢,我已经尝试了该链接中的几乎所有内容。没有成功。
  • 你试过这个吗:if($_SERVER['REQUEST_METHOD'] == "POST"){
  • 另外一个让我的大脑陷入“哦,DUH!”模式。以切线的方式解决了我的问题。我喜欢这样。
  • #3 为我工作。惊人的!!!非常感谢您!!!!这个问题快把我逼疯了。伟大的!!!加 1。:-)
【解决方案2】:

出于测试原因尝试使用 get

<form action="#?name=test" method="GET">
  <input type="text" name="firstname" />
  <input type="submit" name="submit" value="Submit" />
</form>

if(isset($_GET)){
    echo $_GET['name'] . '<br>';
    echo $_GET['firstname'];
}

【讨论】:

  • 没什么。这就像值被忍者吃掉了。
  • 为什么会有不同?
  • 巨大的安全风险。只取你需要的东西。
  • 因为表单有一个动作,你可以检查一个普通的帖子。
  • @Stevanicus 这就是我所做的:输入一个字符串,提交表单并没有得到任何结果。然后我在网上浏览了几分钟,回到我的网站,输入一个字符串(“test”)并返回相同的值!然后我输入了另一个字符串(“12345”),提交后值和之前一样(“test”)。一次又一次地尝试,无论我在文本框中写什么字符串,该值仍然是“测试”。这很奇怪。 >_
【解决方案3】:

您的代码没有任何问题。问题在这里不可见。

  1. 检查提交后是否调用了脚本。

  2. 看看提交的内容:var_dump($_REQUEST)

【讨论】:

    【解决方案4】:

    试试var_dump($_GLOBALS)

    一个潜在的原因可能是在您之前运行的脚本会取消设置全局变量。如:

    unset($_REQUEST);
    

    甚至。

    unset($GLOBALS);
    

    这可以通过 php.ini 配置中的 auto_prepend_file 选项来完成。

    【讨论】:

      【解决方案5】:

      不要使用 $_POST,而是使用 $_REQUEST:

      HTML:

      <form action="" method="post">
        <input type="text" name="firstname">
        <input type="submit" name="submit" value="Submit">
      </form>
      

      PHP:

      if(isset($_REQUEST['submit'])){
        $test = $_REQUEST['firstname'];
        echo $test;
      }
      

      【讨论】:

        【解决方案6】:

        我也有这个问题。错误出现在 htaccess 中。如果您有影响操作 url 的重写规则,您将无法读取 POST 变量。

        要解决这个添加,你必须在开始时将这个规则添加到 htaccess 中,以避免重写 url:

        重写规则 ^my_action.php - [PT]

        【讨论】:

          【解决方案7】:

          今晚我遇到了类似的事情,这让我很生气。提交表单给了我 $_REQUEST 中的值,而不是 $_POST 中的值。

          最后我注意到在 firebug 的网络选项卡上实际上有两个请求通过;首先是带有 301 响应的 POST,然后是带有 200 响应的 GET。

          搜索互联网,听起来大多数人都认为这与 mod_rewrite 导致 POST 请求重定向并因此更改为 GET 有关。

          在我的情况下,这不是 mod_rewrite 的错,它要简单得多……我的 POST URL 还包含一个 GET 查询字符串,该字符串以 URL 结尾没有斜杠开头。正是这导致 apache 重定向。

          找出不同之处……

          不好:http://blah.de.blah/my/path?key=value&otherkey=othervalue
          好:http://blah.de.blah/my/path/?key=value&otherkey=othervalue

          底部的不会导致重定向并给我 $_POST!

          【讨论】:

          • 我有一个带有action="booking.php" 的表单,但它不起作用。原来是因为我的 .htaccess 重写了 .php 地址以删除扩展名。更改 action="booking" 成功了
          • 您的回答为我节省了很多时间。在我的情况下,我的表单有action="mysite.com/somefolder,这导致$_POST 为空。但是当我将操作更改为mysite.com/somefolder/ 时,它按预期工作。非常感谢
          • 非常细微的差别,但影响很大。谢谢你! :)
          • 尝试了一个小时,进行研究,然后......这是一个 SLAAASH,OMG.... 非常感谢。
          • 大声笑,我刚遇到同样的问题一个小时。使用 post 时必须有那个 SLASH !
          【解决方案8】:

          你检查过你的 php.ini 吗?
          一旦我将post_max_size 设置为与upload_max_filesize 相同,我就破坏了我的发布方法。

          我认为post_max_size 必须小于upload_max_filesize
          在 RHEL 6.0 中使用 PHP 5.3.3 测试

          仅供参考:
          $_POST in php 5.3.5 does not work
          PHP POST not working

          【讨论】:

            【解决方案9】:
            1. html 文件和 php 文件都应位于 c:\apache2 的 htdocs 文件夹中(如果您使用 apache Web 服务器)。
            2. 通过键入 http://"localhost/html_file_name.html" 打开 html 文件
            3. 现在在字段中输入您的数据..您的代码将运行..

            【讨论】:

              【解决方案10】:

              转储全局变量以找出页面范围内的内容:

              var_dump($GLOBALS);
              

              这将告诉您页面上数据的“内容”和“位置”。

              【讨论】:

                【解决方案11】:

                试试这个
                html代码

                  <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
                          <input type="text" name="firstname">
                          <input type="submit" name="submit" value="Submit">
                        </form>
                

                php代码:

                if(isset($_POST['Submit'])){
                $firstname=isset($_POST['firstname'])?$_post['firstname']:"";
                echo $firstname;
                
                }
                

                【讨论】:

                  猜你喜欢
                  • 2023-03-16
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-12-12
                  • 2013-03-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-10-11
                  相关资源
                  最近更新 更多