PHP 表单 - 提交时停留在同一页面上

Posted

技术标签:

【中文标题】PHP 表单 - 提交时停留在同一页面上【英文标题】:PHP form - on submit stay on same page 【发布时间】:2013-06-24 09:48:23 【问题描述】:

我有一个 php 表单,它位于文件 contact.html

表单从文件processForm.php处理。

当用户填写表单并点击提交时, processForm.php 发送电子邮件并将用户定向到 - processForm.php 在该页面上显示一条消息“成功!您的消息已发送。”

我对 PHP 了解不多,但我知道需要这样做的操作是:

// Die with a success message
die("<span class='success'>Success! Your message has been sent.</span>");

如何将消息保留在表单 div 中而不重定向到 processForm.php页面?

如果需要,我可以发布整个processForm.php,但它很长。

【问题讨论】:

ajax 或发布到同一页面。我更喜欢发布到同一页面。 header('contact.html?result=success'); phptutorialforbeginners.com/2013/01/… 与以下类似的问题(有一些调整):[php,提交后使用同一页面的表单][1] [1]:***.com/questions/15130493/… 在contact.html或processForm.php中我应该把标题放在哪里? 【参考方案1】:

有两种方法:

    提交表单到同一页面:使用PHP脚本处理提交的表单。 (这可以通过将表单action 设置为当前页面 URL 来完成。)

    if(isset($_POST['submit'])) 
        // Enter the code you want to execute after the form has been submitted
        // Display Success or Failure message (if any)
       else 
        // Display the Form and the Submit Button
    
    

    使用 AJAX 表单提交,这对于初学者来说比方法 #1 稍微困难一些。

【讨论】:

