Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нулевой result-set запроса - отловить.... 
:(
    Опции темы
Djigit
Дата 22.6.2010, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Функция проверки авторизации на правильность ввода данных. 
Приходят данные из формы,формируется строка - запрос... поиск,естественно,идёт по логину,т.е. если его нет в базе,result-set будет нулевой. Как отловить это дело? 
Моё не работает (точнее не работает блок "else if").
Пытался проверить на "нулёвость" и $r - не получается... на isset думал проверить $v[ПОЛЕ] - то же самое.


Код

function login_check($login,$password)
    {
        $password=md5($password);
        $r=mysql_query("SELECT name,password FROM users WHERE name='{$login}'");
        for($data=array();$row=mysql_fetch_assoc($r);$data[]=$row);
        foreach($data as $v)
        {
            if($v["name"]==$login&&$v["password"]!=$password)
                return "Неверный пароль";
            else if($v["name"]!=$login)
                return "Нет такого пользователя";
        }
    }

--------------------
Бабло победит зло!!!
PM MAIL MSN   Вверх
Kano
Дата 22.6.2010, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 23.2.2009

Репутация: 1
Всего: 0



mysql_num_rows()

И избавься от SQL injection.
PM MAIL   Вверх
bars80080
Дата 22.6.2010, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



какая-то жуткая конструкция. а чем не устроило просто:

Код

function login_check($login,$password) {
        $password=md5($password);
        $sql = 'SELECT `name`,`password` FROM `users` WHERE `name`="'.mysql_real_escape_string($login).'" AND `password`="';
        $sql .= mysql_real_escape_string($password).'" LIMIT 1';
        $q = mysql_query($sql);
        $f = mysql_fetch_array($q);
        if(empty($f['name'])) { return 'Неверные логин и/или пароль'; }

        return 'ok';
 
}

PM MAIL WWW   Вверх
Djigit
Дата 22.6.2010, 19:39 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



про функцию fetch_array() забыл)))))))))) привык много данных вытягивать и обрабатывать,потому и получилось жутко)))

про инъекции правильно подметили,была бы дыра.. но это я просто руку набиваю на гостевой.
--------------------
Бабло победит зло!!!
PM MAIL MSN   Вверх
Kano
Дата 23.6.2010, 16:37 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 23.2.2009

Репутация: 1
Всего: 0



Djigit, вспомнил про fetch_array()? Теперь забудь. Только fetch_assoc().

Далее, товарищ bars80080 написал не менее жуткую конструкцию: при отсутствии пользователя mysql_fetch_*() вернёт false, там будет Notice.

Если нужна только проверка существования такого пользователя, то
Код

function login_check($login, $password) {

    $query = 'SELECT COUNT(*) FROM `users` WHERE '
           . '`name` = "' . mysql_real_escape_string($login) . '"'
           . 'AND `password` = "' . mysql_real_escape_string(md5($password)) . '"';

    $result = mysql_query($query);    

    return mysql_result($result, 0) > 0;
}


Добавлено через 43 секунды
Код

mysql_real_escape_string(md5($password))

в данном и конкретном случае можно упростить до
Код

md5($password)

PM MAIL   Вверх
bars80080
Дата 23.6.2010, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(Kano @  23.6.2010,  16:37 Найти цитируемый пост)
написал не менее жуткую конструкцию: при отсутствии пользователя mysql_fetch_*() вернёт false, там будет Notice.

да, что-то такое предполагал, лень было проверять

Цитата(Kano @  23.6.2010,  16:37 Найти цитируемый пост)
вспомнил про fetch_array()? Теперь забудь. Только fetch_assoc().

почему?


PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0794 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.