GreyPanel или любители старья

Сообщения
934
Реакции
186
Помог
4 раз(а)
Всех приветствую.
Решил покопаться в старом GreyPanel (Я знаю, что панель мертвая не надо об этом говорить :derisive: ) и попробовать переделать под PHP 7.
Но возникла проблема

PHP:
    public function autch() {
        if( isset( $_SESSION['id'] ) )
            return ADDRESS;
        
        
        $registerPost = isset( $_POST['register'] ) ? $_POST['register'] : 'q';
        $r = ADDRESS.mb_substr( $registerPost, 1);
        $auth_name = $_POST['auth_name'];
        //$auth_password = md5( $_POST['auth_password'] );
        $auth_password = $_POST['auth_password'];
        
        if( filter_var( $auth_name, FILTER_VALIDATE_EMAIL ) ){
            $where = [
                'email' => $auth_name,
                'password' => $auth_password,
            ];
        } else {
            $where = [
                'username' => $auth_name,
                'password' => $auth_password,
            ];
        }
        
        $check = $this->sql->select(
            'users',
            [ 'id', 'username', 'email' ],
            $where
        );
        
        if( !is_array( $check ) ) {
            $_SESSION['err_msg'] = 'Не верный логин или пароль.. попробуйте еще';
            return $r.'register';
        }
        $userid = md5( $check[0]['username'].':'.$check[0]['email'].':'.time() );
        $this->sql->update(
            'users',
            [ 'userid' => $userid ],
            [ 'id' => $check[0]['id'] ]
        );
        $_SESSION['id'] = $check[0]['id'];
        SetCookie( 'userid',  $userid, time() + 2592000, '/', null, null, true);
        return $r;
    }
Имеется код авторизации, т.к человек прошел авторизацию, в бд приходит userid (md5 запись), но просмотрев сессию куда записывается и запись в бд, ничего нет.
А если быть точнее, после авторизации происходит запись в userid таблицы users для сохранения сессии дальнейшей работы человека на сайте.
Но т.к нет userid - нет сессии - человек не авторизован на сайте.
Куда копать? смущает запись $check[0]['id'] ведь подобное работает на PHP 5.6
 
Сообщения
934
Реакции
186
Помог
4 раз(а)
в var_dump показывает пустоту

Код:
$check = $this->sql->select(
    'users',
    [ 'id', 'username', 'email' ],
    $where
);
 

RockTheStreet

Саппорт года
Сообщения
1,743
Реакции
346
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Логи что говорят? Дебажил как-нибудь?
 
Сообщения
934
Реакции
186
Помог
4 раз(а)
RockTheStreet,
Код:
Notice: Undefined offset: 0 in C:\OpenServer\domains\local.local\lib\manage_class.php on line 1826

Notice: Trying to access array offset on value of type null in C:\OpenServer\domains\local.local\lib\manage_class.php on line 1826

Notice: Undefined offset: 0 in C:\OpenServer\domains\local.local\lib\manage_class.php on line 1826

Notice: Trying to access array offset on value of type null in C:\OpenServer\domains\local.local\lib\manage_class.php on line 1826

Notice: Undefined offset: 0 in C:\OpenServer\domains\local.local\lib\manage_class.php on line 1830

Notice: Trying to access array offset on value of type null in C:\OpenServer\domains\local.local\lib\manage_class.php on line 1830
array(0) { }
Notice: Undefined offset: 0 in C:\OpenServer\domains\local.local\lib\manage_class.php on line 1833

Notice: Trying to access array offset on value of type null in C:\OpenServer\domains\local.local\lib\manage_class.php on line 1833
С функции авторизации
 

RockTheStreet

Саппорт года
Сообщения
1,743
Реакции
346
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Вот теперь сиди и выясняй в чём проблема. Ты ведь в теме приложил не целый файл, а лишь огрызок.
 
Сообщения
934
Реакции
186
Помог
4 раз(а)
RockTheStreet, Огрызок взять из-за того, что на данный момент на этом участке кода проблема
21 Ноя 2022
RockTheStreet, Остальной код в файле аналогичный
 

