Как проверить поле ввода с помощью php

0

У меня есть контактная форма, и последнее поле - математический вопрос, на который нужно ответить, чтобы предотвратить спам-сообщения. что лучший способ проверить, является ли его только число, другие символы и ответ должен быть 15. Также возможно, как сделать форму понятной после ее отправки?

Код HTML:

<p id="math">10 + 5 =<input type="text" name="answerbox" id="answerbox" value="<?= isset($_POST['answerbox']) ? $_POST['answerbox'] : '' ?>"/></p>

Я пробовал использовать функцию ctype_digit, но не повезло, не работал.

if(ctype_digit($answerbox != 15) === true){
            $errors[] = "Math answer is not correct.";
          }

Полный код php:

<?php
    if(empty($_POST) === false) {
            $errors = array();
            $name = trim($_POST["name"]);
            $email = trim($_POST["email"]);
            $subject = trim($_POST["subject"]);
            $message = trim($_POST["message"]);
            $answerbox = trim($_POST["answerbox"]); 

            if(empty($name) === true || empty($email) === true || empty($subject) === true || empty($message) === true || empty($answerbox) === true){
            $errors[] = '<p class="formerrors">Please fill in all fields.</p>';
    } else {
        if (strlen($name) > 25) {
           $errors[] = 'Your name is too long.';
        }
        if (ctype_alpha($name) === false) {
           $errors[] = "Your name only should be in letters.";
          }
        if(!preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $email)){
            $errors[] = "Your email address is not valid, please check.";
          }
        if($answerbox != 15){
            $errors[] = "Math answer is not correct.";
          }
        if(empty($errors) === true) {
            $headers =  'From: '.$email. "\r\n" .
            'Reply-To: '.$email . "\r\n" .
            'X-Mailer: PHP/' . phpversion();
            mail('[email protected]',$subject,$message,$headers);
            print "<p class='formerrors'>Thank you for your message, I'll get back to you shortly!</p>";

        }
    }

}

    ?>
    <?php
        if (empty($errors) === false){
            foreach ($errors as $error) {
                echo'<p class="formerrors">', $error, '</p>';

            }
        }
        ?>
Теги:
validation
input
field

1 ответ

1
Лучший ответ

Попробуйте это, чтобы проверить вопрос об ошибке:

if(!is_numeric($answerbox) || (int)$answerbox!=15){
    $errors[] = "Math answer is not correct.";
}

! is_numeric проверяет, является ли это числовым. Если нет, сообщение добавляется в массив ошибок. Если оно числовое, проверяется второе условие. (int) задает переменную как integer, поэтому вы можете проверить, 15 или нет.

Что касается очистки формы: не форма автоматически очищается, когда вы отправляете, так как вы оставляете/перезагружаете страницу?

  • 0
    Спасибо за вашу помощь, но она дает мне ошибку Parse error: синтаксическая ошибка, неожиданный '&' в C: \ xampp \ htdocs \ site \ index.php в строке 137 Я сделал это так, если (! Is_numeric ($ answerbox! = 15)) {$ errors [] = "Математический ответ неверен."; } это просто игнорирует функцию! is_numeric, даже если ответ равен 15, он отображает сообщение об ошибке. Есть идеи?
  • 0
    То, что вы делаете, не будет работать, потому что то, что вы тестируете с помощью is_numeric() это не число / строка, а логическое значение: part $answerbox != 15 оценивается как true или false, поэтому в основном вы делаете следующее: is_numeric(true) или is_numeric(false) . Это всегда будет оценивать как ложное. Что вам нужно, это проверить на $answerbox напрямую. Я исправил по коду, таким образом он должен работать: сначала вы проверяете, является ли $answerbox числовым, если не выдается ошибка. Если это так, он будет проанализирован до целого числа и проверен на 15. Был символ & вместо $.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню