2016-04-30 315 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

相关问题