2012-04-26 39 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>"; 
    } 

} 
相关问题