2015-02-11 114 views
0

我使用PHP和外部XML文件来显示一个HTML页面,允许用户更新项目的状态使用各种形式/输入按钮。

目前的格式,你可以看看在一个HTML页面项目的主列表和它们的状态,然后点击一个移动到一个新的HTML页面,让您可以指定项目的状态。因此,我可以点击“窗口小部件X”,然后看到一个新的页面(status.php?ID = X),然后点击标有“准备就绪”的按钮,和PHP将使用$ _GET [“身份证”]找到相关XML节点并用“就绪”替换它的属性。

出于某种原因,我绝对不能让PHP使用从$ _GET数据指定XML节点。这里是当前故障代码:

<?php 
    $idx = $_GET["id"]; /*Get id# from previous page*/ 
    $xml = simplexml_load_file('test.xml'); /*Load external .xml*/ 
    $array = array(100, 200, 300); /*Basic array for comparison*/ 

    print_r($xml); /*Display contents of test.xml*/ 
$xml->item[$idx]->status = 'waiting'; /*change item $idx's status to 'waiting'*/ 
echo '<br/>'; 
print_r($xml); /*Display changed xml*/ 

    /*Display changed basic array values to confirm $idx has a value*/ 
    $array[$idx] = 123; 
echo '<br/>'; 
    print_r($array); 
    $array["$idx"] = 456; 
echo '<br/>'; 
    print_r($array); 
    $array["{$idx}"] = 789; 
echo '<br/>'; 
    print_r($array); 
?> 

这里是的test.xml的内容:

<?xml version="1.0" standalone="yes"?> 
<widgets> 
    <item> 
      <name>Widget X</name> 
      <status>ready</status> 
    </item> 
    <item> 
      <name>Widget Z</name> 
      <status>waiting</status> 
    </item> 
</widgets> 

基本阵列具有使用没有问题$ IDX = $ _GET [ “ID”];选择更改哪个数组元素。但$ xml-> item [$ idx] - >状态不起作用。但是,如果我更改为$ idx = 0,则$ xml-> item [$ idx] - >状态确实有效。

这是一个错误,还是我失去了一些关于如何$ _GET或SimpleXML的作品?

+0

不要使用$ xml - > [array]你需要在盒子外面思考,并且因此达到解决方案,所完成的研究的复杂性是改进未来指导方针开发的开端。你能想一想吗?使用$ _POST [数组] – 2015-02-11 19:49:52

回答

0

Accessing nth element of XML in PHP with SimpleXml

看来SimpleXML的数字和非数字阵列 偏移之间区分的方式略有不同,以一个正常的PHP数组,所以你需要 到您的变量首先强制转换为整数。 (所有来自查询 的输入字符串都是一个字符串,除非您告诉PHP,否则。)

$ var = intval($ _ GET ['var']); echo $ xml-> foo [$ var] - > bar;这将打开 字符串“1”到整数1,并且应该给你 需要的结果。