Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用模板匹配选择相册_Php_Xslt - Fatal编程技术网

Php 使用模板匹配选择相册

Php 使用模板匹配选择相册,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

我创建了一个下拉选择框,用于选择要查看的相册。当用户做出选择时,他们单击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 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!只有一个小错误:你有