[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Защита при регистрации
justyork
Здравствуйте, подскажите, как лучше всего сделать защиту от написания любых символов при регистрации. Что бы если находит какой-то выдавал ошибку.
И чтобы при заполнении строки e-mail проверялось существует ли @ и .
Я примерно представляюсь, но думаю что ошибаюсь) Помогите.

Во втором проверка примерно так будет выглядеть ?

if ($text != '%@%' && $text != '%.%'  )
return false;


Или я вообще бред написал? :huh:



Спустя 8 минут, 30 секунд (12.10.2011 - 17:57) johniek_comp написал(а):
кури регулярные выражения.
например такое:
preg_match('|([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})|is', $mail);


а собаку просто можно писать для неё отдельной регулярки нет

Спустя 9 минут, 50 секунд (12.10.2011 - 18:07) Winston написал(а):
if(!preg_match('#^[a-z\d_\.-]{1,20}@([a-z\d\.-]{1,20})\.([a-z]{2,4})$#iu', $mail))
return false;

Или так
if(!filter_var($email, FILTER_VALIDATE_EMAIL))
return false

Спустя 1 час, 43 минуты, 43 секунды (12.10.2011 - 19:50) justyork написал(а):
Большое спасибо, помогли очень))

Спустя 15 часов, 50 минут, 4 секунды (13.10.2011 - 11:40) justyork написал(а):
Еще такой вопрос, возможно он и тупой для кого-то, но как лучше сделать, чтобы проверить он мог все и передавал все переменные, которые не соответствуют? через switch?

if(isset($_POST['registr']))
{
if($_POST['check'] != '3')
{
$this->err_check = 'Неверный код';
return false;
}
if (!preg_match('#^[a-z0-9а-яё_-]{3}$#i', $_POST['login']))
{
$this->err_name = 'Длина логина должна быть не меньше 3х букв и использовать латинские и кирилицу, а так же знаки "-" и "_"';
return false;
}
if(!preg_match('#^[a-z\d_\.-]{1,20}@([a-z\d\.-]{1,20})\.([a-z]{2,6})$#i', $_POST['email']))
{
$this->err_mail = 'Неверный формат e-mail';
return false;
}

$mUsers->Registration($_POST['login'], $_POST['password'],$_POST['email']);
}

Спустя 3 часа, 17 минут, 40 секунд (13.10.2011 - 14:58) justyork написал(а):
кто-нибудь, подскажите плиз...

Спустя 2 часа, 50 минут, 19 секунд (13.10.2011 - 17:48) imbalance_hero написал(а):
justyork
А зачем переделывать? Итак всё норм.

Спустя 57 минут, 37 секунд (13.10.2011 - 18:46) justyork написал(а):
он ведь после первого фолса все сбрасывает, а мне нужно, чтобы все ошибки выдавались, то есть каждое неправильно заполненное поле, а не по одному

Спустя 23 минуты, 56 секунд (13.10.2011 - 19:10) Winston написал(а):
Свернутый текст
if(isset($_POST['registr']))
{
if($_POST['check'] != '3')
{
$this->err_check[] = 'Неверный код';
return false;
}
if (!preg_match('#^[a-z0-9а-яё_-]{3}$#i', $_POST['login']))
{
$this->err_check[] = 'Длина логина должна быть не меньше 3х букв и использовать латинские и кирилицу, а так же знаки "-" и "_"';
return false;
}
if(!preg_match('#^[a-z\d_\.-]{1,20}@([a-z\d\.-]{1,20})\.([a-z]{2,6})$#i', $_POST['email']))
{
$this->err_check[] = 'Неверный формат e-mail';
return false;
}

$mUsers->Registration($_POST['login'], $_POST['password'],$_POST['email']);
}

echo implode('<br/>', $this->err_check);

Спустя 44 минуты, 34 секунды (13.10.2011 - 19:55) imbalance_hero написал(а):
justyork
А может банально стоит убрать return false, если тебе не нужен return false ?

Спустя 3 минуты, 3 секунды (13.10.2011 - 19:58) justyork написал(а):
Сделал немного по другому, проверьте.

