@Mazafacer

Почему не работает запись в базу данных?

Столкнулся с такой проблемой, не происходит запись в базу данных при авторизации.
При попытке авторизации через стим всё проходит успешно и перенаправляет на страницу что указана в случае успешной авторизации, но записей в базе данных о пользователе нет.

Всё делаю на локальном хосте укажите на ошибку найти что я делаю не так?

steam.php

<?php
if(!isset($Functions)){
    die("Error! 404");
}

require $_SERVER['DOCUMENT_ROOT'].'/engine/openid.php';

if($Functions->isLogged()){
    if(isset($_GET['logout'])){
        session_destroy();
    }
    $Functions->redirect();
}else{
    try{
        $openid = new LightOpenID('http://'.$Functions->config['site_name']);
        if(!$openid->mode) {
            if(isset($_GET['login'])){
                $openid->identity = 'http://steamcommunity.com/openid';
                $Functions->redirect($openid->authUrl());
            }else{
                $Functions->redirect();
            }
        }elseif($openid->mode == 'cancel'){
            $Functions->redirect();
        }else{
            if($openid->validate()) {
                $id = $openid->identity;
                $ptn = "/^http:\/\/steamcommunity\.com\/openid\/id\/(7[0-9]{15,25}+)$/";
                preg_match($ptn, $id, $matches);
                $json_object = file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=A448D5BD47BF529C9EEC5EA922431CFE&steamids=".$matches[1]);
				
				if($json_object == false){
					die($Functions->getIndex("steam_fail"));
				}else{
					$json_decoded = json_decode($json_object);
					$player = $json_decoded->response->players[0];
					if(!empty($player)){
						$getPlayer = $Functions->db->query("SELECT * FROM `users` WHERE steamid = '".$player->steamid."'");
						if($getPlayer->num_rows == 0){
							$Functions->db->query("INSERT INTO `users`(`steamid`, `name`, `avatar`, `money`, `created`, `status`) VALUES ('".$player->steamid."', '".$player->personaname."', '".$player->avatarfull."', '0', '".time()."', '1')");
						}else{
                            $Functions->db->query("UPDATE `users` SET name = '".$Functions->getString($player->personaname)."', avatar = '".$player->avatarfull."' WHERE steamid = '".$player->steamid."'");
							$_SESSION['name'] = $player->personaname;
							$_SESSION['steamid'] = $player->steamid;
							$_SESSION['avatarfull'] = $player->avatarfull;
						}
						$Functions->redirect();
					}else{
						die($Functions->getIndex("top"));
					}
				}
            }else{
                $Functions->redirect();
            }
        }
    }catch(ErrorException $e){
        echo $e->getMessage();
    }
}

?>
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 2
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
В целом, я считаю что основная причина здесь - это отборный говнокод в переменной $Functions. Я прямо на 100% уверен что каждую строчку оттуда можно помещать в палату мер и весов с пометками "вредные советы" и "дети, никогда так не делайте, за это вам нехороший дядя сделает а-та-та!" Уже за одно только наличие функций redirect() и getString() в одном классе надо автора возить лицом по клавиатуре, желательно механической.

Но если говорить о записи в БД, то причин может быть две.
1. Код вставки вообще не вызывается. Например, $Functions->redirect(); вызывается в случае, если $openid->validate() возвращает false. Хотя понять это можно, только скопировав это адово форматирование в нормальный редактор.
2. Если при выполнении запроса произошла ошибка. Чтобы видеть ошибки mysqli в устаревших версиях РНР, надо добавлять при коннекте строчку
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

и, чтобы два раза не вставать, заодно убрать бессмысленный говнокод try{ }catch(ErrorException $e){ echo $e->getMessage(); }

Ах да, еще третий вариант. Запись о таком пользователе уже есть, и следуя логике кода, в этом случае в БД ничего и не должно добавляться
Ответ написан
@Mazafacer Автор вопроса
Дело в том что записей в таблице ведь и нет, она пустая, у нас получается что после авторизации перенаправляет на страницу top
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы