Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как проверить поле email при заполнении формы, Как проверить поле email при заполнении  
:(
    Опции темы
air1on
Дата 23.6.2014, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 8.5.2014

Репутация: нет
Всего: нет



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

Код

<?

$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");

?>




PM MAIL   Вверх
baldina
Дата 23.6.2014, 10:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Код

function valid_email ($mail) {
  if (preg_match('/^([a-z0-9\._\-]+\@)(.+)$/i', $mail, $match))
    return checkdnsrr ($match[2]);

  return false;
}
...
if (!valid_email ($value['mail'])) {
 // неверный адрес
}

PM MAIL   Вверх
air1on
Дата 23.6.2014, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 8.5.2014

Репутация: нет
Всего: нет



Цитата(baldina @ 23.6.2014,  10:47)
Код

function valid_email ($mail) {
  if (preg_match('/^([a-z0-9\._\-]+\@)(.+)$/i', $mail, $match))
    return checkdnsrr ($match[2]);

  return false;
}
...
if (!valid_email ($value['mail'])) {
 // неверный адрес
}

мне неудобно у Вас спрашивать, но я не знаю куда надо вставить код, который Вы прислали( Подскажите пожалуйста
PM MAIL   Вверх
Aliance
Дата 23.6.2014, 11:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



С недавних пор я склоняюсь к тому, чтобы не валидировать формат email вовсе. Я бы порекомендовал просто проверять наличие знака собаки в введенном тексте и отправлять после регистрации письмо с подтверждением. Потому что чисто теоретически формат email по RFC может быть куда сложнее, чем регулярка, написанная выше. Например таким:
Цитата

"Mr Vladimir Putin"@moscow.ru


По факту же, отправка письма-подтверждения регистрации играет роль валидации правильного почтового адреса.
PM MAIL WWW ICQ Skype   Вверх
ksnk
Дата 23.6.2014, 11:13 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 1
Всего: 386





--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
air1on
Дата 23.6.2014, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 8.5.2014

Репутация: нет
Всего: нет



Скажите пож., а как проверить на наличие символа "@" ? Тот код, который я прислал, в самом начале - это  не форма регистрации, а форма отправки вопроса. Так что отправлять письмо с подтверждением не надо наверное.

Добавлено через 4 минуты
Код

class User < ActiveRecord::Base
  validates_format_of :email, :with => /@/
end


Вот вытащил по Вашей ссылке этот код, но куда его надо внедрить в мой код не могу понять((
PM MAIL   Вверх
ksnk
Дата 23.6.2014, 11:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 1
Всего: 386



Цитата(air1on @  23.6.2014,  11:14 Найти цитируемый пост)
Скажите пож., а как проверить на наличие символа "@" ? 

Цитата(air1on @  23.6.2014,  10:13 Найти цитируемый пост)

function valid_email($mail){
...
}

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']!='' && valid_email($value['mail']) && $value['text']!='')
...


как-то так


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
air1on
Дата 23.6.2014, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 8.5.2014

Репутация: нет
Всего: нет



Код

function valid_email($mail){
...
}


а вместо "..." что надо вставить?
PM MAIL   Вверх
ksnk
Дата 23.6.2014, 11:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 1
Всего: 386



Цитата(air1on @  23.6.2014,  11:23 Найти цитируемый пост)
а вместо "..." что надо вставить? 


baldina, постил чуть выше.
Я бы, начитавшись статьи с хабра, поменял регулярку так
Код

function valid_email ($mail) {
  if (preg_match('/^(.+@)(.+\..+)$/i', $mail, $match))
    return checkdnsrr ($match[2]);
  return false;
}



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
air1on
Дата 23.6.2014, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 8.5.2014

Репутация: нет
Всего: нет



Цитата(ksnk @ 23.6.2014,  11:50)
Цитата(air1on @  23.6.2014,  11:23 Найти цитируемый пост)
а вместо "..." что надо вставить? 


baldina, постил чуть выше.
Я бы, начитавшись статьи с хабра, поменял регулярку так
Код

function valid_email ($mail) {
  if (preg_match('/^(.+@)(.+\..+)$/i', $mail, $match))
    return checkdnsrr ($match[2]);
  return false;
}

ksnk - вы гений!!! все работает! Мне стыдно, но все таки не могу удержаться и не спросить, а как сделать вывод инфы на экран, что бы было понятно, что это неправильно email введен используй вот этот код
Код

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 />';
    }
 
PM MAIL   Вверх
ksnk
Дата 23.6.2014, 12:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 1
Всего: 386



Код

if(isset($_POST['submit']))
    {
$error=array();
    $value['name']=(isset($_POST['name'])) ? trim_name($_POST['name']) : '';
if(empty($value['name'])) $error[]='Не заполнено поле "name"';
    $value['mail']=(isset($_POST['mail'])) ? trim_sm_text($_POST['mail']) : '';
if(!valid_email($value['mail'])) $error[]='Неправильно заполнено поле "mail"';
    $value['text']=(isset($_POST['text'])) ? trim_text($_POST['text']) : '';
if(empty($value['text'])) $error[]='Надо что-то написать в сообщении';

   if(empty($error)){
     ...
   } else {
      echo '<br /><strong style="color:red;">'. implode('<br />',$error).'</strong><br />';

   }


P.S. поправлены кавычки

Это сообщение отредактировал(а) ksnk - 23.6.2014, 14:16


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
air1on
Дата 23.6.2014, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 8.5.2014

Репутация: нет
Всего: нет



Цитата(ksnk @ 23.6.2014,  12:23)
Код

if(isset($_POST['submit']))
    {
$error=array();
    $value['name']=(isset($_POST['name'])) ? trim_name($_POST['name']) : '';
if(empty($value['name'])) $error[]='Не заполнено поле 'name'';
    $value['mail']=(isset($_POST['mail'])) ? trim_sm_text($_POST['mail']) : '';
if(!valid_email($value['mail'])) $error[]='Неправильно заполнено поле 'mail'';
    $value['text']=(isset($_POST['text'])) ? trim_text($_POST['text']) : '';
if(empty($value['text'])) $error[]='Надо что-то написать в сообщении';

   if(empty($error)){
     ...
   } else {
      echo '<br /><strong style="color:red;">'. implode('<br />',$error).'</strong><br />';

   }

Код

if(empty($error)){
     ...
   }


очень мне не по себе от таких вопросов, как мне кажется, но вместо "...", что должно стоять? smile 
PM MAIL   Вверх
ksnk
Дата 23.6.2014, 12:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 1
Всего: 386



Цитата(air1on @  23.6.2014,  12:37 Найти цитируемый пост)
очень мне не по себе от таких вопросов, как мне кажется, но вместо "...", что должно стоять?

То, что в первом посте стоит между строчками 30 до 69 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Aliance
Дата 23.6.2014, 12:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



ksnk, да, именно на эту статью я и опирался smile но давать линк не стал, все же там рельсы
PM MAIL WWW ICQ Skype   Вверх
air1on
Дата 23.6.2014, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 8.5.2014

Репутация: нет
Всего: нет



Цитата(Aliance @ 23.6.2014,  12:48)
ksnk, да, именно на эту статью я и опирался smile но давать линк не стал, все же там рельсы

Aliance - скажите а что такое "рельсы"?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.1765 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.