【问题标题】:PHP forms - 'get' working but 'post' notPHP 表单 - 'get' 工作,但 'post' 不
【发布时间】:2012-03-17 19:07:21
【问题描述】:

我有一个简单的注册表单。我一直在寻找几个小时并尝试了一切 - 基本上我已经将它剥离到发布/获取。当我将方法设置为获取(在表单和脚本页面上)时,它工作正常,当我将其设置为发布时,我收到此错误:

不可接受

在此服务器上找不到请求资源 /tmp/register.php 的适当表示。 此外,在尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误。

这是我在表单页面上的代码:

<form id="registration" onsubmit="return validateRegistration();" action="register.php" method="post">
    Name:     <input type="text" id="name" name="name" placeholder="Required">
    <br>
    Email:    <input type="email" id="email" name="email" placeholder="Required">
    <br>
    Confirm:  <input type="email" id="confirm_email" autocomplete="off" placeholder="Required">
    <br>
    Password: <input type="password" id="password" name="password" placeholder="Required">
    <br>
    Confirm:  <input type="password" id="confirm_password" autocomplete="off" placeholder="Required">
    <br>
    City:     <input type="text" id="city" name="city" placeholder="Optional">
    <br>
    Country:  <input type="text" id="country" name="country" placeholder="Optional">
    <br>
    <br>
    <hr>
    <a href="#">Terms and Conditions</a>
    <br>
    <input type="submit" value="Accept and Complete Registration">
</form>

在我的脚本页面 (register.php) 上,我有:

<?php
    echo "Name: " . $_POST["name"] . "<br>";
    echo "Email: " . $_POST["email"] . "<br>";
    echo "Password: " . $_POST["password"] . "<br>";
    echo "Location: " . $_POST["city"] . ", " . $_POST["country"] . "<br>";
?>

如果我只是转到register.php,它只会在帖子所在的位置显示空白,但如果我提交表单,它会给出 Not Acceptable 406 错误。

有人可以帮我解决这个问题吗?我完全不知所措。谢谢

【问题讨论】:

  • validateRegistration() 是什么样的?
  • 我会在我回家时添加它,但我怀疑它与它有什么关系,因为:1.我把它拿出来一次,它没有用 2.它可以与 get 一起使用,只是不发帖
  • 我完全取消了验证,但它仍然不起作用。我有一个基本形式:&lt;form action="register2.php" method="post"&gt; &lt;input type="text" name="field1"&gt; &lt;input type="submit" name="submit" value="Go"&gt; &lt;/form&gt; 和一个简单的 register2.php echo $_POST["field1"] 如果我将其全部更改为 get 但不是 $_POST (相同的 406 错误)。我已经联系了我的主人,他们说他们没有看到任何服务器错误。 @Joseph 我已经查看了该页面,但我无法弄清楚我可以用它做什么......(就像它不能解决我的问题一样)
  • 伙计们,我被同样的问题困住了,我尝试了下面给出的所有答案,但没有运气。我有我的 PHP 站点,它由 Windows 服务器托管。有许多表单可以使用 POST 方法,但只有一种不工作。它与 $_GET 方法完美配合。请帮我。 :-(

标签: php forms post get


【解决方案1】:

我不知道您是否找到了问题的答案。我也遇到了这个问题,POST 绝对不会返回任何数据,但 GET 不会出错。

关于我的问题的奇怪之处在于,我只在我的一个网站上拥有它。所有网站都在同一台服务器上。

在我隆重地把脸撞到键盘上大约 3 个小时后,我意识到了这一点。一个不起作用的站点我将 URL 编码设置为始终删除“www”。我的解决方案是强制 URL 始终添加“www”,问题就消失了。

【讨论】:

    【解决方案2】:

    还有一种可能性还没提到,就是.htaccess

    在某些情况下,.htaccess 设置为重定向或阻止 POST,这不会捕获和阻止或路由 GET。

    如果您可以导航到该页面(您说可以),但 POST 永远无法到达那里,那么有什么东西阻止了它,唯一的障碍就是您正在使用的 Web 服务器平台。

    您之前提到您使用的是托管服务提供商,因此请具体询问他们对 POST 请求设置了哪些规则(您可能需要稍等片刻才能找到可以实际回答问题的人)或你可以用wget在命令行中测试一下

    wget --post-data 'name=test' http://server.com/tmp/register.php
    

    【讨论】:

      【解决方案3】:

      错误代码表示它正在寻找位于/tmp/register.php 的文件。那是对的吗?也许将表单操作更改为/register.php?

      另外,您的 PHP 看起来有点不对劲(很多额外的引号),但我假设您只是从 php 文件中复制/粘贴,并且出于某种原因删除了周围的 HTML?

      【讨论】:

      • 文件存在;如果我通过 URL 打开它,它只显示名称:(空白)等,但如果我通过提交打开它(检查 URL 是否相同),它会给出该错误。我相信 php 是正确的,因为如果我将其全部更改为“get”,它就会起作用。我回家后会仔细检查
      【解决方案4】:

      我在表单中的多个 textarea 字段上使用 ckeditor,并得到相同的错误...

      我什么都试过了……比如用 get 代替 post,玩过 mod 证券,还有很多我能想到的东西……

      但当我从多个字段中删除 ckeditor 时,我终于让它工作了......现在它工作得非常好......

      可能是您代码中的某些字段正在生成一些内部代码,浏览器/服务器将其视为 sql 查询的注入,因此直接阻止页面。

      找到那个代码...

      【讨论】:

        猜你喜欢
        • 2018-02-06
        • 2013-06-07
        • 2014-06-23
        • 2022-01-08
        • 2021-07-04
        • 1970-01-01
        • 2013-05-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多