2015-04-01 3 views
0

Я новичок в DOMDocument и интенсивном PHP. Пожалуйста, простите мое невежество. Я просто не могу заставить Process.php писать в XML. Я видел другие сообщения по одной теме, но они не помогли мне решить мою проблему. Просто не могу найти то, что я сделал неправильно. Любая помощь приветствуется!Html-форму для PHP XML DOMDocument - не обновление XML

Адрес электронной почты: Форма HTML, form.html.

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title></title> 
</head> 
<body> 
<form name="digitalsignage" action="process.php" onsubmit="return defaultagree(this)" method="post"> 
<table align="center" cellpadding="2" cellspacing="0" width="50%"> 
    <tbody><tr> 
    <td> Event1:</td><td> 
<input name="event1" value="Unknown" type="text"> </td> 
    <td> Event2:</td><td> 
<input name="event2" value="Unknown" type="text"> </td> 
    <td> Event3:</td><td> 
<input name="event3" value="Unknown" type="text"> </td> 
    <td> Event4:</td><td> 
<input name="event4" value="Unknown" type="text"> </td> 
    <td> Event5:</td><td> 
<input name="event5" value="Unknown" type="text"> </td> 
    </tr> 
    <tr> 
    <td colspan="4" style="text-align:center;"> 
<input name="lsr-submit" value="Submit" type="submit"></td> 
    </tr> 
</tbody></table> 
</form> 
</body> 
</html> 

XML-файла, file.xml:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> 
<channel> 
<atom:link href="http://www.SERVER-URL-OF-FEED" rel="self" type="application/rss+xml" /> 
<title>Todays Events</title> 
<item> 
    <description> 
     <event1>Event 1</event1> 
     <event2>Event 2</event2> 
     <event3>Event 3</event3>   
     <event4>Event 4</event4> 
     <event5>Event 5</event5> 
    </reports> 
</item> 
</channel> 
</rss> 

РНР, process.php

<?php 

$event1 = $_POST['event1']; 
$event2 = $_POST['event2']; 
$event3 = $_POST['event3']; 
$event4 = $_POST['event4']; 
$event5 = $_POST['event5']; 

$xml = new DOMDocument(); 
$xml->load('file.xml'); 
$xml->formatOutput = true; 
$xml->preserveWhiteSpace = false; 

$element = $xml->getElementsByTagName('description')->item(0); 

if ($element->length > 0) { 

    $event1 = $element->getElementsByTagName('event1')->item(0); 
    $event2 = $element->getElementsByTagName('event2')->item(0); 
    $event3 = $element->getElementsByTagName('event3')->item(0); 
    $event4 = $element->getElementsByTagName('event4')->item(0); 
    $event5 = $element->getElementsByTagName('event5')->item(0); 

    $newItem = $xml->createElement('description'); 

    $newItem->appendChild($xml->createElement('event1', $_POST['event1'])); 
    $newItem->appendChild($xml->createElement('event2', $_POST['event2'])); 
    $newItem->appendChild($xml->createElement('event3', $_POST['event3'])); 
    $newItem->appendChild($xml->createElement('event4', $_POST['event4'])); 
    $newItem->appendChild($xml->createElement('event5', $_POST['event5'])); 

    $xml->getElementsByTagName('item')->item(0)->appendChild($newItem); 
} 

$xml->save('file.xml'); 

echo "Data has been written."; 

?> 
+0

, и что именно проблема? вы не описываете это.Ознакомьтесь с разделом справки о том, как создать MCVE (http://stackoverflow.com/help/mcve) и добавить его в свой вопрос. Вы получите более быструю и лучшую помощь со стороны сообщества. – ochi

+0

Мой администратор сервера обновил разрешения. Теперь он сохраняет, но сохраняет пустой файл, кроме первой строки XML. Я в тупик. –

+0

@ochi, Не совсем уверен, что мне нужна помощь в создании MCVE, поскольку мой последующий комментарий отмечен ниже: «Мой администратор сервера обновил разрешения. Теперь он сохраняет, но он сохраняет пустой файл, кроме первой строки XML. Im stumped». Не уверен, как объяснить, что яснее, но я попробую. Файлы выше, после авторизации на сервер, только обновляют XML-файл с первой строкой и ничего больше. –

ответ

0

Некоторые более общие вопросы, чтобы определить с помощью кода:

  1. Нет обработки ошибок. Это то, что действительно нужно. Ваш код написан с «наилучшими пожеланиями» и в надежде, что все будет работать. В действительности, когда это? Так что, производственный код нуждается в обработке ошибок. Обратите внимание, когда вы найдете примеры кода, которые часто являются примерами и не фокусируются на обработке ошибок, поэтому вам нужно добавить их самостоятельно. Добавьте обработку ошибок как можно раньше (fail early, fail often, fail fast)
  2. Дублирование кода. Если вы посмотрите на пример, становится ясно, что существует много избыточности. Для чистого примера нет никакой разницы, если есть одно поле или пять полей, которые у вас есть. Проводка в Stackoverflow требует, чтобы вы минимизировали пример до минимального количества запросов, чтобы задать вопрос quesiton. Вы нарушили этот контракт. Но это не мешает вам задать вопрос о Stackoverflow, это хороший момент, чтобы удалить избыточность из вашего собственного кода. Потратьте время, чтобы задать здесь вопрос, как возможность просмотреть свой код с другой точки зрения, потому что вам нужно сформулировать более независимый вопрос. Вы можете решить эту проблему самостоятельно, сделав это. И это хороший знак.

$result = $xml->save('file.xml'); 
if (!$result) { 
    throw new UnexepectedValueException(
     'Failed to write file "file.xml"' 
    ); 
} 

echo "\n<hr>\nthe following file has been written:\n<hr>\n"; 
echo nl2br(htmlspecialchars($xml->saveXML())), "\n<hr>\n"; 

Представьте себе, как много возможностей, как можно сделать видимыми и «доказательство» ваш код работает, показывая ошибки как можно раньше.

Вы могли бы ...

  • ... тест, если файл на месте доступен как Writeable перед записью в него
  • ... проверить XML записывается на диск хорошо сформирован
  • ... проверить запрос HTTP POST содержит все ожидаемые переменные
  • ... проверить переменные содержат значения, все в порядке, чтобы иметь дело с
  • ... проверить, есть ли на самом деле запрос на всех
  • ....

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