Добавление reCaptcha в action.php - PullRequest
0 голосов
/ 15 марта 2019

Очень любитель-разработчик, который умеет вырезать и вставлять, я пытаюсь добавить reCaptcha v2 на старый html / php сайт,

У меня работает капча, единственная проблема - это когда формаотправленный, он переходит на фактический адрес /action.php и отображает некоторый код + сообщение «Спасибо».

         <?php
if($_POST) {

require('constant.php'); 

$user_name      = filter_var($_POST["name"], FILTER_SANITIZE_STRING);
$user_email     = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
$user_phone     = filter_var($_POST["phone"], FILTER_SANITIZE_STRING);
$content   = filter_var($_POST["content"], FILTER_SANITIZE_STRING);

if(empty($user_name)) {
    $empty[] = "<b>Name</b>";       
}
if(empty($user_email)) {
    $empty[] = "<b>Email</b>";
}
if(empty($user_phone)) {
    $empty[] = "<b>Phone Number</b>";
}   
if(empty($content)) {
    $empty[] = "<b>Comments</b>";
}

if(!empty($empty)) {
    $output = json_encode(array('type'=>'error', 'text' => implode(", ",$empty) . ' Required!'));
    die($output);
}

if(!filter_var($user_email, FILTER_VALIDATE_EMAIL)){ //email validation
    $output = json_encode(array('type'=>'error', 'text' => '<b>'.$user_email.'</b> is an invalid Email, please correct it.'));
    die($output);
}

//reCAPTCHA validation
if (isset($_POST['g-recaptcha-response'])) {

    require('component/recaptcha/src/autoload.php');        

    $recaptcha = new \ReCaptcha\ReCaptcha(SECRET_KEY, new \ReCaptcha\RequestMethod\SocketPost());

    $resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);

      if (!$resp->isSuccess()) {
            $output = json_encode(array('type'=>'error', 'text' => '<b>Captcha</b> Please try the captcha again!'));
            die($output);               
      } 
}

$toEmail = "email@email.com";
$mailHeaders = "From: " . $user_name . "<" . $user_email . ">\r\n";
    $mailBody = "User Name: " . $user_name . "\n";
$mailBody .= "User Email: " . $user_email . "\n";
$mailBody .= "Phone: " . $user_phone . "\n";
$mailBody .= "Content: " . $content . "\n";
if (mail($toEmail, "Contact Mail", $mailBody, $mailHeaders)) {
    $output = json_encode(array('type'=>'message', 'text' => 'Hi '.$user_name .', thank you for the comments. We will get back to you shortly.'));
    die($output);
} else {
    $output = json_encode(array('type'=>'error', 'text' => 'Unable to send email, please contact'.SENDER_EMAIL));
    die($output);
}
}?>

HTML выглядит следующим образом:

    <form id="frmContact" action="action.php" method="POST" novalidate="novalidate">
<div class="label">Name:</div>
<div class="field">
    <input type="text" id="name" name="name"
        placeholder="enter your name here"
        title="Please enter your name" class="required"
        aria-required="true" required>
</div>
<div class="label">Email:</div>
<div class="field">
    <input type="text" id="email" name="email"
        placeholder="enter your email address here"
        title="Please enter your email address"
        class="required email" aria-required="true" required>
</div>
<div class="label">Phone Number:</div>
<div class="field">
    <input type="text" id="phone" name="phone"
        placeholder="enter your phone number here"
        title="Please enter your phone number"
        class="required phone" aria-required="true" required>
</div>
<div class="label">Comments:</div>
<div class="field">
    <textarea id="comment-content" name="content"
        placeholder="enter your comments here"></textarea>
</div>
<div class="g-recaptcha" data-sitekey="**My-Site-Key**"></div>
<div id="mail-status"></div>
<button type="Submit" id="send-message" style="clear: both;">Send
    Message</button>

Отображается следующий Снимок экрана

Я надеялся, что он не загрузит новую веб-страницу, а просто отобразит сообщение ниже или что-то в этом роде.

Любые рекомендации будутвысоко ценится, Пит

1 Ответ

0 голосов
/ 15 марта 2019

Я только что понял, что проблема в том, что вы используете другую страницу для обработки рекапчи.Если вместо этого вы добавите HTML-код в конец страницы php, вы можете использовать одну и ту же страницу как для формул HTML, так и для обработки PhP.(в старой части ниже я думал, что это была та же страница) Так что это решило бы это.Поскольку action.php отличается от страницы формулы, он выводит выходные данные на пустую страницу action.php вместо страницы формул.Вы все еще можете сделать это с помощью JavaScript, который я перечислил ниже, ЕСЛИ!PhP и HTML находятся на той же странице, что и.

Надеюсь, это поможет

СТАРАЯ ЧАСТЬ НИЖЕ !!

Причина, по которой он выводит это как "{type: message"и прочее, вызвано использованием" json_encode ".Если это не проблема, я думаю, что вы хотите просто добавить его на страницу.Для этого вы можете поэкспериментировать с запросом AJAX, поскольку он может динамически обновлять веб-страницу без перезагрузки.Но что бы я ни делал (так как я нуб xD), я бы сделал так, чтобы PhP выводил код javascript, который менялся, и пустой тег.вот так.

<p id="output"></p>

И затем добавьте php для вывода JavaScript.

echo '<script>var elementOfIntrest = document.getElementById("output");elementOfIntrest.innerHTML = "Hi' . $user_name . ', thank you for the comments. We will get back to you shortly.";</script>';

Однако, это все равно заставит веб-страницу перезагрузиться с новой информацией.

Я не уверен на 100%, что это будет работать так, как вы хотите (не совсем уверен, что вы хотите), но надеюсь, что это поможет.

Если вы хотите сделать это с помощью запроса AJAX, вы можетечитать дальше здесь .

...