2017-01-04 5 views
0

Ich habe Probleme bei der Integration der neuen Google ReCaptcha in meine bestehende PHP-Skript Skriptbearbeitung. Zuvor funktionierte es absolut gut mit der contact.html-Seite, die das Formular an den email-Handler contact.php umleitete, aber ich bekam immer eine Menge Spam, daher der Wunsch, reCaptcha zu verwenden.Integrieren von reCaptcha in bestehende contact.php

Ich verwende eine separate PHP-Datei, um die E-Mail zu behandeln. Der entsprechende contact.html Code lautet wie folgt:

<form id="contact-form" method="post" action="contact.php" role="form"> 

<div class="messages"></div> 
<div class="controls"> 

    <div class="row"> 
     <div class="col-md-7"> 
      <div class="form-group"> 
       <label for="form_name">Name *</label> 
       <input id="form_name" type="text" name="name" class="form-control" placeholder="Please enter your name *" required="required" data-error="Name is required"> 
       <div class="help-block with-errors"></div> 
      </div> 
      <div class="form-group"> 
       <label for="form_email">Email *</label> 
       <input id="form_email" type="email" name="email" class="form-control" placeholder="Please enter your email address *" required="required" data-error="A valid email is required"> 
       <div class="help-block with-errors"></div> 
     </div> 
     <div class="form-group"> 
       <label for="form_phone">Telephone</label> 
       <input id="form_phone" type="tel" name="phone" class="form-control" placeholder="Please enter a contact telephone number (optional)"> 
       <div class="help-block with-errors"></div> 
      </div> 
     <div class="form-group"> 
       <label for="form_message">Message *</label> 
       <textarea id="form_message" name="message" class="form-control" placeholder="Please enter your message *" rows="4" required="required" data-error="Please enter your message"></textarea> 
       <div class="help-block with-errors"></div> 
      </div> 
     <p> 
      <div class="g-recaptcha" data-sitekey="6LfsexAUAAAAAF_qKlK7De8kA7XM2MGrGKTyK60M"></div></p> 

     <input type="submit" class="btn btn-success btn-send" value="Submit"></p> 
     <br><p class="text-muted"><strong>*</strong> These fields are required.</p> 
     </form> 

Der bestehende Code aus der contact.php Datei ist dies:

<?php 


$from= "[email protected]"; 
$sendTo = "[email protected]"; 
$subject = "New message from contact form"; 
$fields = array('name' => 'Name', 'phone' => 'Phone', 'email' => 'Email', 'message' => 'Message'); 
$okMessage = 'Thank you for your message. One of the team will be in touch as soon as possible.'; 
$errorMessage = 'There was an error while submitting the form. Please try again later'; 


try 
{ 
$emailText = "You have new message from contact form\n=============================\n"; 

foreach ($_POST as $key => $value) { 

    if (isset($fields[$key])) { 
     $emailText .= "$fields[$key]: $value\n"; 
    } 
} 

mail($sendTo, $subject, $emailText, "From: " . $from); 

$responseArray = array('type' => 'success', 'message' => $okMessage); 
} 
catch (\Exception $e) 
{ 
$responseArray = array('type' => 'danger', 'message' => $errorMessage); 
} 

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
$encoded = json_encode($responseArray); 

header('Content-Type: application/json'); 

echo $encoded; 
} 
else { 
echo $responseArray['message']; 
} 

Das zur Zeit gut funktioniert, aber wenn ich versuche und integriere die reCaptcha Validierung In den PHP wird die E-Mail nicht generiert und die Erfolgsmeldung im PHP wird nicht auf der Webseite angezeigt.

Jede Hilfe bei der Integration der ReCaptcha-Validierung in die PHP-Datei würde sehr geschätzt werden !!

BEARBEITEN: das Tag für die ReCaptcha ist in der HTML wie erforderlich, und das Widget angezeigt und funktioniert gut auf der Website. Jedoch hat jedes Beispiel Code, das ich versucht habe in den bestehenden PHP zu integrieren, nicht funktioniert und die E-Mails werden nicht generiert (daher habe ich es in der obigen PHP-Datei weggelassen). Danke im Voraus!

BEARBEITEN 2: Ich habe das PHP-Skript überarbeitet und versucht, es nach CoolCodeGuy hilfreiche Kommentare zu bereinigen. Aufgrund meiner Budget-PHP-Fähigkeiten funktioniert es jetzt jedoch nicht. Bitte helfen Sie !!

  <?php 


    $from= "[email protected]"; 
    $sendTo = "[email protected]"; 
    $subject = "New message from contact form"; 
    $fields = array('name' => 'Name', 'phone' => 'Phone', 'email' => 'Email', 'message' => 'Message'); 
    $okMessage = 'Thank you for your message. One of the team will be in touch as soon as possible.'; 
    $errorMessage = 'There was an error while submitting the form. Please try again later'; 
    $url = 'https://www.google.com/recaptcha/api/siteverify'; 
    $privatekey = "xxxxxxxxx"; //whatever your PRIVATE key is 
    $response = file_get_contents($url."?secret=".$privatekey."&response=".$_POST['g-recaptcha-response']."&remoteip=".$_SERVER['REMOTE_ADDR']); 
    $data = json_decode($response); 

    try 
    { 
    $emailText = "You have new message from contact form\n=============================\n"; 

    foreach ($_POST as $key => $value) { 
    //verifcation passed 
    if (isset($fields[$key])) { 
     $emailText .= "$fields[$key]: $value\n"; 
    } 
} 

    mail($sendTo, $subject, $emailText, "From: " . $from); 
    $responseArray = $okMessage; 
    } 
    else 
    { 
    //verification failed 
    $responseArray = $errorMessage; 
    } 

    if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
    $encoded = json_encode($responseArray); 

    header('Content-Type: application/json'); 

    echo $encoded; 
    } 
    else { 
    echo $responseArray['message']; 
    } 

Antwort

0

Ich habe den gesamten Code so aktualisiert, wie ich es gemacht hätte (ich betreibe eine Social-Networking-Site).

 <?php 

    $sendTo = "[email protected]"; 
    $subject = "New message from contact form"; 
    $headers .= 'From: <[email protected]>' . "\r\n"; 

    $name = @$_POST['name']; 
    $phone = @$_POST['phone']; 
    $email = @$_POST['email']; 
    $message = @$_POST['message']; 

    $okMessage = 'Thank you for your message. One of the team will be in touch as soon as possible.'; 
    $errorMessage = 'There was an error while submitting the form. Please try again later'; 
    $url = 'https://www.google.com/recaptcha/api/siteverify'; 
    $privatekey = "xxxxxxxxx"; //whatever your PRIVATE key is 
    $response = file_get_contents($url."?secret=".$privatekey."&response=".$_POST['g-recaptcha-response']."&remoteip=".$_SERVER['REMOTE_ADDR']); 
    $data = json_decode($response); 

    $emailText = "Name: $name \n Phone: $phone \n Email: $email \n Message: $message"; 

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

    mail($sendTo, $subject, $emailText, $headers); 
    $responseArray = $okMessage; 
    } 
    else 
    { 
    //verification failed 
    $responseArray = $errorMessage; 
    } 

    if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
    $encoded = json_encode($responseArray); 

    header('Content-Type: application/json'); 

    echo $encoded; 
    } 
    else { 
    echo $responseArray; 
    } 
+0

Danke. Die E-Mails werden nun ordnungsgemäß erstellt (vorausgesetzt, Sie übergeben das reCaptcha). Die Erfolgs-/Fehlermeldungen werden jedoch weder auf der Seite noch auf einer neuen Seite generiert. Ich habe versucht, den alten Erfolgscode ($ responseArray = array ('type' => 'success', 'message' => $ okMessage) sowie das Echo $ responseArray ['message'] am unteren Rand einzufügen des PHP-Skripts aber immer noch kein Glück ... –

+0

@JoeFlaherty Was hast du vor 'wenn (!leer ($ _ SERVER ['HTTP_X_REQUESTED_WITH']) && strtolower ($ _SERVER ['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { $ encoded = json_encode ($ responseArray); Kopfzeile ('Content-Type: application/json'); echo $ codiert; ' des Codes zu tun? Was ist $ codiert? – CoolCodeGuy

+0

@JoeFlaherty Wenn es nicht wirklich so wichtig ist, würde ich vorschlagen, es herauszunehmen, weil ich denke, dass es die else-Anweisung stoppt und den Echo-Code stoppt – CoolCodeGuy

0

Integrieren Sie den Code unten auf der Seite contact.php

$url = 'https://www.google.com/recaptcha/api/siteverify'; 
    $privatekey = ""; //whatever your PRIVATE key is 

    $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) { 
    //verification succeeded 
    $responseArray = $okMessage; 
    } 
    else 
    { 
    //verification failed 
    $responseArray = $errorMessage; 
    } 

echo $responseArray; 
+0

Sie Sir, sind ein Stern, danke. E-Mails generieren jetzt eine gute Nachricht, aber ich kann die Erfolg/Fehler-Nachrichten nicht funktionieren lassen. Ich habe den PHP in einer Bearbeitung auf den ursprünglichen Kommentar geändert (PHP ist nicht meine starke Farbe, wie Sie wahrscheinlich sagen können). Bitte helfen Sie !! –

+0

@JoeFlaherty Sehen Sie meinen aktualisierten Code, um in Ihren zu integrieren, ohne Arrays zu verwenden (persönlich denke ich, dass dort auch zu kompliziert!) – CoolCodeGuy

+0

Danke. Ich habe versucht, es zu integrieren, und es funktioniert immer noch nicht - keine Fehler/Erfolgsmeldungen oder E-Mails. Ich möchte nicht nur die okMessage generieren, sondern auch das E-Mail-Skript. Ich habe das vollständig überarbeitete Skript in den ursprünglichen Kommentar eingefügt. Vielen Dank. –

0

Warum Sie Javascript Validierung nicht verwenden, auf Formular-Tag

<div class="g-recaptcha" id="rcaptcha" data-sitekey="xxxx"></div> 
    `  <form action="" method="post" onSubmit="return get_action()"> ` <span id="captcha" style="color:red" /></span></div> 

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

    function get_action(form) 
    { 
    var v = grecaptcha.getResponse(); 
if(v.length == 0) 
{ 
    document.getElementById('captcha').innerHTML="You can't leave Captcha Code empty"; 
    return false; 
} 
else 
{ 
    document.getElementById('captcha').innerHTML="Captcha completed"; 
    return true; 
    } 
    } 

+0

So schwer es zu glauben ist, verstehe ich noch weniger über JS als über PHP. Ich versuche die Dinge so einfach wie möglich zu halten !! –

Verwandte Themen