Проблема с валидацией имени и email

Приветствую! Перерыл интернет, но проблему не решил… Может неверно формулировал запрос?!

Вобщем трабла в следующем:

Долго оттачивал тему на Denwer. Перенес сайт на хостинг и все, вроде бы, нормально, за исключением формы обратной связи…
При заполнении всех полей (да и не всех если), все время пишет одно и то же: "Впишите имя и корректный email". Вписывал имя по английски!

Я не ас в кодинге, но покопавшись – проблем в нем не обнаружил (ознакомился с несколькими учебниками php, js)

Вот код темы для обратной связи:

if(isset($_POST['submit'])) {
          error_reporting(E_NOTICE);
          function valid_email($str)
          {
          return ( ! preg_match("/^([a-z0-9]+[a-z0-9\+_\-]*)(\.[a-z0-9\+_\-]+)*@([a-z0-9]+[a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
             }
          if($_POST['name']!='' && $_POST['email']!='' && valid_email($_POST['email'])==TRUE && strlen($_POST['comment'])>1)
          {
              $to = preg_replace("([\r\n])", "", $_POST['receiver']);
              $from = preg_replace("([\r\n])", "", $_POST['email']);
              $subject = "Contact Form";
              $message = $_POST['comment'];
              
              $match = "/(bcc:|cc:|content\-type:)/i";
                if (preg_match($match, $to) ||
                    preg_match($match, $from) ||
                    preg_match($match, $message)) {
                  die("Header injection detected.");
                }
              $headers = "От: ".$from."\r\n";
                 $headers .= "Reply-to: ".$from."\r\n";
              
        if(mail($to, $subject, $message, $headers))
              {
                  echo 1; //SUCCESS 
              }
              else {
                  echo 2; //FAILURE - server failure
              }
          }
          else {
             echo 3; //FAILURE - not valid email

          }
          }else{
             die("Direct access not allowed!");
           }

Как видно в коде, есть три варианта ответ echo 1, 2 и 3. Так как выдает сообщение echo 3, предполагаю, что ошибка где-то в коде, а не у хостера…

Я новичок в этом, поэтому прошу строго не судить, если ошибка очевидна…
Заранее благодарен!

1. вынеси функцию всё таки за if
2. $_POST[‘name’]!=” – лучше так не писать, если хочешь проверить на пустоту, !empty($_POST[‘name’])

3. return( !preg_match('|([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})|is', $str)) ? false : true;

а в итоге, что то вроде

<?php
function valid_email($str){
    return( !preg_match('|([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})|is', $str)) ? false : true;
}
    if(isset($_POST['submit'])) {
    error_reporting(E_NOTICE);
    
    if(!empty($_POST['name']) && !empty($_POST['email']) && valid_email($_POST['email']) && strlen($_POST['comment']) > 1) {
        $to = preg_replace("([\r\n])", "", $_POST['receiver']);
        $from = preg_replace("([\r\n])", "", $_POST['email']);
        $subject = "Contact Form";
        $message = $_POST['comment'];
        
        $match = "/(bcc:|cc:|content\-type:)/i";
        if (preg_match($match, $to) || preg_match($match, $from) || preg_match($match, $message)) {
            die("Header injection detected.");
        }
        $headers = "??: ".$from."\r\n";
        $headers .= "Reply-to: ".$from."\r\n";
        if(mail($to, $subject, $message, $headers)){
            echo 1; //SUCCESS 
        }
        else {
            echo 2; //FAILURE - server failure
        }
    }
    else {
        echo 3; //FAILURE - not valid email
    }
}else{
    die("Direct access not allowed!");
}
?>

у себя проверял, всё норм, если не отправится, попробуй закоментить

 if(mail($to, $subject, $message, $headers)){
            echo 1; //SUCCESS 
        }

если будет выводить всё как надо, проблема в хостере

Спасибо, axeleus!

Перепробовал все варианты – эффект тот же…
Отправил запрос хостеру – сказали посмотрят…

А может ли это возникать из-за кодировки?
Какие еще могут быть проблемы? Может ли быть проблема в месте вывода данного кода?

Это в шапке

    <!-- ajax contact form -->
     <script type="text/javascript">
         $(document).ready(function(){
              $('#contact').ajaxForm(function(data) {
                 if (data==1){
                     $('#success').fadeIn("slow");
                     $('#bademail').fadeOut("slow");
                     $('#badserver').fadeOut("slow");
                     $('#contact').resetForm();
                     }
                 else if (data==2){
                         $('#badserver').fadeIn("slow");
                      }
                 else if (data==3)
                    {
                     $('#bademail').fadeIn("slow");
                    }
                    });
                 });
        </script>

Это на странице формы

<?php echo get_option('contact_text')?></p>
            
            <p id="success" class="successmsg" style="display:none;">Сообщение отправлено!</p>
            <p id="bademail" class="errormsg" style="display:none;">Укажите, пожалуйста, корректный email.</p>
            <p id="badserver" class="errormsg" style="display:none;">Сообщение не доставлено. Попробуйте позже.</p>

            <form id="contact" action="<?php bloginfo('template_url'); ?>/sendmail.php" method="post">

Если все нормально, проблема точно в хостере?

P.S. Есть ли такое понятие, как лишний пробел в коде? Или это не имеет значение?

попробуй без аякса сначала, если всё норм, значит неправильно написан код ответа от запроса.

Закоментил аякс – результат: перенаправление на sendmail.php (то есть открылась страница) и в ней ответ 3 (то есть echo 3, но без текста из формы)…
Я в этом не спец, поэтому даже не знаю как реагировать 🙂
Что это значит? Что код работает?

Это значит, что нужно внимательно просмотреть что отправляется скрипту, в любом случае косяк в тех данных которые передаются. Если не справишься пиши в аську, посмотрим.

Спасибо большое, axeleus, попробую разобраться…
Напишу, если не справлюсь 🙂

Anonymous
Отправить
Ответ на: