2015-05-12 3 views
0
$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: создание объекта по умолчанию из пустого значения». Проконсультируйтесь с этим.Обновление XML с использованием PHP

+0

На основании [this] (http://stackoverflow.com/a/8900730/4499267) одно из свойств, которые вы пытаетесь получить, не определено – Phate01

+0

Не могли бы вы добавить вывод 'var_dump ($ _ POST) ; 'когда возникает проблема. – someOne

+0

Не могли бы вы показать нам свой XML-файл. – splash58

ответ

1

Кажется, вы не проверяли существование $_POST['number'], и предупреждение возникает по мере того, как значение не задано, общая рекомендация - всегда проверять переменные, поэтому добавьте следующее к началу вашего кода:

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

(рассмотреть проверки в отношении других переменных и функций-возвращений в конечной продукции, как хорошая практика программирования :)


PS: фактическая причина предупреждения является вне диапазона задачи (PHP будет добавить узел a генерировать предупреждения). В следующем коде я просто проверил наличие индекса узла, а в случае небытия просто добавил новый узел (в этой простой реализации индекс нового узла необязательно равен $_POST['number'], вы можете изменить поведение в соответствии с вашими потребностями):

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 5.4.0 - 5.6.8 как следующее (я использую v5.5.8):

Предупреждение: main(): Нельзя добавить номер элемента элемента 5, если только 0 такихсуществуетэлементов в ...

предупреждающее сообщение в исходном сообщении гласит:

Предупреждение: Создание объекта по умолчанию из пустого значения в ...

Что именно то же сообщение, что и предупреждение, созданное при попытке $xml->item[null] (в моей версии PHP).

+0

Это не источник этого сообщение. То, что вы описываете, - это решение для * undefined index * *. – deceze

+0

Я поставил обновление в качестве ответа. Пожалуйста, проверьте и совет. Благодарю. – user3812146

+0

Большое спасибо за обновление. Я проверю это и дам вам знать. – user3812146

Смежные вопросы