2012-04-26 44 views
1

所以我有一個表單,包含javascript驗證以檢查每個字段是否存檔以及用於停止頁面重新加載的jquery ajax腳本。PHP只有在成功提交時纔會感謝你

PHP腳本非常簡單,只發送表單的字段。 問題是我需要只顯示謝謝你的消息,如果每個字段填寫,目前它似乎顯示它時,我只需輸入名稱字段。 它不顯示它,如果我只是輸入電子郵件或消息字段,但我不能解決爲什麼(我在PHP不好)。

<?php 



$name = $_POST['name']; 
$email = $_POST['email']; 
$priority = $_POST['priority']; 
$message = $_POST['message']; 
$telephone = $_POST['telephone']; 
$formcontent="From: $name \n Email: $email \n Telephone Number: $telephone \n Priority: $priority \n Message: $message"; 
$recipient = "[email protected]"; 
$subject = "Contact Form"; 
$mailheader = "From: $email \r\n"; 
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!"); 

if(mail($name,$email,$message,$headers)){ 
    echo "<p>Thanks for your mail...</p>"; 
} 


?> 

停止頁面重新加載的JavaScript。

<script type="text/javascript"> 

     $(document).ready(function() { 

      $(".contactus").submit(function() { 

       $.post("mail.php", $(".contactus").serialize(), 

        function(data) { 
         $("#formResponse").html(data); 
        } 
       ); 
       return false; 
      }); 
     }); 
    </script> 

表單驗證。

<script type="text/javascript" language="JavaScript"> 


var FormName = "contactus"; 



var RequiredFields = "name,email,priority,message"; 



function ValidateRequiredFields() 
{ 
var FieldList = RequiredFields.split(",") 
var BadList = new Array(); 
for(var i = 0; i < FieldList.length; i++) { 
    var s = eval('document.' + FormName + '.' + FieldList[i] + '.value'); 
    s = StripSpacesFromEnds(s); 
    if(s.length < 1) { BadList.push(FieldList[i]); } 
    } 
if(BadList.length < 1) { return true; } 
var ess = new String(); 
if(BadList.length > 1) { ess = 's'; } 
var message = new String('\n\nThe following field' + ess + ' are required:\n'); 
for(var i = 0; i < BadList.length; i++) { message += '\n' + BadList[i]; } 
alert(message); 
return false; 
} 

function StripSpacesFromEnds(s) 
{ 
while((s.indexOf(' ',0) == 0) && (s.length> 1)) { 
    s = s.substring(1,s.length); 
    } 
while((s.lastIndexOf(' ') == (s.length - 1)) && (s.length> 1)) { 
    s = s.substring(0,(s.length - 1)); 
    } 
if((s.indexOf(' ',0) == 0) && (s.length == 1)) { s = ''; } 
return s; 
} 
// --> 
</script> 

而且形式

<form action="mail.php" id="myform" class="contactus" onsubmit="return ValidateRequiredFields(); this.submit(); this.reset(); return false;" name="contactus" method="POST"> 
<p class="floatleft" style="width:200px; background-color:#FF0000; height:50px; line-height:50px; margin:0; padding:0;">Nameeeeee</p> <input class="sizetext" type="text" maxlength="10" name="name"> 
<div style="clear:both"></div> 
<p class="floatleft" style="width:200px;">Email</p> <input class="sizetext" type="text" maxlength="10" name="email"> 
<div style="clear:both"></div> 
<p class="floatleft" style="width:200px;">Telephone</p> <input class="sizetext" type="text" maxlength="10" name="telephone"> 


<p>Priority</p> 
<select name="priority" size="1"> 
<option value="Low">Low</option> 
<option value="Normal">Normal</option> 
<option value="High">High</option> 
<option value="Emergency">Emergency</option> 
</select> 

</select> 
<p>Message</p><textarea name="message" rows="6" cols="25"></textarea><br /> 

<br /> 
<input class="buttonstyle" type="submit" value="Send"> 
</form> 
+1

EVAL濫用和不必要的構造函數('新String')發現。 – 2012-04-26 20:23:08

+0

爲什麼你不檢查這些字段是否填寫在JavaScript中,並且只發布到發送郵件的PHP,如果所有字段都填寫完畢? – ContextSwitch 2012-04-26 20:25:01

+0

我想我真正要問的是如何做PHP表單驗證? – andy 2012-04-26 20:28:10

回答

2
<?php 

$name = $_POST['name']; 
$email = $_POST['email']; 
$priority = $_POST['priority']; 
$message = $_POST['message']; 
$telephone = $_POST['telephone']; 

$check = array('name', 'email', 'priority', 'message', 'telephone'); 
$send = true; 

foreach($check as $key => $value){ 
    if(empty($_POST[$value])){ 
     $send = false; 
    } 
} 


$formcontent="From: $name \n Email: $email \n Telephone Number: $telephone \n Priority: $priority \n Message: $message"; 
$recipient = "[email protected]"; 
$subject = "Contact Form"; 
$mailheader = "From: $email \r\n"; 

if($send && mail($recipient, $subject, $formcontent, $mailheader)){ 
    echo "<p>Thanks for your mail...</p>"; 
} 
else{ 
    die('Error!'); 
} 
+0

當填寫名稱字段時,這仍然告訴我'感謝您的郵件',沒有別的。 – andy 2012-04-26 20:45:33

+0

不,這只是發送不管什麼字段檢查 – andy 2012-04-26 20:56:54

+0

嘗試'if(!empty($ _ POST ['value'])'而不是isset – ContextSwitch 2012-04-26 21:13:53

0

您需要環繞

if(isset($_POST['submit'])) 
{ 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $priority = $_POST['priority']; 
    $message = $_POST['message']; 
    $telephone = $_POST['telephone']; 
    $formcontent="From: $name \n Email: $email \n Telephone Number: $telephone \n Priority: $priority \n Message: $message"; 
    $recipient = "[email protected]"; 
    $subject = "Contact Form"; 
    $mailheader = "From: $email \r\n"; 
    $mail = @mail($recipient, $subject, $formcontent, $mailheader); 

    if($mail){ 
     echo "<p>Thanks for your mail...</p>"; 
    } 
    else 
    { 
     echo "Error Sending Mail " ; 
    } 

} 
+0

這不起作用,甚至不發送電子郵件。 – andy 2012-04-26 20:43:44

1

嗯,你的代碼,最簡單的方法是檢查,如果你的POST字段存在而不是空的。有可能是一個更優雅的解決方案,如果你要分別檢查各個領域,但在這裏有雲:

if (isset($_POST['name']) && !empty($_POST['name']) && isset($_POST['email']) && !empty($_POST['email']) && isset($_POST['message']) && !empty($_POST['message'])) { 
    if(mail($name,$email,$message,$headers)){ 
echo "<p>Thanks for your mail...</p>"; 
    } 

} 
相關問題