[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярка для проверки корректности e-mail
PHP_Fox
Вот такая у меня сейчас проверка корректности e-mail при регистрации пользователя

if(!preg_match('/^[-a-z0-9_.]{1,50}@[-a-z0-9_.]{1,50}\.[a-z]{2,6}$/i', $email))


Все ли я правильно учел? Этот вариант только на случай проверки e-mail с латинскими символами.

И стоит ли уже проверять и учитывать кириллические символы? домены .рф?

Например вася.пупкин@мой-сайтик.рф



Спустя 7 часов, 8 минут, 14 секунд (23.09.2012 - 13:11) vagrand написал(а):
Зачем изобретать велосипед когда ес вот такая вещь: http://php.net/manual/en/filter.filters.validate.php

Спустя 25 минут, 41 секунда (23.09.2012 - 13:36) PHP_Fox написал(а):
Цитата (vagrand @ 23.09.2012 - 13:11)
Зачем изобретать велосипед когда ес вот такая вещь: http://php.net/manual/en/filter.filters.validate.php

Вообще-то эта самая как вы сказали вещь не корректно работает rolleyes.gif

Спустя 1 час, 48 минут, 36 секунд (23.09.2012 - 15:25) inpost написал(а):
PHP_Fox
Почему некорректно? Я недавно выдался проверять, всё работает как надо.

Спустя 1 час, 59 минут, 51 секунда (23.09.2012 - 17:25) pak написал(а):
пробовал фильтер, в раздных версиях php тупит иногда, пропускает)

Спустя 26 минут, 26 секунд (23.09.2012 - 17:51) Shkiper написал(а):
if(!preg_match('/^[-a-z0-9_.]{1,50}@[-a-z0-9_.]{1,50}\.[a-z]{2,6}$/i', $email))

Ошибочка
if(!preg_match('/^[-a-z0-9_.]{1,50}@[-a-z0-9_.]{1,50}\.[a-z]{2,6}$/i', $email))
Ты не заэкранировал точку. Если ты ее не заэкранируешь то там будет принят любой текст

Спустя 14 минут, 29 секунд (23.09.2012 - 18:06) neadekvat написал(а):
Цитата (Shkiper @ 23.09.2012 - 18:51)
Если ты ее не заэкранируешь то там будет принят любой текст

Попробуй пробиться через это:
if ( ! preg_match('#^[.]*$#i', $email))
echo 'no';

Спустя 13 секунд (23.09.2012 - 18:06) inpost написал(а):
pak
Ты бы хоть говорил, что именно пропускает! smile.gif А то как в стоге сена искать ТВОЮ ошибку.... smile.gif

Спустя 17 минут, 24 секунды (23.09.2012 - 18:23) Shkiper написал(а):
neadekvat всмысли пробится?

Спустя 43 секунды (23.09.2012 - 18:24) neadekvat написал(а):
Цитата (Shkiper @ 23.09.2012 - 19:23)
всмысли пробится?

Подобрать такое $email, чтобы приведенный код не вывел no.

Спустя 4 минуты, 56 секунд (23.09.2012 - 18:29) pak написал(а):
inpost
ну вот к примеру у меня пропускает:

$e = 'te#st-@bk.ru';
var_dump(filter_var($e, FILTER_VALIDATE_EMAIL));

Спустя 10 минут, 23 секунды (23.09.2012 - 18:39) inpost написал(а):
pak
И? Я не вижу тут ошибки нарушения стандартов. Может быть конкретный бесплатный почтовик не разрешает некоторые символы, но дифис на конце ставить можно. Решетка входит в допустимые для e-mail адресов символы.
Тут стандарты не нарушены, всё ок!

Спустя 2 минуты, 55 секунд (23.09.2012 - 18:42) pak написал(а):
я сравнивал с mail ru, значит у них свои стандарты)

Спустя 10 секунд (23.09.2012 - 18:42) inpost написал(а):
Гугл не зарегистрирует подобный e-mail, но это его личные тараканы.
Вот по правилам. Под рукой нет мануала официального, но его читал и проверял, всё как надо работает. Но есть ссылка из гугла, где ты можешь убедиться, что ты не допустил ошибки в e-mail адресе: http://www.tftf.ru/stati/internet/email/

Спустя 2 минуты, 42 секунды (23.09.2012 - 18:45) inpost написал(а):
Гугл, мейл.ру, яндекс... у каждого свои собственные тараканы. Ну захотелось им запретить часть символов без повода... что тут скажешь, но они не идеальны, а стандарты и правильность адресов зарегистрировано и написано там.
Максимум что можно, так это проверять на существование такого e-mail адреса. А вот корректность - есть стандарты!

Спустя 4 минуты, 12 секунд (23.09.2012 - 18:49) pak написал(а):
inpost
благодарю, не знал про таких тараканов)

Спустя 34 секунды (23.09.2012 - 18:50) neadekvat написал(а):
inpost, стандарты - это круто, конечно, я их тоже читал. Но все-таки надо исходить из реального положения дел. Я вот не могу вспомнить сервисы, где можно такие адреса зарегистрировать:
te#st-@bk.ru

Соответственно, скорее всего, в адресе ошибка или ложь.

Спустя 29 минут, 33 секунды (23.09.2012 - 19:19) inpost написал(а):
Вот только ради вас. Создал:
user posted image

Спустя 1 минута, 56 секунд (23.09.2012 - 19:21) neadekvat написал(а):
inpost, эм.. и?

Спустя 1 минута, 15 секунд (23.09.2012 - 19:23) inpost написал(а):
neadekvat
И то, что такой аккаунт существует и был создан! Ты сказал: "Я вот не могу вспомнить сервисы, где можно такие адреса зарегистрировать. Соответственно, скорее всего, в адресе ошибка или ложь. "

Какая ошибка, если я тебе показываю, что у меня такой почтовый ящик?! smile.gif

Спустя 3 минуты, 36 секунд (23.09.2012 - 19:26) neadekvat написал(а):
Цитата (inpost @ 23.09.2012 - 20:23)
Какая ошибка, если я тебе показываю, что у меня такой почтовый ящик?!

Я сейчас даже в зеркало глянулся - вроде не похож на дурака. Причем тут ящик, который ты создал через панель управления сервером?
Я тебе про сервисы говорю. Gmail, ya.ru и подобные.

Спустя 1 минута, 37 секунд (23.09.2012 - 19:28) inpost написал(а):
Мы что обсуждаем? Как на личном сайте фильтровать e-mail. То есть если ты создашь на своём сайте фильтр неверный, то не пропустит мои ящики, а должен пропустить. Чья ошибка? ПРОГРАММИСТА, то есть твоя. Ты должен пропускать существующие ящики для регистрации, потому что они существуют и это право человека, пользуется ли он чужим gmail, или своим серверным.

Спустя 9 минут, 3 секунды (23.09.2012 - 19:37) neadekvat написал(а):
В жизни не встречал адреса с #, и еще ни один человек мне не предъявил жалобу.
Зато я не пропустил кучу ошибок, связанных со случайно зажатым шифтом или не переключенным языком.
Я работаю для большинства, а не для всех. И у большинства нет спец. символов в адресе. Ты лично можешь создать себе адрес с этой херней и.. и нигде не зарегистрироваться. Кто виноват? Программисты, которые создавали сайты, но не ты, что пошел против тенденции, выпятив вперед свой стандарт.

Спустя 2 минуты, 38 секунд (23.09.2012 - 19:39) inpost написал(а):
Если завтра все прыгнут в окно, то ты прыгнешь тоже. Вот твой ответ! Ты учишься быть профессионалом, или лишь бы кем? Или сюда ты пришел давать знания, а не получать их?

Спустя 4 минуты, 58 секунд (23.09.2012 - 19:44) neadekvat написал(а):
Цитата (inpost @ 23.09.2012 - 20:39)
Если завтра все прыгнут в окно, то ты прыгнешь тоже. Вот твой ответ!

Глупость.
Ты не понял моей главной мысли.
Я не говорю, что делаю как все. Я говорю, что делаю продукт, который нужен большинству. Это плохо? Считай, как хочешь. Ты - меньшинство, твое мнение, по сути, вообще ничего не стоит в потребительской массе, ты - это статистическая погрешность. Твои заявления о неработающем валидаторе будут игнорироваться как незначительные.
Вот к чему ты пришел со своей принципиальностью. Надо быть гибким.

И я не жесткий. Даже не циничный. Я просто констатирую факт - любая крупная организация смотрит на тебя так, как я описал выше.

Спустя 1 минута, 24 секунды (23.09.2012 - 19:46) inpost написал(а):
neadekvat
Программисты ПХП - говнокодеры.
Ты - Бог!.

Спустя 3 минуты, 15 секунд (23.09.2012 - 19:49) neadekvat написал(а):
Цитата (inpost @ 23.09.2012 - 20:46)
Программисты ПХП - говнокодеры.
Ты - Бог!

Что за..
Переводить дискуссию в петросянство - это отстой.

Спустя 6 минут, 48 секунд (23.09.2012 - 19:56) twin написал(а):
Недавно мне на одном сайте пришлось отказаться от filter_var() не по причине, что он пропускает лишнего, а по причине, что он не пропускает некоторые действующие адреса. Было несколько жалоб. Сейчас не могу вспомнить подробностей, постараюсь. Но факт есть факт.

Спустя 1 минута, 31 секунда (23.09.2012 - 19:57) inpost написал(а):
twin
Я надеюсь, что этот баг был известен ПХП программистам и зарепортирован, поэтому в новых версиях бага нет. К тому же с момента твоего старого сообщения прошел целый год, уже и 5.4. успела выйти.

Спустя 16 минут, 5 секунд (23.09.2012 - 20:13) twin написал(а):
Ну, будем надеяться. Функция то действительно удобная, если баги пофиксили.

Спустя 5 минут, 31 секунда (23.09.2012 - 20:19) inpost написал(а):
neadekvat
Вполне нормальное сравнение. ПХП разрабы, Google, Twitter - все слушают стандарты(!!!), а ты один, кто не уважает стандарты. При этом ты не хочешь признать своей собственной вины. Но ничего страшного, ведь за счёт неграмотности одних возрастает цена грамотным программистам, таким, как те, кто создают ПХП, гугл, твиттер и т.д. И да, я не считаю себя достаточно грамотным, но я к этому стремлюсь.

Спустя 33 минуты, 45 секунд (23.09.2012 - 20:53) neadekvat написал(а):
Цитата (inpost @ 23.09.2012 - 21:19)
ПХП разрабы, Google, Twitter - все слушают стандарты(!!!), а ты один, кто не уважает стандарты.

Эм.. Вообще-то как раз в Гугле нельзя использовать электронные адреса с #. О том речь и идет.
К тому же, я не сказал, что не уважаю стандарты, где ты такое нашел? Я тебе только про адреса почты говорил. Ты, Стас, конечно, не обижайся, но не тебе судить о моей квалификации.

Спустя 18 минут, 49 секунд (23.09.2012 - 21:12) inpost написал(а):
neadekvat
http://phpforum.ru/index.php?showtopic=670...5&#entry2064526
Вот глянь. Они сами не создают, но при этом для восстановления пароля поддерживают стандарты.

Ты будешь 70-летним стариком, и я всё равно скажу, что что-то ты не знаешь. Такова жизнь, век живи - век учись. А ты сейчас на стадии, когда считаешь себя умным, а это и есть утопия знаний, потому что когда ты скажешь себе, что ты глупый, тогда ты начнёшь узнавать больше и становиться лучше.
Я не говорю о твоей общей квалификации программиста, а говорю о тебе в данном вопросе. Ты глуп в данном вопросе, хотя в остальных вопросах я могу сделать предположение, что глупее я. Это общая относительность, не бывает умных во всём и глупых во всем. Поэтому не надо обижаться.

Спустя 11 минут, 13 секунд (23.09.2012 - 21:23) neadekvat написал(а):
Цитата (inpost @ 23.09.2012 - 22:12)
А ты сейчас на стадии, когда считаешь себя умным

Не берись за психологию людей, у тебя не получается.

Я считаю себя умным - да, без этого какая мне цена?
Но я прекрасно осознаю объем знаний, которых нет в моем распоряжении. И чем больше я знаю как факт, тем больше я понимаю, сколько мне неизвестно и насколько велика часть того, что мне не будет известно никогда.

Цитата (inpost @ 23.09.2012 - 22:12)
Ты глуп в данном вопросе

Ты даже RFC вспомнить не смог. А я могу. Это как маленький пример. Так что повторюсь - не тебе судить мои познания.

Спустя 8 минут, 9 секунд (23.09.2012 - 21:31) PHP_Fox написал(а):
Цитата (Shkiper @ 23.09.2012 - 17:51)
if(!preg_match('/^[-a-z0-9_.]{1,50}@[-a-z0-9_.]{1,50}\.[a-z]{2,6}$/i', $email))

Ошибочка
if(!preg_match('/^[-a-z0-9_.]{1,50}@[-a-z0-9_.]{1,50}\.[a-z]{2,6}$/i', $email))
Ты не заэкранировал точку. Если ты ее не заэкранируешь то там будет принят любой текст

Это где я не экранизировал точку? Ты регулярные выражения вообще учил? В символьном классе символ точки не имеет специального назначения (это не метасимвол) по этому экранировать его не нужно, а вот в не символьного класса, да этот символ означает любой символ )

Спустя 7 минут, 42 секунды (23.09.2012 - 21:39) neadekvat написал(а):
Цитата (PHP_Fox @ 23.09.2012 - 22:31)
Ты регулярные выражения вообще учил?

Да, учил. Он там за час их выучил по какой-то ссылке.
Сказал, что Фридла читать - это для смертный, буков слишком много.

Спустя 21 секунда (23.09.2012 - 21:39) PHP_Fox написал(а):
Цитата (twin @ 23.09.2012 - 19:56)
Недавно мне на одном сайте пришлось отказаться от filter_var() не по причине, что он пропускает лишнего, а по причине, что он не пропускает некоторые действующие адреса. Было несколько жалоб. Сейчас не могу вспомнить подробностей, постараюсь. Но факт есть факт.

Вот вот, я о том же там много не точностей )) По этому только свои регулярки!

Спустя 8 минут, 32 секунды (23.09.2012 - 21:48) inpost написал(а):
neadekvat
Кто тебе сказал, что я не смог вспомнить стандарт? Не сочиняй свои глупости.

PHP_Fox
Филькина грамота, кто-то сказал, кто-то подхватил! Заметь, Николай (twin) как раз использовал filter_var() и отказался не от того, что он что-то там пропускает, а от того, что в нём были баги. А прошел уже год, и возможно завтра Николай снова почитает багфиксы и вернётся к filter_var. А ты поверишь каким-то советам псевдо-кодеров, которые не пропускают решетку или тире, а когда-нибудь тебе покажут, что гугл и твиттер же пропускают, и придерживаются стандартов...

Спустя 2 минуты, 1 секунда (23.09.2012 - 21:50) PHP_Fox написал(а):
Цитата (neadekvat @ 23.09.2012 - 21:39)
Цитата (PHP_Fox @ 23.09.2012 - 22:31)
Ты регулярные выражения вообще учил?

Да, учил. Он там за час их выучил по какой-то ссылке.
Сказал, что Фридла читать - это для смертный, буков слишком много.

Вот вот, именно по Джеффри Фридлу я их учил по 3 изданию )) Так что Shkiper рекомендую, лучшая из лучших )

Спустя 3 минуты, 19 секунд (23.09.2012 - 21:53) PHP_Fox написал(а):
Цитата (inpost @ 23.09.2012 - 21:48)
neadekvat
Кто тебе сказал, что я не смог вспомнить стандарт? Не сочиняй свои глупости.

PHP_Fox
Филькина грамота, кто-то сказал, кто-то подхватил! Заметь, Николай (twin) как раз использовал filter_var() и отказался не от того, что он что-то там пропускает, а от того, что в нём были баги. А прошел уже год, и возможно завтра Николай снова почитает багфиксы и вернётся к filter_var. А ты поверишь каким-то советам псевдо-кодеров, которые не пропускают решетку или тире, а когда-нибудь тебе покажут, что гугл и твиттер же пропускают, и придерживаются стандартов...

Я когда сказал что только регулярки, я еще не до конца дочитал ваши сообщения, ведь действительно когда я тестил в последний раз filter_var() это было год назад примерно. Возможно все уже пофиксили, конечно я только за стандарты, но если год назад в этих стандартах были баги, то по этому я и искал выход )) Так что теперь наверно всестаки еще раз потестю filter_var(), если все супер то им и буду пользоваться )

Спустя 11 часов, 23 минуты, 19 секунд (24.09.2012 - 09:16) altairo2087 написал(а):
Да и регулярки работают медленней, чем стандартные функции.

