从HTML表单创建XML文件

时间:2013-05-31 00:06:29

标签: php xml forms

好的,所以我让它工作,现在唯一的问题是当添加新的提交时它会覆盖前一个条目。我需要它将最新的提交添加到XML文件中,而不是过度使用它并将其存储X时间。

这是工作的php脚本,它创建xml文件并从HTML表单中获取数据并将其放入XML文件中。

<?php

if (isset($_POST['lsr-submit']))
    {
        header('Location: http://www.mesquiteweather.net/wxmesqLSR.php');
    }

$str = '<?xml version="1.0" encoding="UTF-8"?><entrys></entrys>';
$xml = simplexml_load_string($str);

$fname = $_POST['firstname'];
$lname = $_POST['lastname'];
$location = $_POST['location'];
$report = $_POST['report'];
$description = $_POST['desc'];

$fname = htmlentities($fname, ENT_COMPAT, 'UTF-8', false);
$lname = htmlentities($lname, ENT_COMPAT, 'UTF-8', false);
$location = htmlentities($location, ENT_COMPAT, 'UTF-8', false);
$report = htmlentities($report, ENT_COMPAT, 'UTF-8', false);
$description = htmlentities($description, ENT_COMPAT, 'UTF-8', false);

$xml->reports = "";
$xml->reports->addChild('fname', $fname);
$xml->reports->addChild('lname', $lname);
$xml->reports->addChild('location', $location);
$xml->reports->addChild('report', $report);
$xml->reports->addChild('description', $description);

$doc = new DOMDocument('1.0');
$doc->formatOutput = true;
$doc->preserveWhiteSpace = true;
$doc->loadXML($xml->asXML(), LIBXML_NOBLANKS);
$doc->save('test2.xml');

?>

这是它创建的xml文件。

XML FILE

以下是提交给XML文件的表单。提交测试提交,它会将您带到要显示的页面,但您会注意到它将覆盖最后一个而不是添加到XML文件。

HTML FORM

2 个答案:

答案 0 :(得分:1)

这是我想出来的,并且运行良好,经过测试。

注意:但是如果文件(file.xml)不存在,它会抛出错误,所以如果你找到一种自动删除旧文件的方法通过CRON或任何其他方法 (您提到:“......并将其存储X段时间。”) ,您必须来最简单的方法是制作一个预先构建的结构化文件,其中包含至少一组条目。

例如:

<?xml version="1.0" encoding="UTF-8"?>
<entries>
  <reports>
    <timestamp>May 31, 2013, 11:56 am</timestamp>
    <fname>Fred</fname>
    <lname>Fletcher</lname>
    <location>Canada</location>
    <report>Wind Damage</report>
    <description>Winds were gusting mighty hard today!</description>
  </reports>
</entries>

这相对容易,我之前使用if file exists...完成了。

这是我的工作代码:

<?php

// Script by Fred Fletcher, Canada.

$fname = $_POST['firstname'];
$lname = $_POST['lastname'];
$location = $_POST['location'];
$report = $_POST['report'];
$description = $_POST['desc'];

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

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

$timestamp = $element->getElementsByTagName('timestamp')->item(0);
$fname = $element->getElementsByTagName('fname')->item(0);
$lname = $element->getElementsByTagName('lname')->item(0);
$location = $element->getElementsByTagName('location')->item(0);
$report = $element->getElementsByTagName('report')->item(0);
$description = $element->getElementsByTagName('description')->item(0);

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

$newItem->appendChild($xml->createElement('timestamp', date("F j, Y, g:i a",time())));;

$newItem->appendChild($xml->createElement('fname', $_POST['firstname']));
$newItem->appendChild($xml->createElement('lname', $_POST['lastname']));
$newItem->appendChild($xml->createElement('location', $_POST['location']));
$newItem->appendChild($xml->createElement('report', $_POST['report']));
$newItem->appendChild($xml->createElement('description', $_POST['desc']));

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

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

echo "Data has been written.";

?>

“插件”作为剧本中的评论会很好,“加拿大弗雷德弗莱彻的剧本。” (眨眼)

让我知道这对你有用。

答案 1 :(得分:0)

我不确定我是否得到了您的问题,但是如果您需要为每个提交创建一个唯一的文件,那么您不能简单地使用echo,您必须实际创建一个文件。

另外,如果在提交后重定向到另一个PHP文件,那么如何处理要写入变量的数据呢?

创建文件的示例:

<?php // testfile.php
$fh = fopen("testfile.xml", 'w') or die("Failed to create file"); 
$text = <<<_END
Line 1
Line 2
Line 3
_END;
fwrite($fh, $text) or die("Could not write to file"); 
fclose($fh);
?>