使用PHP更新XML

时间:2015-05-12 10:31:25

标签: php xml

$xml = simplexml_load_file('xml/item.xml');

$xml->item[$_POST['number']]->itemname = $_POST['name'];

$xml->item[$_POST['number']]->description = $_POST['description'];

$xml->item[$_POST['number']]->price = $_POST['price'];

file_put_contents('xml/item.xml', $xml->asXML());

我希望根据来自表单编号的索引编号更新我的XML。但是在这段代码中我得到了“PHP警告:从空值创建默认对象”错误。请就此提出建议。

1 个答案:

答案 0 :(得分:1)

似乎您还没有检查$_POST['number']是否存在,并且由于未设置值而出现警告,一般的好做法是始终检查变量,因此请将以下内容添加到你的代码的开头:

if(isset($_POST['number'])) {
...

(考虑在最终作品中检查其他变量和函数返回作为良好的编程习惯:)

<小时/> P.S:警告的实际原因是超出范围问题(PHP将在警告生成后添加节点)。在下面的代码中,我刚刚检查了节点索引是否存在,并且在不存在的情况下,只添加了一个新节点(在这个简单的实现中,新节点的索引不一定等于{{1} },您可以根据需要更改行为):

$_POST['number']

<小时/> 免责声明: PHP 5.4.0 - 5.6.8中相同问题的错误消息如下(我使用的是v5.5.8):

  

警告:main():只有0这样时才能添加元素项目编号5   元素存在于......

原始帖子中的警告消息为:

  

警告:在......

中从空值创建默认对象

与您尝试if(isset($_POST['number'])) { $xml = simplexml_load_file('xml/item.xml'); if(isset($xml->item[$_POST['number']])) $node = $xml->item[$_POST['number']]; else $node = $xml->addChild('item'); $node->itemname = $_POST['name']; $node->description = $_POST['description']; $node->price = $_POST['price']; file_put_contents('xml/item.xml', $xml->asXML()); } (在我的PHP版本中)时生成的警告完全相同的消息。