Спустя 38 минут, 12 секунд (24.09.2012 - 09:54) PHP_Fox написал(а):
Цитата (altairo2087 @ 24.09.2012 - 09:16)
Да и регулярки работают медленней, чем стандартные функции.

Ну будем надеяться что PHP разрабы пофиксили там все ))

Спустя 15 часов, 37 минут, 17 секунд (25.09.2012 - 01:32) PHP_Fox написал(а):
Так, ну вроде filter_var() работает корректно, и соблюдает все стандарты, а стандарты и правила я уважаю, ровно как и разработчиков PHP. Если они сказали, что так правильно и пользуйтесь функцией filter_var() значит так я и буду поступать. С этим разобрался! Если конечно ни кто не чего не хочет добавить!?

Вопрос к профи! Ребят смотрите вот такой проверки хватит, все я правильно сделал и можно ли эти данные смело записывать в базу без каких либо еще операций.

$email = trim($_POST['email']);

if(empty($email) and $email !== '0'){
echo 'Вы не заполнили поле E-mail';
}elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){
echo 'Вы ввели не корректный E-mail';
}


И e-mail то полюбому нужно тримить? В отличии от пароля!

И еще вопрос, стоит ли вообще делать такую проверку на пустоту поля или достаточно сделать так?

if($email == ''){
echo 'Вы не заполнили поле E-mail';
}elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){
echo 'Вы ввели не корректный E-mail';
}


Просто почему в первом варианте я использую функцию $empty() просто увидел в других скриптах, что ее используют вместо == '' хотя по сути ведь тоже самое. А вот к этому
and $email !== '0'

я выводу пришел в процессе тестирования, ведь 0 это для пользователя не пустая строка, а для функции пустая ))

Ну вот как-то так, прошу вашего мнения!

И пишем в базу

$db->query("INSERT INTO `users` (`email`) VALUES ('$email')");


Всели тип топ? Или что-то посоветуете, порекомендуете?

Спустя 5 часов, 7 минут, 52 секунды (25.09.2012 - 06:40) twin написал(а):
Тут нотис будет:
$email = trim($_POST['email']);
А так сойдет)

Спустя 39 минут, 32 секунды (25.09.2012 - 07:19) PHP_Fox написал(а):
twin
Цитата
Тут нотис будет:

Нет, нотиса там не будет, яж не весь код вам показал это только часть проверки мыла и то там даже нет никаких echo как в примере, у меня там фиксируются переменные в массив, а в конце массив проверяетя, если есть хоть одна запись, вызывается моя функция обработок ошибок, которая уже сообщает пользователю, что и где он напарол, и там иссетится масив пост, причем не весь а каждая переменная, вот так
if(isset($_POST['login'], $_POST['password'], $_POST['repeat_password'], $_POST['email'])){

Так что если хоть одна переменная не пришла, то не чего и проверяться вообще не будет.
Так что все супер?

Спустя 22 минуты, 48 секунд (25.09.2012 - 07:42) twin написал(а):
Не совсем. Такая проверка исключает конкретизацию ошибки.

Спустя 7 минут, 59 секунд (25.09.2012 - 07:50) PHP_Fox написал(а):
Цитата (twin @ 25.09.2012 - 07:42)
Не совсем. Такая проверка исключает конкретизацию ошибки.

Сейчас вот подумал, и да, нужно перед каждой проверкой иссетить, а то так в код мы не попадем, и пользователю всеголишь скажем что он что-то там не заполнил. Нужно иссетить перед каждой проверкой, проверка логина, иссет, проверка пароля, иссет, и т.д. А так иссетить да, я это не учел.

Тогда наверно просто

if(isset($_POST){

# А тут уже иссетим каждую переменную по отдельности.

}

Спустя 18 секунд (25.09.2012 - 07:50) inpost написал(а):
Обработка данных в одном месте, вывод данных в другом, максимально возможное разделение логики и представления очень важно при построении веб приложений.
К тому же ошибку надо выводить рядом с полем email, а не где попало в начале страницы. Поэтому ошибки необходимо записывать в переменные, а сами переменные уже выводить на экран в нужном месте.

Спустя 6 минут, 44 секунды (25.09.2012 - 07:57) PHP_Fox написал(а):
inpost
Цитата
Обработка данных в одном месте, вывод данных в другом, максимально возможное разделение логики и представления очень важно при построении веб приложений.
К тому же ошибку надо выводить рядом с полем email, а не где попало в начале страницы. Поэтому ошибки необходимо записывать в переменные, а сами переменные уже выводить на экран в нужном месте.

Ты наверно меня не понял, у меня функция обрабатывает ошибки и результат возвращает в форму, и ошибки выводятся там где нужно. Не какого разделения нет, просто у меня функция, типа библиотеки, в которой куча констант, все ошибки скрипта которые выдаются как пользователю на сайте, так и админу в админке, просто хранится все в одном месте, и когда к ней приходит массив, то она выводит все ошибки которые соответствуют пришедшим номерам констант. Так понял? Просто когда я думал какже сделать нечто подобное, то в голову мне пришла именно такая идея, по скольку как делают другие я не знаю и не видел. Но я сделал так и все отлично работает и выводится в нужных местах.

Такой подход очень удобен, в коде нет ни каких сообщений, код чистенький и красивый, а все сообщения в одном месте, и если мне нужно добавить ошибку я просто ее дописываю в библиотеку, и даю ей уникальный номер. Также потом легко подправить сами сообщения и не нужно рыскать по всему движку. Ну это лично мое мнение не знаю как вы это реализуете, но я придумал так.

Кстати тамже хранятся и успешные уведомления, типа поздравляем вы справились. Так что нет текста в коде практически нигде, кроме комментариев ) И те уберутся в продакшене )

Спустя 11 минут, 3 секунды (25.09.2012 - 08:08) inpost написал(а):
ну вот видишь, как можно говорить про норм или нет, когда у тебя вот как всё сложно! Вдруг там не просто норм, но и круто! smile.gif

Спустя 2 минуты, 47 секунд (25.09.2012 - 08:11) PHP_Fox написал(а):
Цитата (inpost @ 25.09.2012 - 08:08)
ну вот видишь, как можно говорить про норм или нет, когда у тебя вот как всё сложно! Вдруг там не просто норм, но и круто! smile.gif

Ну яж не сказал что у меня там лоховской движок, я делаю шедевр, в своих глазах, именно по этому я тут у вас выпрашиваю что бы вы дали мне советы, что бы этот мой шедевр таким и являлся.

Спустя 8 минут, 9 секунд (25.09.2012 - 08:19) twin написал(а):
Если делаешь шедевр, делай значит по правилам))) Функция твоя называется "валидатор", может это для тебя откровение... Так вот, использовать внутри функции суперглобальные массивы - моветон. Функция должна принимать аргументы и возвращать результат.

Спустя 8 минут, 23 секунды (25.09.2012 - 08:27) PHP_Fox написал(а):
twin
Цитата
Функция твоя называется "валидатор", может это для тебя откровение...

Ну вот зачем делать меня уж совсем дураком?
Цитата
Так вот, использовать внутри функции супер глобальные массивы - моветон. Функция должна принимать аргументы и возвращать результат.

О каких супер глобальных массивах ты говоришь? smile.gif Нет ну серьезно ребят, или я тебя не понял, или ты читал не внимательно, где там у меня супер глобальный массив? Бррр...
Она принимает самый обыкновенный массив в качестве аргумента, не какой нибудь там глобальный, где ты это вообще у меня вычитал, а самый обычный одномерный массив.

Спустя 16 минут, 24 секунды (25.09.2012 - 08:44) twin написал(а):
Тогда налей мне кофе погуще. Гадать не на чем. Только что было это:
Цитата
$email = trim($_POST['email']);

я не вижу тут
Цитата
самый обычный одномерный массив.

Спустя 12 минут, 32 секунды (25.09.2012 - 08:56) PHP_Fox написал(а):
Цитата (twin @ 25.09.2012 - 08:44)
Тогда налей мне кофе погуще. Гадать не на чем. Только что было это:
Цитата
$email = trim($_POST['email']);

я не вижу тут
Цитата
самый обычный одномерный массив.

А ты об этом, я думал ты о моем обработчике ошибок, тобишь о пользовательских функциях, так ты хоть уточняй :)

Хм... Что вообще не рекомендуется даже в трим отправлять суперглобалки?

