Вставка или обновление MySQLi

Я кодирую пользовательский экран загрузки для своего Half-Life Gameserver. Я хочу отобразить последний визит, карту и имя Steam. Все работает очень хорошо, но мой последний визит в Insert не работает. Он работал раньше, и я даже ничего не изменил.

include('mysql.php');

$map = $_GET['map'];
$communityid = $_GET['steamid'];
$apikey = "***SECRETAPIKEY***";

if(!empty($map) && !empty($communityid)) {

 if(empty($map)) { $map = "undefined"; }

 $authserver = bcsub( $communityid, '76561197960265728' ) & 1;
 $authid = ( bcsub( $communityid, '76561197960265728' ) - $authserver ) / 2;

 $steamid = "STEAM_0:$authserver:$authid";

 // Load Player data
 $xml = simplexml_load_file('http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key='.$apikey.'&steamids='.$communityid.'&format=xml');
 $name = $xml->players->player->personaname;
 $avatar = $xml->players->player->avatarfull;

 // Fetch Last online from User
 $lastonline_get = mysqli_query($db, "SELECT * FROM lastonline WHERE steamid = '".$steamid."'");
 while($row = mysqli_fetch_object($lastonline_get))
 {
 $user_lastonline = $row->lastonline;
 }

 // Count from last connect
 function diff_time($differenz)
 {
 $differenz = time() - $differenz;
 $tag = floor($differenz / (3600*24)); 
 $std = floor($differenz / 3600 % 24); 
 $min = floor($differenz / 60 % 60); 
 $sek = floor($differenz % 60); 

 return array("sek"=>$sek,"min"=>$min,"std"=>$std,"tag"=>$tag,"woche"=>$woche); 
 }

 $difftime_lastonline = diff_time($user_lastonline);

 if($difftime_lastonline['tag']!=0) { $user_whenlastonline = $difftime_lastonline['tag']." Tage ".$difftime_lastonline['std']." Stunden und ".$difftime_lastonline['min']." Minuten "; }
 elseif($difftime_lastonline['std']!=0) { $user_whenlastonline = $difftime_lastonline['std']." Stunden und ".$difftime_lastonline['min']." Minuten "; }
 else { $user_whenlastonline = $difftime_lastonline['min']." Minuten "; }

 // Last online Updaten

 if(mysqli_query($db, "SELECT * FROM lastonline WHERE steamid = '".$steamid."'")) {
 $lastonline_updaten = mysqli_query($db, "UPDATE lastonline Set lastonline = '".time()."' WHERE steamid = '".$steamid."'");
 } else {
 $lastonline_eintragen = mysqli_query($db, "INSERT INTO lastonline (steamid, lastonline) VALUES ('".$steamid."', '".time()."')");
 }
}

Как вы можете видеть, я пытаюсь проверить, есть ли уже существующая запись базы данных для steamid. Если это не так, он должен создать один. Если это так, он должен обновить существующий.

Но когда я запускаю код, он ничего не вставляет. (Я проверил URL и т.д.)

Почему вы используете GET? Эти переменные (Map & SteamID64Bit) работают только в URL.

2 ответа

Благодаря сиги, я получил его сейчас. Вместо

// Last online Updaten

if(mysqli_query($db, "SELECT * FROM lastonline WHERE steamid = '".$steamid."'")) {
 $lastonline_updaten = mysqli_query($db, "UPDATE lastonline Set lastonline = '".time()."' WHERE steamid = '".$steamid."'");
} else {
 $lastonline_eintragen = mysqli_query($db, "INSERT INTO lastonline (steamid, lastonline) VALUES ('".$steamid."', '".time()."')");
}

Я изменил поле "steamid" на UNIQUE в phpmyadmin и изменил этот раздел на

// Last online Updaten
 $lastonline_eintragen = mysqli_query($db, "INSERT INTO lastonline (steamid, lastonline) VALUES ('".$steamid."', '".time()."') ON DUPLICATE KEY UPDATE lastonline='".time()."'");


Одна из проблем заключается в том, что вы проверяете, есть if(!empty($map) && !empty($communityid)) внутри, if(empty($map) вас есть if(empty($map). Если $ map пуст или не пуст, второй оператор if никогда не будет выполняться Это будет работать,

$communityid = $_GET['steamid'];
$apikey = "***SECRETAPIKEY***";

if(empty($_GET['map']))
{ 

 $map = 'undefined map'

}
else if (!empty($_GET['map']) && !empty($communityid)
{

 $map = $_GET['map'];

 $authserver = bcsub( $communityid, '76561197960265728' ) & 1;
 $authid = ( bcsub( $communityid, '76561197960265728' ) - $authserver ) / 2;

 $steamid = "STEAM_0:$authserver:$authid";

licensed under cc by-sa 3.0 with attribution.