2014-02-04 4 views
0

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

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()."')"); 
    } 
} 

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

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

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

+0

Если определить Steamid как уникальный в таблице MySQL вы могли бы избежать, если-заявление в конце alltogether и просто использовать INSERT ... ON DUPLICATE KEY UPDATE. См. [Раздел 13.2.5.3. Справочного руководства по MySQL] (http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html) – sigy

+0

Спасибо .. Это действительно помогло мне! –

ответ

0

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

// 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()."'"); 
+0

Если это решило вашу проблему, тогда вы должны отметить свой собственный пост в качестве ответа. – sigy

+0

«Вы можете принять свой собственный ответ за 2 дня» –

0

Одна из проблем вы проверяете if(!empty($map) && !empty($communityid)) внутри, что у вас есть 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"; 
+0

Я изменил if (! Empty ($ map) &&! Empty ($ communityid)) {to if (! Empty ($ communityid)) {и left if (empty ($ map)) {$ map = "undefined"; } в скрипте .. спасибо :) –

Смежные вопросы