Тогда что делать вот так?
$email = $_POST['email'];
$email = trim($email);

if(empty($email) and $email !== '0'){
echo 'Вы не заполнили поле E-mail';
}elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){
echo 'Вы ввели не корректный E-mail';
}
Как-то не очень прикольно )
И кто нибудь мне скажет наконец )) есть разница или нет? Потому что я осбой не вижу, вы как делаете? Так?
empty($email) and $email !== '0'
или вот так?
$email !== ''

Спустя 6 минут, 22 секунды (25.09.2012 - 09:03) twin написал(а):
Я не про это. Я про то, что у тебя функция валидатора. И ты праямо внутри неё обращаешься к суперглобальному массивы $_POST. По идее нужно передать в неё аргументы. А инициализировать их снаружи.

$email = @$_POST['email'];

function walidator($email)
{
$email = trim($email);
..................

}

Спустя 1 минута, 58 секунд (25.09.2012 - 09:04) twin написал(а):
Цитата
И кто нибудь мне скажет наконец )) есть разница или нет? Потому что я осбой не вижу, вы как делаете? Так?
empty($email) and $email !== '0'
или вот так?
$email !== ''
Если переменная инициализирована, второй вариант проще.

Спустя 12 минут, 31 секунда (25.09.2012 - 09:17) PHP_Fox написал(а):
Цитата (twin @ 25.09.2012 - 09:03)
Я не про это. Я про то, что у тебя функция валидатора. И ты праямо внутри неё обращаешься к суперглобальному массивы $_POST. По идее нужно передать в неё аргументы. А инициализировать их снаружи.

<pre class="sh_sourceCode" rel="php"><span class="sh_variable">$email</span> <span class="sh_symbol">=</span> @<span class="sh_variable">$_POST</span><span class="sh_symbol">[</span><span class="sh_string">'email'</span><span class="sh_symbol">];</span>

<span class="sh_keyword">function</span> <span class="sh_function">walidator</span><span class="sh_symbol">(</span><span class="sh_variable">$email</span><span class="sh_symbol">)</span>
<span class="sh_cbracket">{</span>
    <span class="sh_variable">$email</span> <span class="sh_symbol">=</span> <span class="sh_function">trim</span><span class="sh_symbol">(</span><span class="sh_variable">$email</span><span class="sh_symbol">);
..................</span>
<span class="sh_cbracket">}</span></pre>

У меня там нет подобной функции, во всяком случае пока что ) У меня проверка прямо в файле регистрации, например reg.php и в ней код
$email = trim($_POST['email']);

if(empty($email) and $email !== '0'){
echo 'Вы не заполнили поле E-mail';
}elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){
echo 'Вы ввели не корректный E-mail';
}

Зачем мне это все запихивать в функцию.

приходят данные из формы, методом POST в этот файл reg.php

там мы проверили существует ли вообще пост, может юзер просто в браузер вколотил нечто такое
_http://site.com/reg.php, дабы не хрена ему не показать кроме белой пустой страницы.

и все потом тримим все переменные которые у нас в массиве POST, ну там где нужен трим, где не нужен, например в пароле, не тримим, просто инициализируем переменную.

И все погнали проверки, если все гуд пишим в базу, если нет посылаем массив со всеми ошибками, в мой обработчик ошибок, и пользователю возвращаем результат, мол брат да ты ошибся, вот здесь и вот сдесь, исправляй и давай жмакай кнопку еще разок )))

С чего ты взял что у меня там функция, зачем?

Спустя 1 минута, 8 секунд (25.09.2012 - 09:18) PHP_Fox написал(а):
Цитата (twin @ 25.09.2012 - 09:04)
Цитата
И кто нибудь мне скажет наконец )) есть разница или нет? Потому что я осбой не вижу, вы как делаете? Так?
empty($email) and $email !== '0'
или вот так?
$email !== ''
Если переменная инициализирована, второй вариант проще.

Ню конечно инициализирована, она исетиться будет до проверки, точнее не она а пост, а проверки не будет если поста нет!

Спустя 20 минут, 11 секунд (25.09.2012 - 09:38) PHP_Fox написал(а):
Цитата
там мы проверили существует ли вообще пост, может юзер просто в браузер вколотил нечто такое
_http://site.com/reg.php, дабы не хрена ему не показать кроме белой пустой страницы.

Или даже нетак, а говорим ему слышь брат хренли ты тут забыл и тычим ему 403 smile.gif

Спустя 21 минута, 47 секунд (25.09.2012 - 10:00) PHP_Fox написал(а):
Цитата (PHP_Fox @ 25.09.2012 - 07:50)
Цитата (twin @ 25.09.2012 - 07:42)
Не совсем. Такая проверка исключает конкретизацию ошибки.

Сейчас вот подумал, и да, нужно перед каждой проверкой иссетить, а то так в код мы не попадем, и пользователю всеголишь скажем что он что-то там не заполнил. Нужно иссетить перед каждой проверкой, проверка логина, иссет, проверка пароля, иссет, и т.д. А так иссетить да, я это не учел.

Тогда наверно просто

if(isset($_POST){

# А тут уже иссетим каждую переменную по отдельности.

}

А хотя сейчас я еще больше подумал и мне кажется что всетаки я правильно тут иссетил все сразу
if(isset($_POST['login'], $_POST['password'], $_POST['repeat_password'], $_POST['email'])){

А отталкивался я тогда видимо от того что раз хоть одна переменная из поста не пришла, значит данные вообще поступили не из формы, и проблем никаких не будет, поскольку, пустое поле все равно проинициализирует переменные, просто пустой строкой, а вы меня еще и ввели в заблуждение )) Раз не прошли иссет все поля значит не из форы, значит и пользователю не чего не будет возвращаться, и вообще ему тут делать нефиг.

Спустя 8 минут, 13 секунд (25.09.2012 - 10:08) PHP_Fox написал(а):
Что-то какой-то форум пустой ((( общаются 2-3 человека, и одни и те же люди, да и те не особо разговорчивые (((( От части сам с собой общаюсь ((((

Спустя 20 минут, 42 секунды (25.09.2012 - 10:29) twin написал(а):
90% ответа в правильно заданном вопросе. Ты уже несколько страниц толчешь воду в ступе. Какой интерес отвечать на одно и то же.

Задавай конкретные вопросы, тогда появится интерес на них отвечать.

Спустя 54 минуты, 34 секунды (25.09.2012 - 11:24) PHP_Fox написал(а):
Цитата (twin @ 25.09.2012 - 10:29)
90% ответа в правильно заданном вопросе. Ты уже несколько страниц толчешь воду в ступе. Какой интерес отвечать на одно и то же.

Задавай конкретные вопросы, тогда появится интерес на них отвечать.

Ну вот такого я вообще не ожидал, я датошнее еще людей чем я не встречал ))) Я все в деталях описал, вы тут понапривадили кучу замечаний, я на все эти замечания вам ответил, что мол о чем вы ребята, от куда вы взяли функции, почему все разом не иссетить, и т.д.

1) Я тебя спросил от куда ты выдумал что у меня там функция и что я в нее передаю суперглобальный массив!? Ты так и не ответил.

2) По поводу почему все сразу разом не иссетить, я сказал что вы вводите меня в заблуждение, почему так не иссетить, веть все вроде там верно!? Даже если я это не вам конкретно, но мне было бы интересно узнать что вы об этом думаете?

3) И вот еще, зачем вы экранировали массив тут
$email = @$_POST['email'];
Это типа что бы сразу на все случаи жизни? Мол вдруг если движок на продажу, то вдруг он будет юзаться на Win или если пользователь удалит htaccess? Просто ошибки пользователям то все равно не в коем случае показывать нельзя.
Или еще по каким-то соображениям?

Спустя 2 минуты, 57 секунд (25.09.2012 - 11:27) m4a1fox написал(а):
PHP_Fox
Влом читать 5 страниц. Если ответ уже давали, а его наверняка давали, то покажи где..... а вопрос у меня такой - а чем filter_var не подходит?

Спустя 10 минут, 56 секунд (25.09.2012 - 11:37) PHP_Fox написал(а):
m4a1fox
Ну ты вообще не чего не прочитал, тебе в лом? А теперь спрашиваешь, чем не подходит, а если бы прочитал, то уже знал бы ответ на свой вопрос, уже подходит, пару лет назад не подходил, были там баги ))
И я не на все вопросы получил ответы. И это форум а не вопрос ответ, мне интересно пообщаться и все обсудить, что почему так а не иначе и т.д а не тупа, вопрос, ответ.

Спустя 10 минут, 17 секунд (25.09.2012 - 11:48) m4a1fox написал(а):
PHP_FoxOk! МОлодчина! user posted image

Спустя 24 минуты, 48 секунд (25.09.2012 - 12:13) twin написал(а):
Потому что все начинает повторяться.
Цитата
1) Я тебя спросил от куда ты выдумал что у меня там функция и что я в нее передаю суперглобальный массив!? Ты так и не ответил.
Потому что нет кода. А есть упоминание про функцию. Еще раз говорю, гадалок тут нет. Или показывешь код, или гадаешь сам, откуда я вывел такого гуся.

Цитата
2) По поводу почему все сразу разом не иссетить, я сказал что вы вводите меня в заблуждение, почему так не иссетить, веть все вроде там верно!? Даже если я это не вам конкретно, но мне было бы интересно узнать что вы об этом думаете?
Я написал, что об этом думаю. Дальше дело за тобой.

Цитата
3) И вот еще, зачем вы экранировали массив тут
Я ничего не экранировал - раз, это не массив - два. Я просто убил возможный нотис.

Спустя 1 час, 55 минут, 44 секунды (25.09.2012 - 14:08) PHP_Fox написал(а):
twin
Цитата
Я написал, что об этом думаю. Дальше дело за тобой.


Ты вот об этом ответе?
Цитата
Не совсем. Такая проверка исключает конкретизацию ошибки.

Тогда все, ясно, нет конкретизация ошибки уже проверяется внутри условного оператора, тоесть.
Цитата
if(isset($_POST['login'], $_POST['password'], $_POST['repeat_password'], $_POST['email'])){
# А вот тут уже идет проверка каждой переменной по отдельности, по этому все ошибки будут отдельно разобраны до косточек )
}

Тут мы просто сначала убеждаемся что данные пришли из нашей формы, не важно пустые они или нет, переменные придут все. А раз не все, то и данные пришли не из нашей формы, и вообще не из браузера, а еще от куда-то. Думаю все вы знаете что клиентом может быть не только браузер. Таким образом мы и в целях безопасности проверили данные, и если кто либо просто откроет файл (обработчик формы) reg.php, он отдельный файл, форма в одном, а обработчик в другом. И если юзер наберет _http://site.com/reg.php, то ясен пень массив пост будет пуст, и код выполняться не будет, вот и показываем ему либо чистую белую страницу, либо в else фигачим ему ошибку 403.

Цитата
Я ничего не экранировал - раз, это не массив - два. Я просто убил возможный нотис.
Ну простите, оговорился, элемент массива, и нотиса там не будет, по тому, что вот этим кодом.
if(isset($_POST['login'], $_POST['password'], $_POST['repeat_password'], $_POST['email'])){
Мы как раз этого и избегаем.
Ладно спасибо большое за ваше терпение, думаю все я понял и что хотел услышать, услышать.

Спустя 7 минут, 34 секунды (25.09.2012 - 14:16) Michael написал(а):
Цитата (PHP_Fox)

if(empty($email) and $email !== '0'){
echo 'Вы не заполнили поле E-mail';
}

логика по моему страдает. И группируй скобками логические условия. Плюс функция empty уже проверяет строку '0'.
Насчет ввода - входные данные слишком важны, чтобы ты к ним пренебрежительно типа "а что теперь в каждой строке иссетить?". Да, иссетить.

Спустя 48 минут, 9 секунд (25.09.2012 - 15:04) PHP_Fox написал(а):
Michael
Еще один человек который не читал всю тему и делает замечания ))
Цитата
логика по моему страдает.
Если вы про empty, так я сам фактически утверждал выше что, вот это
if(empty($email) and $email !== '0'){

фактически тоже самое что и это
if($email == ''){

Просто хотел убедиться на сто процентов, что empty не испльзуют для какогото хитрого метода проверки. Потому что видил во многих скриптах такую хрень, да еще и без проверки на ноль.
И вот тут вы не правы
Цитата
Плюс функция empty уже проверяет строку '0'.

Поясню для чего я это делал, если пользователь в поле вбил бы '0', emty как раз бы и посчитала что '0' это пустота, что не есть истиной для пользователя, но истинно для функции. Вот по этому ели бы пользователь вбил бы в поле '0' то я бы ему не говорил, что чувак ты не заполнил поле, веть это не логично, он его заполнил, другое дело что не верно )) вот я ему и говорил бы что вы ввели не корректный имейл.
Цитата
Насчет ввода - входные данные слишком важны, чтобы ты к ним пренебрежительно типа "а что теперь в каждой строке иссетить?". Да, иссетить.
Вот тут я понял что ты вообще не чего выше не читал и вообще не понял что я говорил. Я прекрасно знаю что любые входные данные, это потенциально опасные данные и их нужно проверять по максимуму, это раз, во вторых, уже в сотый раз говорю, не вижу смысла перед каждым полем иссетить, если я это могу сделать в один заход вот так
if(isset($_POST['login'], $_POST['password'], $_POST['repeat_password'], $_POST['email'])){
Создается впечатление, что меня тут вообще ни кто не слышит, ни кто не читает и не понимает, сядьте еще раз очень внимательно, прочитайте всю тему, и я думаю что вы скажите что все что я говорил, логично.

Спустя 14 минут, 14 секунд (25.09.2012 - 15:18) Michael написал(а):
Цитата (PHP_Fox)
И вот тут вы не правы

согласен

Насчет множественного иссета так конечно можно делать, но в реальности надо например сообщение о том какое поле не заполнено выводить. Индивидуально. А твоя проверка подтвердит только что одно из всех не заполнено.

Спустя 6 минут, 44 секунды (25.09.2012 - 15:25) killer8080 написал(а):
Цитата (neadekvat @ 23.09.2012 - 19:37)
Ты лично можешь создать себе адрес с этой херней и.. и нигде не зарегистрироваться. Кто виноват? Программисты, которые создавали сайты, но не ты, что пошел против тенденции, выпятив вперед свой стандарт.

Конечно виноват программист, это же он отступил от стандарта. А кто же еще?
Кстати почтовики когда вводят такие ограничения, как раз и руководствуются, тем что полно говносайтов написанных "программистами" которые клали на стандарт.

Цитата (neadekvat @ 23.09.2012 - 19:44)
Цитата (inpost @ 23.09.2012 - 20:39)
Если завтра все прыгнут в окно, то ты прыгнешь тоже. Вот твой ответ!


Глупость.
Ты не понял моей главной мысли.
Я не говорю, что делаю как все. Я говорю, что делаю продукт, который нужен большинству. Это плохо? Считай, как хочешь. Ты - меньшинство, твое мнение, по сути, вообще ничего не стоит в потребительской массе, ты - это статистическая погрешность. Твои заявления о неработающем валидаторе будут игнорироваться как незначительные.
Вот к чему ты пришел со своей принципиальностью. Надо быть гибким.

И я не жесткий. Даже не циничный. Я просто констатирую факт - любая крупная организация смотрит на тебя так, как я описал выше.

Ну и в чем твоя гибкость? Запретить юзерам с валидными имейлами регистрироваться?
Потому что так делают большинство? А что будешь делать когда почтовики перестанут страдать хернёй, и разрешат аккаунты согласно стандарта?

Спустя 16 минут, 37 секунд (25.09.2012 - 15:42) PHP_Fox написал(а):
Michael
Цитата
согласен
Ну слава богу, вы меня услышали.
А вот тут снова вы меня не услышали
Цитата
Насчет множественного иссета так конечно можно делать, но в реальности надо например сообщение о том какое поле не заполнено выводить. Индивидуально. А твоя проверка подтвердит только что одно из всех не заполнено.

Поясню. Во первых я все разом иссетю, с той целью что бы это не делать 4 раза, а лишь один, а вот тут набрасаю вам быстренько примерный код как все работает, что бы вы наконец все поняли, внимательно читаем и вникаем в комментарий ниже.
/* Пришли данные из другого файла(файл html где форма)
я их сразу тут иссетю, смотрите если хоть одна переменная которую
я тут иссетю не пришла, тобишь не существует, следовательно,
данные пришли не из моей формы, если они вообще пришли, а раз
из формы то иссет обязан пройти, даже если юзер не заполнил поля,
форма пришлет мне инициализированные переменные, но с пустой строкой, либо
пользователь набрал в браузере
_http://site.com/reg.php тоесть
обратился к файлу на прямую а не через форму, это уже из серии
о защите, и на худой конец а может данные вообще пришли не
из браузера, ведь клиент это не значит браузер, это может быть
и любая другая удалленная программа, которая подделывает
массив $_POST, грубо говоря это хакер, если хотите )))
В этом случае, хоть из баузера хоть из другой программы, юзер
увидет пустоту, либо можно ему теперь с помощью else показать
ошибку 403 и все. Помойму это очень логично. А вот если все поля
пришли то уже внутри тела условного оператора, я начинаю проверку
каждой переменной */

if(isset($_POST['login'], $_POST['password'], $_POST['repeat_password'], $_POST['email'])){
if($login == ''){
... # ошибка
}elseif(....){
... # ошибка
}else{
... # ошибка
}

if($password == ''){
... # ошибка
}elseif(....){
... # ошибка
}else{
... # ошибка
}

# И так далее...
}
Теперь я все доходчиво объяснил? Что бы развеять некое мнение, что я вообще новичок и идиот который не хрена не знает. Суть моих тем была как раз не в том что бы мне говорили ты вообще не шаришь, а в том что бы люди со стороны глянули мой код, мой подход, и свежим взглядом тыкнули мне, эй чувак да ты вот тут не учел или забыл, или так не стоит делать по тому и потому. Тоесть советы и рекомендации. Да я не профи но я к этому стремлюсь, по этому и не написал код как есть, работает и хорошо, до поры до времени. А попросил мнения и опыта у профессионалов которые просто как в школе проверили бы не натыкал ли я ошибок. А тут меня вообще нубокодером сделали. Обидно просто.

Спустя 10 минут, 31 секунда (25.09.2012 - 15:52) inpost написал(а):
PHP_Fox
Сейчас скажу основные 2 ошибки, но это лишь ИМХО! smile.gif
1. Тебе тримом в любом случае необходимо будет обрабатывать данные, как бы ты не хотел, поэтому можно весь POST массив обработать ещё на уровне ядра.
2. Массивы, включая суперглобальный массив POST - структурированные данные на группы. Допустим входящие данные = $_POST, внутренние настройки = массив $options, и в таком духе. (Класс со свойствами в виде настроек - расширенный массив). Получается мы имеем уже логическую структуру и данные связанные между собой логической цепочкой. Внутренние переменные $login - это уже индивидуальная переменная, чем на мой взгляд и плоха.

А возмущение - ты даёшь какие-то маленькие куски, которые сами по себе являются говнокодом. Возможно внутри структуры они преобразуются в профессиональный код, но для этого надо видеть весь код, всю структуру, а не маленькие кусочки. Невозможно сказать, хорошо ли это или плохо!

Спустя 14 минут, 32 секунды (25.09.2012 - 16:07) PHP_Fox написал(а):
PHP_Fox
Я просто не хотел показывать весь код потому что он еще не законьчен это лишь наброски и работает все пока в одном файле и многое еще не дописанно. Он в процессе разработки. Думаю сейчас выложу и начнутся сыпаться, да тут это ты не здел, то не здела, ну конечно не сделал он не дописан.
Вот код, но сразу говорю, я начал писать по старому своему методу, тоесть грубо ограничивал данные введенные пользователем, конечно теперь тут все измениться в плане ограничений.

	if(isset($_POST['login'], $_POST['password'], $_POST['repeat_password'], $_POST['email'])){

$login = trim($_POST['login']);
$password = trim($_POST['password']);
$repeat_password = trim($_POST['repeat_password']);
$email = trim($_POST['email']);

if($login == ''){
$es_id['219'] = true;
}elseif(preg_match('|^[-a-z0-9_.]+$|i', $login)){
if(!preg_match('|^[-a-z0-9_.]{3,20}$|i', $login)){
$es_id['221'] = true;
}
}
else{
$es_id['220'] = true;
}

if($password == ''){
$es_id['222'] = true;
}elseif(preg_match('|^[-a-z0-9_.]+$|i', $password)){
if(!preg_match('|^[-a-z0-9_.]{6,20}$|i', $password)){
$es_id['224'] = true;
}
}
else{
$es_id['223'] = true;
}

if($repeat_password == ''){
$es_id['225'] = true;
}elseif(preg_match('|^[-a-z0-9_.]+$|i', $repeat_password)){
if(!preg_match('|^[-a-z0-9_.]{6,20}$|i', $repeat_password)){
$es_id['227'] = true;
}
}
else{
$es_id['226'] = true;
}

if(mb_strtolower($password) == mb_strtolower($login)){
$es_id['231'] = true;
}elseif($password !== $repeat_password){
$es_id['228'] = true;
}

if($email == ''){
$es_id['229'] = true;
}elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$es_id['230'] = true;
}

if(!isset($es_id)){
$password = $password_hash->get_hash($password);
$db->query("INSERT INTO `users` (`login`, `password`, `email`) VALUES ('$login', '$password', '$email')");
$db->close();
}else{
es_reports($es_id);
}
}
Только еще раз говорю он не дописан. Вот ты сказал давай весь код, вот на то что на этом этапе есть в этом файле, ну плюс форма, ее думаю нет смысла показывать, все и так ясно, хотя могу выложить вот она
	<form action='' method='post'>
