Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
3 / 3 / 2
Регистрация: 28.03.2015
Сообщений: 61
1

Авторизация + Сессии и Кукисы + Mysqli

18.11.2015, 05:31. Показов 2944. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго вам форумчане!

Страдаю следующей проблемой:
Catchable fatal error: Object of class mysqli_result could not be converted to string in functions.php on line 92

Собственно функция из-за которой всё и началось:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function authorization() {
        $mysqli = connectDB();
        $login = screening($_POST['login']);
        $passwd = md5(screening($_POST['passwd']).'solt');
        if($mysqli->query("SELECT * FROM `fe_users` WHERE  `user_login`='".$login."' AND `user_password`='".$passwd."' AND `active`=''") == 1){     
            //~ пользователь найден в бд, логин совпадает с паролем
            $_SESSION['id_user'] = $mysqli->query("SELECT * FROM `fe_users` WHERE  `user_login`='$login' AND `user_password`='$passwd'");
            $_SESSION['user_login'] = $login;
            //~ добавляем/обновляем запись в таблице сессий и ставим куку
            if ($mysqli->query("SELECT * FROM `fe_session` WHERE `id_user`='".$_SESSION['id_user']."'") == 1){
                //~ запись уже есть - обновляем
                $r_code = generateCode(15);
                $mysqli->query("UPDATE `fe_session` SET `code_sess`='".$r_code."', `user_agent_sess`='".$_SERVER['HTTP_USER_AGENT']."' WHERE `id_user`='".$_SESSION['id_user']."'");
            } else {
                //~ записи нет - добавляем
                $mysqli->query("INSERT INTO `fe_session` (`id_user`, `code_sess`, `user_agent_sess`) VALUES ('".$_SESSION['id_user']."', '".$r_code."', '".$_SERVER['HTTP_USER_AGENT']."')");
            }
            //~ ставим куки на 2 недели
            setcookie("id_user", $_SESSION['id_user'], time()+3600*24*14);
            setcookie("code_user", $r_code, time()+3600*24*14);
            return true;
        } else {
            //~ пользователь не найден в бд, или пароль не соответствует введенному
            if ($mysqli->query("SELECT * FROM  `fe_users` WHERE  `user_login`='".$login."'")==1) $error .='Ошибка авторизации';
            else $error .='Такой пользователь не существует';
            $_SESSION['error'] = 1;
            return msgbox('Произошли следующие ошибки:', $error);
        }
    }
А вот и та самая 92 строчка:
PHP
1
if ($mysqli->query("SELECT * FROM `fe_session` WHERE `id_user`='".$_SESSION['id_user']."'") == 1){
Может из-за того что вожусь почти 3 часа и из-за того что код приелся я не вижу своих же ошибок, возможно вы увидите их...
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2015, 05:31
Ответы с готовыми решениями:

Warning: mysqli::mysqli() [mysqli.mysqli]: php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен
Денвер запущен, локалхост доступен, через cmd логинюсь в mysql.exe успешно. Вот что выводится на...

Не срабатывает авторизация. PHP + Mysqli
Сразу оговорюсь, я новичок в этой кухне, так прошу особо тапками не бросаться. Ткнуть мордой в...

Сессии и авторизация
Вот обработчик входа: <? require_once '../config.php'; session_start(); $passw = $_POST;...

Авторизация и сессии)
Ребят, как мне править этот файл так, чтобы при успешной авторизацииуу меня скрывалась форма входа...

6
99 / 46 / 18
Регистрация: 09.08.2015
Сообщений: 367
18.11.2015, 06:49 2
Цитата Сообщение от smile7k Посмотреть сообщение
$_SESSION['id_user'] = $mysqli->query("SELECT * FROM `fe_users` WHERE *`user_login`='$login' AND `user_password`='$passwd'");
PHP
1
2
$_SESSION['id_user'] = $_SESSION['id_user']->fetch_array();
$_SESSION['id_user'] = $_SESSION['id_user'][0];
Добавлено через 3 минуты
и кстати, select * лучше не писать. Во первых передаются лишние данные, во вторых глядя на код не ясно что вообще там передается.
1
3 / 3 / 2
Регистрация: 28.03.2015
Сообщений: 61
18.11.2015, 08:35  [ТС] 3
AncientPenguin, Значит с помощью вашего сообщения на корню изменил авторизацию, теперь она выглядит так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    # Авторизация пользователя
    function authUser($login, $passwd) {
        // Проверка входных данных
        if (checkUser($login, $passwd)=='good') {
            $mysqli = connectDB();
            // Присваивание значения 
            $id = $mysqli->query("SELECT `user_id` FROM `fe_users` WHERE  `user_login`='$login'");
            $sess_id = $id->fetch_array();
            $_SESSION['id_user'] = $sess_id['user_id'];
            $_SESSION['user_login'] = $login;
            $r_code = generateCode(15);
            // Запись или обновление сессии в бд
            if ($mysqli->query("SELECT * FROM `fe_session` WHERE `id_user`='".$_SESSION['id_user']."'") == 1) {
                $mysqli->query("UPDATE `fe_session` SET `code_sess`='".$r_code."', `user_agent_sess`='".$_SERVER['HTTP_USER_AGENT']."' WHERE `id_user`='".$_SESSION['id_user']."'");
            } else {
                $mysqli->query("INSERT INTO `fe_session` (`id_user`, `code_sess`, `user_agent_sess`) VALUES ('".$_SESSION['id_user']."', '".$r_code."', '".$_SERVER['HTTP_USER_AGENT']."')");
            }
            setcookie("id_user", $_SESSION['id_user'], time()+3600*24*14);
            setcookie("code_user", $r_code, time()+3600*24*14);
            closeDB($mysqli);
            return true;
        } 
        else return false;
    }
И собственно есть проблема:

Обновление записи работает, но не работает добавление записи если изменить код:
PHP
1
if ($mysqli->query("SELECT * FROM `fe_session` WHERE `id_user`='".$_SESSION['id_user']."'") == 1) {
Работает добавление записи, но нет обновления если поставить:
PHP
1
if (mysqli_fetch_assoc($mysqli->query("SELECT * FROM `fe_session` WHERE `id_user`='".$_SESSION['id_user']."'")) == 1) {
Проблема заключается только в том, что не добавляются новые сессии в бд, либо добавляются, но не обновляются...
0
99 / 46 / 18
Регистрация: 09.08.2015
Сообщений: 367
18.11.2015, 09:05 4
Цитата Сообщение от smile7k Посмотреть сообщение
if ($mysqli->query("SELECT * FROM `fe_session` WHERE `id_user`='".$_SESSION['id_user']."'") == 1)
Можно словами что там за условие? Просто там глупость, объект == 1.
0
3 / 3 / 2
Регистрация: 28.03.2015
Сообщений: 61
18.11.2015, 09:08  [ТС] 5
AncientPenguin,

Условие такое:
Если есть запись о сессии в базе данных, то обновить эту запись, если её нет, то создать.
Следовательно выбирается она по id

Добавлено через 1 минуту
Первоначально на mysql, а не в mysqli использовался mysql_num_rows для этого условия, сюда же он не подходит..
0
99 / 46 / 18
Регистрация: 09.08.2015
Сообщений: 367
18.11.2015, 09:09 6
Лучший ответ Сообщение было отмечено smile7k как решение

Решение

Цитата Сообщение от smile7k Посмотреть сообщение
Если есть запись о сессии в базе данных, то обновить эту запись, если её нет, то создать.
PHP
1
2
$result = $mysqli->query("SELECT * FROM `fe_session` WHERE `id_user`='".$_SESSION['id_user']."'")
if ($result->num_rows == 1) //...
1
3 / 3 / 2
Регистрация: 28.03.2015
Сообщений: 61
18.11.2015, 09:13  [ТС] 7
AncientPenguin, жи есть магия....
Ладно походу хватит на сегодня, если в элементарном запутался...
И спасибо мил человек
0
18.11.2015, 09:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2015, 09:13
Помогаю со студенческими работами здесь

Авторизация через сессии
Ребята, помогите! Проблема в следующем: Хочу сделать авторизацию на странице, при входе под...

Простая авторизация и сессии
Имеется форма, которая выглядит следующим образом: <form action="index.php" method="post">...

Авторизация и сессии c register_globals = off
Доброго времени суток. Довольно давно не общался с php, как оказалось теперь по умолчанию...

Сессии и авторизация на сайте
Доброго времени суток Сделал недавно регистрацию и авторизацию на сайте с помощью сессий. И теперь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru