2016-03-29 17 views
0

PHPの電子メールスクリプトについて何千もの質問がありますが、まだ私の答えは見つかりませんでした。私はPHPのウェブサイトを見たが、それは本当に助けていない。PHPの電子メールスクリプトが検証後に機能しない

基本的に私のスクリプトは、それに応じて入力し、表示されるエラーメッセージを検証しますが、私は、スクリプトの後半部分を追加すると、ページが500エラーを表示し、電子メールの送信を処理するために。ここに私のコードです。電子メールは、現時点で正しい電子メールに設定されていませんが、私はそれが問題ではないことを知っています。

<?php include('includes/header.php'); 

$yourEmail = "[email protected]"; 
$formSubject = "Message recieved from enquiry form"; 


if(isset($_POST["submit"])) { 

//Validate the data 
function validateFormData($formData) { 
    $formData = trim(stripslashes(htmlspecialchars($formData))); 
    return $formData; 
} 


//check to see if inputs are empty 
// create variables with form data 
// wrap the data with our function 

if(!$_POST['name']) { 
    $nameError = "Please enter your name <br />"; 
} else { 
    $name = validateFormData($_POST["name"]); 
} 
if(!$_POST['email'] || !preg_match("/^\[email protected]\S+$/", $email)) { 
    $emailError = "Please enter a valid email address <br />"; 
} else { 
    $email = validateFormData($_POST["email"]); 
}     
if(!$_POST['enquiry']) { 
    $enquiryError = "Please enter your enquiry <br />"; 
} else { 
    $enquiry = validateFormData($_POST["enquiry"]); 
} 

コードこの時点までは正常に動作します。

//Check to see if submit is set 
//Check to make sure errors don't exist 
//Send the email 
// Redirect user to success.html 


if (isset($_POST["submit"]) && (empty($emailError, $nameError, $enquiryError))) { 

$to = $yourEmail; 
$subject = $formSubject; 
$headers = 'From:'. $name . "\r\n". 
    'Reply-To: '. $email . "\r\n". 
    'X-Mailer: PHP/' . phpversion(); 

$body = 

'The person that contacted you was '.$name.' 
Email: '.$email.' 
URL: '.$url.' 
Message: '.$enquiry.''. 

mail($yourEmail, $formSubject, $body, $headers); 



header("Location: success.html"); 


} 
} 

?> 

これは、私はPHPは、特定の時点まで動作し、正しくエラーメッセージを表示する考慮大丈夫です確信してHTMLフォーム、です。私は多くの人が使用しないと言っているPHP_SELFを持っていることを知っていますが、エラーが存在し、電子メールが送信された場合にのみリダイレクトする場合は、ページに留まりたいと思っています。

<form id="contactForm" method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 

<label for="name">Name&nbsp;<span class="asterisk">*</span></label> 
<input type="text" name="name" id="name" value="<?php echo $name;?>"tabindex="1"/> 
<span class="error"><?php echo $nameError; ?></span> 

<label for="email">Email&nbsp;<span class="asterisk">*</span></label> 
<input type="email" name="email" id="email" value="<?php echo $email;?>" tabindex="2"/> 
    <span class="error"><?php echo $emailError; ?></span> 
    <span class="error"><?php echo $emailValidError; ?></span> 

<label for="url">Website</label> 
    <input type="url" name="url" id="url" value="<?php echo $url;?>" tabindex="3"/> 


<h3>Tell us about your project&nbsp;</h3><br /> 

<textarea name="enquiry" id="enquiry" tabindex="4"><?php echo $enquiry;?></textarea> 
    <span class="error"><?php echo $enquiryError; ?></span> 

    <button type="submit" id="submit" name="submit" value="submit" >Submit</button> 

</form> 
+2

エラー500、あなたのログやエラー報告をチェックしてください。 –

+1

'mail'関数はメールを送信したことを通知することさえできますが、宛先に到達する保証はありません。 PHP用のSMTPライブラリを使用してみてください。 –

答えて

0

お使いの問題はここにある:

if(isset($_POST["submit"]) && (empty($emailError) && empty($nameError) && empty($enquiryError))) 

それとも、それを短くしたい場合:

empty($emailError, $nameError, $enquiryError) 

空はあなたに条件付きそれを3.変更を渡している、唯一のparamを受け入れます条件は少し

$Errors = $emailError.$nameError.$enquiryError; 
if(isset($_POST["submit"]) && empty($Errors)) 
+0

これは完全に機能しました。ご協力いただきありがとうございます。 –

0

このため、エラーが発生します。最初の構文エラーとそれから(空($ emailError、$ nameError、$ enquiryError))は良い考えではありません。私は次のようなことをします:

$err=0; 
if(!$_POST['name']) { 
     $nameError = "Please enter your name <br />"; 
     $err++; 
     } else { 
     $name = validateFormData($_POST["name"]); 
     $err++; 
     } 

if(!$_POST['email'] || !preg_match("/^\[email protected]\S+$/", $email)) { 
     $emailError = "Please enter a valid email address <br />"; 
     $err++; 
     } else { 
     $email = validateFormData($_POST["email"]); 
    }   


if(!$_POST['enquiry']) { 
     $enquiryError = "Please enter your enquiry <br />"; 
     $err++; 
     } else { 
     $enquiry = validateFormData($_POST["enquiry"]); 
    } 

    if (isset($_POST["submit"]) && $err==0) { 
     //your code here// 
     //and i would do like this// 
     $result_mail_send = mail($yourEmail, $formSubject, $body, $headers); 
     if($result_mail_send==true){ 
       //redirect to success 
     }else{ 
       //redirect to fail// 
     } 

    } 
関連する問題