2016-04-28 46 views
0

我用Php構建了一個reCaptcha驗證表單,並且我很難編程php。我想設置2個參數,我不知道誰來構建它。使用Mail html模板進行PHP表單+ Google reCAPTCHA驗證

現在,一切正常,但如果驗證碼失敗,則發送電子郵件。

我剛剛在PHP中編程的困難。這裏是我想做的事:

  1. 當驗證碼是失敗的 - 顯示消息對話框到窗體和不發送電子郵件;

  2. 當驗證碼是成功的 - 發送郵件顯示成功消息到PHP頁面。

組成部分:(腳本調用)

<script src="https://www.google.com/recaptcha/api.js"></script> 

消息顯示,一旦成功或失敗...形式:

<?php 
if (isset($_POST["submit"])) { 

    $url = 'https://www.google.com/recaptcha/api/siteverify'; 
    $privatekey = "PRIVATE KEY"; 

    $response = file_get_contents($url."?secret=".$privatekey."&response=".$_POST['g-recaptcha-response']."&remoteip=".$_SERVER['REMOTE_ADDR']); 
    $data = json_decode($response); 

    if(isset($data->success) AND $data->success==true){ 

     header('Location: appel_de_service.php?CaptchaPass=True'); 


$to = "[email protected]"; 
$from = $_POST['courriel']; 
$from_name = $_POST['nom_responsable']; 
$subject = "Reception d'un appel de service "; 
$nom_compagnie = $_POST['nom_compagnie']; // required 
$adresse = $_POST['adresse']; // required 
$ville = $_POST['ville']; 
$province = $_POST['province']; 
$code_postale = $_POST['code_postale']; 
$nom_responsable = $_POST['nom_responsable']; 
$courriel = $_POST['courriel']; 
$telephone = $_POST['telephone']; 
$marque = $_POST['marque']; 
$numero_modele = $_POST['numero_modele']; 
$garantie = $_POST['garantie']; 
$description = $_POST['description'];    
$disponibilite = $_POST['disponibilite']; // required 
$coordonnees = $_POST['coordonnees']; // required 

$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
$headers .= "Reply-to: $courriel"; 

$message = " 
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"> 
<html> 
<head> 
<title>Appel de service (rempli sur le site internet)</title> 
<style type=\"text/css\"> 
h1,h2,h3,h4,h5,h6 { 
    font-family: Cambria, \"Hoefler Text\", \"Liberation Serif\", Times, \"Times New Roman\", serif; 
    color: #272727; 
} 
</style> 
</head> 
<body> 
<h2 style=\"font-size: 1.25em; font-family: Gotham, ʼHelvetica Neueʼ, Helvetica, Arial, sans-serif;\">Vous avez re&ccedil;u une demande d'appel de service en ligne.</h2> 
<table width=\"500\" border=\"1\" cellpadding=\"5\" cellspacing=\"2\"> 
    <tbody> 
    <tr> 
     <td colspan=\"2\" align=\"left\" valign=\"middle\" bgcolor=\"#84BDEC\"><h3>Informations sur l'adresse du service</h3></td> 
    </tr> 
    <tr> 
     <td width=\"155\" align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Nom de la compagnie</td> 
     <td width=\"313\" align=\"left\" valign=\"middle\">$nom_compagnie</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Adresse</td> 
     <td align=\"left\" valign=\"middle\">$adresse</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Ville</td> 
     <td align=\"left\" valign=\"middle\">$ville</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Province</td> 
     <td align=\"left\" valign=\"middle\">$province</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Code postale</td> 
     <td align=\"left\" valign=\"middle\">$code_postale</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Nom du responsable</td> 
     <td align=\"left\" valign=\"middle\">$nom_responsable</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">T&eacute;l&eacute;phone</td> 
     <td align=\"left\" valign=\"middle\">$telephone</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Adresse courriel</td> 
     <td align=\"left\" valign=\"middle\">$courriel</td> 
    </tr> 
    </tbody> 
</table> 
<br> 
<table width=\"500\" border=\"1\" cellpadding=\"5\" cellspacing=\"2\"> 
    <tbody> 
    <tr> 
     <td colspan=\"2\" align=\"left\" valign=\"middle\" bgcolor=\"#84BDEC\"><h3>Informations sur le produit</h3></td> 
    </tr> 
    <tr> 
     <td width=\"155\" align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Marque</td> 
     <td width=\"313\" align=\"left\" valign=\"middle\">$marque</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Num&eacute;ro de mod&egrave;le</td> 
     <td align=\"left\" valign=\"middle\">$numero_modele</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Garantie</td> 
     <td align=\"left\" valign=\"middle\">$garantie</td> 
    </tr> 
    <tr bgcolor=\"#D5D5D5\"> 
     <td colspan=\"2\" align=\"left\" valign=\"middle\">Description du probl&egrave;me :</td> 
    </tr> 
    <tr> 
     <td height=\"75\" colspan=\"2\" align=\"left\" valign=\"top\">$description</td> 
    </tr> 
    </tbody> 
</table> 
<br> 
<table width=\"500\" border=\"1\" cellpadding=\"5\" cellspacing=\"2\"> 
    <tbody> 
    <tr> 
     <td colspan=\"2\" align=\"left\" valign=\"middle\" bgcolor=\"#84BDEC\"><h3>Pr&eacute;f&eacute;rences pour le rendez-vous</h3></td> 
    </tr> 
    <tr> 
     <td width=\"155\" align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Disponibilit&eacute;</td> 
     <td width=\"313\" align=\"left\" valign=\"middle\">$disponibilite</td> 
    </tr> 
    <tr> 
     <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Coordonn&eacute;es</td> 
     <td align=\"left\" valign=\"middle\">$coordonnees</td> 
    </tr> 
    </tbody> 
</table> 
</body> 
</html> 
"; 

// Always set content-type when sending HTML email 

mail($to, $subject, $message, $headers); 

} 

    }else{ 

     echo '<h2 class="text center">La vérification Anti-Spam na pas été validée. Veiullez revenir en arrière et compléter la partie Anti-Spam. </h2>'; 


    } 


?> 
+0

您正在接受來自用戶的輸入,並將其直接傳遞給'mail'而不進行消毒處理。這意味着用戶可以傳遞一個From地址,比如'[email protected] \ r \ nBcc:[email protected],[email protected],[email protected] ...'。看看如何使用電子郵件庫來處理這個問題,或者至少在郵件數據中檢查換行符。 –

回答

1

你幾乎沒有。您只需要將所有內容都包含在if-else聲明中。而且你也不需要發送遠程IP地址和URL。因此,表單提交後,如下處理表單:

<?php 
    if (isset($_POST["submit"])) { 

     $url = 'https://www.google.com/recaptcha/api/siteverify'; 
     $privatekey = "PRIVATE KEY"; 

     $response = file_get_contents($url."?secret=".$privatekey."&response=".$_POST['g-recaptcha-response']); 
     $data = json_decode($response); 

     if(isset($data->success) AND $data->success==true){ 
      $to = "[email protected]"; 
      $from = $_POST['courriel']; 
      $from_name = $_POST['nom_responsable']; 


      // so on...all your mail parameters here 


      if(mail($to, $subject, $message, $headers)){ 
       echo "mail has been successfully sent successfully"; 
      }else{ 
       echo "mail could not be sent"; 
      } 
     }else{ 
      echo "Invalid captcha. Please try again"; 
     } 

    }else{ 
     echo '<h2 class="text center">User has not submitted the form</h2>'; 
    } 

?> 
+0

我會試一下。非常感謝。 –

+0

作品!非常感謝Rajdeep Paul。 –

+0

@StéphaneRobert很高興能幫到你。如果解決了您的問題,請*接受*答案。 [如何接受堆棧溢出的答案?](http://meta.stackexchange.com/a/5235) –