簡體   English   中英

HTML格式轉換為PHP XML DOMDocument-不更新XML

[英]Html form to PHP XML DOMDocument - Not Updating XML

我是DOMDocument和密集型PHP的新手。 請原諒我的無知。 我似乎無法讓Process.php寫入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>

PHP,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.";

?>

您的代碼中有一些其他基本問題:

  1. 沒有錯誤處理。 那是真正要照顧的東西。 您的代碼是用“最良好的祝願”編寫的,並希望一切正常。 實際上,那是什么時候? 是的,生產代碼需要錯誤處理。 當您發現代碼示例時,請注意這些示例通常是示例,並且不關注錯誤處理,因此您需要自己添加代碼示例。 盡早添加錯誤處理( 及早失敗,經常失敗,快速失敗
  2. 代碼重復。 如果您看一下示例,很顯然存在很多冗余。 對於純粹的示例,是否有一個字段或五個字段沒有什么區別。 在Stackoverflow上發帖要求您將示例最小化,以盡可能少地詢問問題。 您違反了合同。 但這並不是讓您更難在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";

想象盡可能多的可能性使代碼可見並“驗證”代碼工作,並盡早顯示錯誤。

你可以...

  • ...在寫入文件之前測試是否可訪問適當位置的文件
  • ...驗證寫入磁盤的XML格式正確
  • ...驗證HTTP POST請求包含所有預期變量
  • ...驗證變量是否包含您可以正確處理的值
  • ...檢查是否真的有一個請求
  • ……

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM