Аутентификация пользователей
у меня в базе храняться
логины и пароли пользователей
мне надо их оттуда выскрести и сранить с введённым
в форму (вот тут то и проблема)
я сравниваю при помощи цикла
и каждый раз он мне пишет что тра та та логин или не верный пока не находит правильный
как этого избежать ???
может можно обойтись без цикла ???
как лучше сделать аутентификацию пользователя на PHP ???
у меня в базе храняться
логины и пароли пользователей
мне надо их оттуда выскрести и сранить с введённым
в форму (вот тут то и проблема)
я сравниваю при помощи цикла
и каждый раз он мне пишет что тра та та логин или не верный пока не находит правильный
как этого избежать ???
может можно обойтись без цикла ???
если логины и пароли храняться в базе, зачем их выбирать в цикле?? :o
select password from auth_table where user=blabla;
нельзя сделать? кроме того - лучше в базе хранить хэш пароля, а не сам пароль. например в md5
if (!isset($_REQUEST['doGo']))
include ('auth_face.txt');
$mysql_host = "localhost";
$mysql_user = "Valiant";
$mysql_passw = ":D";
$mysql_db = "pgups"; mysql_connect($mysql_host,$mysql_user,$mysql_passw) or die ("Can't connect " .mysql_error());
mysql_select_db("$mysql_db")or die ("Data Base not connected" .mysql_error());
if (isset($login))
$my_Query_1= mysql_query(
"SELECT * FROM `users` WHERE `db_login` = '$login' AND `db_password` = '$pass'"
) or die ("Invalid user or password" .mysql_error());
самый главный вопрос что вставить сюда
else {
if (isset($login)) {
echo "<H1>Неправильное имя пользователя или пароль</H1>
";
echo ""; }
}
}
кроме того - лучше в базе хранить хэш пароля, а не сам пароль. например в md5
привык о безопасности думать
чуть позднее выполнения работающего кода
ведь добавить пару функций не так уж и сложно
решил сделать так:
"SELECT * FROM `users` WHERE `db_login` = '$login' AND `db_password` = '$pass'"
) or die ("Invalid user or password" .mysql_error());
!!!???? тяжко... еще раз:
запрос должен быть такой и только такой. то что написано в твоем коде - бред, уж извини.
я не силен в PHP, но я так понимаю, что в $my_Query_1 будет лежать результат выполнения запроса? ну так и сравнивай его с тем, что получил из формы в $pass.
кстати, если база используется только для аутентификации, т. е. там только логин и пароль, не вижу смысла в тяжеловесном SQL хранилище. хватило бы DBM хэшей.
привык о безопасности думать
чуть позднее выполнения работающего кода
ведь добавить пару функций не так уж и сложно
ну флаг в руки. хозяин - барин, как говориться
там ещё полно различных данных просто именно сейчас мне надо именно эти поля
в этой строчке:
"select db_password from users where db_login=$login"
он мне такую страшную сабжу выдаёт:
Unknown column 'Тра-та-та' in 'where clause'
Всё равно что то не так
в этой строчке:
"select db_password from users where db_login=$login"
он мне такую страшную сабжу выдаёт:
Unknown column 'Тра-та-та' in 'where clause'
ты знаком с SQL вообще? тяжело понять, что это значит?
Соц. опрос - как считаете лучше хранить в БД логин+md5(пароля) или md5(логин+пароль)? Во-втором случае даже тот, у кого есть доступ к базе не сможет узнать зарегистрированные логины, да и мста в БД меньше занимает такой подход. Есть ли негативные стороны? Запросы типа '.. WHERE login=:LOGIN' не в счет, для этого есть ID'ы.
И еще мысль - стоит ли делать такое поле (хэш от логина+пароль) уникальным - знаю что могут возникнуть ситуации когда разные строки будут давать одинаковый хэш (хотя это и очень маловероятно).
вы лучше толковым советом помогите
вы лучше толковым советом помогите
сцрать ф каментах йа могу то же ...
вы лучше толковым советом помогите
я тебе уже все сказал. если ты не понимаешь, что такое
unknown column и подставил мой запрос без изменений под свою базу - советы тебе не помогут.
хотя вот запрос
"select `db_password` from `users` where db_login= $login"
ты попрежнему считаешь что он не изменился ???
посмотри пару сабжей выше и поймёшь
хотя вот запрос
"select `db_password` from `users` where db_login= $login"
ты попрежнему считаешь что он не изменился ???
SQL запрос АБСОЛЮТНО не изменился. если ты сможешь доказать обратное - вперед.
вот запрос который у меня заработал
так как мне надо
код ниже приводить не имеет смысла
SELECT db_login, db_password FROM `users` WHERE db_login='$login'
вот запрос который у меня заработал
так как мне надо
код ниже приводить не имеет смысла
а чем он отличается от моего принципиально, кроме того, что непонятно зачем делается выборка поля db_login?
а чем он отличается от моего принципиально, кроме того, что непонятно зачем делается выборка поля db_login?
начнём заново ...
у меня есть два поля
логин и пасс мне нужно по логину найти пасс
после чего мне надо сравнить пасс из базы и пасс введённый пользователем
если это можно сделать как то иначе, то подскажи ...
начнём заново ...
у меня есть два поля
логин и пасс мне нужно по логину найти пасс
после чего мне надо сравнить пасс из базы и пасс введённый пользователем
если это можно сделать как то иначе, то подскажи ...
блиннн... ты что вообще не читаешь то что тебе писали????
еще раз и по слогам, пошагово:
1. считываешь из формы пароль и логин
2. предположим, что логин и пароль считаны в переменные db_login и db_pass
3. выполняешь запрос
select db_pass from `users` where db_login=$db_login
4. я не знаю PHP, но обычно результат запроса возращается в какой то массив или переменную например @query ($query)
делаешь сравнение $query и $db_pass полученный из формы.
ВСЕ.
теперь внятно обясни, зачем извлекать в запросе к базе поле с паролем и чем тебе не подошел предложенный мной SQL запрос.
но существенно это ничего не меняет
по 50000 авторизаций в минуту у меня проходить не будет, да и загрузка базы вообще не существенная
а потом уже будет проходить заточка кода
согласен и так как ты предлагаешь работает
но существенно это ничего не меняет
по 50000 авторизаций в минуту у меня проходить не будет, да и загрузка базы вообще не существенная
а потом уже будет проходить заточка кода
хы хы... у тебя наверное и поле db_login в базе текстовое? поверь, лучше сразу сделать как надо, чем потом иметь себе мозги... проверено на собственном горьком опыте.
какое поле лучше сделать ???
Вот с этим то же вопрос
какое поле лучше сделать ???
лучше сделать числовое поле USER_ID и сделать отдельную таблицу с соответствием USER_ID и db_login.
Видимо только у такого идиота как я проблем не возникает)))
Лично я делаю так. Есть у меня БД с никами и пасами хранящаясь в XML (естесТено доступ к БД только меня любимого да ещё и скрипта, который является движком сайта). Потом беру самописную функцийку и делаю из этой БД выборку. Получаю два индексных массива. В одной все ники сайта, в другом пароли. Беру из куков пользователя его ник и пас. В первом массиве ищем ник, во втором пасс. НО! даже если и ник и пасс в БД найдены, это не значит, что мы пользователя авторизуем. Ни в коем случае! А вдруг пасс из куков найдется во втором массиве, но он не соответствует текущему нику (тому, который через куки пришел). Поэтому заключительная часть проверки: сравнение ключей этих двух массивов. Если индекст из массива ников равен индексу из массива пассов, то только в этом случае мы можем быть уверены, что присланая пара ник-пасс из кукиксов соответствует такой же паре ник-пасс из БД.
Хотя это не значит, что я пытаюсь умолить роль SQL. Просто в текущем проект решил использовать БД XML. Для тренировки, так сказать.
решил сделать так:
if (!isset($_REQUEST['doGo']))
include ('auth_face.txt');
$mysql_host = "localhost";
$mysql_user = "Valiant";
$mysql_passw = ":D";
$mysql_db = "pgups"; mysql_connect($mysql_host,$mysql_user,$mysql_passw) or die ("Can't connect " .mysql_error());
mysql_select_db("$mysql_db")or die ("Data Base not connected" .mysql_error());
if (isset($login))
$my_Query_1= mysql_query(
"SELECT * FROM `users` WHERE `db_login` = '$login' AND `db_password` = '$pass'"
) or die ("Invalid user or password" .mysql_error());
самый главный вопрос что вставить сюда
else {
if (isset($login)) {
echo "<H1>Неправильное имя пользователя или пароль</H1>
";
echo ""; }
}
}
mysql_passw = "";
Как это Вообще работает? Даже ковычки не экранированы...
mysql_passw = "";
Как это Вообще работает? Даже ковычки не экранированы...
как как да никак это смайл
как как да никак это смайл
Так он не о том... он о том, что вообще-то внутри "...." все " положено экранировать через \", а иначе работать то не будет!
пароль к базе данных ???
что экранировать ???
пароль к базе данных ???
Уууу... как же все запушено-то... матчасть то учим...
$mysql_passw = "";
PHP парсер считает, что в переменной $mysql_pass записано <img src=, т.е. данные до закрывающийся двойной кавычки. Если же внутри строки есть двойные кавычки, то для того, что бы сказать парсеру, что двойные кавычки это часть данныех, а не окончание строки, ставят экранирующий символ. Т.е. корректный код должен быть таким:
$mysql_passw = "<img src=\"images/smilies/icon_9.gif\" border=\"0\" alt=\"\">";
А вообще-то в данном случае лучше применить одинарные кавычки (в этом случае парсеру пофиг, какие данные внутри строки находяться. Хотя если там есть одинарная кавычка, то её придется экранировать).
$mysql_passw = '';
про кавычки я и без тебя знаю
но я же не буду на весь форум трубить про свой пароль к базе ... логика ???
да и потом я же написал что тут должен быть смайл форума который я сам туда умышленно поставил
а форум между тегами [<php>][</php>] вместо того что бы поставить смайл написал ссылу на смайл
всё считаю тему пора закрывать а то ещё кто чего не так поймёт и пошлёт меня учить матчасть
if(intval($f['cnt'])){
echo 'You are logged in!';
}else{
echo 'You are sux!';
}