Проверка регистрационных данных
Воскресенье, 6 декабря 2009 г.
Рубрика: Сайтостроительство
Метки: cms | maxsite | php
Подписаться на комментарии по RSS
Рубрика: Сайтостроительство
Метки: cms | maxsite | php
Подписаться на комментарии по RSS
Часть функций, их основа честно откуда-то спёрта. Мне не удалось разыскать источник поэтому выложу в открытый доступ. Функции для проверки регистрационных данных комъюзеров.
Функция проверки на существование мыла в таблице пользователей.
function is_email_exists($email)
{
$ret = false;
$CI = &get_instance();
$CI->db->from('users');
$CI->db->select('users_email');
$CI->db->limit(1);
$CI->db->where( array('users_email' => $email));
$query = $CI->db->get();
if( $query->num_rows() )
{
$row = $query->row();
if( $row->users_email == $email ) $ret = true;
}
return $ret;
}
Получение ИДа пользователя по его нику.
function get_id_by_nik($name)Проверка на существование логина юзера
{
$ret = true;
$id = 0;
$CI = &get_instance();
$CI->db->from('comusers');
$CI->db->select('comusers_id');
$CI->db->limit(1);
$CI->db->where( array('comusers_nik' => $name));
$query = $CI->db->get();
if( $query->num_rows() )
{
$row = $query->row();
$id = $row->comusers_id;
}
return (int) $id;
}
function is_users_login($login)Проверка на существование ника пользователя
{
$ret = true;
$CI = &get_instance();
$CI->db->from('users');
$CI->db->select('users_login');
$CI->db->limit(1);
$CI->db->where( array('users_login' => $login));
$query = $CI->db->get();
if( $query->num_rows() )
{
$row = $query->row();
if( $row->users_login == $login )
{
$ret = false;
}
else
{
$ret = true;
}
}
return $ret;
}
function is_users_nik($login)Проверка на существование ника комъюзера
{
$ret = true;
$CI = &get_instance();
$CI->db->from('users');
$CI->db->select('users_nik');
$CI->db->limit(1);
$CI->db->where( array('users_nik' => $login) );
$query = $CI->db->get();
if( $query->num_rows() )
{
$row = $query->row();
if( $row->users_nik == $login )
{
$ret = false;
}
else
{
$ret = true;
}
}
return $ret;
}
function is_comusers_nik($login, $userid)
{
$ret = true;
$CI = &get_instance();
$CI->db->from('comusers');
$CI->db->select('comusers_nik');
$CI->db->limit(1);
$CI->db->where( array('comusers_nik' => $login) );
$query = $CI->db->get();
if( $query->num_rows() )
{
$row = $query->row();
if ( ( $row->comusers_nik == $login ) and
( get_id_by_nik($row->comusers_nik) != $userid ) and ( $row->comusers_nik!='' ) )
{
$ret = false;
}
else
{
$ret = true;
}
}
return $ret;
}
Функция, которую нужно вызывать в файле your-template/type/users-form.php вместо стандартной $res_post=mso_comuser_edit(); нужно выполнить присваивание $res_post=russ_mso_comuser_edit();
function russ_mso_comuser_edit($args = array())Изменений минимум, но они касаются именно проверок. При обновлении Максом данной функции следует вносить изменения и в эту. На данный момент она предназначена для версии 0.34. Хотя не думаю, что будут изменения в будущем.
{
global $MSO;
if ( !isset($args['css_ok']) ) $args['css_ok'] = 'comment-ok';
if ( !isset($args['css_error']) ) $args['css_error'] = 'comment-error';
# id комюзера, который в сессии
if ( isset($MSO->data['session']['comuser']) and $MSO->data['session']['comuser'] )
$id_session = $MSO->data['session']['comuser']['comusers_id'];
else $id_session = false;
if ( $post = mso_check_post(array('f_session_id', 'f_submit', 'f_comusers_activate_key')) ) // это активация
{
# защита рефера
mso_checkreferer();
# защита сессии - если не нужно закомментировать строчку!
if ($MSO->data['session']['session_id'] != $post['f_session_id']) mso_redirect();
// получаем номер юзера id из f_submit[]
$id = (int) mso_array_get_key($post['f_submit']);
if (!$id) return ''. t('Ошибочный номер пользователя'). '';
# проверяем id в сессии с сабмитом
if ($id != $id_session)
return ''. t('Ошибочный номер пользователя'). '';
$f_comusers_activate_key = trim($post['f_comusers_activate_key']);
if (!$f_comusers_activate_key) return ''. t('Неверный (пустой) ключ'). '';
// нужно проверить если у указанного комюзера не равные ключи
// если они равны, то ничего не делаем
$CI = & get_instance();
$CI->db->select('comusers_activate_string, comusers_activate_key');
$CI->db->from('comusers');
$CI->db->where('comusers_id', $id);
$CI->db->limit(1);
$query = $CI->db->get();
if ($query->num_rows() > 0)
{
$comuser = $query->result_array(); // данные комюзера
if ($comuser[0]['comusers_activate_string'] == $comuser[0]['comusers_activate_key'])
{
// уже равны, активация не требуется
return ''. t('Активация уже выполнена'). '';
}
else
{
// ключи в базе не равны
// сверяем с переданным ключом из формы
if ($f_comusers_activate_key == $comuser[0]['comusers_activate_key'])
{
// верный ключ - обновляем в базе
$CI->db->where('comusers_id', $id);
$res = ($CI->db->update('comusers',
array ('comusers_activate_string' => $f_comusers_activate_key ) )) ? '1' : '0';
$CI->db->cache_delete_all();
if ($res)
return ''. t('Активация выполнена!'). '';
else
return ''. t('Ошибка БД при добавления ключа активации'). '';
}
else
{
return ''. t('Ошибочный ключ активации'). '';
}
}
}
else // вообще нет такого комюзера
return ''. t('Ошибочный номер пользователя'). '';
}
elseif ( $post = mso_check_post(array('flogin_session_id', 'flogin_submit', 'flogin_user', 'flogin_password',
'flogin_redirect')) )
{
// логинимся через стандартную _mso_login()
_mso_login();
return;
}
// это форма?
elseif ( $post = mso_check_post(array('f_session_id', 'f_submit', 'f_comusers_email', 'f_comusers_password',
'f_comusers_nik', 'f_comusers_url', 'f_comusers_icq', 'f_comusers_msn', 'f_comusers_jaber',
'f_comusers_date_birth', 'f_comusers_description', 'f_comusers_avatar_url')) ) // это обновление формы
{
if (!is_login_comuser())
return ''. t('Ошибочные данные пользователя'). '';
# защита рефера
mso_checkreferer();
# защита сессии - если не нужно закомментировать строчку!
if ($MSO->data['session']['session_id'] != $post['f_session_id']) mso_redirect();
// получаем номер юзера id из f_submit[]
$id = (int) mso_array_get_key($post['f_submit']);
if (!$id) return ''. t('Ошибочный номер пользователя'). '';
# проверяем id в сессии с сабмитом
if ($id != $id_session)
return ''. t('Ошибочный номер пользователя'). '';
$f_comusers_email = trim($post['f_comusers_email']);
$f_comusers_password = trim($post['f_comusers_password']);
if (!$f_comusers_email or !$f_comusers_password)
return ''. t('Необходимо указать email и пароль'). '';
// проверим есть ли такой комюзер
$CI = & get_instance();
$CI->db->select('*');
$CI->db->from('comusers');
# CodeIgniter экранирует where, даже когда только условия в полях
$CI->db->where('comusers_activate_string=comusers_activate_key', '', false); // активация должна уже быть
$CI->db->where(array('comusers_id'=>$id,
'comusers_email'=>$f_comusers_email,
'comusers_password'=>$f_comusers_password
));
$CI->db->limit(1);
$query = $CI->db->get();
if ($query->num_rows() > 0)
{
// все ок - логин пароль верные
$comuser = $query->result_array(); // данные комюзера
$f_comusers_avatar_url = mso_strip($post['f_comusers_avatar_url'], false,
array('\\', '|', '?', '%', '*', '`'));
$allowed_ext = array('gif', 'jpg', 'jpeg', 'png'); // разрешенные типы
$ext = strtolower(str_replace('.', '', strrchr($f_comusers_avatar_url, '.'))); // расширение файла
if ( !in_array($ext, $allowed_ext) ) $f_comusers_avatar_url = ''; // запрещенный тип файла
if (!isset($post['f_comusers_notify'])) $post['f_comusers_notify'] = 0;
if ( !( is_users_login($post['f_comusers_nik']) and is_comusers_nik($post['f_comusers_nik'], $id) and is_users_nik($post['f_comusers_nik']) ) )
return ''. t('Необходимо указать правильный ник'). '';
$upd_date = array (
'comusers_nik' => strip_tags($post['f_comusers_nik']),
'comusers_url' => strip_tags($post['f_comusers_url']),
'comusers_icq' => strip_tags($post['f_comusers_icq']),
'comusers_msn' => strip_tags($post['f_comusers_msn']),
'comusers_jaber' => strip_tags($post['f_comusers_jaber']),
'comusers_date_birth' => strip_tags($post['f_comusers_date_birth']),
'comusers_description' => strip_tags($post['f_comusers_description']),
'comusers_avatar_url' => $f_comusers_avatar_url,
'comusers_notify' => $post['f_comusers_notify'],
);
# pr($upd_date );
$CI->db->where('comusers_id', $id);
$res = ($CI->db->update('comusers', $upd_date )) ? '1' : '0';
$CI->db->cache_delete_all();
// mso_flush_cache(); // сбросим кэш
if ($res)
return ''. t('Обновление выполнено!'). '';
else
return ''. t('Ошибка БД при обновлении'). '';
}
else return ''. t('Ошибочный email и пароль'). '';
} // обновление формы
}
Комментариев: 4
А куда эти коды вставлять?
Без разницы откуды вызывать
А это собственно вызов.
Т.е. в любой файл своего шаблона? Например в users-form.php?
Или создать свой файл (prd.php), прописать его в index.php?
у меня создана папка functions и инклюдится из файлов таким образом: require(getinfo('template_dir').'functions/users.php');