Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проверка формы на актуальность.

714
18 мая 2012 года
clgs
226 / / 29.10.2008
Добрый день.
Столкнулся с ситуацией когда на форме нажимают на сабмит дабл кликом, причем быстро, то данные на форме отправляется два раза, в общем-то нормальное явления, но) Получается так что скрипт обработки формы запускается с минимальной разницей во времени, и тут происходит следующее:
  1. т.к. сессия хранится в базе, а актуальность формы зависит от сессии и проверочных данных формы, в обоих случаях форма считается актуальной.
  2. интереснее, происходит проверка (SELECT) емайл и телефона на наличии в базе, затем инсерт, в итоге в базе две записи.
По поводу второго думал поставить на поля телефон и емайл в базе уникальное значение, но есть запись типа NULL.
Что посоветуете?
277
18 мая 2012 года
arrjj
1.7K / / 26.01.2011
1) innoDB таблички допускают в unique поле много null значений
т.е.
insert 1 //ok
insert 1 //error
insert null //ok
insert null //ok <==
2) сделай субмит формы на js
3) используй блокировки таблици
4(1+)) если делать как в 1) варианте твой скрипт при двойной обработке вернет вторую ошибку ( if ! Insert отработает ) поетому можешь добавить поле sid к своей табличке и хранить sid пользователя создавшего запись. соответственно при удалении сессии удалять sid из записей.
277
18 мая 2012 года
arrjj
1.7K / / 26.01.2011
имхо надо както идентифицировать пользователя в таблице. Вдруг он потом захочет мыло или телефон поменять? Покажи структуру таблици.
714
18 мая 2012 года
clgs
226 / / 29.10.2008
Идентификация как раз и происходит по емайлу и телефону. В базе не может быть пользователей с одним телефоном или емайлом, за исключением NULL - их может быть больше одной. Записи у которых в этих полях NULL - это пользователи которые авторизовались по средствам соц.сетей. Смена емайла и телефона происходит по заявки пользователи и в личном кабинете пользователя соответственно.
Я лучше покажу как происходит проверка и регистрация:

Код:
if(mysql_num_rows(Query('SELECT 1 FROM `'.PREFIX.'module_public_users` WHERE `e_mail` = \''.$array_vars['e_mail'].'\' LIMIT 1'))){
    $error=array('e_mail'=>1);
    $error_txt = message_notice('Пользователь с таким E-Mail уже есть в системе',true);
    return;
}
elseif(mysql_num_rows(Query('SELECT 1 FROM `'.PREFIX.'module_public_users` WHERE `phone_num`=\''.$phone_num.'\' LIMIT 1'))){
    $error=array('phone'=>1);
    $error_txt = message_notice('Пользователь с таким телефоном уже есть в системе',true);
    return;
}

if(!Insert(PREFIX."module_public_users",array(....
277
18 мая 2012 года
arrjj
1.7K / / 26.01.2011
мб при создании сид указывать? И если сид одинаковый выводить сообщение об успешном добавлении?
714
18 мая 2012 года
clgs
226 / / 29.10.2008
Цитата: arrjj
мб при создании сид указывать? И если сид одинаковый выводить сообщение об успешном добавлении?

Не совсем понятно как реализовать? Суть такова когда выполняются оба запроса (SELECT email, phone), то в этот момент записи в таблице нет. Получается так что они работают практически синхронно.

714
18 мая 2012 года
clgs
226 / / 29.10.2008
Спасибо. 2 уже сделано, а остальное будем думать)

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог