Как проверить поле email при заполнении формы

air1on

Новичок
Здравствуйте! на сайт приходят спам письма так как не реализована проверка email при заполнении формы.
Помогите пожалуйста внедрить проверку emai, что бы нельзя было отправить форму - если там нет спецсимвола "@".

PHP:
<?
$form1='';
require BASEDIR."/includes/create/buy_one_cl_form.php";
   
$visible = ($_GET['view']=='one_click') ? ' style="display:block;"' : '';
#$visible = ' style="display:block;"';
$text.= '
<div id="buy_one_cl"'.$visible.'>'.$form1.'</div>';
# form
$value = array();
$value['name']='';
$value['mail']='';
$value['text']='';
$message = '';
if(isset($_POST['submit']))
    {
    $value['name']=(isset($_POST['name'])) ? trim_name($_POST['name']) : '';
    $value['mail']=(isset($_POST['mail'])) ? trim_sm_text($_POST['mail']) : '';
    $value['text']=(isset($_POST['text'])) ? trim_text($_POST['text']) : '';
    if($value['name']!='' && $value['mail']!='' && $value['text']!='')
        {
        $mail_to = 'info@'.$site_host;
        $sql=$db->Query("SELECT email from ".PREFIX."_form LIMIT 1");
        $row=$sql->fetchrow();
        if(isset($row->email)) $mail_to = $row->email;
        $mess = '
товар: '.$obj->name.'
---------------------------------------------------------------------------
1. Контактная информация
---------------------------------------------------------------------------
<strong>Имя:</strong> '.$value['name'].'
<strong>e-mail:</strong> '.$value['mail'].'
---------------------------------------------------------------------------
2. Содержание:
---------------------------------------------------------------------------
'.$value['text'].'
';
        require(BASEDIR.'/admin/libs/class.phpmailer.php');
        $mail = new PHPMailer();
        $mail->From = 'no-reply@'.$site_host;      // от кого
        $mail->FromName = $site_host;  // от кого
        $mail->AddAddress($mail_to, ''); // кому - адрес, Имя
        $mail->IsHTML(true);        // выставляем формат письма HTML
        $mail->Subject = cp1251_to_utf8('Сообщение с сайта '.$site_host.': '.($value['name']),1);  // тема письма
        $mail->Body = nl2br(cp1251_to_utf8($mess,1));
        if ($mail->Send())
            {
            unset($_POST);
            $value['name']='';
            $value['mail']='';
            $value['text']='';
            $message = '<br /><strong style="color:green;">Спасибо. Ваше сообщение отправлено.</strong><br /><br />';
            }
        else $message = '<br /><strong style="color:red;">Сообщение не отправлено. <br />Ошибка при отправке сообщения.</strong><br /><br />';
        }
    else $message = '<br /><strong style="color:red;">Заполните, пожалуйста, все поля формы</strong><br /><br />';
    }
$form = '
<!--noindex--><form name="question_form" method="post" action="#question_form" id="question_form">
<strong>У вас есть вопросы?</strong><br />
Вы можете задать нам вопрос с помощью следующей формы.<br />'.$message.'
Ваше имя:<br />
<input type="text" name="name" value="'.$value['name'].'" /><br />
E-mail:<br />
<input type="text" name="mail" value="'.$value['mail'].'" /><br />
Сформулируйте Ваши вопросы относительно товара '.$obj->name.'<br />
<textarea name="text" rows="5" cols="50">'.$value['text'].'</textarea><br /><br />
<input type="hidden" value="1" name="submit" />
<input type="image" src="/img/send.png" class="button" value="" />
</form><!--/noindex-->
';
$text.=$form.'</div></div>';
$center = $text;
$path[0]->name[0] = strtoupper($path[0]->name[0]);
$title = ($page->title!='') ? $page->title.' - '.$selected_dir->name : $page->name.' - '.$selected_dir->name ;
$description = ($page->description!="") ? $page->description : $title;
$keywords = ($page->keywords!="") ? $page->keywords : $title;
if(trim($selected_dir->title_templ)!='') $title = up_meta_template($selected_dir->title_templ);
if(trim($selected_dir->description_templ)!='') $description = up_meta_template($selected_dir->description_templ);
if(trim($selected_dir->keywords_templ)!='') $keywords = up_meta_template($selected_dir->keywords_templ);
include("includes/create/template.php");
?>
 

air1on

Новичок
Я прощу прощения, но я настолько слаб в php, что не представляю куда надо вставить эту строчку(( Не могли бы ли Вы подсказать мне?
 

vasinsky

Новичок
ну вот же у тебя псевдо валидация


PHP:
$value['name']=(isset($_POST['name'])) ? trim_name($_POST['name']) : '';
$value['mail']=(isset($_POST['mail'])) ? trim_sm_text($_POST['mail']) : '';
$value['text']=(isset($_POST['text'])) ? trim_text($_POST['text']) : '';
if($value['name']!='' && $value['mail']!='' && $value['text']!='')
допиши проверку мыла.
 

air1on

Новичок
Я бы конечно Вас не тревожил по пустякам, но я правда не понимаю, что куда дописывать нужно. Нашел в интернете еще такой код
PHP:
if (empty($email))
{
$error = true;
$errortext .= "<li><font color='red'>Вы не заполнили поле E-Mail</font></li>";
} else {
if (!preg_match("/^[-0-9a-z_\.]+@[-0-9a-z^\.]+\.[a-z]{2,4}$/i",$email))
{
$error = true;
$errortext .= "<li><font color='red'>Не правильно заполнено поле E-Mail. E-mail должен иметь вид [email protected]</font></li>";
}
}
, но когда его вставил - все равно проверки не было(( Наверное не туда внедрял его
 

vasinsky

Новичок
ну вот здесь preg_match() - проверка строки по паттерну
if (!preg_match("/^[-0-9a-z_\.]+@[-0-9a-z^\.]+\.[a-z]{2,4}$/i",$email))
а filter_var() - работает аналогично, только без паттернов снаружи - он как бы внутри, только нужно указать 2й аргумент для функции - чтобы она знала - что проверять надо емайл.
 

air1on

Новичок
Я теперь полностью запутался:) Если я сделаю так, как Вы предложили - то мне надо вставить всего одну строчку
PHP:
var_dump(filter_var('[email protected]', FILTER_VALIDATE_EMAIL));
- вот эту?
А вставить ее надо не пойму куда...(
 

vasinsky

Новичок
ну в этой строке 2 функции - если приглядеться)
var_dump() - используют для отладки - чтобы видеть что мы имеем в той или иной переменной
filter_var() - та что проверяет емайл
если ты запустишь эту строку - и проверишь её с валидным и не валидным емайл - ты увидишь, что она вернёт разный результат.

в любом случае ответом функции будет булевый тип - ложь или истина - true или false

ну давай хоть попытайся, посмотри описание и примеры в мануале - попробуй хоть что-то
 

air1on

Новичок
примеры не могу найти что то, а так все пересмотрел наверное! а вот это мыло в коде '[email protected]' - что означает не подскажите?
 

vasinsky

Новичок
это то что нужно проверить на валидность.
у тебя это в $_POST['mail'] должно с формы прийти
 

vasinsky

Новичок
если ты поставишь код php (переменную) - то она не будет работать) это как бы основы синтаксиса языка - пиши без кавычек
 

air1on

Новичок
PHP:
var_dump($value['mail'], FILTER_VALIDATE_EMAIL));
- вот так правильно?
и теперь если все так - то мне остается вставить это строчку в код!

PHP:
$value['name']=(isset($_POST['name'])) ? trim_name($_POST['name']) : '';
$value['mail']=(isset($_POST['mail'])) ? trim_sm_text($_POST['mail']) : '';
$value['text']=(isset($_POST['text'])) ? trim_text($_POST['text']) : '';
var_dump($value['mail'], FILTER_VALIDATE_EMAIL));
- или не туда?
 

vasinsky

Новичок
нет. где вообще логика в таком использовании?


PHP:
if(!filter_var($value['mail'], FILTER_VALIDATE_EMAIL)){
    echo 'Введён не валидный email!';
}
else{
  //всё нормально - продолжаем работать
}
 

air1on

Новичок
Я полный лузер - согласен!) но когда вставляю в код проверку - страница вообще не отображается!
PHP:
$value['name']=(isset($_POST['name'])) ? trim_name($_POST['name']) : '';
    $value['mail']=(isset($_POST['mail'])) ? trim_sm_text($_POST['mail']) : '';
    $value['text']=(isset($_POST['text'])) ? trim_text($_POST['text']) : '';
    if(!$value['mail'], FILTER_VALIDATE_EMAIL)){
    echo 'Введён не валидный email!';
}
else{
  //всё нормально - продолжаем работать
}
- наверное не туда и не так вставляю?
 

vasinsky

Новичок
)) яж опечатку за 5 сек исправил - как увидел. глянь ещё разок на мой предыдущий пост.
 

air1on

Новичок
У меня получилась вот так -
PHP:
if(isset($_POST['submit']))
    {
    $value['name']=(isset($_POST['name'])) ? trim_name($_POST['name']) : '';
    $value['mail']=(isset($_POST['mail'])) ? trim_sm_text($_POST['mail']) : '';
    $value['text']=(isset($_POST['text'])) ? trim_text($_POST['text']) : '';
    if(!filter_var($value['mail'], FILTER_VALIDATE_EMAIL)){
    echo 'Введён не валидный email!';
}
else{
  //всё нормально - продолжаем работать
}
- страница стала нормально работать, но проверка не происходит - ввожу в поле для почты одни цифры и форма считается корректно заполненной, может что еще упустил я?
 

vasinsky

Новичок
хм. а так

PHP:
if(isset($_POST['submit']))
    {
    $value['name']=(isset($_POST['name'])) ? trim_name($_POST['name']) : '';
    $value['mail']=(isset($_POST['mail'])) ? trim_sm_text($_POST['mail']) : '';
    $value['text']=(isset($_POST['text'])) ? trim_text($_POST['text']) : '';
    if(filter_var($value['mail'], FILTER_VALIDATE_EMAIL)===false){
    echo 'Введён не валидный email!';
}
else{
  //всё нормально - продолжаем работать
}
 

vasinsky

Новичок
)) я на 200% уверен, что ты не так использовал мой совет.
ошибка вылетает, но она игнорируется твоим кодом - т.е. ты её сам игнорируешь

смотри как должен выглядеть твой алгоритм

PHP:
if(проверка === false){
  //останавливаем скрипт - и говорим - что мыло не валидное
}
else{
  //работаем с данными - т.е. весь алгоритм здесь
}
 
Сверху