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'];
}
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 ... –
@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
@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