【发布时间】:2011-08-15 04:03:26
【问题描述】:
如何制作自发布/自提交表单,即向自身提交结果而不是提交到另一个表单的表单?
【问题讨论】:
-
您也可以关闭该操作,默认为当前页面。
-
@Marvo 有一个旧错误可能与今天的 WebKit 不太相关。见my answer。
如何制作自发布/自提交表单,即向自身提交结果而不是提交到另一个表单的表单?
【问题讨论】:
正确的方法是使用$_SERVER["PHP_SELF"](与htmlspecialchars结合使用以避免可能的漏洞利用)。您也可以跳过 action= 部分为空,这不是 W3C 有效的,但目前在大多数(所有?)浏览器中都可以使用 - 如果它是空的,默认是提交给 self。
这是一个示例表单,它采用姓名和电子邮件,然后显示您在提交时输入的值:
<?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; ?>
【讨论】:
Welcome, <?php echo htmlspecialchars($_POST["name"]); ?>!<br> Your email is <?php echo htmlspecialchars($_POST["email"]); ?>.<br> 而不是echo 那样运行?
我猜,你的意思是$_SERVER['PHP_SELF']。如果是这样,你真的不应该在没有先消毒的情况下使用它。这使您容易受到 XSS 攻击。
if(isset($_POST['submit'])) 条件应该高于所有 HTML 输出,并且应该包含一个 header() 函数并再次重定向到当前页面(只是现在,有一些很好的通知,“电子邮件已发送”.. 或其他东西)。为此,您必须使用 $_SESSION 或 $_COOKIE。
请。停止使用$_REQUEST。它也构成了安全威胁。
【讨论】:
只有在register_globals 开启时才有效,并且它永远不应开启(当然,除非您在其他地方定义该变量)。
尝试将form 的action 属性设置为?...
<form method="post" action="?">
...
</form>
您也可以将其设置为空白 (""),但较旧的 WebKit 版本具有 bug。
【讨论】:
试试这个
<form method="post" id="reg" name="reg" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"
效果很好:)
【讨论】:
您的提交按钮没有名称。将 name="submit" 添加到您的提交按钮。
如果您在浏览器中查看表单的源代码,您将看到它如何提交给自己——表单的 action 属性将包含当前脚本的名称——因此,当表单提交时,它会提交给自己。为虚荣而编辑!
【讨论】:
name属性已经提交到服务器了?
更改<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中的代码。【讨论】:
forms.one.submit?