提问者:小点点

如何防止PHP表单提交后页面重新加载?


我有这个基本的PHP表单,我想防止页面在按下提交按钮后刷新。 或者更像,我想有一个确认段落创建后,表单被发送。

我已经很接近了,但是段落没有显示出来,我想是因为页面被刷新了。

if($_POST["submit"]) {
$recipient="contact@d.com";
$subject="Form to email message";
$sender=$_POST["sender"];
$senderEmail=$_POST["senderEmail"];
$message=$_POST["message"];

$mailBody="Name: $sender\nEmail: $senderEmail\n\n$message";

mail($recipient, $subject, $mailBody, "From: $sender <$senderEmail>");

$thankYou="<div class='thanksDiv'><p>Thank you! Your message has been sent. I'll get back to you ASAP. <i class='as fa-smile-beam'></i></p><a style='cursor:pointer' class='thanksExit'><i class='fas fa-times fa-2x'></i></a></div>";
}

null

<form id="myForm" name="myemailform" method="post" action="index.php">
          <div class="inline">
                        <label>Name</label>
                        <input id="firstName" required placeholder="e.g: Emma" type="text" size="32" name="sender" value="">
          </div>
          <div class="inline">
                        <label>Email</label>
                        <input autocomplete="off" required id="email" type="email" placeholder="e.g: EmmaSmith@example.com" name="senderEmail">
          </div>

          <div class="inline">
                        <label>How can I help?</label>
                        <textarea id="textarea" required placeholder="Type a message here..." name="message"></textarea>
          </div>

                        <input type="submit" name="submit" value="Submit">
                        <?=$thankYou ?>
</form>

null

注意:我尝试了preventDefault函数和Ajax,但它们都不起作用。

谢谢!


共3个答案

匿名用户

它们是解决这一问题的不同方式和方法。

我是怎么做的:我有一个处理php,它将接收帖子并发送电子邮件,然后我将用户重定向到一个感谢页面。

header("location: thanks.php);
exit();

您还可以使用ajax,并在按下按钮后将其禁用。 这取决于开发人员,框架和编程偏好。

匿名用户

您首先需要将一些数据从PHP发送回AJAX。

session_start();
if(issset($_POST["submit"])) {
  $recipient="contact@d.com";
  $subject="Form to email message";
  $sender=$_POST["sender"];
  $senderEmail=$_POST["senderEmail"];
  $message=$_POST["message"];

  $mailBody="Name: $sender\nEmail: $senderEmail\n\n$message";

  mail($recipient, $subject, $mailBody, "From: $sender <$senderEmail>");

  $thankYou="<div class='thanksDiv'><p>Thank you! Your message has been sent. I'll get back to you ASAP. <i class='as fa-smile-beam'></i></p><a style='cursor:pointer' class='thanksExit'><i class='fas fa-times fa-2x'></i></a></div>";
    
  echo $thankYou;
}

现在PHP将把HTML发送回AJAX调用。

null

$(function() {
  $("#myForm").submit(function(e) {
    e.preventDefault();
    $.post($(this).attr("action"), $(this).serialize(), function(result) {
      $(this).append(result);
    });
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="myForm" name="myemailform" method="post" action="index.php">
  <div class="inline">
    <label>Name</label>
    <input id="firstName" required placeholder="e.g: Emma" type="text" size="32" name="sender" value="">
  </div>
  <div class="inline">
    <label>Email</label>
    <input autocomplete="off" required id="email" type="email" placeholder="e.g: EmmaSmith@example.com" name="senderEmail">
  </div>
  <div class="inline">
    <label>How can I help?</label>
    <textarea id="textarea" required placeholder="Type a message here..." name="message"></textarea>
  </div>
  <input type="submit" name="submit" value="Submit">
</form>

匿名用户

快速修复将与会议。 。。设置会话和刷新后显示消息并取消设置。

张贴:

session_start(); //at top of the code
if($_POST["submit"]) {
    $recipient="contact@d.com";
    $subject="Form to email message";
    $sender=$_POST["sender"];
    $senderEmail=$_POST["senderEmail"];
    $message=$_POST["message"];

    $mailBody="Name: $sender\nEmail: $senderEmail\n\n$message";

    mail($recipient, $subject, $mailBody, "From: $sender <$senderEmail>");

    $thankYou="<div class='thanksDiv'><p>Thank you! Your message has been sent. I'll get back to you ASAP. <i class='as fa-smile-beam'></i></p><a style='cursor:pointer' class='thanksExit'><i class='fas fa-times fa-2x'></i></a></div>";
    
    $_SESSION['thankYou']=$thankYou;
}

形式:

<form id="myForm" name="myemailform" method="post" action="index.php">
    <div class="inline">
        <label>Name</label>
        <input id="firstName" required placeholder="e.g: Emma" type="text" size="32" name="sender" value="">
    </div>
    <div class="inline">
        <label>Email</label>
        <input autocomplete="off" required id="email" type="email" placeholder="e.g: EmmaSmith@example.com" name="senderEmail">
    </div>

    <div class="inline">
        <label>How can I help?</label>
        <textarea id="textarea" required placeholder="Type a message here..." name="message"></textarea>
    </div>

    <input type="submit" name="submit" value="Submit">
    <?php if(!empty($_SESSION['thankYou'])){ echo $_SESSION['thankYou']; unset($_SESSION['thankYou']); } ?>
</form>

您还可以使用header()ajax来实现