好的,这就是我想要做的(注意:我对PHP还是陌生的):
我有一个电影/电视剧等的注册表格。然后将填写的表格中的数据注册(register.php)并发送到MySQL数据库,该数据库工作正常。但是,这里出现了:我还希望在同一个寄存器文件(register.php)中将数据存储在现有XML文件(data.xml)中。这里重要的是,每个成功提交的表单都存储在相同的XML文件(data.xml)中。
我通过while循环将所有已注册的“电影”显示在HTML表中,该循环现在从数据库中收集数据。我也恳求在表外的某个地方添加一个按钮,以在新选项卡(?)中生成/显示XML文件的内容。不右键单击以查看源,因为表数据是从MySQL收集的,所以这是不可能的。
到目前为止,这是我所拥有的(这可以将每个提交保存在data.xml中,但是如果进行了另一个提交则将其替换-我想添加“不替换”):
首先,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节点分配值来使其成为 永久 节点,如下所示:
program
$xml->program = "";
在添加子节点之前添加该行:
$xml->program = ""; $xml->program->addChild('name', $name); $xml->program->addChild('date', $date); ....