如何制作自我发布/自我提交表单,即将结果提交给自己的表单,而不是提交给其他表单?
答案 0 :(得分:75)
正确的方法是使用$_SERVER["PHP_SELF"]
(与htmlspecialchars
结合使用以避免可能的漏洞利用)。您也可以跳过action=
部分为空,这不是W3C有效,但目前适用于大多数(所有?)浏览器 - 默认情况下,如果它为空,则提交给自己。
以下是一个采用名称和电子邮件的示例表单,然后显示您在提交时输入的值:
<?php if (!empty($_POST)): ?>
Welcome, <?php echo htmlspecialchars($_POST["name"]); ?>!<br>
Your email is <?php echo htmlspecialchars($_POST["email"]); ?>.<br>
<?php else: ?>
<form action=<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?> method="post">
Name: <input type="text" name="name"><br>
Email: <input type="text" name="email"><br>
<input type="submit">
</form>
<?php endif; ?>
答案 1 :(得分:11)
我想,你的意思是$_SERVER['PHP_SELF']
。如果是这样,你真的不应该在没有首先消毒的情况下使用它。这使您对XSS攻击持开放态度。
if(isset($_POST['submit']))
条件应该高于所有HTML输出,并且应该包含header()
函数,并重新定向到当前页面(仅限现在,有一些很好的通知,“已发送电子邮件” .. 或者其他的东西 )。为此,您必须使用$_SESSION
或$_COOKIE
。
请。停止使用$_REQUEST
。它也构成了安全威胁。
答案 2 :(得分:5)
只有在register_globals
打开且永远不应该在上时才会有效(除非您在其他地方定义该变量)。
尝试将form
的{{1}}属性设置为action
...
?
您也可以将其设置为空白(<form method="post" action="?">
...
</form>
),但较旧的WebKit版本为bug。
答案 3 :(得分:4)
试试这个
<form method="post" id="reg" name="reg" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"
运作良好:)
答案 4 :(得分:3)
您的提交按钮没有名称。在提交按钮中添加name =“submit”。
如果您在浏览器中查看表单上的源代码,您将看到它如何提交给自己 - 表单的action属性将包含当前脚本的名称 - 因此当表单提交时,它会提交给自己。为了虚荣而编辑!
答案 5 :(得分:2)
变化
<input type="submit" value="Submit" />
到
<input type="submit" value="Submit" name='submit'/>
变化
<form method="post" action="<?php echo $PHP_SELF;?>">
到
<form method="post" action="">
if
中执行代码。