【问题标题】:PHP how to prevent page redirection after mail send?PHP如何防止邮件发送后页面重定向?
【发布时间】:2013-12-31 11:46:02
【问题描述】:

我有 2 个具有相同代码的单独文件。 contact.html 和contact.php 我使用contact.html 进行ajax 调用以在其中加载内容,并使用contact.php 发送邮件。但我不希望人们重定向到contact.php 导致页面崩溃。 (您也可以尝试填写表格并查看我的问题) 我想要什么;是否可以在发送按钮的底部给出“消息发送成功”消息,并且仍然保持在同一页面而不重定向?

click here to see the page

content/contact.php 和 content/contact.html 代码

<div class="section group">
        <!-- Contact Form -->
        <div id="contact-form" class="col span_6_of_12">
            <h2 class="main-heading">
                <span><i class="fa fa-envelope"></i> Contact Me!</span>
            </h2>
<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
  {
  //send email
  $email = $_REQUEST['email'] ;
  $subject = $_REQUEST['subject'] ;
  $message = $_REQUEST['message'] ;
  mail("hiamina@asdkasd.com", $subject,
  $message, "From:" . $email);
  echo "Thank you for using our mail form";
  }
?>  


   <form method="post" action="content/contact.php" id="contactform">
                <p>
                    <label for="name">
                        <b> Your Name</b>
                    </label>
                    <br>
                    <input type="name" name="name" class="input" placeholder="type here">
                </p>
                <p>
                    <label for="email">
                        <b> Your Email</b>
                    </label>
                    <br>
                    <input type="email" name="email" class="input" placeholder="type here">
                </p>
                <p>
                    <label for="message">
                        <b> Your Message</b>
                    </label>
                    <br>
                    <textarea name="message" cols="60" rows="6" id="textarea"></textarea>
                </p>
                <input type="submit" id="submit" name="send" value="Send your message" class="send">
            </form>




        </div>
    <!-- /Contact Form -->


            <div id="space" class="col span_1_of_12"></div>


        <!-- Adress -->
        <div id="adress-container" class="col span_5_of_12">

            <h3><i class="fa fa-users"></i> Get in touch</h3>
            <hr>
            <p>Malis do cernantur qui cillum ullamco sed aliqua fore. Quem in ubi illum doctrina, consequat id multos tempor, senserit multos te admodum comprehenderit, an quem lorem o incurreret ut multos comprehenderit fabulas eram voluptate hic</p>

        </div>
        <!-- /Adress -->

    </div>

【问题讨论】:

  • 我认为最好看看你的contact.php为什么会崩溃。因为这可能是发送电子邮件的问题。
  • 我认为如果您使用的是ajax,那么您应该这样做。
  • 顺便说一句,我没有在您的页面中看到任何 AJAX .. 您只是将表单提交到 content/contact.php
  • 你在 php 或 ajax 方面有问题?

标签: jquery ajax email php


【解决方案1】:

你应该用ajax发布它,这将阻止它改变页面,你仍然会得到信息。

$(function() {
    $('form').submit(function() {
        $.ajax({
            type: 'POST',
            url: 'submit.php',
            data: { username: $(this).name.value, 
                    password: $(this).password.value }
        });
        return false;
    }); 
})

http://api.jquery.com/jQuery.post/

【讨论】:

    【解决方案2】:

    您无法阻止使用 php 表单重新加载页面,您需要像这样使用 Ajax 来实现此目的

    $("#submit").click(function(e){
    
    var emailid= "hiamina@asdkasd.com"
    
    jQuery.post("mails.php", {
    
    email:$("#email").val(),
    subject:$("#subject").val(),
    message:$("#message").val(),
    emailid:emailid
    
    
    },  function(data, textStatus){
    
    if( data == 1)
    {
    alert("Mail not sent");
    e.preventDefault(); 
    }
    else
    {
    alert("Mail sent");
    e.preventDefault(); 
    }
    
    });
    
    });
    

    mails.php

    $email = $_POST['email'] ;
      $subject = $_POST['subject'] ;
      $message = $_POST['message'] ;
      $emailid= $_POST['emailid'] ;
      if(mail($emailid, $subject, $message, "From:" . $email))
      echo "2";
    else
    echo "1";
    

    也改一下

    <input type="submit" id="submit" name="send" value="Send your message" class="send">
    

    <input type="button" id="submit" name="send" value="Send your message" class="send">
    

    【讨论】:

    • 它的作品,但这次邮件的内容不包括邮件:) 并且当您点击提交按钮时,它会发送大量邮件,直到您停止点击它。也没有提示信息显示。
    • 尝试从 html 部分移除
      标签。
    【解决方案3】:

    您有一个表单操作,它在 content/contact.php 中发布数据,您可以通过 2 种方式进行操作

    • 如果您发布到上述页面,然后在电子邮件发送脚本完成后,您可以使用 header() 或 javascript 重定向到 contact.html 页面。您可以在会话中设置您的消息并在重定向后显示,但为此页面应该能够执行 PHP 脚本 (contact.html)

    • 使用 Ajax 在 content/contact.php 中发布数据,提交表单并成功显示消息。

    【讨论】:

      【解决方案4】:

      我在这里看不到你的 ajax 部分 但每次您可以在邮件和回显之后使用exit 以避免重定向 先创建一个html文件名email.html

      <script>
      $(function() {
          $('#contactform').submit(function() {
      var name = $('#name').val();
      var email =$('#email').val();
      var value =$('#textarea').val();
              $.ajax({
                  type: 'POST',
                  url: 'email.php',
                  data: { name:name ,email:email ,text:value  }
              });
              return false;
          }); 
      })
      </script>
      <form method="post" action="content/contact.php" id="contactform">
                          <p>
                              <label for="name">
                                  <b> Your Name</b>
                              </label>
                              <br>
                              <input type="name" id="name" class="input" placeholder="type here">
                          </p>
                          <p>
                              <label for="email">
                                  <b> Your Email</b>
                              </label>
                              <br>
                              <input type="email" id="email" class="input" placeholder="type here">
                          </p>
                          <p>
                              <label for="message">
                                  <b> Your Message</b>
                              </label>
                              <br>
                              <textarea name="message" cols="60" rows="6" id="textarea"></textarea>
                          </p>
                          <input type="submit" id="submit" name="send" value="Send your message" class="send">
                      </form>
      

      然后将下面的代码另存为email.php:

      <?php
      if (isset($_POST['email']))
      //if "email" is filled out, send email
        {
        //send email
        $email = $_REQUEST['email'] ;
        $subject = $_REQUEST['subject'] ;
        $message = $_REQUEST['message'] ;
        mail("hiamina@asdkasd.com", $subject,
        $message, "From:" . $email);
        echo "Thank you for using our mail form";
         exit;
        }
      ?> 
      

      完成!

      【讨论】:

        猜你喜欢
        • 2022-12-13
        • 2012-09-09
        • 1970-01-01
        • 2015-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-09
        • 1970-01-01
        相关资源
        最近更新 更多