Вход на страницу под именем и паролем

Анатолий

Новичок
Для начала ввод от пользователя нужно "отфильтровать".
PHP:
//--------Блок авторизации
if (isset($_POST['login']))
{
	$login = Slashes($_POST['login']);
	$user_res = $db->SqlParse("SELECT * FROM `table_user` WHERE login='$login' LIMIT 1");
	if ($user_res != 0)
	{
		$oUser = new User($user_res[0]['id']);
		if (md5($_POST['password']) == $oUser->password)
		{
			$_SESSION['user_id'] = $oUser->id;
			$_SESSION['user_name'] = $oUser->name;
			$_SESSION['user_email'] = $oUser->email;
			$_SESSION['user_organization'] = $oUser->organization;
			$_SESSION['user_last_visit'] = $oUser->last_visit;
			$_SESSION['user_count_visit'] = $oUser->count_visit;
			
			$oUser->AddVisit();
		}
	}
}
Где класс User создает пользователя если все ОК, потом данная информация используется в Магазине и т.д. Регистрацию можно проверять по существованию сессии и поле user_id <> 0
 

Фанат

oncle terrible
Команда форума
Да.
ООП - это как раз то, чего автору вопроса и не хватало.
Именно в этом была вся проблема =)

-~{}~ 14.10.05 13:29:

Кстати, "фильтровать" ввод от пользователя не нужно.
Если для помещения в запрос.
Запросы надо составлять правильно. А уж от пользователя туда вставляются данные, или от господа бога - дело десятое.
К тому же, фильрация - это отсечение чего-либо. А для составления запросов ничего отсекать не нужно.
 

Wander-PVS

Новичок
Вот теперь все работает :)
Теперь еще проблемка одна есть.
Вот я зашел на страницу под именем и паролем. На этой странице есть ссылки на другие страницы. Как сделать к "другим" страницам тоже проверку имени и пароля?
 

Анатолий

Новичок
Wander-PVS
Если каждая страница у тебя задана отдельным файлом, то в начале каждого файла стартуй сессию session_start(); и проверяй наличие переменной которая у тебя ответственна за регистрацию. Если переменной нет или она неправильна пересылай на страницу ошибки, например,
PHP:
if (!isset($_SESSION['auth']))
{
      header('Location: ./error.php');
      exit();
}
 

SiMM

Новичок
> Это зачем???
Чтобы в следующий раз, когда тебя угораздит
> просто для примера путь написал
ты писал пути правильные, а не до такой степени от балды.
 

Анатолий

Новичок
Прошу прощения за оффтоп...

SiMM
А где, здесь ошибка??? Я не совсем "от балды" писал. У меня все нормально работает, с таким подходом. У меня сайт состоит из модулей, их работой "заведует" файл index.php (лежащий в корне сайта), в начале данного файла присутствует проверка на авторизацию (примерно, как я писал выше). В этой же директории, где лежит index.php (корневой директории сайта), лежит и файл ошибки авторизации error.php. Так, что все нормально... Конечно, можно написать
PHP:
 header('Location: error.php');
 //---А можно и так
 header('Location: ./error.php');
 

nirex

Новичок
<FORM NAME='users' METHOD='POST' ACTION='2.php'>
Имя: <input type=text name="login" size=15><br>
Пароль:<input type=text name="password" size=15><br>
<input type=submit value=' Вход '>
</form>

<?php
// mysql
$dbhost="localhost";
$dbname = 'good';
$dbusername = 'root';
$dbuserpassword = '';
/**************************************
* Ф-ия соеденение к базе данных *
**************************************/
function db_connect() {

global $dbhost, $dbusername, $dbuserpassword, $dbname;

global $MYSQL_ERRNO, $MYSQL_ERROR;



$link_id = mysql_connect($dbhost, $dbusername, $dbuserpassword);

if(!$link_id) {

$MYSQL_ERRNO = 0;

$MYSQL_ERROR = "Connection failed to the host $dbhost.";

return 0;

}

else if(empty($dbname) && !mysql_select_db($default_dbname)) {

$MYSQL_ERRNO = mysql_errno();

$MYSQL_ERROR = mysql_error();

return 0;

}

else if(!empty($dbname) && !mysql_select_db($dbname)) {

$MYSQL_ERRNO = mysql_errno();

$MYSQL_ERROR = mysql_error();

return 0;

}

else return $link_id;

}


/**************************************
* Ф-ия по ответу на ошибку c MySql *
**************************************/
function mysql_eror()
{
$MYSQL_ERRNO = mysql_errno();
$MYSQL_ERROR = mysql_error();
echo "$MYSQL_ERRNO: $MYSQL_ERROR";
exit;
}

$linkid = db_connect($dbname);
if (!$linkid)mysql_eror();

global $login,$password;

// сюда еще вставь проверку на разрешенные символы в логине и впассворде , для того чтобы не сделали sql инъекцию

$query="select `name`,`password` from `users` where `name`=\"$login\" and `password`=\"$password\"";
$result = mysql_query($query);
if(!$result)mysql_eror();
$data = mysql_fetch_array($result);
if(!empty($data))echo "GOOD";
else echo "BAD";
?>
злые вы :))
ой , апроблема уже решена :) , но нечего может кто-нибудь себе полезного подчерпнет
 

Фанат

oncle terrible
Команда форума
Злые мы =)
что означает эта строчка?
сюда еще вставь проверку на разрешенные символы
это называется не проверка на разрешенные символы, а корректное составление запроса.
базе абсолютно всё равно, какие символы в логине и пароле. лишь бы запрос был составлен правильно.
не мог бы ты пояснить смысл этой конструкции?
а так же смысл двух вызовов mysql_select_db?

а какое вообще отношение имеет такая продвинутая функция коннекта к обсуждаемому вопросу? И почему она в ответе занимает три четверти места? =)
но нечего может кто-нибудь себе полезного подчерпнет
ага. как не надо писать скрипты =)
 

n0b0dy

Новичок
Автор оригинала: Crystal
А вообще, разве правильно писать
if ($login=$r['users.name'] and $password=$r['users.password']) ?
по-моему, как минимум надо
if (($login==$r['users.name']) &&( $password==$r['users.password']))
Наскок я помню то приаритетнее всеж буде "&&" нежели AND

лирическое отступление
 
Сверху