Свернутый текст
if(isset($_POST['registr']))
{
if (!preg_match('#^[a-z0-9_-]{6,40}$#i', $_POST['login']))
$err_pass = '<br />Пароль может содержать только латинские буквы и цифры и быть не меньше 6 символов';

if ($_POST['psw_1'] != $_POST['psw_2'])
$err_pass2 = '<br />Пароли не совпадают';

if($_POST['check '] != '3')
$err_check = '<br />Неверный код';

if(empty($_POST['agree']))
$err_agr = ' <br />Нужно согласиться с правилами';

if (!preg_match('#^[a-z0-9_-]{3,40}$#i', $_POST['login']))
$err_name = '<br />Логина может содержать только латинские буквы, "-", "_", цифры и быть не меньше 6 символов';

if(!preg_match('#^[a-z\d_\.-]{1,20}@([a-z\d\.-]{1,20})\.([a-z]{2,6})$#i', $_POST['email']))
$err_mail = '<br />Неверный формат e-mail';

if(isset($err_pass, $err_pass2, $err_check, $err_name, $err_mail))
$mUsers->Registration($_POST['login'], $_POST['password'],$_POST['email']);
else
{
$this->err_pass = $err_pass;
$this->err_pass2 = $err_pass2;
$this->err_check = $err_check;
$this->err_name = $err_name;
$this->err_mail = $err_mail;
$this->err_agr = $err_agr;
return false;

}
}



Скрипт работает все отлично и как надо. Я не понял только одного. Почему вот тут он срабатывает так, по логике этого скрипта, если существуют эти переменные, то выполняется функция регистрации. Если нет то ошибки. Хотя должно быть все наоборот, а роботает именно так правильно.
if(isset($err_pass, $err_pass2, $err_check, $err_name, $err_mail))
$mUsers->Registration($_POST['login'], $_POST['password'],$_POST['email']);

Спустя 9 минут, 3 секунды (13.10.2011 - 20:07) imbalance_hero написал(а):
justyork
Почему наоборот? isset - проверка на существование.

Спустя 5 минут, 23 секунды (13.10.2011 - 20:12) justyork написал(а):
Ну и вот, переводим на русский:

Если (существует (ряд переменных))
выполняем функцию регистрации

Или я не прав?

Спустя 1 час, 7 минут, 40 секунд (13.10.2011 - 21:20) imbalance_hero написал(а):
да

Спустя 7 часов, 18 минут, 1 секунда (14.10.2011 - 04:38) justyork написал(а):
ну и вот, выходит не правильно по логике. звучит это так, если существуют ошибки мы регистрируемся иначе отправляем ошибки, а должно быть все совершенно наоборот, если ни одной ошибки нету то регаемся, иначе отсылаем ошибки, делаю так, тыкаю отправку пустого документа, он все отправляеи и регистрирует.
Неувязочка какая-то.

Спустя 51 минута, 54 секунды (14.10.2011 - 05:30) justyork написал(а):
Сделал, но как запрос сделать более красивым?
Свернутый текст
if(!isset($err_pass) && !isset($err_pass2) && !isset($err_check) && !isset($err_name) && !isset($err_mail))
{
$mUsers->Registration($_POST['login'], $_POST['psw_1'],$_POST['email']);
//header ('location: /index.php');
}
else
{
$this->err_pass = $err_pass;
$this->err_pass2 = $err_pass2;
$this->err_check = $err_check;
$this->err_name = $err_name;
$this->err_mail = $err_mail;
$this->err_agr = $err_agr;
return false;

}


Если делать так
if(!isset($err_pass,$err_pass2,$err_check,$err_name,$err_mail))

то нифига не выходит и он спокойно регистрирует даже пустую форму

Спустя 24 минуты, 5 секунд (14.10.2011 - 05:54) imbalance_hero написал(а):
justyork
Используй не переменные, а один массив ошибок:
$error['name'], $error['email'],
А проверка одна:
if(!count($error))
Запрос.


Только не забудь инициализировать в начале массив.

