2013-01-02 35 views
0

我有几行,每行都包含一个项目ID。我想要做的是更新每个“placidRate”列,其中包含以下非常大的URL的XML文档中包含的内容。例如,对于typeID 1230,它应该在我的db中找到1230的速率,并将其与$type->sell->min的速率相匹配。这是最终的目标。现在我所要做的就是回复旧码率(db)和新码率(xml)。通过XML循环,只能看到在我的mysql数据库中的特定ID

while($row = mysql_fetch_assoc($result)){ 
    $oldTypeID = $row['typeID']; 

    $urlPlacid = 'http://api.eve-central.com/api/marketstat?typeid=1230&typeid=17470&typeid=17471&typeid=1228&typeid=17463&typeid=17464&typeid=1224&typeid=17459&typeid=18&typeid=17455&typeid=17456&typeid=1227&typeid=17867&typeid=17868&typeid=20&typeid=17452&typeid=17453&typeid=1226&typeid=17448&typeid=17449&typeid=1231&typeid=17444&typeid=17445&typeid=21&typeid=17440&typeid=17441&typeid=1229&typeid=17865&typeid=17866&typeid=1232&typeid=17436&typeid=17437&typeid=19&typeid=17466&typeid=17467&typeid=1225&typeid=17432&typeid=17433&typeid=1223&typeid=17428&typeid=17429&typeid=22&typeid=17425&typeid=17426&typeid=11396&typeid=17869&typeid=17870&typeid=34&typeid=35&typeid=36&typeid=37&typeid=38&typeid=40&typeid=39&typeid=11399&regionlimit=10000048'; 
    $xmlPlacid = simplexml_load_file($urlPlacid); 
    foreach($xmlPlacid->marketstat->type as $type){ 
     $newRate = $type->sell->min; 
     if($type[id] = $oldTypeID){ 
       echo "old placid rate: ".$row['placidRate']." || new placid rate: ".$newRate; 
     } 
    else{} 

这段代码的问题是,它返回

老波澜不惊率:14.5 ||新的平静率:12.00盎司平静率:14.5 ||新平静率:25.00盎司普莱西德价格:14.5 ||新的平静率:17.00盎司平静率:14.5 ||新的平静率:25.21盎司普莱西德率:14.5 ||新的平静率:22.01盎司波西里克率:14.5 ||新的平静率:30.00盎司平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新的平静率:55.00盎司平静率:14.5 ||新的平静率:80.00盎司平静率:14.5 ||新的平静率:85.00盎司平静率:14.5 ||新的平静率:94.00盎司波西里克率:14.5 ||新的平静率:90.00盎司平静率:14.5 ||新的平静率:120.00盎司普莱西德率:14.5 ||新平静率:0.00oz平静率:14.5 ||新的平静率:290.00盎司普莱西德价格:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新的平静率:1087.06盎司波西里克率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新平静率:0.00oz平静率:14.5 ||新的平静率:40000平静率:14.5 ||新的平静率:10.00盎司平静率:14.5 ||新的平静率:40.00盎司波西里克率:14.5 ||新的平静率:143.00盎司波西里克率:14.5 ||新的平静率:819.00盎司普莱希德率:14.5 ||新的平静率:2599.00盎司普莱西德价格:14.5 ||新的平静率:770.00盎司波西里克率:14.5 ||新波澜不惊率:0.00

而且我不完全知道为什么...

更近一步更新SQL表。编辑再次

$market = new eveCentral(); 
while($row = mysql_fetch_assoc($result2)){ 
    $oldTypeID = $row['typeID']; 
    $oldRate = $row['placidRate']; 
    $newPlacidRate = $market->placidMin($oldTypeID); 
    $newForgeRate = $market->forgeMin($oldTypeID); 
    $newUniverseRate = $market->universeMin($oldTypeID); 

    $updateQuery = "UPDATE itemRates SET placidRate = $newPlacidRate, forgeRate = $newForgeRate, universeRate = $newUniverseRate WHERE typeID = $oldTypeID"; 
+0

你的问题是什么? – Gordon

+0

@Gordon编辑为手头的问题 – mhopkins321

回答

1

除了与问题在if比较中的错误运算符(如@GBD所述),这里有几个问题:

  1. 您取出由eve-central.com 的XML为每个数据库结果行。但是XML不会改变。将其移动以上查询数据库while
  2. 正如@Alex所回答的那样,使用xpath来查找包含您要查找的ID的项目。

从上面的看法:

EveCentralMarketstat
$marketstat = new EveCentralMarketstat(); 

while ($row = mysql_fetch_assoc($result)) { 
    $oldTypeID = $row['typeID']; 
    $oldRate = $row['placidRate']; 
    $newRate = $marketstat->getSellMinByType($oldTypeID); 
    if (FALSE !== $newRate) { 
     echo "old placid rate: " . $oldRate . " || new placid rate: " . $newRate; 
    } 
} 

定义:

添加你需要更多的数据访问功能,还构造可以根据哪些信息你改善只需简单介绍一下你可以如何改进。

/** 
* Wrapper Class for Even Central API Market Statistics 
*/ 
class EveCentralMarketstat 
{ 
    /** 
    * @var SimpleXMLElement 
    */ 
    private $xml; 

    public function __construct() { 

     $urlPlacid = 'http://api.eve-central.com/api/marketstat?typeid=1230&typeid=17470&typeid=17471&typeid=1228&typeid=17463&typeid=17464&typeid=1224&typeid=17459&typeid=18&typeid=17455&typeid=17456&typeid=1227&typeid=17867&typeid=17868&typeid=20&typeid=17452&typeid=17453&typeid=1226&typeid=17448&typeid=17449&typeid=1231&typeid=17444&typeid=17445&typeid=21&typeid=17440&typeid=17441&typeid=1229&typeid=17865&typeid=17866&typeid=1232&typeid=17436&typeid=17437&typeid=19&typeid=17466&typeid=17467&typeid=1225&typeid=17432&typeid=17433&typeid=1223&typeid=17428&typeid=17429&typeid=22&typeid=17425&typeid=17426&typeid=11396&typeid=17869&typeid=17870&typeid=34&typeid=35&typeid=36&typeid=37&typeid=38&typeid=40&typeid=39&typeid=11399&regionlimit=10000048'; 
     $this->xml = simplexml_load_file($urlPlacid); 
    } 

    /** 
    * @param $typeID 
    * @return bool|string String value if $typeID is found, FALSE on error 
    */ 
    public function getSellMinByType($typeID) { 

     $result = $this->xml->xpath("/*/marketstat/type[@id = '$typeID']/sell/min"); 
     if (!$result) { 
      return FALSE; 
     } 
     return (string)$result[0]; 
    } 
} 
+0

我喜欢使用函数的想法。现在我有$ urlPlacid的原因是因为我也有$ urlForge和$ urlUniverse。我非常新的PHP,所以请原谅我的无知。我如何将这些其他网址构建到函数中,然后针对每个网址调用它不同的方式? Essentailly,每个typeID由于使用哪个URL而得到三个不同的值 – mhopkins321

+0

那么您可以让该类接受构造函数中的URL作为参数。当你用'new'实例化它时,你会传递它,例如:'$ statsPlacid = new EveCentralMarketstat($ urlPlacid);'或类似的。您也可以传递名称并存储网址,按名称选择。此外,根据您对该请求执行多少操作,您可能希望一次为所有三种类型获取所有ID。 – hakre

+0

我希望它能让你获得一些ISKs。每当我重新激活我的帐户,我会在网上搜索你;) – hakre

1

如果您正在寻找由ID节点只使用XPath
$node = $xmlPlacid->xpath("//*[@id='foo']");

1

你错过了==等于运营商IF

if($type['id'] == $oldTypeID){ 
... 
} 
+0

它总是容易的不是吗?定时器启动后,我会在7分钟内给你支票。谢谢 – mhopkins321