Witam wszystkich.
Chciałem dodać na swoją stronę walidację recaptcha, żeby boty dały mi spokój. Niestety siedzę nad tym kilka dni i nie wiem czemu nie działa. Strona jest podpięta pod CLOUDFLARE i może to generuje jakieś problemy ale kombinowałem z różnymi kodami i nie działa. Z tego co widzę, to jest problem, z tym, że przez POST nie wysyła mi " $_POST['g-recaptcha-response']" i cała walidacja nie może zakończyć się pomyślnie. Nie wiem z czego to wynika.
Poniżej moje kody:
plik contact.php
<?php
include 'functions.php';
$data['success'] = true;
//$_POST = multiDimensionalArrayMap('cleanEvilTags', $_POST);
//$_POST = multiDimensionalArrayMap('cleanData', $_POST);
$emailTo ='kontakt@test.pl';
$emailSubject = 'Wiadomość z formularza';
$name = $_POST['name'];
$email = $_POST['email'];
$comment = $_POST['comments'];
if($name == '') {
echo '<div class="error_message">Proszę podać swoje imię.</div>'; exit();}
if($email == '') {
echo '<div class="error_message">Proszę podać adres email.</div>'; exit();}
if (!preg_match('/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i', $email)) { echo '<div class="error_message">Podałeś błędny adres email.</div>'; exit();}
if($comment == '') {
echo '<div class="error_message">Proszę podać treść wiadomości.</div>'; exit();}
if($data['success'] == true) {
$send_name = "Imię: $name" . PHP_EOL . PHP_EOL;
$send_email = "Email: $email" . PHP_EOL . PHP_EOL;
$send_comment = "Wiadomość:\r\n$comment" . PHP_EOL . PHP_EOL;
$message = wordwrap( $send_name . $send_email . $send_comment, 70
);
$headers = "From: TEST.PL <$email>" . PHP_EOL;
$headers .= "Reply-To: $email" . PHP_EOL;
$headers .= "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
$headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;
mail($emailTo, $emailSubject, $message, $headers); echo "<div id='success_page'>"; echo "<h3>WIADOMOŚĆ WYSŁANO POPRAWNIE.</h3>"; echo "<p>Dziękuję <strong>$name</strong> za kontakt, Twoja wiadomość została wysłana poprawnie :)</p>";
else { echo '<div class="error_message">CAPTCHA</div>'; } }
?>
kod formularza:
<h2>FORMULARZ KONTAKTOWY</h2>
<div class="separator-image-contact"></div>
<div id="contact-form">
<div id="message"></div>
<form method="post" action="php/contact.php" name="contactform" id="contactform">
<input type="text" id="name" name="name" placeholder="Twoje imię..." />
<input type="text" name="email" id="email" placeholder="Twój email..." />
<textarea name="comments" id="comments" placeholder="Treść Twojej wiadomości..."></textarea>
<div class="g-recaptcha" data-sitekey="6LcxxxxxxxxxxDkXk5g"></div>
<input type="submit" class="send_message transition" id="submit" value="Wyślij wiadomość" />
</form>
</div>
kod od reCaptcha:
$secret = '6Lcxxxxxxxxxx82';
$response = $_POST['g-recaptcha-response'];
$remoteip = $_SERVER['REMOTE_ADDR'];
$url = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$response&remoteip=$remoteip"); $result = json_decode($url, TRUE);
if ($result['success'] == true) {
COŚ MA SIĘ ZADZIAĆ :(
}
plik functions.php:
<?php
// Strips nasty tags from code..
function cleanEvilTags($data) {
$data = preg_replace("/onmouseover/i", "onmouseover",$data); }
// Cleans output data..
function cleanData($data) {
}
function multiDimensionalArrayMap($func,$arr) {
foreach($arr AS $key => $value) {
$newArr[$key] = (is_array($value) ? multiDimensionalArrayMap
($func,$value) : $func($value)); }
}
return $newArr;
}
Proszę o pomoc. Kombinowałem z różnymi kodami reCaptcha, ale zawsze było tak, że jest błąd jakby się nie zaznaczyło ptaszka (mimo, że był zaznaczony) i ustaliłem, że problem jest z "$_POST['g-recaptcha-response']". W błędach PHP na serwerze wyświetla się wtedy linijka zawierająca "Undefined index g-recaptcha-response", niestety nie wiem co z tym zrobić.
Bardzo proszę o pomoc
Ten post edytował koko887 3.10.2020, 14:36:39