是的,至少部分有效。您不会停留在同一个页面上——因为结果显示在一个新页面中——但它会好得多,因为你必须返回到第一页,从而避免堆积浏览器历史中相同 PHP 的副本。 @Apostolos - 如果 action(在 &lt;form&gt; 标记内设置为当前页面的 URL(或简称为 #),则重新加载同一页面。(不是新窗口。 )【参考方案2】:

你必须使用类似这样的代码:

echo "<div id='divwithform'>";

if(isset($_POST['submit']))  // if form was submitted (if you came here with form data)

    echo "Success";

else                // if form was not submitted (if you came here without form data)

    echo "<form> ... </form>";
 

echo "</div>";

像这样的带有if 的代码对于许多页面来说是典型的,但是这非常简化。

通常,您必须在第一个“if”中验证一些数据(检查表单字段是否为空等)。

请访问www.thenewboston.org 或phpacademy.org。有很不错的PHP视频教程,包括表格。

【讨论】:

【参考方案3】:

保持在同一页面上的最佳方式是发布到同一页面:

<form method="post" action="<?=$_SERVER['PHP_SELF'];?>">

【讨论】:

需要注意的是这个方法没有通过W3 Validator的HTML验证检查,因为它说“Bad value for attribute action on element form: Must be non-empty." 虽然它确实有效,但 HTML 打印是这样的,这会导致错误:&lt;form name="frmContactUs" action="" method="post"&gt; html-form-guide.com/php-form/php-form-action-self.html有一个代码示例 这当然可以理解,而且它不会改变任何东西,因为它与上面已经提到的 action="" 相同。 当心,你应该使用 htmlspecialchars($_SERVER['PHP_SELF'])。否则如果有人把JS放在一个url中就会受到xss攻击。 这与将其留空完全相同,但增加了 XSS 安全风险。坏主意。【参考方案4】:

为了在提交时停留在同一页面上,您可以将操作留空 (action="") 到表单标记中,或者完全不使用它。

对于消息,创建一个变量 ($message = "Success! You entered: ".$input;"),然后在页面中您希望消息出现的位置以 &lt;?php echo $message; ?&gt; 回显该变量。

像这样:

<?php
$message = "";
if(isset($_POST['SubmitButton'])) //check if form was submitted
  $input = $_POST['inputText']; //get input text
  $message = "Success! You entered: ".$input;
    
?>

<html>
<body>    
<form action="" method="post">
<?php echo $message; ?>
  <input type="text" name="inputText"/>
  <input type="submit" name="SubmitButton"/>
</form>    
</body>
</html>

【讨论】:

您检查过您的代码吗? 1)在第一次运行时,在提交之前,你会得到“未定义的变量消息”(当然!) 2)然后在每次提交时,都会加载一个新的表单来显示消息,并且它们都建立在浏览器的历史记录中!为什么你们在发布代码之前不检查代码??? @Apostolos 那么我将如何正确地使用这个例子呢?需要改变什么? 我不记得了。大约一年前我就不再使用 PHP,而且我目前没有可用的 Apachi 服务器进行测试。对不起。但据我记得,我设法使用“include”留在同一页面(即 PHP 文件)... echo $message; 周围添加if(isset($message))... 以确保不再出现“注意:未定义变量消息”。 using # instead 怎么样?利弊?【参考方案5】:

您可以在表单操作中使用# 操作:

<?php
    if(isset($_POST['SubmitButton'])) // Check if form was submitted

        $input = $_POST['inputText']; // Get input text
        $message = "Success! You entered: " . $input;
    
?>

<html>
    <body>
        <form action="#" method="post">
            <?php echo $message; ?>
            <input type="text" name="inputText"/>
            <input type="submit" name="SubmitButton"/>
        </form>
    </body>
</html>

【讨论】:

【参考方案6】:

试试这个...对我有用

<form action="submit.php" method="post">
<input type="text" name="input">
<input type="submit">
</form>

------提交.php ------

<?php header("Location: ../index.php"); ?>

【讨论】:

这将刷新页面。【参考方案7】:

朋友。使用这种方式,不会有“未定义的变量消息”,并且可以正常工作。

<?php
    if(isset($_POST['SubmitButton']))
        $price = $_POST["price"];
        $qty = $_POST["qty"];
        $message = $price*$qty;
    

        ?>

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>
        <form action="#" method="post">
            <input type="number" name="price"> <br>
            <input type="number" name="qty"><br>
            <input type="submit" name="SubmitButton">
        </form>
        <?php echo "The Answer is" .$message; ?>

    </body>
    </html>

【讨论】:

【参考方案8】:

我希望页面在出现错误时在提交后保留...所以我希望重新加载页面:

($_SERVER["PHP_SELF"])

虽然我从单独的文件中包含了脚本,例如

include_once "test.php";

我也在某处读到过

if(isset($_POST['submit']))

是一种初学者旧式的表单发布方式,并且

if ($_SERVER['REQUEST_METHOD'] == 'POST')

应该使用(不是我的话,在某处阅读)

【讨论】:

【参考方案9】:

同一页面上的表单操作可以查看以下示例

<form action="" method="post">
<table border="1px">
    <tr><td>Name: <input type="text" name="user_name" ></td></tr>
    <tr><td align="right"> <input type="submit" value="submit" name="btn"> 
</td></tr>
</table>
</form>

<?php
  if(isset($_POST['btn']))
     $name=$_POST['user_name'];
     echo 'Welcome '. $name; 
   
 ?>

【讨论】:

【参考方案10】:

简单的只是忽略 action 属性并在 php 中使用 !empty(非空)。

<form method="post">
        <input type="name" name="name">
        <input type="submit">
    </form>
    <?PHP
       if(!empty($_POST['name']))
        
           echo $_POST['name'];
       
    ?>

【讨论】:

以上是关于PHP 表单 - 提交时停留在同一页面上的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 表单提交不在同一页面上

在同一页面上显示提交的表单响应。 (没有重装)

获取表单以在同一页面上提交? [复制]

我希望我的 php 表单提交数据并在同一页面但不同的选项卡上重定向

提交表格不会停留在同一页面上

重定向到同一页面php后避免表单重新提交[重复]