php - 提交表单后未收到发布变量
问题描述
所以我有一个格式如下的 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 文件,其中的表单可以完美运行。它们在同一个文件夹和所有内容中,因此我不明白为什么这不起作用。
谢谢!
解决方案
问题最终出现在 .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
解决了问题。