RockTheStreet

Саппорт года
Сообщения
1,743
Реакции
346
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
BiZaJe, Как по логу ориентироваться, методом научного тыка? В логе приведены номера строк, туда и нужно смотреть. А из-за того что прикреплён огрызок, смотреть можешь только ты.
 
Сообщения
934
Реакции
186
Помог
4 раз(а)
RockTheStreet, Это и есть те строки которые указаны в логах :good2:
 

RockTheStreet

Саппорт года
Сообщения
1,743
Реакции
346
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
BiZaJe, Лог указывает на 3 проблемные строки. Ты прислал 43.
21 Ноя 2022
Мы спорить можем вечно. Но проблема твоя не решиться мистическим образом.
 
Сообщения
934
Реакции
186
Помог
4 раз(а)
RockTheStreet, Я прислал общую картинку функции
Проблема появляется отсюда

PHP:
$check = $this->sql->select(
    'users',
    [ 'id', 'username', 'email' ],
    $where
);
в $check ничего не записывается, проверял через var_dump
следовательно $userid = md5( $check[0]['username'].':'.$check[0]['email'].':'.time() ); здесь появляется ошибка
Как отследить вызов метода?
 
Сообщения
934
Реакции
186
Помог
4 раз(а)
RockTheStreet, Вывел запрос к БД, показало, что в SELECT передавались пустые кавычки всегда, не знаю как это работало на 5.6, но в 7 было пусто.
Переделал запрос все заработало
Переделал аргументы функции select, раньше первые 3 аргумента имели пустую строку
PHP:
    public function select ( $table_name, $fields, $where, $order = "", $up = true, $limit = "", $debug = false ) {
        if( $fields != "*" ) {
            for ($i = 0; $i < count($fields); $i++) {
                if((strpos($fields[$i], "(") === false) && ($fields[$i] != "*")) $fields[$i] = "`".$fields[$i]."`";
            }
            $fields = implode(",", $fields);
        }
        $table_name = $this->prefix.$table_name;
        if( is_array( $order ) ) {
            $order = $order[0];
        }
        else if( !$order ) {
            $order = "ORDER BY `id`";
        }
        else {
            if( $order != "RAND()" ) {
                $order = "ORDER BY $order";
                if ( !$up ) {
                    $order .= " DESC";
                }
            }
            else $order = "ORDER BY $order";
        }
        if ($limit) {
            $limit = "LIMIT $limit";
        }
        
        if ( is_array( $where ) ){
            $where = $this->andwhere( $where );
            $query = "SELECT $fields FROM $table_name WHERE $where $order $limit";
        }   
        else {
            $where = ( $where != "" ) ? 'WHERE '.$where : "";
            $query = "SELECT $fields FROM $table_name $where $order $limit";
        }
        if( $debug ) die( $query );
        $result_set = $this->query($query);
        if ( !$result_set )
            return false;
        $i = 0;
        $data = array();
        while ($row = $result_set->fetch_assoc()) {
            $data[$i] = $row;
            $i++;
        }
        $result_set->close();
        $data = is_array( $data ) ? $data : false;
        return $data;
    }
Раньше проверка на неправильность была через is_array, в 7 не работает такая проверка по массиву, сделал сверку данных с select и входных данных с формы
PHP:
        $check = $this->sql->select('users', [ 'id', 'username', 'password', 'email' ], $where);
        
        if( !is_array( $check ) || $check[0]['username'] != $auth_name || $check[0]['password'] != $auth_password) {
            $_SESSION['err_msg'] = 'Не верный логин или пароль.. попробуйте еще';
            return $r.'register';
        }
Аналогично условие на проверка логина и почты в бд
PHP:
        if($getUser) {
            $_SESSION['err_msg'] = 'Данный ник уже зарегистрирован';
            unset( $_SESSION['username'] );
            return $r;  


        if($getMail) {
            $_SESSION['err_msg'] = 'Данная почта уже занята';
            unset( $_SESSION['email'] );
            return $r;          
        }
}
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу