Как исправить проверку формы в PHP - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь создать контактную форму, которая использует ajax и PHP для отправки почты. Ajax, и отправка электронной почты работает нормально, но проверка PHP не работает, и я получаю нефильтрованные учетные данные пользователя в своем почтовом ящике на сервере, вот код, пожалуйста, помогите проверке PHP не работает, и любые данные, которые пользователь вводит в форме не фильтруется и отправляется так, как есть.

<?php
session_start();
include_once('includes/db_connect.php');
if(isset($_POST['name']) && $_POST['name'] && isset($_POST['phone']) && $_POST['phone'] && isset($_POST['email']) && $_POST['email'] && isset($_POST['message']) && $_POST['message']){
    $name = mysqli_real_escape_string($con, $_POST['name']);
    $phone = mysqli_real_escape_string($con, $_POST['phone']);
    $email = mysqli_real_escape_string($con, $_POST['email']);
    $message = mysqli_real_escape_string($con, $_POST['message']);

    if(( !preg_match ("/^[a-zA-Z\s]+$/",$name))||(strlen($name) < 3)){
        echo json_encode(array('success' => 'invalid name'));
    }else{
        $name_error = "";
    }
    if((!is_numeric($phone))||(strlen($phone) !=12)){
        echo json_encode(array('success' => 'invalid phone'));
    }else{
        $phone_error = "";
    }
    if(!filter_var($email,FILTER_VALIDATE_EMAIL)){
        echo json_encode(array('success' => 'invalid email'));
    }else{
        $email_error = "";
    }
    if(strlen($message)<10){
        echo json_encode(array('success' => 'invalid message'));
    }else{
        $message_error = "";
    }

    if(empty($name_error) && empty($phone_error) && empty($email_error)&& empty($message_error)){

        error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED ^ E_STRICT);

        ini_set("include_path", '/home/extensiv/php:' . ini_get("include_path") );
        require_once "Mail.php";

        $host = "ssl://mail.mywebsite.com";
        $username = "support@mywebsite.com";
        $password = "mypassword";
        $port = "465";
        $to = "support@mywebsite.com";
        $email_from = $email;
        $email_subject = "Is it working?: " ;
        $email_body = $message.$phone ;
        $email_address = "support@mywebsite.com";

        $headers = array ('From' => $email_from, 'To' => $to, 'Subject' => $email_subject, 'Reply-To' => $email_address);
        $smtp = Mail::factory('smtp', array ('host' => $host, 'port' => $port, 'auth' => true, 'username' => $username, 'password' => $password));
        $mail = $smtp->send($to, $headers, $email_body);


        if (PEAR::isError($mail)) {
            echo json_encode(array('success' => 'submit error'));
        } else {
            echo json_encode(array('success' => 'submit success'));
        }
    }else{
        echo json_encode(array('success' => 'invalid credentials'));
    }    
}else{
    echo json_encode(array('success'=>'No data received'));
}
?>

1 Ответ

0 голосов
/ 16 апреля 2019

Вы никогда не устанавливаете $ name_error, $ phone_error, $ email_error или $ message_error в любое значение. Ваше условие всегда будет истинным, так как $ name_error (и остальные) будут нулевыми. Пустое значение возвращает true, если значение равно нулю.

Чтобы исправить, установите $ name_error (и другие) в строку ошибки, затем выведите ее из строки.

if(( !preg_match ("/^[a-zA-Z\s]+$/",$name))||(strlen($name) < 3)){
    $name_error = json_encode(array('success' => 'invalid name'));
    echo $name_error;
}else{
    $name_error = "";
}

Я также предлагаю добавить die () после первой ошибки. В противном случае вы можете получить возвратную полезную нагрузку, содержащую несколько объектов json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...