2012-08-27 79 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