簡體   English   中英

單擊“提交”時,Ajax和PHP聯系人表單顯示空白頁

[英]Ajax & PHP Contact Form displays a blank page when clicking “submit”

我正在嘗試在HTML模板/主題上使用此聯系表單,但是當我單擊“提交”按鈕時,它會將我重定向到空白頁/白頁(源代碼為空;地址欄顯示為mail.php頁面)是否有效地填寫了姓名,電子郵件,消息字段。 如果我確實有效地完成了這三個字段,那么它將成功發送電子郵件,但仍會重定向到空白頁面,如果沒有,它將僅重定向到空白mail.php頁面,而不會顯示任何php /驗證錯誤。

我在本地主機(xampp)和實時服務器上均進行了測試,結果相同。

contact.html(jQuery-頁面標題內):

<script >
    $("#contactform").submit(function(e){
      e.preventDefault();
      var name = $("#name").val();
      var email = $("#email").val();
      var message = $("#message").val();
      var dataString = 'name=' + name + '&email=' + email + '&message=' + message;
      function isValidEmail(emailAddress) {
        var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
        return pattern.test(emailAddress);
      };

      if (isValidEmail(email) && (message.length > 10) && (name.length > 1)){
        $.ajax({
        type: "POST",
        url: "mail.php",
        data: dataString,
        success: function(){
          $('.success').fadeIn(1000);
        }
        });
      } else{
        $('.error').fadeIn(1000);
      }

      return false;
    });
</script>

contact.html(聯系表格):

<form id="contactform" action="mail.php" method="post">
    <table>
        <tr>
            <td><input type="text" id="name" name="name" placeholder="Your Name" /></td>
        </tr>
        <tr>
            <td><input type="text" id="email" name="email" placeholder="Your Email Address" /></td>
        </tr>
        <tr>
            <td><textarea id="message" placeholder="Your Message" name="message" rows="10" cols="20"></textarea></td>
        </tr>
        <tr>
            <td>
                <input type="submit" value="Send" id="send" class="button" />
                <input type="reset" value="Reset" class="button" />
            </td>
        </tr>
    </table>
    <p class="success" style="display:none">Your message has been sent successfully.</p>
        <p class="error" style="display:none">E-mail must be valid and message must be longer than 100 characters.</p>
</form>

mail.php:

<?php
error_reporting( E_ALL );
// Email Submit
// Note: filter_var() requires PHP >= 5.2.0
if ( isset($_POST['email']) && isset($_POST['name']) && isset($_POST['message']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {

  // detect & prevent header injections
  $test = "/(content-type|bcc:|cc:|to:)/i";
  foreach ( $_POST as $key => $val ) {
    if ( preg_match( $test, $val ) ) {
      exit;
    }
  }

  //send email
  mail( "johndoe@gmail.com", "Contact Form: ".$_POST['name'], $_POST['message'], "From:" . $_POST['email'] );

}
?>

您在表單中的操作不應是mail.php。 因此,表單是在處理AJAX請求之前提交的。

只需刪除表單操作,然后在同一頁面上進行操作即可,因為它是通過ajax提交的

<form id="contactform" method="post">
<table>
    <tr>
        <td><input type="text" id="name" name="name" placeholder="Your Name" /></td>
    </tr>
    <tr>
        <td><input type="text" id="email" name="email" placeholder="Your Email Address" /></td>
    </tr>
    <tr>
        <td><textarea id="message" placeholder="Your Message" name="message" rows="10" cols="20"></textarea></td>
    </tr>
    <tr>
        <td>
            <input type="submit" value="Send" id="send" class="button" />
            <input type="reset" value="Reset" class="button" />
        </td>
    </tr>
</table>
<p class="success" style="display:none">Your message has been sent successfully.</p>
    <p class="error" style="display:none">E-mail must be valid and message must be longer than 100 characters.</p>

接下來,您應該添加此

<?php if ( isset($_POST['email']) && isset($_POST['name']) && isset($_POST['message']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {

// detect & prevent header injections
 $test = "/(content-type|bcc:|cc:|to:)/i";
   foreach ( $_POST as $key => $val ) {
     if ( preg_match( $test, $val ) ) {
     exit;
    }
  }

 //send email
   mail( "johndoe@gmail.com", "Contact Form: ".$_POST['name'], $_POST['message'], "From:" . $_POST['email'] );

}

我知道我一定犯了一個愚蠢的錯誤... :))從聯系表單中刪除“ mail.php”操作並在body標簽內移動了jQuery部分之后,我以某種方式將收件人電子郵件地址更改為johndoe @ gmail .com,而不是我的真實電子郵件帳戶。 更正后,一切開始正常工作。 感謝Sudhanshu和Stefan。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM