Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Проверка корректности e-mail

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP
 
Автор Сообщение
alexander4321

Новенький


Зарегистрирован: 27.09.2012
Сообщения: 28

СообщениеДобавлено: Чт Сен 27, 2012 1:54 pm    Заголовок сообщения: Проверка корректности e-mail
Ответить с цитатой

Добрый день! Пытаюсь создать веб страницу для проверки правильности введенного e-mail по книге PHP 5/6 и MySQL Разработка Web-приложений, глава 6.3.1. Создал HTML файл (email.html) с формой ввода e-mail.
Код формы поместил между тегами body
<form name="email" method="get" action="">
<label>Введите email-адрес<br>
<input type="text" name="email">
</label>
<label>
<input type="submit" value="Проверить">
</label>
</form>
Затем создал PHP файл (email.php). Вот код между тегами body
<?php
include "email.html?quot;;
?>
<?php
function is_email($email) {
if (! preg_match( '/^[A-Za-z0-9!#$%&\'*+-/=?^_`{|}~]+@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)+[A-Za-z]$/', $email)) {
return false;
} else {
return true;}
}
if (is_email($email)) echo "E-mail правильный";
else echo "Введите правильный e-mail";
?>
Соответственно, вызываю страницу email.php. Она подхватывает email.html с помощью include "email.html?quot;;. Далее идет код для проверки правильности введенного email. Этот код я полностью переписал с книги. После этого кода я поместил строчки для вывода сообщения о правильности или неправильности введенного email. Что-то у меня в коде не стыкуется. Проверка не производится, выводятся ошибки синтаксиса. Не подскажите, где ошибка? Заранее спасибо!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AcetonKZ

Участник тусовки


Зарегистрирован: 22.11.2011
Сообщения: 208
Откуда: караганда

СообщениеДобавлено: Пт Сен 28, 2012 2:25 am    Заголовок сообщения:
Ответить с цитатой

А чем встроенная в HTML5 <input type=email> не устраивает? кроме не полной кроссбраузерности пока?!
а нерабочесть возможна из-за вероятных опечаток - и ваших и типографии. Сейчас под рукой нет этой книги. Может сам Дэн проверит.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
alexander4321

Новенький


Зарегистрирован: 27.09.2012
Сообщения: 28

СообщениеДобавлено: Пт Сен 28, 2012 5:24 am    Заголовок сообщения:
Ответить с цитатой

Попробовал использовать <input type=email>. Сделал все в одном файле. Вот код между тегами body
<input type="email" name="email" method="post">
<input type="button" value="Проверить">
<?php
function is_email($email) {
if (! preg_match( '/^[A-Za-z0-9!#$%&\'*+-/=?^_`{|}~]+@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)+[A-Za-z]$/', $email)) {
return false;
} else {
return true;}
}
if (is_email($email)) echo "E-mail правильный";
else echo "Введите правильный e-mail";
?>
Понимаю, что что-то не так делаю, но не могу понять что именно. Где связь между введенным email и переменной $email? Как то же в эту переменную должен записываться введенный email?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
alexander4321

Новенький


Зарегистрирован: 27.09.2012
Сообщения: 28

СообщениеДобавлено: Пт Сен 28, 2012 7:44 am    Заголовок сообщения:
Ответить с цитатой

Еще немного изменил.
1) Файл email.html
<body>
<form method='POST'>
<input type="email" name="email" method="post">
<input type="submit" value="Проверить">
</form>
</body>

2) Файл email.php
<body>
<?php
include "email.html?quot;;
function is_email($email) {
if (! preg_match( '/^[A-Za-z0-9!#$%&\'*+-/=?^_`{|}~]+@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)+[A-Za-z]$/', $email)) {
return false;
} else {
return true;}
}
if (is_email($email)) echo "E-mail правильный";
else echo "Введите правильный e-mail";
?>
</body>
Выдает ошибку в строке - if (is_email($email)) echo "E-mail правильный";
Пишет, что Notice: Undefined variable: email.
Также в строке 12 пишет, что
Unknown modifier '=' .
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AcetonKZ

