我使用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如何工作的内容?
答案 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,并且应该给出结果 需要。