Спустя 1 час, 1 минута, 49 секунд (14.10.2011 - 06:56) justyork написал(а):
Понял, спасибо, попробую

Спустя 3 часа, 1 минута, 38 секунд (14.10.2011 - 09:57) justyork написал(а):
Помогите с логикой разобраться. Пишу форум.
Есть 2 таблицы в бд theme и message, как при добавлении новой темы в таблицу message засунуть id темы, которую создаю.

Если брать последний id в таблице, то при добавлении новой темы несколькими участниками одновременно, может случиться непонятка. Подскажите

Спустя 16 минут, 38 секунд (14.10.2011 - 10:14) Игорь_Vasinsky написал(а):
наверно с GET считать этот ID

Спустя 17 минут, 56 секунд (14.10.2011 - 10:32) justyork написал(а):
так при добавлении гет автоинкрементируется. или при добавлении возвращаем id, и присоединяем его к сообщению?

Разобрался.

Спустя 10 часов, 59 минут, 13 секунд (14.10.2011 - 21:31) imbalance_hero написал(а):
justyork
insert тема
mysql_insert_id,
insert message

Спустя 6 часов, 18 минут, 31 секунда (15.10.2011 - 03:49) justyork написал(а):
я так и сделал:)

Спустя 2 часа, 56 минут, 10 секунд (15.10.2011 - 06:46) justyork написал(а):
Еще вопрос. теперь у меня есть 4 таблицы.
1. форум
2. категория
3. тема
4. сообщение

вот в такой вложенности идут сообщения

3 и 4 я связал, теперь нужно связать 1 и 2, если форум видны на главной и категории а в них темы.
Как вариант. Сделать добавление через Админ панель, где передается через гет ид форума и так далее?

А как сделать без АП, что админ мог сразу с главной создать?


И еще вопрос, где лучше всего хранить настройки сайта, по типу название сайта, всякие конфиги системы и тд. В бд или в файле? т.к. видел, что WP хранит в БД, а DLE в файле.

Спустя 1 час, 56 минут, 43 секунды (15.10.2011 - 08:42) imbalance_hero написал(а):
justyork
Кому как удобнее по настройкам.

Спустя 1 час, 1 минута, 58 секунд (15.10.2011 - 09:44) justyork написал(а):
А практической разницы никакой? И про первый вопрос, как определить в какой форум вставляем категорию, с главной страницы?

Спустя 1 час, 20 минут, 42 секунды (15.10.2011 - 11:05) imbalance_hero написал(а):
justyork
Главная страница уже содержит информацию о форуме. Бери инфу оттуда.

Спустя 1 час, 21 минута, 50 секунд (15.10.2011 - 12:27) justyork написал(а):
а как она содержит инфу? если я никак не передаю её?

Спустя 41 минута, 45 секунд (15.10.2011 - 13:09) imbalance_hero написал(а):
Я вообще понятия не имею, что за форумы...
Вот форум phpforum.ru , понятное дело имя в адресной строке

Спустя 2 часа, 40 минут, 39 секунд (15.10.2011 - 15:49) justyork написал(а):
ну смотри, мы на главной

Форум 1 - Команда PHPforum.ru
Категория 1 - Новости
Категория 2 - Бесплатные Курсы PHP программирования онлайн
...
Форум 2 - Установка и администрирование ПО
...

Спустя 1 час, 54 минуты, 2 секунды (15.10.2011 - 17:43) justyork написал(а):
и еще вопрос вот такие ссылки - это сильно плохо или пофигу, в htaccess потом пеменять?

/index.php?type=theme&showcat=1&action=add

Спустя 1 час, 54 минуты, 49 секунд (15.10.2011 - 19:38) imbalance_hero написал(а):
justyork
Чем может быть ссылка плоха?

Спустя 1 час, 5 секунд (15.10.2011 - 20:38) justyork написал(а):
я не знаю, вот и спрашиваю, я же начинающий программист не все законы знаю. Может есть правило какое для ссылок

Спустя 6 часов, 17 минут, 55 секунд (16.10.2011 - 02:56) imbalance_hero написал(а):
justyork
Ты показал обычную ссылку, обычная передача GET параметров, всё норм.

