如何制作提交给自己的PHP表单?

时间:2011-04-29 01:03:32

标签: php html forms

如何制作自我发布/自我提交表单,即将结果提交给自己的表单,而不是提交给其他表单?

6 个答案:

答案 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)

  1. 变化
    <input type="submit" value="Submit" />

    <input type="submit" value="Submit" name='submit'/>

  2. 变化
    <form method="post" action="<?php echo $PHP_SELF;?>">

    <form method="post" action="">

  3. 只有在提交时才会在if中执行代码。
  4. 它将始终显示表单(html代码)。
  5. 你究竟是什么问题?