【问题标题】:form method only works with GET and not POSTform 方法只适用于 GET 而不是 POST
【发布时间】:2017-11-03 19:02:06
【问题描述】:

所以直到今天之前,这从未发生在我身上。 我有一个登录表单,试图向操作表单发送一个简单的帖子。 var_dump 在我使用 post 方法时返回数组 0,但是当我使用 method = get 和 var_dump get 时,我得到了所有的字符串。

这是我的html代码

<form name="mlsnavform" id="mlsnavform" action="script/mlsnavform.php" method="POST">
<input id="uname" name="uname"type="text" placeholder="Username" autocomplete="off">
<input id="loginbtn" name="loginbtn" type="submit" value="SIGN IN">
</form>

这里是 mlsnavform.php

<?php
var_dump($_POST);
?>

结果是array(0) { }

但是,当我将方法从 post 更改为 get,并使用 var_dump($_get) 而不是 $_post 我确实会获取值,但当然,在您的 URL 地址中显示的登录凭据不是我想做的事情。 使用 get 用我需要的东西填充我的数组

array(2) { ["uname"]=&gt; string(9) "damnitphp" ["loginbtn"]=&gt; string(7) "SIGN IN" }

这从来没有发生在我身上,在我决定发布新帖子之前,我已经在堆栈上滚动了将近 2 天,以获得“可能的重复”,但我发现只有 1 个答案是关于“PHPStorm “但我不使用 phpstorm。我使用记事本++(是的,我可以使用 sublime 或 atom 或括号,但我已经习惯了记事本,我觉得不需要切换到另一个文本编辑器)。

有人知道这个问题的解决方法吗?提前致谢!

编辑:所以今天我决定打开一个我 4 个月前制作的项目,该项目一直有效,但该页面上的帖子也不起作用。那我做了什么?在所有这些问题开始之前,我决定删除我在几周前添加的那件东西。

从 IIS 重写 URL,这样我就可以删除 .phpextension 所以基本上这一直是我的问题,但到目前为止,在网上没有一个其他人在谈论这个的话题。如果可能有类似的问题。如果有人可以评论我的链接或解决方案,将不胜感激。谢谢。

所以当我在 webconfig 中有我的 URL 重写代码时,我的问题是“$_POST”不起作用。如果我删除重写代码,则 .php 扩展名会显示在浏览器中(我不想要),但我的 $_post 方法再次起作用。

【问题讨论】:

  • 你检查过服务器PHP错误/警告吗?
  • 您是否尝试过一次只获取一个值,例如 $_POST['uname'] 并打印它?只是一个想法。
  • 尝试添加到表单 enctype="multipart/form-data"
  • @OlegDubas 是的,遗憾的是没有错误
  • @EricBrown 是的。什么都没有

标签: php iis web-config


【解决方案1】:

你可以在php.ini中查看enable_post_data_reading

来自 php.ini:

; Whether PHP will read the POST data.
; This option is enabled by default.
; Most likely, you won't want to disable this option globally. It causes $_POST
; and $_FILES to always be empty; the only way you will be able to read the
; POST data will be through the php://input stream wrapper. This can be useful
; to proxy requests or to process the POST data in a memory efficient fashion.
; http://php.net/enable-post-data-reading

检查此选项是否未注释并使用";" 对此进行注释

;enable_post_data_reading = Off

【讨论】:

  • ; 在它后面,所以它不会被读取。此外,如果我将操作页面中的代码直接发布到我的登录页面中,则该帖子可以正常工作。但我通常只是为它创建一个操作页面。就像我对我创建的几乎所有其他小型 Web 应用程序所做的那样。 :s
【解决方案2】:

您可能将超全局变量名称 POST 和 GET 过于字面化。 $_GET 是解析后的查询字符串,它独立于 HTTP 方法,即它始终存在,即使是 POST 请求。 $_POST 是符合某些约束时解析的 HTTP 正文(内容类型标头必须指定 application/x-www-form-urlencoded 或 multipart/form-data,我认为该方法确实必须是“POST” - 请注意,当不符合约束时,即使您使用 POST 方法,您也不会在 $_POST 中获取任何数据。

<form name="mlsnavform" id="mlsnavform"  enctype="application/x-www-form-urlencoded" action="script/mlsnavform.php" method="POST">
      <input id="uname" name="uname"type="text" placeholder="Username" autocomplete="off">
      <input id="loginbtn" name="loginbtn" type="submit" value="SIGN IN">
</form>

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多