2013-09-01 2 views
0

Я сделал капчу этим [учебник] [1],Добавление простой математике CAPTCHA на

[1]: http://codechirps.com/how-to-add-a-completely-custom-captcha-to-any-web-form/, но мне кажется, это не полный. Я сделал код, но могу отправить электронную почту, даже если я поставил неправильный ответ. Я чувствую, что мне приходится писать дополнительный код в php-файле, но я не знаю, где. Любая помощь в значительной степени appriciated

<div class="modal-body"> 
       <form class="contact" name="contact"> 
        <label class="label" for="name">Имя</label><br> 
        <input type="text" name="name" class="input-xlarge"><br> 
        <label class="label" for="email">E-mail</label><br> 
        <input type="email" name="email" class="input-xlarge"><br> 
        <label class="label" for="message">Сообщение</label><br> 
        <textarea name="message" class="input-xlarge"></textarea> 
       </form> 
      </div> 
      <div class="modal-footer"> 
         <p>2 + 3 =</p> 
         <input type="text" name="captcha" /> 
       <input class="btn btn-warning" type="submit" value="Отправить" id="submit"> 
       <a href="#" class="btn btn-danger" data-dismiss="modal">Закрыть</a> 


<?php 
$myemail = ''; 
if (isset($_POST['name'])) { 
$name = strip_tags($_POST['name']); 
$email = strip_tags($_POST['email']); 
$message = strip_tags($_POST['message']); 
$captcha = check_input($_POST['captcha']); 
echo "<span class=\"alert alert-success\" >Сообщение отправлено</span><br><br>"; 

if (!preg_match("/5/", $captcha)) 
{ 
show_error("Check your math, Dude"); 
} 


$to = $myemail; 
$email_subject = "Contact form submission: $name"; 
$email_body = "You have received a new message. ". 
" Here are the details:\n Name: $name \n ". 
"Email: $email\n Message \n $message"; 
$headers = "From: $myemail\n"; 
$headers .= "Reply-To: $email"; 
mail($to,$email_subject,$email_body,$headers); 
}?> 
+1

Ну, это потому, что вы не проверяете поле «email». И для captcha .. что делает функция 'check_input'? А также ваше поле для captcha находится вне формы. – putvande

+0

Путванде, спасибо за ответ. Скажите, пожалуйста, если возможно, что мне нужно сделать для проверки поля электронной почты? я сделал это с помощью учебника и подумал, что check_input проверяет для поля captcha – Lucky

+1

Самый простой способ в PHP проверить электронную почту - сделать что-то вроде 'filter_var ($ _ POST ['email'], FILTER_VALIDATE_EMAIL)' – jdepypere

ответ

1

Хорошо, так что вы должны проверить значение своих входов, чтобы увидеть, если они являются действительными. Если нет, отображается сообщение об ошибке, и почта не отправляется. Если все проверки пройдены, отправляется maildoes. Поэтому вам нужно проверить поле $_POST['email'] и $_POST['captcha'] (и если вы хотите, проверьте, не остался ли остальное или нет).

В PHP, вы можете сделать это так:

$myemail = ""; 
if(isset($_POST['name'])){ // check if a form is submitted 
    if(empty(trim($_POST['name'])) || empty(trim($_POST['message'])) || empty(trim($_POST['email'])) || empty(trim($_POST['captcha']))){ // check if values are not empty 
     echo "Please fill in all the required fields."; 
    }else if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){ // check email 
     echo "Please give a real e-mail address."; 
    }else if(!preg_match("/5/", $_POST['captcha'])){ // the code provided by your script 
     echo "Get your math right, dude!"; 
    }else{ // all fields seem to be ok 
     // sanitize input using htmlspecialchars(), see http://stackoverflow.com/a/5788361/1319187 
     $name = htmlspecialchars($_POST['email']); 
     $email = $_POST['email']; // email doesn't need to be sanitized since it's been filtered 
     $message = htmlspecialchars($_POST['message']); 

     //Send the mail 
     $to = $myemail; 
     $email_subject = "Contact form submission: $name"; 
     $email_body = "You have received a new message. ". 
      " Here are the details:\n Name: $name \n ". 
      "Email: $email\n Message \n $message"; 
     $headers = "From: $myemail\n"; 
     $headers .= "Reply-To: $email"; 
     if(mail($to,$email_subject,$email_body,$headers)){ 
      echo "Succes! Your mail has been sent!"; 
     }else{ 
      echo "Something went wrong with the sending of a mail."; 
     } 
    } 
} 

Должно быть довольно просто, вы можете Google некоторые функции, если вы не знаете, что они делают.

Я также не знаю, откуда check_input(). Это не родная функция PHP, и указанная вами ссылка не показывает, что она делает. Кроме того, регулярное выражение для проверки, является ли значение captcha равным 5, немного глупо, вы можете просто проверить $_POST['captcha'] == '5'. Также имейте в виду, что вам нужно рандомизировать эти значения.

+0

Arbitter, спасибо за ответ! Я просто добавил этот код к своему php. Но я вижу ошибки, где я ошибся. Я немного знаю php, извините, вы могли бы предоставить весь код? Я помещаю ваш код после эха « Сообщение отправлено

"; – Lucky

+0

Замените все ваши php этим php. Возможно, вам понадобится поставить '' в требуемые места для стилизации. – jdepypere

+0

О, я вижу Неустранимая ошибка: не могу использовать возвращаемое значение функции в контексте записи в строке 4. Что я сделал неправильно? Я поставил этот код чуть ниже строки $ myemail = ""; Строка 4 if (empty (trim ($ _ POST ['name'])) || empty (trim ($ _ POST ['message'])) || empty (trim ($ _ POST ['email'])) empty (trim ($ _ POST ['captcha']))) {// проверяем, не являются ли значения пустыми. – Lucky

Смежные вопросы