好的,所以我让它工作,现在唯一的问题是当添加新的提交时它会覆盖前一个条目。我需要它将最新的提交添加到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文件的表单。提交测试提交,它会将您带到要显示的页面,但您会注意到它将覆盖最后一个而不是添加到XML文件。
答案 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);
?>