Спустя 3 дня, 11 часов, 20 минут, 35 секунд (19.10.2011 - 14:17) justyork написал(а):
Еще просьба помогите сделать правильный запрос в БД, не могу сообразить...
Имеется 2 таблицы
1. friendship (id_user_1, id_user_2, status)
2. users (id_user, name)

И так, нужно выбрать из строк (id_user_1, id_user_2) строки где имеется мой id_user (у меня он к примеру известен), а дальше из противоположных моему id в таблице friendship, вытащить имена пользователей находящиеся в таблице юзеров.
Так же нужно выбирать только тех, где статус равен 1. либо не равен 0.

То что имеется.
$user = $this->Get();
$id_user = $user['id_user'];

$query1 = "SELECT * FROM " . TBL_PREF . "friendship WHERE id_user_1 = 'int($id_user)' OR id_user_2 = 'int($id_user)'";
$result = $this->msql->Select($query1); // Там обработка результата и возвращает масив.

Спустя 2 часа, 57 минут, 1 секунда (19.10.2011 - 17:14) imbalance_hero написал(а):
Есть такой трюк, что id от меньшего к большему, user_id_1 - всегда будет с меньшим id, чтобы не сверяться одновременно с обоими полями!

SELECT *
FROM `friendship` a
LEFT JOIN `users` b ON b.`id` = a.`id_user_2`
WHERE a.`id_user_1` = '$id'
AND (b.`status` = 1 OR b.`status` <> 0)
GROUP BY a.`id_user_2`

Спустя 48 минут, 58 секунд (19.10.2011 - 18:03) justyork написал(а):
Просто при добавлении в друзья id_user_1 - тот кто пригласил, id_user_2 - тот кого пригласили, status - 0 дружба не подтверждена, 1 - взаимная.
Второму юзеру должно прийти подтверждение на дружбу.

Так что тут id имеют определенный смысл.

И что значит знак <>? больше меньше?

Спустя 23 минуты, 12 секунд (19.10.2011 - 18:26) imbalance_hero написал(а):
justyork
<> - это синтаксис SQL, неравенство, синоним != .
Кто кого пригласил можно хранить отдельной колонкой, типо друзья имеют несколько статусов:
1 - первый пригласил.
2 - второй пригласил.
3 - оба добавили друг друга.
и т.д.

Тогда в условие можно добавить еще: a.`status` = 1 (или 2, в зависимости от того, кто у нас первый, с большим или меньшим id).

Спустя 1 час, 16 минут, 42 секунды (19.10.2011 - 19:43) justyork написал(а):
Так это получается слишком мудренно. Может легче поставить запрос по другому, по типу.

Надеюсь правильно написал


SELECT *
FROM `friendship` AS a
LEFT JOIN `users` AS b
ON b.`id_user` = a.`id_user_2`
WHERE (a.`id_user_1` = '$id_user' OR a.`id_user_2` = '$id_user')
AND (b.`status` = 1 OR b.`status` <> 0)

GROUP BY a.`id_user_2` // С группировкой не совсем понял, он группирует все значения с id_user_2?

Ощущение, что какую-то хрень написал <_<

Спустя 27 минут, 43 секунды (19.10.2011 - 20:10) imbalance_hero написал(а):
justyork
В SELECT надо указывать, какие данные ты выбираешь и из какой таблицы.
b.`id` , a.`name` и т.п.
А почему хрень? Выбираешь друзей, где один из пользователей = $id_user, присоединяешь к этом таблицу юзеров, чтобы получить из неё данные как раз об другом юзере. Хрень в этой строчке: "a.`id_user_2`", потому что тут должен быть указан либо первый, либо второй юзер в зависимости от того, каким являешься ты. Если ты первый, то выбираем второго, если ты второй - то первого. Именно из-за этого я предложил тебе типизировать так, чтобы "ты" всегда был определённым юзером.
А группировку тут можно не делять, если в таблице юзеров у тебя уникальным значением является id_user .
Быстрый ответ:

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