小编典典

使用PHP将表单数据保存到现有XML文件中

sql

好的,这就是我想要做的(注意:我对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');

我搜索了几个小时,却没有找到我想要的东西。还尽我所能尝试很多我自己的“非工作解决方案”。另外,我还选择了与该问题答案相关的代码部分。


阅读 166

收藏
2021-05-05

共1个答案

小编典典

您需要通过为program节点分配值来使其成为 永久 节点,如下所示:

$xml->program = "";

在添加子节点之前添加该行:

$xml->program = "";
$xml->program->addChild('name', $name);
$xml->program->addChild('date', $date);
....
2021-05-05