表单发送GET而不是POST

Mir*_*run 6 html php forms post apache2

我已经搜索了所有标题相似的问题,但还没有解决方案。

我有一个在apache2上运行的网站。我需要通过表单提交敏感信息,并且需要使用POST方法。代替POST,它发送GET请求。

HTML:

<form action="/add_user.php" method='POST'>
   Enter Username: <input type="email" name="email" required="required" /> <br/>
   Enter password: <input type="password" name="password" required="required" /> <br/>
   <input type="submit" value="submit"/>
</form>
Run Code Online (Sandbox Code Playgroud)

PHP:

<?php

$email=$_POST['email']; 
$password=$_POST['password'];
//do stuff
?>
Run Code Online (Sandbox Code Playgroud)

我已经在Firefox中打开了网络监视器,并且该方法被确认为GET。我什至试图使其成为PUT而不是POST,但它仍然发送GET。此外,$email$password得到的值,如果我改变他们$_GET,而不是$_POST

任何帮助,将不胜感激。

sta*_*com 7

解决此问题的一种方法是通过以下方法增强您的意图:

<button type="submit" formmethod="post" formaction="add_user.php">Submit</button>
Run Code Online (Sandbox Code Playgroud)

  • 我不知道为什么这得到了所有的支持。这是一种力量,而不是解决方案。这相当于在 CSS 规则末尾写入“重要!”。更好地解决问题。 (3认同)

Anw*_*war 5

如果像我一样,您从路由 url(如 Laravel 中)转向纯 PHP,并且想知道为什么文件会/user/store/index.php使用以下方式响应它收到的 GET 请求:

<form method="POST" action="/user/store">
  <input type="text" id="user_name" name="user_name" />
  <button type="submit">Create a new user</button>
</form>
Run Code Online (Sandbox Code Playgroud)

只需再检查一次...是的,您忘记了尾随斜杠...因此/user/store将仅收到 get,而/user/store/将收到您所请求的表格。

编辑

我检查了 Laravel 的功能,它通过在 .htaccess 中添加此内容解决了这个特定问题(检查原始文件)。

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)