Участник тусовки


Зарегистрирован: 22.11.2011
Сообщения: 208
Откуда: караганда

СообщениеДобавлено: Пт Сен 28, 2012 10:57 am    Заголовок сообщения:
Ответить с цитатой

я может чегото не въехал ,а как фунция то подхватывает обработку введенного поля? где <form action= > .
Цитата:

return true;}
}
if (is_email($email)) echo "E-mail правильный";

дело в выделенной скобке. эта скобка - конец тела функции.
Вне тела функции переменная $email не определена и по дефолту, если не изменяет память равна NULL.

чуть ниже в той же главе показано, как обработать емаил
Цитата:

$email=$_REQUEST['email'];

этой строчки и нехватает, да и с инклюдом тоже я не совсем догнал....
ну и про встроенную в HTML5 проверку корректности для поля с типом email напомню. Просто ставишь и не надо ничего писать на пхп(почти, т.к. лучше проверить корректность данных).
Правда и браузер должен быть [s]кошерный[/s]"правильный", т.е. реализующий эту возможность из спецификации HTML5[/b]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
alexander4321

Новенький


Зарегистрирован: 27.09.2012
Сообщения: 28

СообщениеДобавлено: Сб Сен 29, 2012 4:30 am    Заголовок сообщения:
Ответить с цитатой

1) По поводу встроенной в HTML5 проверки корректности для поля с типом email: мне все таки хотелось бы приобрести некоторый опыт с работой на PHP. Честно говоря, мне подсказали еще один способ решения этой проблемы. Вот код:
- файл mail.html
<body>
<form action=http://localhost/php6/3/examp.php method='POST'>
<input type="email" name="email" method="post">
<input type="submit" value="Проверить">
</form>
</body>

- файл examp.php
<body>
<?php
filter_var('example@mail.ru', FILTER_VALIDATE_EMAIL);
include "mail.html?quot;;
if($_POST){
if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
echo "всё круто!";
}
else{
echo "Всё печально";
}
}
?>
</body>
Код нормально работает. Просто хотелось бы понять, чего я не догоняю в коде из книги.
На ошибках учатся (если только удалось их исправить).

2) По поводу изменений в коде. Дописал action в html файл. Добавил request в php файл. Вот код:

- файл email.html
<body>
<form action=http://localhost/php6/3/email.php method='POST'>
<input type="email" name="email" method="post">
<input type="submit" value="Проверить">
</form>
</body>

- файл email.php
<body>
<?php
require "email.html?quot;;
function is_email($email) {
if (! preg_match( '/^[A-Za-z0-9!#$%&\'*+-/=?^_`{|}~]+@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)+[A-Za-z]$/', $email)) {
return false;
} else {
return true;}
}
$email=$_REQUEST['email'];
if (is_email($email)) echo "E-mail правильный";
else echo "Введите правильный e-mail!";
?>
Насколько я понял, при открывании страницы email.php подгружается email.html, далее введенный пользователем текст записывается в переменную $email и проверяется на соответствие требованиям. Затем, после закрытия функции, запрашивается результат функции $email=$_REQUEST['email'];, далее выводится на экран сообщение о правильности или не правильности введенного email.
В итоге на строку $email=$_REQUEST['email']; пишет
Notice: Undefined index: email in C:\Apache2\htdocs\php6\3\email.php on line 17,
а на строку с if (! preg_match( '/^[A- и т.д. пишет
Unknown modifier '=' in C:\Apache2\htdocs\php6\3\email.php on line 12,
а ниже всего появляется текст
Введите правильный e-mail!.
Может поможете найти ошибку? Заранее спасибо!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AcetonKZ

Участник тусовки


Зарегистрирован: 22.11.2011
Сообщения: 208
Откуда: караганда

СообщениеДобавлено: Сб Сен 29, 2012 8:06 am    Заголовок сообщения:
Ответить с цитатой

Цитата:
Насколько я понял, при открывании страницы email.php подгружается email.html, далее введенный пользователем текст записывается в переменную $email и проверяется на соответствие требованиям.

Не совсем так.
То, как тебе подсказали(и о чем я и говорил) выглядит так: обрашаемся к хтмл ,там в поле ввода вводим мыло и нажимаем отправить(проверить).По экшн и вызывается пхп скрипт, которому в качестве параметра передается содержимое формы - в нашем случае значение поля с именем "мыло" и значением этого самого введеного мыла и занчение кнопки submit.
В твоемже первоначальном варианте с инклюдом ты просто отрисовывал в теле пхп скрипта форму с помощью хтмл-вставки, НО! в хтмл нет привычных для пхп переменных и к свойствам объектов хтмл разметки можно обращаться через объектную модель документа DOM. Напрямую обратиться их пхп к полю по имени как к переменной нельзя(наверное, раз не заработало).
А вообще всегда разделяли форму ввода и обработки данных ,пока не придумали аякс, вот там-то "на лету" и обращаются к значениям объектов хтмл через DOM в одном документе.
Цитата:
$email=$_REQUEST['email'];

это и есть ключевая строка, передающая данные от хтмл к пхп
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
alexander4321

Новенький


Зарегистрирован: 27.09.2012
Сообщения: 28

СообщениеДобавлено: Сб Сен 29, 2012 4:43 pm    Заголовок сообщения:
Ответить с цитатой

Все понял. Спасибо за помощь!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
alexander4321

Новенький


Зарегистрирован: 27.09.2012
Сообщения: 28

СообщениеДобавлено: Пн Окт 01, 2012 5:28 am    Заголовок сообщения:
Ответить с цитатой

Еще хочу добавить. В субботу прочитал ответ и понял, что я делал все наоборот, но под рукой компьютера не было, поэтому не было возможности и проверить все на практике. Сегодня сделал все так, как вы и посоветовали (хотелось все таки добить скрипт). Выдавало ошибку в той строке, где была функция preg_match (появлялась надпись о неопределенных элементах типа =). Заподозрил ошибку в наборе символов для этой функции. Порылся в интернете, нашел несколько отличный от представленного в книге набор символов ("|^[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}$|i"), причем i в конце шаблона указывает интерпретатору, что поиск проводится без учета регистра, ^ - это знак начала строки, $ - это знак конца строки. В итоге получился следующий код:
1) email.html
<body>
<form action=http://localhost/php6/3/email.php method='post'>
<input type="email" name="email" method="post">
<input type="submit" value="Проверить">
</form>
</body>

2) email.php
<?php
require "email.html?quot;;
function is_email($email) {
//if (! preg_match( '/^[A-Za-z0-9!#$%&\'*+-/=?^_`{|}~]+@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)+[A-Za-z]$/', $email)) {
if (! preg_match( "|^[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}$|i", $email)) {
return false;
} else {
return true;}
}
$email=$_REQUEST['email'];
if (is_email($email)) echo "E-mail правильный";
else echo "Введите правильный e-mail!";
?>

Вызываю email.ntml, все прекрасно работает. Еще раз спасибо за помощь!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AcetonKZ

Участник тусовки


Зарегистрирован: 22.11.2011
Сообщения: 208
Откуда: караганда

СообщениеДобавлено: Пн Окт 01, 2012 5:48 am    Заголовок сообщения:
Ответить с цитатой

Спасибо за то, что поделились своим опытом
От себя:
1. сначала используем встроенный в HTML5 проверку
2. прежде чем обрабатывать данные - проверяем еще раз с помощью ПХП
3. Потом и осуществляем нужные действия ,если все с мылом ОК или ругаемся на кривизну рук или злой умысел пользователя!

к админу, т.е. Дэну:
А есть ли возможность спрятать листинги под спойлеры?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Вт Окт 02, 2012 7:48 pm    Заголовок сообщения:
Ответить с цитатой

Надо себя озадачить!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис