Добрый день! Пытаюсь создать веб страницу для проверки правильности введенного 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. Что-то у меня в коде не стыкуется. Проверка не производится, выводятся ошибки синтаксиса. Не подскажите, где ошибка? Заранее спасибо!
Зарегистрирован: 22.11.2011 Сообщения: 208 Откуда: караганда
А чем встроенная в HTML5 <input type=email> не устраивает? кроме не полной кроссбраузерности пока?!
а нерабочесть возможна из-за вероятных опечаток - и ваших и типографии. Сейчас под рукой нет этой книги. Может сам Дэн проверит.
Попробовал использовать <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?
Зарегистрирован: 22.11.2011 Сообщения: 208 Откуда: караганда
я может чегото не въехал ,а как фунция то подхватывает обработку введенного поля? где <form action= > .
Цитата:
return true;}
}
if (is_email($email)) echo "E-mail правильный";
дело в выделенной скобке. эта скобка - конец тела функции.
Вне тела функции переменная $email не определена и по дефолту, если не изменяет память равна NULL.
чуть ниже в той же главе показано, как обработать емаил
Цитата:
$email=$_REQUEST['email'];
этой строчки и нехватает, да и с инклюдом тоже я не совсем догнал....
ну и про встроенную в HTML5 проверку корректности для поля с типом email напомню. Просто ставишь и не надо ничего писать на пхп(почти, т.к. лучше проверить корректность данных).
Правда и браузер должен быть [s]кошерный[/s]"правильный", т.е. реализующий эту возможность из спецификации HTML5[/b]
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.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!.
Может поможете найти ошибку? Заранее спасибо!
Зарегистрирован: 22.11.2011 Сообщения: 208 Откуда: караганда
Цитата:
Насколько я понял, при открывании страницы email.php подгружается email.html, далее введенный пользователем текст записывается в переменную $email и проверяется на соответствие требованиям.
Не совсем так.
То, как тебе подсказали(и о чем я и говорил) выглядит так: обрашаемся к хтмл ,там в поле ввода вводим мыло и нажимаем отправить(проверить).По экшн и вызывается пхп скрипт, которому в качестве параметра передается содержимое формы - в нашем случае значение поля с именем "мыло" и значением этого самого введеного мыла и занчение кнопки submit.
В твоемже первоначальном варианте с инклюдом ты просто отрисовывал в теле пхп скрипта форму с помощью хтмл-вставки, НО! в хтмл нет привычных для пхп переменных и к свойствам объектов хтмл разметки можно обращаться через объектную модель документа DOM. Напрямую обратиться их пхп к полю по имени как к переменной нельзя(наверное, раз не заработало).
А вообще всегда разделяли форму ввода и обработки данных ,пока не придумали аякс, вот там-то "на лету" и обращаются к значениям объектов хтмл через DOM в одном документе.
Цитата:
$email=$_REQUEST['email'];
это и есть ключевая строка, передающая данные от хтмл к пхп
Еще хочу добавить. В субботу прочитал ответ и понял, что я делал все наоборот, но под рукой компьютера не было, поэтому не было возможности и проверить все на практике. Сегодня сделал все так, как вы и посоветовали (хотелось все таки добить скрипт). Выдавало ошибку в той строке, где была функция 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>
Зарегистрирован: 22.11.2011 Сообщения: 208 Откуда: караганда
Спасибо за то, что поделились своим опытом
От себя:
1. сначала используем встроенный в HTML5 проверку
2. прежде чем обрабатывать данные - проверяем еще раз с помощью ПХП
3. Потом и осуществляем нужные действия ,если все с мылом ОК или ругаемся на кривизну рук или злой умысел пользователя!
к админу, т.е. Дэну:
А есть ли возможность спрятать листинги под спойлеры?
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах