如何使用OpenID for Steam在不同的数据库上打印用户的字段?

时间:2015-03-08 05:25:32

标签: php mysql openid steam

好的,我有以下PHP代码:

<php>
$servername = "host";
$username = "username";
$password = "password";
$dbname = "db";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT steamid, bananas FROM es_player";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "PLAYER'S STEAM ID: " . $row["steamid"]. " - PLAYER'S BANANAS: " 
.$row["bananas"]. " <br>";
}
} else {
echo "0 results";
}
$conn->close();
?>

它只是从我的数据库中提取特定字段。当用户登录时,他们使用OpenID,而不是通过我控制下的实际数据库。通过Steam,用户通过OpenID登录其Steam帐户。我可以在登录时用这个来获取用户的SteamID,甚至还有一个变量。我需要在登录时使用此SteamID变量来指定它们在数据库中的哪一行,并且仅打印登录用户的配置文件字段,而不是仅打印数据库中的所有行。这将使用登录用户的SteamID完成,该用户将与我的数据库中的SteamID字段进行比较,以便在您登录时知道您是哪个用户。

我不知道怎么做到这一点,这就是我在这里发帖的原因。我只需要PHP代码,或者写一些帮助。非常感谢!非常感谢所有帮助!

2 个答案:

答案 0 :(得分:0)

您有几个需要更多研究的相关问题。由于我已经投票决定将问题过于宽泛,我将把这个答案标记为社区维基。我真的很想提供帮助,但与此处社区的价值观一致,我鼓励您采取以下几点,并将其作为进一步搜索引擎研究的途径。你的“只需[PHP]代码”的帖子是免费工作请求,我们在这里试图阻止它。

认为我理解这个问题,但我没有Steam API的经验,因此您可能需要阅读他们的文档并调整以下内容。如果您之前没有使用过API或会话,那么在您所在地区雇用自由职业者可能是让您的项目走上正轨的最快捷,最简单的途径。你可能只需要几个小时的时间,所以它不需要昂贵。

  1. 您的OpenID脚本应该向您的应用程序提供您描述的配置文件ID之一。当用户首次在您的站点中创建帐户时,您需要捕获该配置文件ID并将其存储在其他感兴趣的信息中。此时,您应该运行转换例程,以便拥有其他配置文件ID,然后您也可以存储它。
  2. 当用户登录时,您需要创建会话。这通常就像使用session_start()一样简单,然后将用户记录主键保存为变量,因此:

    $_SESSION['user_id'] = $userId;
    

    用户ID将来自您的登录屏幕,您可以在其中获得OpenID回调,以证明当前用户确实拥有他们提供给您的Steam配置文件ID。设置会话意味着用户浏览的任何后续页面都将具有其用户ID,直到他们注销。这意味着您无需在每个页面上执行OpenID调用。

  3. 使用此会话ID,您现在可以获取所需的任一个配置文件ID,因为它们都在您的数据库中。这是一个涉及会话ID的简单SELECT数据库操作,您可以从$_SESSION['user_id]读取。
  4. 以下是OAuth application I wrote中的表格示例(它是开源的,所以如果您愿意,可以将它拉开)。当用户登录时,将创建此记录(如果它不存在)或更新(如果它存在):

    mysql> SELECT * FROM user_auth;
    +----+---------+---------------------------+----------+---------------------+
    | id | user_id | username                  | provider | last_login_at       |
    +----+---------+---------------------------+----------+---------------------+
    |  1 |       1 | https://github.com/halfer | github   | 2015-01-13 18:05:49 |
    +----+---------+---------------------------+----------+---------------------+
    1 row in set (0.00 sec)
    

    username是OpenID标识符,如果您允许用户从多个授权系统中选择(Steam是另一个),provider非常有用,当然last_login_at是自我-explanatory。


    我还在评论中建议您可能必须编写此代码。图书馆的重复使用是一个值得称赞的习惯,但不幸的是,没有一个图书馆可以解决所有可能性 - 有时程序员只需要自己写一些东西。我们经常在Stack Overflow上看到关于[项目X]的“库/教程/循序渐进指南”的请求,如果读者可以说服海报编程不是那样的,那么他们将会传递给有用的教训。

    那么,按顺序尝试以上?如果我误解了结构的一些基本部分,请随时寻求进一步的帮助,但除此之外,请使用我提到的关键字并在搜索引擎中弹出它们。这是学习的唯一方法。祝你好运!

答案 1 :(得分:0)

实际上非常简单。首先,我使用SteamID 64变量$ steamid并通过此转换运行它,这将输出SteamID 32

$id = $steamid;

function parseInt($string) {
    if(preg_match('/(\d+)/', $string, $array)) {
        return $array[1];
    } else {
        return 0;
    }}

$steamY = parseInt($id);
$steamY = $steamY - 76561197960265728;
$steamX = 0;

if ($steamY%2 == 1){
$steamX = 1;
} else {
$steamX = 0;
}

$steamY = (($steamY - $steamX) / 2);

然后完成它,我只是制作了一个变量,将它组合成完整的STEAM_0:000000000组合。

$steamID = "STEAM_0:" . (string)$steamX . ":" . (string)$steamY;

我现在可以在我包含此代码的任何页面上使用$ steamID作为变量。我自己回答了这个问题,如果有其他人像我原来那样遇到麻烦,那么他们的答案就在这里:)