Проблема с моей контактной формой

У меня есть контактная форма на моей странице, теперь большая ее часть работает нормально, однако я создал некоторую проверку, которая выполняет некоторую внутреннюю проверку длин строк, если каким-то образом пользователь обходит обычный аргумент максимальной длины HTML для ввода текста.

Вот две мои проблемы:

1) Если я ввожу числа в поле, я автоматически получаю сообщение о том, что превышен максимальный предел, который, очевидно, не должен выполняться.

2) Вторая проблема заключается в том, что когда я получаю это сообщение (которое было получено неправильно), оно должно, по крайней мере, остановить отправку почты, поскольку возникла проблема, но оно все равно отправляет электронное письмо!!

Не стесняйтесь попробовать и убедитесь сами:

http://eclipse-developers.com/v2/eclipse-developers.com/#contactUs

Вот скрипт PHP для моей контактной формы:

// here we put in an if statement to check against missing variables (empty values)
        if (isset($_POST['name']) && isset($_POST['email']) && isset($_POST['subject']) && isset($_POST['message'])){

            $name=$_POST['name'];
            $organisation=$_POST['organisation'];
            $reference=$_POST['reference'];
            $email=$_POST['email'];
            $subject=$_POST['subject'];
            $message=$_POST['message'];
            // here we are checking to see if that value anything and not just black.

            if (!empty($name) && !empty($email) && !empty($subject) && !empty($message) ){  
                // this is doing a check for max length, its doing it in php just in case the user
                // cheats and bypasses the html check.

            if (strlen($name>31) || strlen($lname>31) || strlen($organisation>31) || strlen($email>51) || strlen($subject>31) || strlen($reference>31) || strlen($message>2001)){
                echo"sorry, max length for a field has been exceeded. Go back and try again</a><br><br>";
            }
            $to='[email protected]';
            $emailsubject=$subject;
            $body=$name."\nCompany Name: ".$organisation."\nRef: ".$reference."\nMessage: ".$message;
            $headers= 'From: '.$email;

            // mails, if statement so if its true (mail did send)
                if  (mail($to,$emailsubject,$body,$headers)){
                    echo'Thanks for contacting us.';        
                }else{
                    echo'Sorry, an error occurred. Try again later.';
                }
            }
            } else{
            }

person Panda    schedule 12.02.2014    source источник


Ответы (2)


Ваши условия неверны, у вас есть:

strlen($name > 31)

Это сначала проверит, имеет ли $name значение выше 31, которое возвращает логическое значение true или false. Затем это преобразуется в строку и проверяется ее длина, которая всегда будет больше 0 и, следовательно, будет истинной. Так должно быть:

strlen($name) > 31

Чтобы предотвратить отправку электронной почты, вы должны прервать после того, как эти условия верны. Ваш код станет примерно таким:

if (strlen($name) > 31 || strlen($lname) > 31 || strlen($organisation) >31 || strlen($email)>51 || strlen($subject)>31 || strlen($reference)>31 || strlen($message)>2001){
    echo"sorry, max length for a field has been exceeded. Go back and try again</a><br><br>";
} else {
    $to='[email protected]';
    $emailsubject=$subject;
    $body=$name."\nCompany Name: ".$organisation."\nRef: ".$reference."\nMessage: ".$message;
    $headers= 'From: '.$email;

    // mails, if statement so if its true (mail did send)
    if  (mail($to,$emailsubject,$body,$headers)){
        echo'Thanks for contacting us.';        
    }else{
        echo'Sorry, an error occurred. Try again later.';
    }
}
person Overv    schedule 12.02.2014
comment
измените эту строку кода на эту, и это сломало мою страницу. Сообщение об ошибке: Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный '||' (T_BOOLEAN_OR) в /home/mmkbrida/public_html/v2/eclipse-developers.com/sent.php в строке 48 - person Panda; 12.02.2014
comment
если (strlen($name)›31) || strlen($organization)›31) || strlen($email)›51) || strlen($subject)›31) || strlen($reference)›31) || strlen($message)›2001)){ - person Panda; 12.02.2014
comment
@Panda Вы забыли удалить ) после максимальной длины. Это должно быть так, как указано в моем ответе. - person Overv; 12.02.2014
comment
Ваш ответ выше решит обе мои проблемы? - person Panda; 12.02.2014
comment
@Panda Да, он не будет отправлять электронное письмо, если какая-либо из максимальных длин превышена, и больше не будет срабатывать при каждом вводе. Вы понимаете ошибку, которую совершили? - person Overv; 12.02.2014
comment
подождите, я просматриваю это сейчас, чтобы попытаться понять, сэр, большое спасибо за помощь до сих пор - person Panda; 12.02.2014
comment
Идеальный! Большое спасибо за помощь, теперь я понимаю, что я сделал не так. - person Panda; 12.02.2014

1) Если я ввожу числа в поле, я автоматически получаю сообщение о том, что превышен максимальный лимит, что, очевидно, не должно выполняться.

Ваши условия неверны.

strlen($name>31)

Изменить на

strlen($name)>31

2) Вторая проблема заключается в том, что когда я получаю это сообщение (которое было получено неправильно), оно должно, по крайней мере, остановить отправку почты, поскольку возникла проблема, но оно все равно отправляет электронное письмо!!

Поставьте exit;/die; после ошибки или добавьте логику if/else.

Принудительное завершение

 if (strlen($name)>31 || strlen($lname)>31 || strlen($organisation)>31 || strlen($email)>51 || strlen($subject)>31 || strlen($reference)>31 || strlen($message)>2001){
     echo"sorry, max length for a field has been exceeded. Go back and try again</a><br><br>";
    exit;
 }

если/иначе логика

 if (strlen($name)>31 || strlen($lname)>31 || strlen($organisation)>31 || strlen($email)>51 || strlen($subject)>31 || strlen($reference)>31 || strlen($message)>2001){
     echo"sorry, max length for a field has been exceeded. Go back and try again</a><br><br>";
 } else {
    //Attempt email send
 }
person ʰᵈˑ    schedule 12.02.2014