我有这个简单的html表单并使用post方法。
<html>
<form action = "read.php" method="post">
<input type="text" name ="name">
<input type="submit">
</form>
</html>
这是我的php:
if(isset($_POST["name"])){
echo "sent";
}
else
{
echo "not sent";
}
当我运行代码“未发送”时会出现消息。似乎一切正常 但它不起作用,而GET方法正常工作并显示“已发送”消息。问题是什么?
答案 0 :(得分:0)
首先,确保您的标记有效。请注意,您有一些不应有空格的空格(例如name ="name"
)。至少应该有一个空白的HTML文档,其中的内容位于<body>
标记内:
<!DOCTYPE html>
<html>
<head></head>
<body>
<form action="read.php" method="post">
<input type="text" name="name">
<input type="submit">
</form>
</body>
</html>
从您的问题中不清楚上述表单是在read.php
内还是单独的脚本?
如果它们是分开的(例如表单在index.php
中),请在浏览器中运行index.php
。它应该发布到read.php
,它必须位于相同的相对目录中。如果表单和PHP在相同的脚本中,则在浏览器中运行read.php
。
使用PHP本身,您最好通过输出帖子的内容来尝试调试它,例如
var_dump($_POST);
如果有效,您将获得一个包含发布后的表单内容的数组。只有在填写name
字段并按下提交按钮后才会显示,例如
array(1) { ["name"]=> string(4) "andy" }
回到您问题中的代码...如果您的所有代码都在同一个脚本中,它会在页面加载时说“未发送”,因为此时没有发布任何内容。只有在您填写name
字段并按下提交按钮后,它才会输出“已发送”。
你想知道为什么这个“适用”GET方法。嗯,原因是因为GET会将表单字段附加到URL。在页面加载时,您运行index.php
。没有$_GET
个参数。提交表单后,将操纵URL(例如index.php?name=andy
)。所以在页面加载时它会显示“未发送”,但是一旦它在URL中有?name=andy
,它就会说“已发送”,因为这是一个GET参数。
答案 1 :(得分:-3)
除了缺少body标签,脚本才能正常工作。
可能是你想避免&#34;未发送&#34;表单提交前的消息?
使用此:
<?php
if ($_POST) {
if(isset($_POST["name"])){
echo "sent";
}
else
{
echo "not sent";
}
}
?>
这样你就可以检查$ _POST数组是否存在(意味着发送了帖子),然后如果$ _POST [&#34; name&#34;]有值