$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警告:从空值创建默认对象”错误。请就此提出建议。
答案 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版本中)时生成的警告完全相同的消息。