<div
class='input'>
<label
class='label' for='login'>Логин:</label>
<input
class='input_box' id='login' maxlength='20' type='text' name='login'>
</div>
<div
class='input'>
<label
class='label' for='password'>Пароль:</label>
<input
class='input_box' id='password' maxlength='20' type='password' name='password'>
</div>
<div
class='input'>
<label
class='label' for='repeat_password'>Повторите пороль:</label>
<input
class='input_box' id='repeat_password' maxlength='20' type='password' name='repeat_password'>
</div>
<div
class='input'>
<label
class='label' for='email'>Ваш E-Mail:</label>
<input
class='input_box' id='email' maxlength='200' type='text' name='email'>
</div>
<div
class='submit'>
<input
class='submit_button' type='submit' value='Зарегистрироваться'>
</div>
</form>

Спустя 17 минут, 39 секунд (25.09.2012 - 16:24) twin написал(а):
Ты сам то запускал? Попробуй сам сначала, в процессе теста многие вопросы сами отпадут. С иссетм по крайней мере сразу.

Вот это зачем?
		if($repeat_password == ''){
$es_id['225'] = true;
}elseif(preg_match('|^[-a-z0-9_.]+$|i', $repeat_password)){
if(!preg_match('|^[-a-z0-9_.]{6,20}$|i', $repeat_password)){
$es_id['227'] = true;
}
}
else{
$es_id['226'] = true;
}
какая разница, что ввел юзер в поле подтверждения. Если не совпало - гуляй лесом. А основной уже проверили.

А за это
if(!preg_match('|^[-a-z0-9_.]{6,20}$|i', $password))
после прошлой темы на стопицот страниц, руки надо рвать по саму майку.

Спустя 3 минуты, 4 секунды (25.09.2012 - 16:27) PHP_Fox написал(а):
Цитата (twin @ 25.09.2012 - 16:24)
Ты сам то запускал? Попробуй сам сначала, в процессе теста многие вопросы сами отпадут. С иссетм по крайней мере сразу.

Вот это зачем?
		if($repeat_password == ''){
$es_id['225'] = true;
}elseif(preg_match('|^[-a-z0-9_.]+$|i', $repeat_password)){
if(!preg_match('|^[-a-z0-9_.]{6,20}$|i', $repeat_password)){
$es_id['227'] = true;
}
}
else{
$es_id['226'] = true;
}
какая разница, что ввел юзер в поле подтверждения. Если не совпало - гуляй лесом. А основной уже проверили.

А за это
if(!preg_match('|^[-a-z0-9_.]{6,20}$|i', $password))
после прошлой темы на стопицот страниц, руки надо рвать по саму майку.

twin
Писец, я так и знал, ты вот не хрена не прочитал, что я написал перед кодом, и мне снова тыкаешь в теже грабли. Я в шоке вы тут вообще читаете? Или только коды смотрите?

Спустя 1 минута, 13 секунд (25.09.2012 - 16:29) PHP_Fox написал(а):
twin
Цитата
я начал писать по старому своему методу, тоесть грубо ограничивал данные введенные пользователем, конечно теперь тут все измениться в плане ограничений.

Вот этот текст я зачем писал, для красоты, скажи пожалуйста?

