首页 > 解决方案 > 提交表单后未收到发布变量

问题描述

所以我有一个格式如下的 HTML 文件:

    <!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <form action="pringles.php" method="post">
      First name:<br>
      <input type="text" name="firstname" value="Mickey">
      <br>
      Last name:<br>
      <input type="text" name="lastname" value="Mouse">
      <br><br>
      <input type="submit" value="Submit">
      </form>
  </body>
</html>

然后我有一个 PHP 文件名为 pringles.php,其中包含以下代码:

<?php 
// server, username, password, db, port
$servername = "********";
$username = "*******";
$password = "********";
$dbname = "*********";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

foreach ($_POST as $key => $value) {
  $postdata2 = $postdata2 . "Field ".htmlspecialchars($key)." is ".htmlspecialchars($value) . "////";
}

$sql = "INSERT INTO `test`(`text`) VALUES ('{$postdata2}')";
if ($conn->query($sql) === TRUE) {
  echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}
?>

但是,当我提交表单时,它会在我的数据库中插入一行,但文本字段为空。由于某种原因未发送 post 变量。此外,我还有另一个 .php 文件,其中的表单可以完美运行。它们在同一个文件夹和所有内容中,因此我不明白为什么这不起作用。

谢谢!

标签: phphtmlmysqlformspost

解决方案


问题最终出现在 .htaccess 中,因为 URL 被重定向以删除 .php,这导致 POST 数据丢失的问题。这是代码:

RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]

RewriteCond %{REQUEST_METHOD} !POST解决了问题。


推荐阅读