【问题标题】:PHP: Using $_GET["id"] to replace XML nodePHP:使用 $_GET["id"] 替换 XML 节点
【发布时间】: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]

标签: php xml


【解决方案1】:

Accessing nth element of XML in PHP with SimpleXml

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

$var = intval($_GET['var']);回声 $xml->foo[$var]->bar;这将转 将字符串 '1' 转换为整数 1,并且应该给出你的结果 需要。

【讨论】:

    猜你喜欢
    • 2013-07-11
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 2014-02-01
    相关资源
    最近更新 更多