Спустя 2 минуты, 21 секунда (25.09.2012 - 16:31) inpost написал(а):
HTML: необходимо свойства писать в двойных кавычках.
В какой кодировке работаешь? Что значит модификатор u для регулярок?
Зачем регулярки дублируешь?
Инфекция sql: Введи email: "la'la@mail.ru" , увидишь ошибку.

Спустя 1 минута, 53 секунды (25.09.2012 - 16:33) PHP_Fox написал(а):
twin
И я все там тестил, все отлично работает, может и не доглядел, так укажи конкретно где, только не говори мне снова про пароли, я там уже сделал для себя выводы и применю их в этом коде, а сейчас он такой как и был 3 дня назад, до того как я эти темы открывал, я лишь поправил вот это, и то не потому что не знал что так лучше а просто хотел что бы вы это подтвердили
if($password == ''){

И вот это, я знал об этой функции просто когда я начинал программировать она еще была сырой и все об этом трубили
}elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){


Спустя 1 минута, 54 секунды (25.09.2012 - 16:35) PHP_Fox написал(а):
Цитата
В какой кодировке работаешь? Что значит модификатор u для регулярок?
Работаю в UTF-8. А маленькая u в регулярках означает что шаблоны будут обработаны как UTF-8

Спустя 2 минуты, 1 секунда (25.09.2012 - 16:37) PHP_Fox написал(а):
inpost
Цитата
HTML: необходимо свойства писать в двойных кавычках.
Это не обязательное правило, можно и так и так, везде об этом написано. Мне нравится так!

Спустя 1 минута, 24 секунды (25.09.2012 - 16:38) PHP_Fox написал(а):
inpost
Цитата
Зачем регулярки дублируешь?

Для того что бы выдать две разных ошибки
1) Запрещенные символы
2) Длинный или короткий пароль

Спустя 5 минут, 21 секунда (25.09.2012 - 16:43) PHP_Fox написал(а):
inpost
Цитата
Инфекция sql: Введи email: "la'la@mail.ru" , увидишь ошибку.
Ну вот тыж сам сказал что мол filter_var() а я за 10 минут на инъекции и забыл протестить (

Спустя 2 минуты, 31 секунда (25.09.2012 - 16:46) inpost написал(а):
Если в ЮТФ работаешь, почему не добавляешь u?
Это стандарты HTML, именно двойная кавычка. Одинарная - допущения лишь.

И вообще, ты пришел слушать советы, или защищать свой код? Тебе уже десяток ошибок сказали, а ты каждую из них пытаешься защитить.

А инфекция потому что нет mysql_real_escape_string.

Спустя 8 минут, 59 секунд (25.09.2012 - 16:55) PHP_Fox написал(а):
Цитата (inpost @ 25.09.2012 - 16:46)
Если в ЮТФ работаешь, почему не добавляешь u?
Это стандарты HTML, именно двойная кавычка. Одинарная - допущения лишь.

И вообще, ты пришел слушать советы, или защищать свой код? Тебе уже десяток ошибок сказали, а ты каждую из них пытаешься защитить.

А инфекция потому что нет mysql_real_escape_string.

inpost
Цитата
Если в ЮТФ работаешь, почему не добавляешь u?
Потому что в первоначальном коде, я не допускал кирилицу и т.д.
Цитата
Это стандарты HTML, именно двойная кавычка. Одинарная - допущения лишь.
Я знаю, но раз допущение есть, я себя побалую этим допущением, и напишу так как мне нравиться, это не ошибочный код.
Цитата
И вообще, ты пришел слушать советы, или защищать свой код? Тебе уже десяток ошибок сказали, а ты каждую из них пытаешься защитить.
Я не защищаю, а говорю и на фактах а не из воздуха доказываю, что там все правильно, вы лишь не доглядели или не допоняли мою мысль.
Цитата
А инфекция потому что нет mysql_real_escape_string.
Об этой функции я конечно же знаю, но опятьже я еще не дописал ее, вообще там где запись в базу было набросанно бегло, там и три поля пишится всего в таблицу user, что уже бред, в этой таблице куча информации обычно, а не три поля. Думаю это очевидно! Я лишь не подумал сразу что будет ведь проверяться mysql_real_escape_string, а ты меня напугал, думал ну вот всетаки filter_var() не пашит. Теперь все на местах.

Спустя 30 минут, 5 секунд (25.09.2012 - 17:25) inpost написал(а):
PHP_Fox
Одинарные кавычки как раз и есть ошибка, в стандартах говорится про две кавычки именно!

И ты пытаешься оправдываться. Ты написал уязвимый для sql-inj код, значит уже он плохой.

Спустя 16 минут, 5 секунд (25.09.2012 - 17:41) PHP_Fox написал(а):
inpost
Цитата
Одинарные кавычки как раз и есть ошибка, в стандартах говорится про две кавычки именно!

И ты пытаешься оправдываться. Ты написал уязвимый для sql-inj код, значит уже он плохой.
Думай как хочешь, но я не оправдывался, и еще одна причина мой старый то код какой был в начале? Ты помнишь с чего я начал тему
if(!preg_match('/^[-a-z0-9_.]{1,50}@[-a-z0-9_.]{1,50}\.[a-z]{2,6}$/i', $email))
он бы не пропустил инекцию, а вот подкоректировал я его filter_var() когда мы обсудили и выяснили что уже можно эту функцию использовать, мол пофиксили, вот я и исправил код, но об mysql_real_escape_string тогда еще не задумывлся даже, моя задача была лишь решить проверку мыла, я не продолжал код, пока тема не закрыта, я жду до конца, потом сделаю выводы и тогда только продолжу код ) Или снова ты считаешь что я оправдываюсь и защищаюсь, ведь я привожу реальные факты, а не просто бля бля я крутой перец все сделал правильно. Тебе не кажется?

Спустя 1 час, 7 минут, 27 секунд (25.09.2012 - 18:49) Michael написал(а):
Хитрый какой.
if (все установлено) {
что то делаем
}

ты сделал.
А надо еще else тоже. Зачем? Чтобы человек ранее введенные данные заново с нуля не вводил, их надо подставить в элементы формы в атрибут value. (понятно что кроме полей пароля). И вот тут ты увидишь, что нужно из каждого все равно достать данные. ;)

Спустя 26 минут, 53 секунды (25.09.2012 - 19:15) PHP_Fox написал(а):
Michael
ты сделал.
Цитата
А надо еще else тоже. Зачем? Чтобы человек ранее введенные данные заново с нуля не вводил, их надо подставить в элементы формы в атрибут value. (понятно что кроме полей пароля). И вот тут ты увидишь, что нужно из каждого все равно достать данные. wink.gif

Смотрите я не защищаюсь, но повторяюсь в десятый раз уже, код то еще не дописан, вообще не дописан, я работал только над проверкой полей, после чего создал эти 3 темы, все выводы к которым я пришел из этих трех тем, там еще не реализованы, это тотже код что и 3 дня назад. вы бы мне еще сказали хей, а где JS который будет проверять все у юзера в браузере? Это тестовая модель, без дизайна без редиректов, без записи в базу, вообще без нечего, я с помощью нее тестю сейчас проверку полей. Но в любом случае конечно огромное спасибо всем за советы и замечания, хотя я конечно и разочарован от большей части этого общения, за все те годы что я занимаюсь разработкой, я не в жизни, не в интернете не общался не с одним веб-мастером, программистом и т.д. Пообщаля, и начинаю уже думать, лучшебы не общался, польза есть, но не понимание вообще ужастное, все абы что ляпнуть, абы апустить, и доказать что он крут а ты лох. Так только самооценку занижать, а польза минимальная. Вот и думаю а стоит ли дальше обращаться, или как был одиночкой так и оставаться в тени с книгами и интернетом ))))

Спустя 17 минут, 46 секунд (25.09.2012 - 19:33) inpost написал(а):
PHP_Fox
Ты пытаешь оправдать свой код, а это говорит уже о присутствии гордости в твоей речи. Гордыня - грех, и от неё надо избавляться. Если указали на ошибку, то лучше сказать: "спасибо большое, исправлю". Ты пытаешься объяснить, зачем ты в том или ином месте допустил ошибки.
Снова же, обиженный ребёнок? Видите ли не увидели эксперты форума в твоём коде гениальности, видим банальные ошибки новичков и указали тебе на них. В ответ: "да вы только обижать горазд". Какой ответ ты ждал?! "чувак, это самый клёвый код, который я видел?" - да это гордыня, опять же.

И хотя бы 1 сообщение покажи, аля "ляпнуть", вот мне любопытно, кто же у нас на форуме не по теме что-то сказал?

Ты слишком горд и самовлюблён. Мы же тебя опустили, но опустили не в грязь, а на землю. Если ты пишешь говнокод, это ещё не значит, что человек, который тыкает тебя пальцем в говнокод не пишет его сам. Поэтому фраза: "он крут, а ты лох" - не верна с самого начала. Правильнее: "ты лох, несмотря на то, лох ли я или нет, и, возможно, я тоже лох и ты такой же лох как и мы".

К нам на форум люди приходят учиться и слушать замечания. У тебя 1 год обучения (как ты писал), у меня 3.5 года, из них все 3.5 года жесткой практики и работы именно программистом, до этого несколько лет верстальщиком подрабатывал, когда учился в студенческие годы и школьные. Николай в ПХП пришел на год-полтора раньше меня, итого у него 4.5-5 лет практики. Михаила я тоже помню давно, Киллер - то в общем отдельный разговор, за ним десятки лет практики. Неадекват давно бы стал экспертом, если бы вёл себя более культурно и адекватнее, потому чего его опыт тоже очень большой.

И самое ГЛАВНОЕ. 3 дня прошло, а ты ничего не сделал. Дам ссылочку, но без обид, это то, каким должен быть программист: пиши-код-блять.рф (баг на форуме с ссылками, поэтому просто скопируй в браузер его!).

Спустя 31 минута, 56 секунд (25.09.2012 - 20:05) twin написал(а):
Есть такая старая интересная штука - обращение хакеров. Много букв. но постарайся вникнуть. Ключевые моменты я выделил:
Цитата
В мире хакеров, стиль ответов, которые вы получаете на задаваемые технические вопросы, зависит от способа задания вопросов не меньше, чем от их сложности. Это руководство научит задавать вопросы так, чтобы увеличить вероятность получения удовлетворительного ответа.

Прежде всего, надо понять, что хакерам на самом деле нравятся сложные проблемы и хорошие, способные расшевелить мозги, вопросы об этих проблемах. Если бы нам это не нравилось, мы не были бы хакерами. Если задать нам интересный вопрос, требующий продолжительных размышлений, мы будем за него благодарны; хорошие вопросы - это стимул и подарок. Хорошие вопросы помогают лучше понять предмет и часто вскрывают проблемы, которых ранее не замечали или о которых не задумывались. Из уст хакера: "Хороший вопрос!" - это большой и искренний комплимент.

Несмотря на это, считается, что хакеры относятся к простым вопросам скорее враждебно или высокомерно. Иногда кажется, что мы достаточно грубы к новичкам и игнорируем их. Но, на самом деле, это не так.

Мы, без сомнения, неприязненно относимся к людям, предположительно не желающим подумать или поучиться прежде, чем задавать вопросы. Такие люди убивают время — они берут, ничего не давая взамен, они отнимают время, которое мы могли бы посвятить другому вопросу, более интересному, и другому человеку, более достойному ответа. Таких людей мы называем "неудачниками" ("losers") (по историческим причинам это слово иногда пишется как "lusers" - пользователи-неудачники).

Мы понимаем, что многие люди просто хотят использовать создаваемое нами программное обеспечение, и совершенно не собираются изучать технические детали. Для большинства компьютер - это просто инструмент, средство достижения цели; у них есть и более интересные занятия и другие проблемы в жизни. Мы признаем это и не ожидаем, что каждого будут интересовать технические нюансы, столь привлекательные для нас. Тем не менее, наш стиль ответов на вопросы подходит для людей, действительно интересующихся этим, и желающих быть активными участниками процесса решения проблем. Это не изменится. Да и не должно меняться; в противном случае, мы не сможем эффективно делать то, в чем мы - лучшие.

Мы (в основном) - добровольцы. Мы посвящаем время своей нелегкой жизни ответам на вопросы, и временами мы не справляемся со шквалом вопросов. Поэтому приходится безжалостно "фильтровать базар". В частности, отбрасывать вопросы потенциальных неудачников, чтобы потратить отведенное на ответы время более эффективно, посвящая его победителям.

Если эта позиция кажется вам смешной, высокомерной или заносчивой, вы ошибаетесь. Мы не просим вас на нас молиться — фактически, большинство из нас хотели бы общаться с вами на равных и принять вас в свою культуру, если вы приложите необходимые для этого усилия. Но для нас просто неэффективно пытаться помочь людям, которые не хотят помочь себе сами. Быть грубым - нормально, а вот прикидываться идиотом - нет.

Итак, хотя вовсе не обязательно быть технически компетентным, чтобы удостоиться нашего внимания, надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения. Если вы не можете смириться с подобного рода дискриминацией, имеет смысл заплатить кому-то за коммерческую поддержку, а не просить хакеров помочь даром лично вам.

Если вы решили обратиться к нам за помощью, не становитесь в позицию неудачника. И не ведите себя как неудачник. Лучший способ получить быстрый и чуткий ответ, - спрашивать как победитель — спрашивать как человек умный, уверенный в себе и знающий, которому просто понадобилась помощь при решении одной конкретной проблемы.

Спустя 20 минут, 9 секунд (25.09.2012 - 20:25) PHP_Fox написал(а):
inpost
Цитата
3 дня прошло, а ты ничего не сделал.
А куда мне торопиться, я не работаю на дядю, никогда не работал и работать не буду, я не спешу, я из тех людей сто раз отмерь один раз отрежь. Я все успею. Яж не на работе и не заказ делаю, и программировать для кого-то я не планирую, это просто хобби, и мое любимое дело. Я делаю для себя и с душой. Вот как-то так!

Ладно ребята, диалог не фига у нас не получился, думаю в жизни бы так поршиво не вышло ))))
Тут информация слишком сильно искажается, и куча не поняток возникает. Я уже устал действительно, уже оправдываюсь, а не общаюсь. Думаю хватит. Какое бы у вас мнение обо мне не сложилось, это ваше мнение и вы имеете на него право. Я не осуждаю, просто слегка обидился! Не на кого-то конкретно, а из-за того, что меня не поняли, причем вообще, и как я не старался. Ну да ладно, не получилось так не получилось. Всем огромное спасибо за советы, общение и споры. ))) Приятного вам вечера возможно мы еще пообщаемся. ))

Спустя 16 минут, 54 секунды (25.09.2012 - 20:42) inpost написал(а):
PHP_Fox
Никогда не понимал людей, которые программировать ни для кого не хотят и надеются, что программирование является хобби. Без реальных проектов программирование твоё будет выглядеть как копание в песочнице младенцем.
И к тебе подойдет цитата из уст Николая: "Такие люди убивают время — они берут, ничего не давая взамен, они отнимают время, которое мы могли бы посвятить другому вопросу, более интересному, и другому человеку, более достойному ответа". Ты балуешься, а не программируешь, и меня печалит, что я столь много времени посвятил тебе.

Спустя 11 часов, 14 минут, 16 секунд (26.09.2012 - 07:56) Michael написал(а):
Цитата (inpost @ 25.09.2012 - 19:42)
PHP_Fox
"Такие люди убивают время — они берут, ничего не давая взамен, они отнимают время, которое мы могли бы посвятить другому вопросу, более интересному, и другому человеку, более достойному ответа". Ты балуешься, а не программируешь, и меня печалит, что я столь много времени посвятил тебе.

Аналогично.

Цитата (PHP_Fox)
все абы что ляпнуть, абы апустить, и доказать что он крут а ты лох

Где он такое увидел, тут я видел только что помочь тебе пытались. Что должно быть в голове чтобы такое подумать не представляю... Сколько лет тебе?

Он видите ли код не дописал, когда он допишет это будет гениальный код, а по нелогичному текущему ничего не замечайте, неувязок, т.к. потом он его допишет и там их не будет. blink.gif
Давно бы написал полный код обработки формы и все сам бы увидел, о чем тебе говорят, а не перечил на полудоделках.

Спустя 1 час, 8 минут, 29 секунд (26.09.2012 - 09:05) killer8080 написал(а):
Цитата (PHP_Fox @ 25.09.2012 - 19:15)
за все те годы что я занимаюсь разработкой, я не в жизни, не в интернете не общался не с одним веб-мастером, программистом и т.д.

Какие годы? blink.gif Кого ты пытаешься обмануть biggrin.gif
Ну если ты и правда занимаешься ГОДЫ, может ну его на фиг? Раз за это время не освоил азов. unsure.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.