PHP:使用$ _GET [“id”]替换XML节点

时间:2015-02-11 19:47:01

标签: php xml

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

当前格式是您可以查看一个HTML页面,其中包含项目的主列表及其状态,然后单击一个以移动到新的HTML页面,以便指定该项目的状态。所以我可以单击“Widget X”,然后看到一个新页面(status.php?id = X),然后单击标记为“ready”的按钮,PHP将使用$ _GET [“id”]查找相关内容XML节点并用“ready”替换它的属性。

出于某种原因,我绝对不能让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-&gt; item [$ idx] - &gt;状态不起作用。但是,如果我更改为$ idx = 0,则$ xml-&gt; item [$ idx] - &gt;状态确实有效。

这是一个错误,还是我错过了关于$ _GET或SimpleXML如何工作的内容?

1 个答案:

答案 0 :(得分:0)

Accessing nth element of XML in PHP with SimpleXml

  

似乎SimpleXML区分数字和非数字数组   偏移与普通PHP数组略有不同,所以你需要   首先将变量转换为整数。 (来自查询的所有输入   string是一个字符串,除非你告诉PHP。)

     

$ var = intval($ _ GET [&#39; var&#39;]); echo $ xml-&gt; foo [$ var] - &gt; bar;这将转向   字符串&#39; 1&#39;进入整数1,并且应该给出结果   需要。