2016-04-30 297 views
-1

Hy,如何將json數據從網址發送到數據庫並進行更新

我只是無法弄清楚如何讓這個工作。

如何將home> name,home>分數發送到數據庫(相同),並將狀態,輪次和日期時間發送到數據庫。 但是,如果json url的更改比更新數據庫更新,並且如果有新的匹配,則插入它。

這一切都需要自動完成。

[ 
    { 
    "url":"http://www.gosugamers.net/counterstrike/tournaments/10423-starladder-cis-minor-championship-cologne-2016/2865-playoffs/10426-playoffs/matches/113497-worst-players-vs-team-empire", 
    "home":{ 
    "name":"Worst Players", 
    "url":"/counterstrike/teams/15191-worst-players", 
    "country":"Russian Federation", 
    "rank":57, 
    "score":1 
    }, 
    "away":{ 
    "name":"Team Empire.", 
    "url":"/counterstrike/teams/14464-team-empire", 
    "country":"Russian Federation", 
    "rank":40, 
    "score":2 
    }, 
    "status":"Complete", 
    "type":"counterstrike", 
    "rounds":"Best of 3", 
    "valueBet":true, 
    "datetime":1462024800 
    }, 
    { 
    "url":"http://www.gosugamers.net/counterstrike/tournaments/10296-esports-championship-series-season-1/2810-online-phase/10298-north-american-league/matches/111367-team-liquid-cs-vs-counter-logic-gaming-cs", 
    "home":{ 
    "name":"Team Liquid.CS", 
    "url":"/counterstrike/teams/10561-team-liquid-cs", 
    "country":"United States", 
    "rank":10 
    }, 
    "away":{ 
    "name":"Counter Logic Gaming.CS", 
    "url":"/counterstrike/teams/10569-counter-logic-gaming-cs", 
    "country":"United States", 
    "rank":39 
    }, 
    "status":"Upcoming", 
    "type":"counterstrike", 
    "rounds":"Best of 3", 
    "valueBet":true, 
    "datetime":1462068000 
    } 
] 

我已經試過這個代碼

<?php 

include("../../check.php"); 

$urljson = "http://localhost:5000/matches"; 
$json = file_get_contents($urljson); 
$data = json_decode($json, TRUE); 
$home = $data[0]['home']; 
$away = $data[0]['away']; 
$status = $data[0]['status']; 
$type = $data[0]['rounds']; 
$timestamp = $data[0]['datetime']; 


foreach($data as $array) { 
    echo $home['name']; 
    echo '<br>'; 
    echo $home['score']; 
echo '<br>'; 
echo $away['name']; 
echo '<br>'; 
echo $away['score']; 
echo '<br>'; 
echo $status; 
echo '<br>'; 
echo $type; 
echo '<br>'; 
echo $timestamp; 
echo '<br>'; 
echo '<br>'; 
} 


?> 

但這是網頁給我(它顯示了同樣的結果多發次)

ANOX

注意:未定義索引:第18行C:\ xampp \ htdocs \ main \ dashboard \ backend \ info.php中的得分

最差玩家

說明:未定義指數:得分在C:\ XAMPP \ htdocs中\上線22

待辦

最佳的3

主\儀表板\後端\ info.php的1462100400

我希望有人可以幫助我,因爲我被卡住了4天。

+0

我測試過的代碼您提供和它工作正常,我(雖然你的循環不會因爲工作:使用它與

if (isset($array['score'])) { // use it inside if: echo $array['score'] } 

這裏更正後的代碼之前檢查評分這應該)。你確定你得到了你認爲你的JSON嗎? – Chris

+0

好吧,我把它託管在我的電腦上,所以我從完美的鏈接「http:// localhost:5000/matches」得到它,所有的數據也顯示在那裏。 – MaBo

回答

0

因爲您在循環內部使用了錯誤的變量,所以您始終得到相同的數據。使用你的情況$數組變量:

foreach($data as $array) { 
    echo $array['name']; 
    echo '<br>'; 
    echo $array['score']; 
    echo '<br>'; 
    ... etc. 
} 

也許這將是很好的調用變量$行或$匹配,而不是$陣列以提高可讀性。

您會看到「Notice:Undefined ...」,因爲有些JSON節點沒有得分。

<?php 

include("../../check.php"); 

$urljson = "http://localhost:5000/matches"; 
$json = file_get_contents($urljson); 
$data = json_decode($json, TRUE); 

foreach($data as $match) { 
    echo $match['home']['name']; 
    echo '<br>'; 
    if (isset($match['home']['score'])) { 
     echo $match['home']['score']; 
     echo '<br>'; 
    } 
    echo $match['away']['name']; 
    echo '<br>'; 
    if (isset($match['away']['score'])) { 
     echo $match['away']['score']; 
     echo '<br>'; 
    } 
    echo $match['status']; 
    echo '<br>'; 
    echo $match['rounds']; 
    echo '<br>'; 
    echo $match['datetime']; 
    echo '<br>'; 
    echo '<br>'; 
} 

?> 
+0

感謝你,你能幫我一下如何檢測json url中的變化,然後在數據庫中更新它嗎? – MaBo

+0

您需要從數據庫加載數據,然後以某種方式進行比較。首先找到一些唯一的數據識別部分,並使用它來比較數據庫中的數據和json。然後插入,更新或刪除數據庫中的數據。 – TehSphinX

+0

這也取決於使用的數據庫:您可以創建一個唯一的密鑰,並在mysql的情況下使用INSERT ...在DUPLICATE KEY UPDATE語法中。其他數據庫像例如如果密鑰不存在,keyvalue商店就會插入。在這種情況下,只需插入所有數據,如果它已經存在,就會更新它。 – TehSphinX

相關問題