Запись данных из Steam в БД(Авторизация OpenID)

280
28 августа 2017, 08:57

Здравствуйте! Подскажите пожалуйста?! Как записать данные с проверкой в бд(mysql) "test", в таблицу "users", В файле config.php хранятся данные подключения к бд. В данный момент происходит обычный редирект на главную, без записи данных в бд.

     <?php
if(!isset($Functions)){
    die("Error! 404");
}
include $_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);
                $_SESSION['steamid'] = $matches[1]; 
                $_SESSION['auth'] = true; 
                $_SESSION['lang'] = 'ru';
                $json_object = file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=".$Functions->config['steamapi']."&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];
                    $_SESSION['name'] = $player->personaname;
                    $_SESSION['steamid'] = $player->steamid;
                    $_SESSION['avatarfull'] = $player->avatarfull;
                    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("steam_fail"));
                    }
                }
            }else{
                $Functions->redirect();
            }
        }
    }catch(ErrorException $e){
        echo $e->getMessage();
    }
}
?>
Answer 1

Не знаю какие поля в таблице users, но идея такая

// берем из connect.php данные для подключения
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// делаем подготовленный запрос
$stmt = $dbh->prepare("INSERT INTO users (steamid, personaname, profileurl, personastate, avatarfull) VALUES (:steamid, :personaname, :profileurl, :personastate, :avatarfull)");
// связываем параметры с переменными
$stmt->bindParam(':steamid', $steamid);
$stmt->bindParam(':personaname', $personaname);
$stmt->bindParam(':profileurl', $profileurl);
$stmt->bindParam(':personastate', $personastate);
$stmt->bindParam(':avatarfull', $avatarfull);
foreach ($json_decoded->response->players as $player)
{
/*
    echo "
    <br/>Player ID: $player->steamid
    <br/>Player Name: $player->personaname
    <br/>Profile URL: $player->profileurl
    <br/>Status: $player->personastate
    <br/>LargeAvatar: <img src='$player->avatarfull'/> 
    ";
*/
     // заполняем переменные значением
     $steamid = $player->steamid;
     $personaname = $player->personaname;
     $profileurl = $player->profileurl;
     $personastate= $player->personastate;
     $avatarfull= $player->avatarfull;
     // запускаем запрос
     $stmt->execute();
}

В общем, это все уровень мануала по PDO PHP - смотри там соединение с БД и подготовленные запросы.

READ ALSO
Рекурсия в php. Как работает?

Рекурсия в php. Как работает?

Посоветуйте хорошую статью про рекурсия в phpИзучал ее в js, но в виду ненадобности как-то забыл про это, да и отличия я думаю какие-то есть

224
Борьба с addAttachment в PHPMail

Борьба с addAttachment в PHPMail

Здравия всем, уважаемые программистыВ модуле joomla 3 пытаюсь добавить в форму обратной связи поле с добавлением файла

216
Перевод русских букв на латиницу PHP

Перевод русских букв на латиницу PHP

Есть ли такая функция или способ в PHP чтобы перевести русские буквы на английские?

351
AJAX форма не работает

AJAX форма не работает

На помощь! Убил 8 часов, результата - 0Есть код:

223