2011-03-08 40 views
-1

試圖做客戶端和服務器端驗證我有2個文件。客戶端是好的,它似乎是服務器端的錯誤,它根本不發送。爲什麼這個聯繫表格不工作?

謝謝。

form.php的:

<html> 
<head> 
<style type="text/css"> 
label.error{color:red; font-weight:bold;} 
</style> 
<script type="text/javascript" src="jquery.js"> </script> 
<script type="text/javascript" src="validation.js"> </script> 
<script type="text/javascript"> 
$.validator.setDefaults({ 
    submitHandler: function() { alert("submitted!"); } 
}); 

$().ready(function() { 
    // validate the comment form when it is submitted 
    $("#commentForm").validate(); 

    // validate signup form on keyup and submit 
    $("#signupForm").validate({ 
     rules: { 
      firstname: "required", 
      lastname: "required", 
      username: { 
       required: true, 
       minlength: 2 
      }, 
      password: { 
       required: true, 
       minlength: 5 
      }, 
      confirm_password: { 
       required: true, 
       minlength: 5, 
       equalTo: "#password" 
      }, 
      email: { 
       required: true, 
       email: true 
      }, 
      topic: { 
       required: "#newsletter:checked", 
       minlength: 2 
      }, 
      agree: "required" 
     }, 
     messages: { 
      firstname: "Please enter your firstname", 
      lastname: "Please enter your lastname", 
      username: { 
       required: "Please enter a username", 
       minlength: "Your username must consist of at least 2 characters" 
      }, 
      password: { 
       required: "Please provide a password", 
       minlength: "Your password must be at least 5 characters long" 
      }, 
      confirm_password: { 
       required: "Please provide a password", 
       minlength: "Your password must be at least 5 characters long", 
       equalTo: "Please enter the same password as above" 
      }, 
      email: "Please enter a valid email address", 
      agree: "Please accept our policy" 
     } 
    }); 

    // propose username by combining first- and lastname 
    $("#username").focus(function() { 
     var firstname = $("#firstname").val(); 
     var lastname = $("#lastname").val(); 
     if(firstname && lastname && !this.value) { 
      this.value = firstname + "." + lastname; 
     } 
    }); 

    //code to hide topic selection, disable for demo 
    var newsletter = $("#newsletter"); 
    // newsletter topics are optional, hide at first 
    var inital = newsletter.is(":checked"); 
    var topics = $("#newsletter_topics")[inital ? "removeClass" : "addClass"]("gray"); 
    var topicInputs = topics.find("input").attr("disabled", !inital); 
    // show when newsletter is checked 
    newsletter.click(function() { 
     topics[this.checked ? "removeClass" : "addClass"]("gray"); 
     topicInputs.attr("disabled", !this.checked); 
    }); 
}); 
</script> 

</head> 

<body> 
<form class="cmxform" id="commentForm" method="post" action="f_validate.php" > 
    <fieldset> 
     <legend>Please provide your name provide required fields below.</legend> 
     <p> 
      <label for="cname">* Name</label> 
      <input id="cname" name="name" class="required" minlength="2" /> 
     <p> 
      <label for="cemail">* Email</label> 
      <input id="cemail" name="email" class="required email" /> 
     </p> 
     <p> 
      <label for="curl">URL</label> 
      <input id="curl" name="url" class="url" value="" /> 
     </p> 
     <p> 
      <label for="ccomment">* Comment</label> 
      <textarea id="ccomment" name="comment" class="required"></textarea> 
     </p> 
     <p> 
      <input class="submit" type="submit" value="Submit"/> 
     </p> 
    </fieldset> 
</form> 

</body> 

</html> 

f_validate.php

<?php 
$errors = ''; 
$myemail = '[email protected]'; 
if(empty($_POST['name']) || 
    empty($_POST['email']) || 
    empty($_POST['comment'])) 
{ 
    $errors .= "\n Error: all fields are required"; 
} 

$name = $_POST['name']; 
$email_address = $_POST['email']; 
$comment = $_POST['comment']; 

if (!eregi(
"^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", 
$email_address)) 
{ 
    $errors .= "\n Error: Invalid email address"; 
} 

if(empty($errors)) 
{ 
    $to = $myemail; 
    $email_subject = "Contact form submission: $name"; 
    $email_body = "You have received a new message. ". 
    " Here are the details:\n Name: $name \n Email: $email_address \n Message \n $comment"; 

    $headers = "From: $myemail"; 
    $headers .= "Reply-To: $email_address"; 

    mail($to,$email_subject,$email_body,$headers); 
    //redirect to the 'thank you' page 
    header('Location: http://www.josephdickinson.com'); 
} 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <title>Contact form handler</title> 
</head> 

<body> 
<!-- This page is displayed only if there is some error --> 
<?php 
echo nl2br($errors); 
?> 


</body> 
</html> 
+0

PHP是否正確配置了郵件服務器?測試是否有效?您還需要一個\ r \ n後'$頭= 「從:$ myemail」;',所以它會成爲'$頭= 「來源:$ myemail \ r \ n」;' - 只是說。 – 2011-03-08 02:47:02

+0

爲安全使用PHP_EOL而不是'\ r \ n'或'\ n'。如果它是窗口服務器'\ n'不會發送。 – kjy112 2011-03-08 02:48:29

+0

你想讓我們猜測什麼是錯的?或者根據您給我們準確的錯誤給出準確的答案? – Jakub 2011-03-08 02:49:27

回答

1
  1. 檢查是否eregi正則表達式的實際工作(eregi已過時,對了,你應該切換preg_match改爲
  2. 檢查返回來自mail()函數的n值 - 如果將電子郵件轉交給本地SMTP服務器時出現問題,郵件將返回布爾值FALSE。
  3. 檢查SMTP服務器的日誌 - 郵件可能已經得到了停留在隊列中,被接收服務器拒絕,傾倒入垃圾郵件文件夾,等等......正因爲mail()返回true並不意味着電子郵件竟是交付給收件人。