0

我正在尝试为工作创建一个自动响应脚本,它将根据需要显示表单字段,例如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对应的结果。

4

2 回答 2

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!
?>

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

于 2013-05-08T17:05:15.580 回答
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 
}
于 2013-10-11T08:09:40.517 回答