问:我找不到错误。为什么我的结果页面没有收到来自我的表单的 POST 变量?我的var_dump总是得到一个空数组。这里有人可以帮我吗?代码非常简单,以至于我不知道我可以删除哪些其他可能的错误源。如果我切换到 GET,它会立即生效。
我正在我的 Debian 旧稳定系统上对此进行测试,多年来我一直在使用该系统,但没有出现任何问题。(但它也不适用于我的外部托管 Web 服务器。)
我的form.php:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="device-width, initial-scale=1">
<title>Form page</title>
</head>
<body>
<form name="test" action="result.php" enctype="text/plain" method="post">
<select name="chose">
<option value="1">one</option>
<option value="2">two</option>
<option value="3">three</option>
</select>
<input type="submit" value="save">
</form>
</body>
</html>
我的结果.php:
<?php
var_dump($_POST);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="device-width, initial-scale=1">
<title>Result page</title>
</head>
<body>
<h1>Result</h1>
<p><a href="form.php">return</a></p>
</body>
</html>
我想我在这里疯了。我必须忽略一些简单得惊人的东西。
答:enctype="text/plain"旨在以人类可读的格式呈现表单数据以进行调试。它不是机器可处理的(例如,您无法区分数据中的新行和条目之间的新行)。
删除它。
(无论如何我认为它对调试不是很好,浏览器内置的开发工具可以以人类可读的格式显示 URL 编码数据)
$_POST当数据被编码为application/x-www-form-urlencoded(表单的默认值)或multipart/form-data(支持文件上传的更粗的格式)时, PHP 将自动填充。