2017-01-30 2 views
2

Ich habe ein Problem mit der Steam-Authentifizierung für das Web. Wie Sie wissen, stellt Steam ein Skript zur Verfügung, mit dem sich Personen auf Ihrer Site über die Steam-Datenbank verbinden können. Mein Problem ist, dass mein Code nur die Steam ID in die Datenbank einfügt und nicht den Namen & avatar. Mein Code:MySQL Skript ruft Steam ID und nichts anderes

if (isset($_GET['login'])){ 
require 'db.php'; 
require 'openid.php'; 
require 'userInfo.php'; 
try { 
    require 'SteamConfig.php'; 

    $openid = new LightOpenID($steamauth['domainname']); 

    if(!$openid->mode) { 
     $openid->identity = 'http://steamcommunity.com/openid'; 
     header('Location: ' . $openid->authUrl()); 
    } elseif ($openid->mode == 'cancel') { 
     echo 'User has canceled authentication!'; 
    } 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]; 

       $sql_fetch_id = "SELECT * FROM member WHERE steamid = '".$_SESSION['steamid']."'"; 
       $query_id = mysqli_query($db, $sql_fetch_id); 

       if (mysqli_num_rows($query_id) == 0) { 
        $sql_steam = "INSERT INTO member (name, steamid, avatar) VALUES ('".$_SESSION['personaname']."', '".$_SESSION['steamid']."', '".$_SESSION['avatar']."')"; 
        mysqli_query($db, $sql_steam); 
       } 

      if (!headers_sent()) { 
       header('Location: '.$steamauth['loginpage']); 
       exit; 
      } else { 
       ?> 
       <script type="text/javascript"> 
        window.location.href="<?=$steamauth['loginpage']?>"; 
       </script> 
       <noscript> 
        <meta http- equiv="refresh" content="0;url=<?=$steamauth['loginpage']?>" /> 
       </noscript> 
       <?php 
       exit; 
      } 

      } else { 
      echo "User is not logged in.\n"; 
     } 
    } 
} catch(ErrorException $e) { 
    echo $e->getMessage(); 
} 
} 

Screenshot screenshot

+0

Everthing vor '$ _SESSION [ 'SteamID'] = $ matches [1];' würde helfen, Ihnen zu helfen. Sie zeigen keinen relevanten Code an. SQL ist OK. Aber sind die _SESSION-Daten immer korrekt? Haben Sie das SQL vor dem Abfragen ausgepackt, um zu sehen, wie es aussieht? – JustOnUnderMillions

+0

Tun Sie eine 'var_dump ($ _ SESSION)' und prüfen Sie, ob es enthält, was Sie denken, dass es tut. –

+0

Code aktualisiert! Jetzt können Sie die 60% des Codes sehen – Kevin1003

Antwort

0

am Ausgang des var_dump($_SESSION) Suche (die in der Frage sein sollte) scheint es, als ob Sie tatsächlich nicht die Schlüssel der Sitzung richtig referenzieren.

Mit dieser Codezeile:

$sql_steam = "INSERT INTO member (name, steamid, avatar) VALUES ('".$_SESSION['personaname']."', '".$_SESSION['steamid']."', '".$_SESSION['avatar']."')"; 

Du Referenzierung $_SESSION['personaname'] wird jedoch nur ['steam_personaname'] in der Sitzung zur Verfügung gestellt. Sie verweisen also auf etwas, das nicht da ist.

So sollten Sie verwenden:

$sql_steam = "INSERT INTO member (name, steamid, avatar) VALUES ('".$_SESSION['steam_personaname']."', '".$_SESSION['steamid']."', '".$_SESSION['steam_avatarfull']."')"; 
+0

das Problem bleibt – Kevin1003

+0

Mit der var_dump, die Sie erstellt haben, ist das die tatsächlichen Daten, mit denen Sie arbeiten? Weil die Daten für 'steam_personaname' in Ihrem Beispiel NULL sind. – mickburkejnr

+0

und wenn ich die Seite aktualisieren, von Null wird es auf den richtigen Wert aktualisieren .. Wenn Sie sehen können, ist Steamid nicht Null ohne Seitenaktualisierung – Kevin1003

Verwandte Themen