[英]Saving form data to an existing XML-file using PHP
好的,这就是我想要做的(注意:我对PHP仍然陌生):
我有一个电影/电视剧等的注册表格。然后将已填写表格中的数据注册(register.php)并发送到MySQL数据库,该数据库工作正常。 但是,这里出现了:我还希望在同一寄存器文件(register.php)中将数据存储在现有XML文件(data.xml)中。 这里重要的是,每个成功提交的表单都存储在相同的XML文件(data.xml)中。
我通过一个while循环将所有已注册的“电影”显示在HTML表中,该循环现在从我的数据库中收集数据。 我也恳求在表外的某个地方添加一个按钮,以在新选项卡(?)中生成/显示XML文件的内容。 不右键单击以查看源,因为表数据是从MySQL收集的,所以这是不可能的。
到目前为止,这是我所拥有的(这可以将每个提交保存在data.xml中,但是如果进行了另一个提交则将其替换-我想添加NOT replace):
首先,index.php:
<form enctype="multipart/form-data" action="core/register.php" method="post" autocomplete="true">
<p><input type="text" name="name" placeholder="Program name" /></p>
<p><input type="date" name="date" placeholder="Program date" /></p>
<p><input type="time" name="time" placeholder="Program time" /></p>
<p><input type="text" name="bline" placeholder="B-line" /></textarea></p>
<p><textarea name="synopsis" placeholder="Program synopsis" /></textarea></p>
<p><textarea name="leadtext" placeholder="Lead text" /></textarea></p>
<p><input type="url" name="url" placeholder="URL" /></p>
<p><input type="submit" value="Register" name="register" /></p>
</form>
接下来,data.xml:
<?xml version="1.0" encoding="UTF-8"?>
<programs>
<program>
<name></name>
<date></date>
<start_time></start_time>
<b-line></b-line>
<synopsis></synopsis>
<leadtext></leadtext>
<url></url>
</program>
</programs>
最后,register.php:
require_once('db.php');
$str = '<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="xsl.xsl"?><programs></programs>';
$xml = simplexml_load_string($str);
$name = $_POST['name'];
$date = $_POST['date'];
$time = $_POST['time'];
$bline = $_POST['bline'];
$synopsis = $_POST['synopsis'];
$leadtext = $_POST['leadtext'];
$url = $_POST['url'];
$name = htmlentities($name, ENT_COMPAT, 'UTF-8', false);
$date = htmlentities($date, ENT_COMPAT, 'UTF-8', false);
$time = htmlentities($time, ENT_COMPAT, 'UTF-8', false);
$bline = htmlentities($bline, ENT_COMPAT, 'UTF-8', false);
$synopsis = htmlentities($synopsis, ENT_COMPAT, 'UTF-8', false);
$leadtext = htmlentities($leadtext, ENT_COMPAT, 'UTF-8', false);
$url = htmlentities($url, ENT_COMPAT, 'UTF-8', false);
$xml->program->addChild('name', $name);
$xml->program->addChild('date', $date);
$xml->program->addChild('start_time', $time);
$xml->program->addChild('b-line', $bline);
$xml->program->addChild('synopsis', $synopsis);
$xml->program->addChild('leadtext', $leadtext);
$xml->program->addChild('url', $url);
$doc = new DOMDocument('1.0');
$doc->formatOutput = true;
$doc->preserveWhiteSpace = true;
$doc->loadXML($xml->asXML(), LIBXML_NOBLANKS);
$doc->save('data.xml');
我搜索了几个小时,却没有找到我想要的东西。 还尽我所能尝试很多我自己的“非工作解决方案”。 另外,我还选择了与该问题答案相关的代码部分。
您需要通过为program
节点分配一个值来使其永久化 ,如下所示:
$xml->program = "";
在添加子节点之前添加该行:
$xml->program = "";
$xml->program->addChild('name', $name);
$xml->program->addChild('date', $date);
....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.