2012-08-27 25 views
4
现有的XML文件

好了,这里就是我想要做的(注:我还是老样子新PHP):保存的表单数据使用PHP

我对电影/系列等登记表然后注册填充表格中的数据(register.php)并发送到MySQL数据库,该数据库工作正常。这里是but:我也想在同一个注册文件(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'); 

我已经搜索了几个小时,却没有找到我正在寻找的东西。也尽我所能尝试了很多我自己的“非工作解决方案”。另外,我挑选了与这个问题的答案相关的代码部分。

回答

5

你需要一个值,像这样分配给它使program节点永久

$xml->program = ""; 

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

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

这是正确的和作品精细。但它仍然替代最后提交的XML数据(在data.xml中)而不是添加到它。 – khaansen

+0

我以为那是你想要的。对于这种新的情况,只有在data.xml文件不存在的情况下,才应该运行'simplexml_load_string'。如果存在'data.xml',则应该执行'simplexml_load_file'来代替data.xml的内容,然后将子代添加到您加载的内容中并将其写回到文件中 – raidenace