soctell

Блокировка пользователя до определенной даты

Recommended Posts

Добрый день, подскажите реализован код установки даты блокирования пользователя до определенной даты, осталось подкорректировать проверку при входе пользователя, я редактирую в файле /testkk/public_html/apps/system/lib/system/user/login_email.php и изменил на следущее

if ( $email != '' and $password != '' ) {				$query = "SELECT * FROM ".DB_PREFIX."_user WHERE email='".$email."' and password='".md5($password)."'".(1==$this->getConfigValue('use_registration_email_confirm') ? ' AND active=1' : '');				//echo $query;				$this->db->exec($query);				$this->db->fetch_assoc();			$date = date("Y-m-d");				if ( $this->db->row['user_id'] != '' and  $this->db->row['date_ban'] = '0000-00-00 00:00:00' and  $date > $this->db->row['date_ban']) {					$session_key = $this->GenerateSessionKey($this->db->row['user_id']);					$this->setSessionKey( $session_key );					$this->setUserId($this->db->row['user_id']);					$_SESSION['user_id']=$this->db->row['user_id'];					$_SESSION['current_user_name']=$this->db->row['fio'];					$this->db->exec('SELECT system_name FROM '.DB_PREFIX.'_group WHERE group_id=(SELECT group_id FROM '.DB_PREFIX.'_user WHERE login=\''.$login.'\')');					$this->db->fetch_assoc();					$_SESSION['current_user_group_name']=$this->db->row['system_name'];											return true;				}

где date_ban - колонка до какого числа заблокирован

 

Причем если не заблокирован пользватель date_ban = 0000-00-00 00:00:00

Помогите решить проблему с проверкой

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно прямо в первом запросе тогда делать проверку на дату.

$query = "SELECT * FROM ".DB_PREFIX."_user WHERE email='".$email."' and password='".md5($password)."' and date_ban < now() ".(1==$this->getConfigValue('use_registration_email_confirm') ? ' AND active=1' : '');

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Условие добавил, а как сделать чтобы при $date > $this->db->row['date_ban'] выводило сообщение с датой блокировки внутри его, сделал пока так, но это сообщение дейсвует при неправ пароле и если заблокирован

if ( $this->db->row['user_id'] != '' and  $date > $this->db->row['date_ban']) {					$session_key = $this->GenerateSessionKey($this->db->row['user_id']);					$this->setSessionKey( $session_key );					$this->setUserId($this->db->row['user_id']);					$_SESSION['user_id']=$this->db->row['user_id'];					$_SESSION['current_user_name']=$this->db->row['fio'];					$this->db->exec('SELECT system_name FROM '.DB_PREFIX.'_group WHERE group_id=(SELECT group_id FROM '.DB_PREFIX.'_user WHERE login=\''.$login.'\')');					$this->db->fetch_assoc();					$_SESSION['current_user_group_name']=$this->db->row['system_name'];											return true;				}				else				{				$this->riseError(Multilanguage::_('L_ERROR_EMAIL_BAN'));								return $rs;				}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот так можно.

И обратите внимание что надо сделать return false; 

$this->riseError(Multilanguage::_('L_ERROR_EMAIL_BAN').' дата блокировки '.$this->db->row['date_ban']);return false;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Проблема с кодировкой "дата блокировки", и не отображает дату блокировки

Используй для редактирования файлов редактор, который поддерживает UTF-8. Например, Eclipse PHP IDE

А вот так если попробовать:

print_r($this->db->row);

Что пишет? Можешь сюда скопировать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня файл  в кодировки UTF-8, редактир Notepad++. При выводе print_r пишет только "1"

Значит запрос вообще верхний не сработал.

Давайте снова кусок кода - и то место где отладку добавили.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Весь кусок кода , а что было изменено подчеркнуто

<?php/** * Login using email-address * @author Kondin Dmitriy <kondin@etown.ru> */ class Login_Email extends Login {		/**	 * Main	 * @param void	 * @return string	 */	function main () {		global $init;		if ( $this->getSessionUserId() > 0 ) {			$rs = $this->wellcomePage();			return $rs;		}			switch ( $init->getValue('do', 'default') ) {			case 'login_vk':				require_once (SITEBILL_DOCUMENT_ROOT . '/apps/socialauth/lib/vk/vk_logger.php');				$VK = Vk_Logger::getInstance();				$VK->login();				break;			case 'login':				$this->checkLogin(  $init->getValue('email'), $init->getValue('password')  );				//echo "error_message = ".$this->error_message."<br>";				if ( $this->GetError() ){					$rs = $this->loginForm();				} else {					$rs = $this->wellcomePage();				}				break;			default:				if ( $this->getSessionUserId() > 0 ) {					$rs = $this->wellcomePage();				} else {					$rs = $this->loginForm();				}		}		return $rs;	}		/**	 * Check login	 * @param string $email email-address	 * @param string $password password	 * @return boolean	 */	function checkLogin ( $email, $password ) {		if ( $_SESSION['user_id'] > 0 ) {			return true;		}		if ( $this->getConfigValue('ajax_auth_form') ) {			$this->riseError('not login');			unset($_SESSION['user_id']);			return false;		} else {			if ( $email != '' and $password != '' ) {				$query = "SELECT *,       date_ban(date, \"%d.%m.%y\") as date_ban FROM ".DB_PREFIX."_user WHERE email='".$email."' and password='".md5($password)."'".(1==$this->getConfigValue('use_registration_email_confirm') ? ' AND active=1' : '');				//echo $query;				$this->db->exec($query);				$this->db->fetch_assoc();			$date = date("d.m.y");				if ( $this->db->row['user_id'] != '' and  $date > $this->db->row['date_ban']) {					$session_key = $this->GenerateSessionKey($this->db->row['user_id']);					$this->setSessionKey( $session_key );					$this->setUserId($this->db->row['user_id']);					$_SESSION['user_id']=$this->db->row['user_id'];					$_SESSION['current_user_name']=$this->db->row['fio'];					$this->db->exec('SELECT system_name FROM '.DB_PREFIX.'_group WHERE group_id=(SELECT group_id FROM '.DB_PREFIX.'_user WHERE login=\''.$login.'\')');					$this->db->fetch_assoc();					$_SESSION['current_user_group_name']=$this->db->row['system_name'];											return true;				}				else				{				$this->riseError(Multilanguage::_('L_ERROR_EMAIL_BAN').' дата блокировки '.$this->db->row['date_ban']);return false;				}								$this->riseError(Multilanguage::_('L_ERROR_EMAIL_PASS'));				return false;			}			$this->riseError('not login');			unset($_SESSION['user_id']);			return false;		}	}		/**	 * Get simple auth form	 * @param string $action	 * @param boolean $register	 * @param boolean $remind	 * @return string	 */	function get_simple_auth_form ( $action = '/login/', $register = true, $remind = true ) {		if ( SITEBILL_MAIN_URL != '' ) {			$add_folder = '/'.SITEBILL_MAIN_URL;		}			$rs .= '<form method="post" action="'.SITEBILL_MAIN_URL.$action.'">';			$rs .= '';			$rs .= '<table border="0">';			if ( $this->getError() and $this->GetErrorMessage() != 'not login' ) {				$rs .= '<tr>';				$rs .= '<td colspan="2"><span class="error">'.$this->GetErrorMessage().'</span></td>';				$rs .= '</tr>';			}			 			 			$rs .= '<tr>';			$rs .= '<td class="special">'.Multilanguage::_('L_AUTH_EMAIL').' </td>';			$rs .= '<td class="special"><input type="text" name="email" id="email"></td>';			$rs .= '</tr>';			 			$rs .= '<tr>';			$rs .= '<td class="special">'.Multilanguage::_('L_AUTH_PASSWORD').' </td>';			$rs .= '<td class="special"><input type="password" name="password" id="password"></td>';			$rs .= '</tr>';			$rs .= '<tr>';			$rs .= '<td class="special">';			 			if ( $register ) {				$rs .= '<a href="'.SITEBILL_MAIN_URL.'/register/">'.Multilanguage::_('L_AUTH_REGISTRATION').'</a>';			}			if ( $remind ) {				$rs .= '<br><a href="'.SITEBILL_MAIN_URL.'/remind/">'.Multilanguage::_('L_AUTH_FORGOT_PASS').'</a>';			}			 			$rs .= '</td>';			$rs .= '<td class="special"><input type="submit" value="'.Multilanguage::_('L_AUTH_ENTER').'"></td>';			$rs .= '</tr>';			$rs .= '</table>';			$rs .= '<input type="hidden" name="do" value="login">';			$rs .= '</form>';									return $rs;	}}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробуй раскомментируй

//echo $query;

чтобы стало

echo $query;

Поймай запрос и выполни его через PHPmyadmin и глянь, он вообще выполняется?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Например получ след запрос

SELECT *, date_ban(date, "%d.%m.%y") as date_ban FROM re_user WHERE email='pozitiff900@mail.ru' and password='f638f4354ff089323d1a5f78fd8f63ca' 

При выполнении запроса в phpmyadmin

#1305 - FUNCTION krdmorg_kkuban.date_ban does not exist

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Например получ след запрос

SELECT *, date_ban(date, "%d.%m.%y") as date_ban FROM re_user WHERE email='pozitiff900@mail.ru' and password='f638f4354ff089323d1a5f78fd8f63ca' 

При выполнении запроса в phpmyadmin

#1305 - FUNCTION krdmorg_kkuban.date_ban does not exist

Вот вам и ответ на вопрос, неправильный запрос вы сделали.

пробуйте просто 

SELECT * FROM

без выдуманной вами конструкции с date_ban

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите почему выводит фразу блокировки при вводе неправильного пароля, хотя не должно 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите почему выводит фразу блокировки при вводе неправильного пароля, хотя не должно 

Потому что в логине сейчас обработка одного события идет

$this->riseError('not login');

В форме генерации логина нет других обработок.

Вам нужно тогда самим добавлять перехват новых ошибок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас