- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть форма обратной связи. На данный момент регулярка проверяет на предмет правильности заполнения полей имя, email и телефон. Однако, надо оставить право за пользователем, хочет ли он оставлять свои контакты или нет, поэтому поля могут быть и пустыми.
Но на данный момент, если оставить их пустыми, скрипт ругается.
Форма:
<label for="first_name">Имя</label>
<input id="forminput" type="text" name="first_name" maxlength="50" size="30">
<label for="email">Ваш email</label>
<input id="forminput" type="text" name="email" maxlength="80" size="30">
<label for="telephone">Ваш телефон</label>
<input id="forminput" type="text" name="telephone" maxlength="30" size="30">
<label for="comments">Сообщение</label>
<textarea id="forminput" name="comments" maxlength="1000" cols="25" rows="6"></textarea>
<input type="submit" value="Отправить">
</form>
Файл send.php:
if(isset($_POST['email'])) {
$email_to = "email@mail.ru";
$email_subject = "Обращение с сайта:".$_POST['first_name']." ".$_POST['last_name'];
function died($error) {
// your error code can go here
echo "<p class=\"error\"><B>Ошибка!</B><BR>Очень жаль, но нам кажется, что вы допустили ошибки при заполнении формы. ";
echo "Эти ошибки перечислены ниже.</p><br /><br /><ul>";
echo $error."<br /><br />";
echo "</ul><p>Пожалуйста, <a href=\"#\" onClick=\"history.go(-1);return true;\">вернитесь назад</a> и исправьте указанные ошибки, чтобы отправить ваше сообщение.</p><br /><br />";
die();
}
// validation expected data exists
if(!isset($_POST['comments'])) {
died('Ваше сообщение пусто.');
}
$first_name = $_POST['first_name'];
$email_from = $_POST['email'];
$telephone = $_POST['telephone'];
$comments = $_POST['comments'];
$error_message = "";
$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
if(!preg_match($email_exp,$email_from)) {
$error_message .= '<li>Поле Email заполнено неправильно.</li>';
}
$string_exp = "/^[A-Za-zа-яА-Я.'-]+$/ui";
if(!preg_match($string_exp,$first_name)) {
$error_message .= '<li>Поле <B>имя</B> заполнено некорректно.</li>';
}
if(strlen($comments) < 2) {
$error_message .= '<li>Ваше сообщение слишком короткое.</li>';
}
if(strlen($error_message) > 0) {
died($error_message);
}
$email_message = "Обращение через форму обратной связи на сайте.\n\n";
function clean_string($string) {
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
}
$email_message .= "Имя: ".clean_string($first_name)."\n";
$email_message .= "Фамилия: ".clean_string($last_name)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";
$email_message .= "Телефон: ".clean_string($telephone)."\n";
$email_message .= "Сообщение: ".clean_string($comments)."\n";
// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);
?>
<!-- include your own success html here -->
<p class="success"><B>Ваше сообщение отправлено!</p>
<?php
}
?>
Можно ли включить в регулярку возможность оставлять поля пустыми, но проверять когда они вводятся?
Можно, но экономичнее будет так:
if(trim($first_name) && !preg_match($string_exp,$first_name)) {
$error_message .= '<li>Поле <B>имя</B> заполнено некорректно.</li>';
}
Для этих целей лучше использовать фильтр.
Без регулярки проверяйте на пустоту.
Можно ли включить в регулярку возможность оставлять поля пустыми, но проверять когда они вводятся?
Прежде чем применять регулярку, проверяйте, не пустое ли поле.
Если пустое, то никакие проверки не применяйте, в том числе и на длину и регулярное выражение.