Php 使用模板匹配选择相册
我创建了一个下拉选择框,用于选择要查看的相册。当用户做出选择时,他们单击View Album,然后通过POST将所做选择的id发送到查看页面:select_Album.phpPhp 使用模板匹配选择相册,php,xslt,Php,Xslt,我创建了一个下拉选择框,用于选择要查看的相册。当用户做出选择时,他们单击View Album,然后通过POST将所做选择的id发送到查看页面:select_Album.php <?php $sql = "SELECT * from albums ORDER BY artist"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output dat
<?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' />
从数据库中查询所有相册的列表,并显示在下拉选择中。每个相册都有一个与之关联的id。根据选择的相册,当用户单击View album时,会将其发送到select_album.php,其中显示该相册的信息
下拉列表中的默认选择是[SELECT ALBUM],仅用作占位符。我的问题是,当选择[SELECT ALBUM]并单击View ALBUM时,用户被发送到SELECT_ALBUM.php并看到一个空白页面。我需要页面显示相册信息:无艺术家:无相册标题
标签:没有标签,0首曲目,等等。我将显示一个没有显示唱片集艺术的唱片集图像
我想我需要做的是以某种方式匹配模板,但我不知道从哪里开始
选择_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>
JA1
:
标签:
年份:
光盘
曲目列表:
:
编写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);
?>
$query=“从相册中选择*”;
$result=mysqli_查询($db$query);
$fp=fopen('music_inventory.xml','w');
$header=“\n\n”;
$header.=“\n”;
$header.=“\n”;
$writed=fwrite($fp,$header);
$xml_data=“”;
while($row=mysqli\u fetch\u数组($result))
{
//在此处插入代码以写入外部相册信息
$type=null;
$xml_数据=“”;
$xml\u data.=''.htmlentities($row['artist'])。“\n”;
$xml_data.=''.$row['name'].“\n”;
$xml_data.=''.$row['year'].“\n”;
$xml_data.=''.$row['label'].“\n”;
$xml_data.=''.$row['disc'].“\n”;
$xml_data.=''.$row['totaldiscs'].“\n”;
开关($row[“type”])
{
案例“E”:
$type='EP';
打破
案例“F”:
$type='full_length';
打破
案例S:
$type='soundtrack';
打破
案例“C”:
$type='composition';
打破
案例“M”:
$type='multi_disc';
打破
违约:
$type='unknown';
打破
}
$xml_data.=“\n”;
$track\u query=“从tracklist中选择track\u编号、track\u标题、track\u艺术家,其中id=”。$row[“id”]。“‘按track\u编号排序’;
$track\u result=mysqli\u查询($db,$track\u查询);
而($track\u row=mysqli\u fetch\u数组($track\u result))
{
//在此处插入代码以写入内部曲目列表信息
$xml\u data.=''.htmlentities($track\u row['track\u title'])。“\n”;
}
$xml_data.=“\n”;
$xml_data.=“\n”;
}
$write=fwrite($fp,$xml\u数据);
$footer=“\n”;
$writed=fwrite($fp,$footer);
fclose($fp);
$xslDoc=newdomdocument();
$xslDoc->load(“music_inventory.xsl”);
$xmlDoc=新的DOMDocument();
$xmlDoc->load(“music_inventory.xml”);
$proc=new XSLTProcessor();
$proc->importStylesheet($xslDoc);
$proc->setParameter(“”,'albumid',$\u POST[“id”]);
echo$proc->transformToXML($xmlDoc);
?>
在XSLT中,您当前正在为相册选择模板,如下所示:
<xsl:template match="music_inventory">
<xsl:apply-templates select="album[@id=$albumid]"/>
</xsl:template>
或者像这样,处理设置了$albumid
但不存在的情况:
<xsl:template match="music_inventory">
<xsl:variable name="$album" select="album[@id=$albumid]" />
<xsl:apply-templates select="$album"/>
<xsl:if test="$album">
<p>NO ALBUM</p>
</xsl:if>
</xsl:template>
没有相册
当然,另一个解决方案是,只要在选择“选择相册”时禁用“查看相册”按钮,就可以避免不必要的回发。谢谢Tim!只有一个小错误:你有