【发布时间】:2015-02-12 04:09:16
【问题描述】:
我正在使用 PHP 和一个外部 XML 文件来显示一个 HTML 页面,该页面允许用户使用各种表单/输入按钮更新项目的状态。
当前的格式是,您可以查看包含项目主列表及其状态的 HTML 页面,然后单击其中一个以移动到新的 HTML 页面,让您指定该项目的状态。所以我可以点击“Widget X”,然后看到一个新页面(status.php?id=X),然后点击一个标有“ready”的按钮,PHP会使用$_GET["id"]来查找相关的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]->status 不起作用。但是,如果我更改为 $idx = 0,则 $xml->item[$idx]->status 确实有效。
这是一个错误,还是我错过了 $_GET 或 SimpleXML 的工作原理?
【问题讨论】:
-
不要使用 $xml->[array] 您需要跳出框框思考并得出解决方案,因此,完成的研究的复杂性是改进未来指南开发的一个机会。你能想一想吗?使用 $_POST[array]