【问题标题】:Submitting form and success message on same page?在同一页面上提交表单和成功消息?
【发布时间】:2015-07-13 05:02:46
【问题描述】:

所以现在我有一个基本的contact.html 和一个php 脚本,如果我的网站上有人与我联系,我会向我发送电子邮件。当他们点击提交时,它会将他们带到contact_sent.php,这是一个空白页面。我想要这样当他们点击提交时,它会让他们保持在同一页面上,并显示来自SweetAlert 的成功消息,然后清除表单,这样他们就不会向“发送消息”按钮发送垃圾邮件。

<?php
if ($_POST['submit']) {
    $name=$_POST['name'];
    $email=$_POST['email'];
    $subject=$_POST['subject'];
    $message=$_POST['msg'];
    $to_add="***********@gmail.com";
    $from_add="form@***********.net";

    $email_message="<br /><br /><b>Name:</b><br />$name <br />";
    $email_message.="<br /><br /><b>Reply Email:</b><br />$email <br />";
    $email_message.="<br /><br /><b>Regarding:</b><br />$subject <br />";
    $email_message.="<br /><br /><b>Message:</b><br />$message <br />";

    $headers="From: $from_add \r\n";
    $headers.="Reply-To: $from_add \r\n";
    $headers.="Return-Path: $from_add\r\n";
    $headers.="X-Mailer: PHP \r\n";
    $headers.="MIME-Version: 1.0\r\n";
    $headers.="Content-Type: text/html;\r\n";

    mail($to_add,$subject,$email_message,$headers);
}
alert("Sent!");
?>

编辑:最后的警报不起作用。

【问题讨论】:

  • alert 是 js 函数而不是 php 函数
  • @Dagon 不理会。​​span>
  • 将表单提交到同一页面,将表单与响应分开。

标签: javascript php jquery html forms


【解决方案1】:

您所描述的本质上是 AJAX。如果您使用的是 jquery,您可以在按下按钮时使用其 $.ajax 函数并通过其 data 属性发送数据。根据您当前的 PHP 代码,它可能看起来像这样:

 $.ajax({ url: '/route/to/php/function',
         data: {name = nameVal,
         email = emailVal,
         subject = subjectVal,
         message = messageVal},
         type: 'post',
         success: function(output) {
                      //do whatever after the POST is successful
                  }
});

您可以在 $.ajax 调用之前或之后将表单清除代码和 SweetAlert 代码放在提交按钮的同一个事件侦听器中。

【讨论】:

  • 呸,这可以在没有 ajax 的情况下完成。并非所有答案都使用 ajax
  • 我更喜欢不使用 AJAX,但如果必须,我会使用它。
  • 正如@Dagon 所说,这与使用Ajax 无关。它是关于从 PHP 的角度管理结果。 Ajax 只会帮助您在不刷新页面的情况下管理事物。
  • Ajax = 没有需要刷新的页面。您还可以通过这种方式更轻松地防止表单重新提交。我不确定谁对此投了反对票,但根据所提问题的背景,这是一个可行的解决方案。代码alert("foo"); 是javascript。其他解决方案也不错,但会让用户远离原始页面。理想情况下,结合使用良好的 php post 处理程序和 ajax for ux。
【解决方案2】:
<?
if ($_POST['submit'])
{
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['msg'];
$to_add = "***********@gmail.com";
$from_add = "form@***********.net";

$email_message = "<br /><br /><b>Name:</b><br />$name <br />";
$email_message .= "<br /><br /><b>Reply Email:</b><br />$email <br />";
$email_message .= "<br /><br /><b>Regarding:</b><br />$subject <br />";
$email_message .= "<br /><br /><b>Message:</b><br />$message <br />";

$headers = "From: $from_add \r\n";
$headers .= "Reply-To: $from_add \r\n";
$headers .= "Return-Path: $from_add\r\n";
$headers .= "X-Mailer: PHP \r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html;\r\n";

mail($to_add,$subject,$email_message,$headers);

//echo js alert
}else{ // form not submitted yet
//display form code

}

?>

【讨论】:

    【解决方案3】:

    alert 是 javascript 代码。所以你需要你的 php 脚本来生成那个 javascipt。希望对你有帮助

    <?php
        if($_POST['submit']) {
            //your other codes here
    
            mail($to_add,$subject,$email_message,$headers);
            //becareful keep the whole javascript code on mail function's success.
            //I just added how to do It.It will alert too if your mail function return false.
            ?>
            <script type="text/javascript">
                alert("Sent!");
            </script>
            <?php
        }
    ?>   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多