我創建了一個下拉選擇框,用於選擇要查看的相冊。當用戶進行選擇時,他們然後單擊查看相冊,並且他們所做的選擇的ID通過POST發送到查看頁面:select_album.php使用模板匹配選擇相冊
從數據庫中查詢所有相冊的列表,並顯示在下拉選擇。每張專輯都有一個與其關聯的ID。根據選擇哪個專輯,當用戶點擊查看專輯時,它們將被髮送到select_album.php,其中顯示該專輯的信息。
下拉列表中的默認選擇是[SELECT ALBUM],僅用作佔位符。我的問題是,當選擇[SELECT ALBUM]並單擊View Album時,用戶將被髮送到select_album.php並看到空白頁面。我需要頁面顯示專輯信息:NO ARTIST:NO ALBUM TITLE Label:NO LABEL,0 TRACKS等。我將顯示一張沒有專輯封面的專輯圖片。
我想我需要做的是以某種方式做一個模板匹配,但我很困惑從哪裏開始。
This is the dropdown This is example of a regular album page
select_album.php
<?php
$sql = "SELECT * from albums ORDER BY artist";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
?>
<form method='POST' action='write_xml.php'><b>SELECT AN ALBUM TO VIEW:</b><br />
<select name='id' size=1>
<option value=''>[SELECT ALBUM]</option>
<?php
while($row = $result->fetch_assoc()) {
?>
<option value="<?php echo $row['id']; ?>"><?php echo $row['artist']. ' - ' .$row['name']; ?></option>
<?php
}
} else {
echo "0 results";
}
$conn->close();
?>
</select><br /><br />
<input type='submit' name='process' value='VIEW ALBUM' />
music_inventory.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" >
<xsl:output method="xml" />
<xsl:param name="albumid">JA1</xsl:param>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="music_inventory">
<xsl:apply-templates select="album[@id=$albumid]"/>
</xsl:template>
<!--creates hyperlink-->
<xsl:template match="album">
<img src="{@albumart}" style="position: absolute; left: 10px; top: 10px; width: 200px;" />
<div style="position: absolute; left: 215px; font-size: 16pt; color: #993333;">
<b><xsl:value-of select="artist"/>: <a xmlns="http://www.w3.org/1999/xhtml" href="{@id}.xhtml">
<xsl:value-of select="name"/>
</a></b>
</div>
<div style="position: absolute; left: 215px; top: 40px; font-size: 10pt;">
<b>Label: </b><xsl:value-of select="label"/><br />
<b>Year: </b><xsl:value-of select="year"/><br />
<b>Disc <xsl:value-of select="disc"/> of <xsl:value-of select="totaldiscs"/></b><br />
</div>
<div style="position: absolute; left: 215px; top: 100px; font-size: 12pt;">
<b>Track Listing:</b><br/>
<xsl:for-each select="tracklist/*">
<xsl:apply-templates select="@id"/>: <xsl:value-of select="."/><br />
</xsl:for-each>
</div>
</xsl:template>
write_xml.php
$query="select * from albums";
$result=mysqli_query($db,$query);
$fp=fopen('music_inventory.xml','w');
$header="<?xml version=\"1.0\"?>\n<!DOCTYPE album SYSTEM \"music_inventory.dtd\">\n";
$header.="<?xml-stylesheet type=\"text/css\" href=\"music_inventory.css\"?>\n";
$header.="<music_inventory>\n";
$written=fwrite($fp,$header);
$xml_data="";
while($row=mysqli_fetch_array($result))
{
// Insert code here to write the outer album info
$type=null;
$xml_data .= "<album id=\"".$row['id']."\" type=\"".$type."\" albumart=\"" .$row['albumart']."\">";
$xml_data .= "<artist>".htmlentities($row['artist'])."</artist>\n";
$xml_data .= "<name>".$row['name']."</name>\n";
$xml_data .= "<year>".$row['year']."</year>\n";
$xml_data .= "<label>".$row['label']."</label>\n";
$xml_data .= "<disc>".$row['disc']."</disc>\n";
$xml_data .= "<totaldiscs>".$row['totaldiscs']."</totaldiscs>\n";
switch($row["type"])
{
case 'E':
$type='EP';
break;
case 'F':
$type='full_length';
break;
case 'S':
$type='soundtrack';
break;
case 'C':
$type='compilation';
break;
case 'M':
$type='multi_disc';
break;
default:
$type='unknown';
break;
}
$xml_data .= "<tracklist>\n";
$track_query="select track_number,track_title,track_artist from tracklist where id='" . $row["id"] . "' order by track_number";
$track_result=mysqli_query($db,$track_query);
while($track_row=mysqli_fetch_array($track_result))
{
// Insert code here to write the inner track list info
$xml_data .= "<track id=\"".$track_row['track_number']."\">".htmlentities($track_row['track_title'])."</track>\n";
}
$xml_data .= "</tracklist>\n";
$xml_data .= "</album>\n";
}
$written=fwrite($fp,$xml_data);
$footer="</music_inventory>\n";
$written=fwrite($fp,$footer);
fclose($fp);
$xslDoc = new DOMDocument();
$xslDoc->load("music_inventory.xsl");
$xmlDoc = new DOMDocument();
$xmlDoc->load("music_inventory.xml");
$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
$proc->setParameter('', 'albumid', $_POST["id"]);
echo $proc->transformToXML($xmlDoc);
?>
謝謝Tim!只有一個小錯字:您有
謝謝!我在回答中糾正了錯字。 –