如何在将PHP表单提交到同一页面之前清空页面?

时间:2013-05-08 16:50:09

标签: php

我正在尝试为工作创建自动回复脚本,该脚本将根据需要显示表单字段,例如NameUsernamePassword。一旦我选择了提交,我希望脚本删除表单,并显示输出与相应的响应,而不必将其发布到另一页。对于我想要的每个场景,最终有一个form.php和result.php会太杂乱,所以我为什么要努力实现这个目标。到目前为止,我有:

<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
    <table width="100%" cellpadding="10" cellspacing="0">
        <tr>
            <td style="width:33%">

            </td>
            <td style="width:33%">&nbsp;</td>
            <td style="width:33%">&nbsp;</td>
        </tr>
        <tr>
            <td colspan="3" style="width:99%">
                <label>Name</label><span class="req">*</span>
                <span id="reqName" style="color:Red;display:none;">&nbsp;</span>
                <br />
                <input type="text" name="name">
            </td>
        </tr>
        <tr>
            <td colspan="3" style="width:99%">
                <label>Username</label><span class="req">*</span>
                <span id="reqProblem" style="color:Red;display:none;">&nbsp;</span>
                <br />
                <input type="text" name="username">
            </td>
        </tr>
        <tr>
            <td colspan="3" style="width:99%">
                <label for="txtProblem">Password</label><span class="req">*</span>
                <span id="reqProblem" style="color:Red;display:none;">&nbsp;</span>
                <br />
                <input type="text" name="password">
            </td>
        </tr>
        <tr>
            <td colspan="3" style="width:99%">
            <br />
            <input type="submit" name="submit" value="Submit">
            </td>
        </tr>
    </table>
</form>

对于PHP我有:

<?php
if(isset($_POST['submit'])) {
    echo "<h4>Response</h4>";
    $username = $_POST['username'];
    $password = $_POST['password'];
    $name = $_POST['name'];

    echo "<p>Hello, $name <br />


    Your Login Information is as follows:
    Username: $username
    Password: $password.
</p>";
}
?>

总而言之,我希望在PHP isset之前完全删除所有内容,并将其替换为相应的结果。

2 个答案:

答案 0 :(得分:1)

在目前的形式中,发生的事情是你的HTML被发送到浏览器(或者在浏览器的路上至少有一些不可见的缓冲区),并且一旦你完成脚本的部分就不受控制了它控制着表单处理。

所以你有两个选择。一种是将它保留在你拥有它的状态,但是使用带有ob_start()和相关函数的输出缓冲 - 在这种情况下我真的不推荐 - 或者只是重新安排代码的顺序。

通常,这些单页自处理表单最常见的设计模式是将处理逻辑放在最顶层,表单或成功/失败消息的输出以结果为条件。

要实现此功能,请获取PHP代码并将其移至文件顶部。在您当前的POST代码结束时,如果帖子成功,则输出您的消息,但没有其他内容。如果没有成功,或者还没有任何帖子,那么你输出表格html。这些方面的东西:

<?php
if($no_post_or_failure)
{
// output html
?>
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
...
<?php
} // aaaand we're done!
?>

就是这样。我希望这是有道理的:))

答案 1 :(得分:0)

只需更改您的PHP:

<?php
if(isset($_POST['submit'])) {
  echo "<h4>Response</h4>";
  $username = $_POST['username'];
  $password = $_POST['password'];
  $name = $_POST['name'];

  echo "<p>Hello, $name <br />
  Your Login Information is as follows:
  Username: $username
  Password: $password.
  <a href="yourPHPfileName.php">Back</a>
</p>";
}else{
?>
//YOUR HTML FORM GOES HERE
<?php 
}