3

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

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

<?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 文件的表单。提交一个测试提交,它会将您带到要显示的页面,但您会注意到它将覆盖最后一个,而不是添加到 XML 文件中。

HTML 表格

4

2 回答 2

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

?>

作为脚本中的注释的“插件”会很好,“加拿大 Fred Fletcher 的脚本”。(眨眼)

让我知道这对你有什么影响。

于 2013-05-31T22:45:17.443 回答
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);
?>
于 2013-05-31T00:14:54.517 回答