Проверка формы php не работает: электронная почта отправляется с пустыми полями

1

У меня возникают трудности с моей формой, которая не работает должным образом. Эффективно, когда я нажимаю кнопку "Отправить", он отправит электронное письмо, даже когда я (думаю) установил проверку, чтобы остановить его от отправки, пока все соответствующие поля не будут завершены.

<?php

$page_title = "EcoPiggy: PHP Contact Us- Testing";
// define variables and set to empty values
$firstName = $lastName = $email = $telephone = $message = $marketingConsent = $copyEmail = "";
$firstNameErr = $lastNameErr = $emailErr = $telephoneErr = $messageErr = "";


if (isset($_POST['signup'])) {
    if (!empty($_POST['tracey'])) {
        die;
    }

    $marketingConsent = ($_POST["marketingConsent"]);
    $copyEmail = ($_POST["copyEmail"]);

    if (empty($_POST["firstName"])) {
        $firstNameErr = "* First Name is required";
    } else {
        $firstName = test_input($_POST["firstName"]);
        if (!preg_match("/^[a-zA-Z0-9 ]*$/", $firstName)) {
            $firstNameErr = "* Only letters and white space allowed";
        }
        $min = 3;
        if (strlen($firstName) < $min) {
            $firstNameErr = "Validation failed: Too Small minimum 3 characters";
        }
        $max = 45;
        if (strlen($firstName) > $max) {
            $firstNameErr = "Validation failed: Too Large maximum  45 characters";
        }
    }
    if (empty($_POST["lastName"])) {
        $lastNameErr = "* Last Name is required";
    } else {
        $lastName = test_input($_POST["lastName"]);
        if (!preg_match("/^[a-zA-Z0-9 ]*$/", $lastName)) {
            $lastNameErr = "* Only letters and white space allowed";
        }
        $min = 3;
        if (strlen($lastName) < $min) {
            $lastNameErr = "Validation failed: Too Small minimum 3 characters";
        }
        $max = 45;
        if (strlen($lastName) > $max) {
            $lastNameErr = "Validation failed: Too Large maximum  45 characters";
        }
    }
    if (empty($_POST["email"])) {
        $emailErr = "* email address is required";
    } else {
        $email = test_input($_POST["email"]);
        // check if e-mail address is well-formed
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $emailErr = "* Invalid email format";
        }
        $min = 6;
        if (strlen($email) < $min) {
            $emailErr = "Validation failed: Too Small minimum 6 characters";
        }
        $max = 60;
        if (strlen($email) > $max) {
            $emailErr = "Validation failed: Too Large maximum  60 characters";
        }
    }
    if (empty($_POST["telephone"])) {
        $telephoneErr = "* Please enter your telephone number";
    } else {
        $telephone = test_input($_POST["telephone"]);
        if (!preg_match("/^[1-9][0-9]{6-13}*$/", $telephone)) {
            $telephoneErr = "* Only numbers and white space allowed";
        }
        $min = 6;
        if (strlen($telephone) < $min) {
            $lastNameErr = "Validation failed: Too Small minimum 6 characters";
        }
        $max = 13;
        if (strlen($telephone) > $max) {
            $telephoneErr = "Validation failed: Too Large maximum  13 characters";
        }
    }
    if (empty($_POST["message"])) {
        $messageErr = "* Your message is required";
    } else {
        $message = test_input($_POST["message"]);
        $min = 3;
        if (strlen($message) < $min) {
            $messageErr = "Validation failed: Too Small minimum 3 characters";
        }
        $max = 1000;
        if (strlen($message) > $max) {
            $messageErr = "Validation failed: Too Large maximum  45 characters";
        }
    }
    if ($marketingConsent == 0) {
        $marketingConsent = "Thank you for trusting us to contact periodically with 3rd party promotions";
    } else {
        $marketingConsent = "I do not want the information to be used by anybody for direct marketing purposes";
    }

    $create_email = '<ul>';
    $create_email .='<li>First Name: ' . $firstName . '</li>';
    $create_email .='<li>Last Name: ' . $lastName . '</li>';
    $create_email .='<li>Telephone Number: ' . $telephone . '</li>';
    $create_email .='<li>Email address: ' . $email . '</li>';
    $create_email .='<li>Your message: ' . $message . '</li>';
    $create_email .='<li>Marketing consent: ' . $marketingConsent . '</li>';
    $create_email .='<li>Cc: ' . $copyEmail . '</li>';
    $create_email .= '</ul>';

    $header1 = "From: [email protected] \r\n";
    $header1 .= "Reply-To: {$email} \r\n";

    if ($copyEmail == 1) {
        $header1 .= "Cc: {$email}\r\n";
    } else {
        $header1 .= "";
    }

    $header1 .= "MIME-Version: 1.0" . "\r\n";
    $header1 .= "Content-Type: text/html; charset=ISO-8859-1";


    $to = "[email protected]";
    $subject = 'Ecopiggy - Contact-Us' . strftime("%T", time());
    $message = $create_email;
    $headers = $header1;

    $result = mail($to, $subject, $message, $headers);

    if (isset($result)) {
        redirect_to("thankyou.php");
    } else {

        redirect_to("contact-us.php");
    }
}
?>

Может ли кто-нибудь помочь в том, что эта проверка не так?

Большое спасибо,

Как.

  • 1
    Используйте && так, if (!empty(trim($_POST['myKey'])) && !empty(trim($_POST['anotherKey']))) .
  • 0
    Для проверки удалите cc из почтового заголовка.
Показать ещё 1 комментарий
Теги:

3 ответа

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

Проблема в том, что, даже если вы проверяете свои входы формы, вы не проверяете, существует ли какая-либо ошибка или нет, прежде чем конструировать почту, то есть, являются ли $firstNameErr, $lastNameErr и т.д. $lastNameErr или нет.

if(empty($firstNameErr) && empty($lastNameErr) && empty($emailErr) && empty($telephoneErr) && empty($messageErr)){

    // construct the mail and send it

}else{

    // display error messages

}

Таким образом, ваш существующий код должен выглядеть следующим образом:

<?php
    $page_title = "EcoPiggy: PHP Contact Us- Testing";
    // define variables and set to empty values
    $firstName = $lastName = $email = $telephone = $message = $marketingConsent = $copyEmail = "";
    $firstNameErr = $lastNameErr = $emailErr = $telephoneErr = $messageErr = "";    

    if (isset($_POST['signup'])) {
        if (!empty($_POST['tracey'])) {
            die;
        }

        $marketingConsent = ($_POST["marketingConsent"]);
        $copyEmail = ($_POST["copyEmail"]);

        if(empty($_POST["firstName"])) {
            $firstNameErr = "* First Name is required"; 
        } else {
            $firstName = test_input($_POST["firstName"]);
            if (!preg_match("/^[a-zA-Z0-9 ]*$/",$firstName)) {
                $firstNameErr = "* Only letters and white space allowed"; 
            } 
            $min=3;
            if(strlen($firstName) < $min) {
                $firstNameErr = "Validation failed: Too Small minimum 3 characters"; 
            }
            $max=45;
            if(strlen($firstName) > $max) {
                $firstNameErr = "Validation failed: Too Large maximum  45 characters";  
            }
        }

        if(empty($_POST["lastName"])) {
            $lastNameErr = "* Last Name is required";
        } else {
            $lastName = test_input($_POST["lastName"]);
            if (!preg_match("/^[a-zA-Z0-9 ]*$/",$lastName)) {
                $lastNameErr = "* Only letters and white space allowed"; 
            }
            $min=3;
            if(strlen($lastName) < $min) {
                $lastNameErr = "Validation failed: Too Small minimum 3 characters"; 
            }
            $max=45;
            if(strlen($lastName) > $max) {
                $lastNameErr = "Validation failed: Too Large maximum  45 characters";   
            }
        }   

        if(empty($_POST["email"])) {
            $emailErr = "* email address is required";
        } else {
            $email = test_input($_POST["email"]);
            // check if e-mail address is well-formed
            if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                $emailErr = "* Invalid email format";
                echo $emailErr;
            }
            $min=6;
            if(strlen($email) < $min) {
                $emailErr = "Validation failed: Too Small minimum 6 characters";    
            }
            $max=60;
            if(strlen($email) > $max) {
                $emailErr = "Validation failed: Too Large maximum  60 characters";  
            }
        }

        if(empty($_POST["telephone"])) {
            $telephoneErr = "* Please enter your telephone number";
        } else {
            $telephone = test_input($_POST["telephone"]);
            if (!preg_match("/^[1-9][0-9]{6-13}*$/",$telephone)) {
                $telephoneErr = "* Only numbers and white space allowed"; 
            }
            $min=6;
            if(strlen($telephone) < $min) {
                $lastNameErr = "Validation failed: Too Small minimum 6 characters"; 
            }
            $max=13;
            if(strlen($telephone) > $max) {
                $telephoneErr = "Validation failed: Too Large maximum  13 characters";  
            }   
        }

        if(empty($_POST["message"])) {
            $messageErr = "* Your message is required";
        } else {
            $message = test_input($_POST["message"]);
            $min=3;
            if(strlen($message) < $min) {
                $messageErr = "Validation failed: Too Small minimum 3 characters";  
            }
            $max=1000;
            if(strlen($message) > $max) {
                $messageErr = "Validation failed: Too Large maximum  45 characters";    
            }
        }

        if($marketingConsent == 0) {
            $marketingConsent = "Thank you for trusting us to contact periodically with 3rd party promotions";
        } else {
            $marketingConsent = "I do not want the information to be used by anybody for direct marketing purposes";
        }

        if(empty($firstNameErr) && empty($lastNameErr) && empty($emailErr) && empty($telephoneErr) && empty($messageErr)){

            $create_email = '<ul>';
            $create_email .='<li>First Name: '.$firstName.'</li>';  
            $create_email .='<li>Last Name: '.$lastName.'</li>';
            $create_email .='<li>Telephone Number: '.$telephone.'</li>';
            $create_email .='<li>Email address: '.$email.'</li>';
            $create_email .='<li>Your message: '.$message.'</li>';
            $create_email .='<li>Marketing consent: '.$marketingConsent.'</li>';
            $create_email .='<li>Cc: '.$copyEmail.'</li>';
            $create_email .= '</ul>';
            echo $create_email;

            $header1 = "From: [email protected] \r\n";
            $header1 .= "Reply-To: {$email} \r\n";

              if ($copyEmail == 1) {
                $header1 .= "Cc: {$email}\r\n";
                } else {
                $header1 .= "";
            }

            $header1 .= "MIME-Version: 1.0" ."\r\n";
            $header1 .= "Content-Type: text/html; charset=ISO-8859-1";


            $to = "[email protected]";
            $subject = 'Ecopiggy - Contact-Us' .strftime("%T", time());
            $message = $create_email;
            $headers = $header1;

            $result = mail($to, $subject, $message, $headers);

            if  (isset($result)) {
                redirect_to("thankyou.php");

            } else {

                redirect_to("contact-us.php");
            }

        }else{

            // display errors

        }

    }
?>
  • 0
    Вы ученый и джентльмен. Огромное спасибо за вашу помощь.
  • 0
    @ Asa.Beaumont Добро пожаловать! :)
0

Ваш скрипт очищает все переменные, а затем проверяет переменные $ _POST. Однако, когда проверка затем передается, вы не устанавливаете новое значение - если только нет функции test_input, которую вы не указали выше:

$telephone = test_input($_POST["telephone"]);

Итак, в верхней части страницы, которую вы установили

$telephone = '';

Затем вы проверяете,

$_POST['telephone'];

действительно, и если вы установили $ phone на значение, которое не имеет способа разрешения. Затем в вашем письме вы пытаетесь отправить $ phone, но это значение по-прежнему равно нулю.

  • 0
    Спасибо за помощь. Да, тестовая функция была вне сценария. Я очистил все переменные в начале, чтобы разрешить уведомления о неопределенных переменных на странице при первой загрузке.
0

Вы выполняете проверку на стороне браузера, и для этого лучше всего подходит javascript. http://www.w3schools.com/js/js_validation.asp это ссылка, где вы можете найти подтверждение.

и, как вы уже упоминаете, вы используете HYML5, поэтому просто добавьте " обязательный " в свой тег, поэтому это означает, что это поле является обязательным. Существуют другие предопределенные проверки доступны в HTML5

  • 0
    Спасибо за ваш вклад. Я знаю, но если javascript отключен, то форма будет отправлена.
  • 0
    затем попробуйте проверки HTML5, как я уже говорил ... но php является языком на стороне сервера, поэтому его не рекомендуется использовать для проверки

Ещё вопросы

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