2013-03-19 37 views
1

通过有效的参数我有下面的XML存储2电影ID和他们的头衔PHP检查通过URL在XSLT

<movies 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="test.xsd"> 

<movie movieID="1"> 
    <title>Movie 1</title> 
</movie> 

<movie movieID="2"> 
    <title>Movie 2</title> 
</movie> 
</movies> 

我的XSL显示电影标题作为超链接把用户带到movie_details页面显示基于通过URL传递的ID的电影信息。

movies_list.xsl

<xsl:template match="/"> 
    <xsl:text>Movies list</xsl:text> 
    <xsl:apply-templates select="/movies/movie"/> 
</xsl:template> 

<xsl:template match="movie"> 
    <xsl:element name="a"> 
    <xsl:attribute name="href">movie_details.php?movieID=<xsl:value-of select="@movieID"/></xsl:attribute> 
    <xsl:value-of select="title"/> 
    </xsl:element> 
    <xsl:element name="br" /> 
</xsl:template> 

这是我movie_details.php文件

<?php 
$xml = new DOMDocument(); 
$xml->load('test.xml'); 

$xsl = new DOMDocument; 
$xsl->load('movie_details.xsl'); 

$proc = new XSLTProcessor(); 
$proc->importStyleSheet($xsl); 

$params = $_GET['movieID']; 
$proc->setParameter('', 'movieID', $params); 

echo $proc->transformToXML($xml); 
?> 

我愿做以下参数验证在movie_details.php

  1. 检查通过URL传递的movieID是否有效a nd存在于XML文件中。如果我手动将浏览器中的URL更改为myserveraddress.com/movie_details.php?movieID=3, ,我得到一个空白页面,因为movieID=3不存在于XML文件中,并且没有任何内容可以显示。

    如果movieID是无效的,并在XML中不存在,那么我想在网页给我重定向到index.php

  2. 检查movieID参数是通过URL传递的。例如,如果我手动将浏览器中的URL更改为myserveraddress.com/movie_details.php,那么该页面应该将我重定向到index.php,因为URL中没有传递任何参数。

+0

你在哪里碰到这样的障碍? – hakre 2013-03-20 17:29:51

+0

我对PHP很陌生,我不太清楚如何做到这一点。我需要以某种方式检查$ _GET ['movieID']是一个有效的参数。但我怎么能在PHP中做到这一点? – Alex 2013-03-20 17:35:09

回答

0

我有固定的问题,以下IF语句:

if (isset($_GET["movieID"]) && !empty($_GET["movieID"]) && ($_GET["movieID"] <="2")) 
{ 
    $xml = new DOMDocument(); 
    $xml->load('test.xml'); 

    $xsl = new DOMDocument; 
    $xsl->load('movie_details.xsl'); 

    $proc = new XSLTProcessor(); 
    $proc->importStyleSheet($xsl); 

    $params = $_GET['movieID']; 
    $proc->setParameter('', 'movieID', $params); 

    echo $proc->transformToXML($xml); 
} 
else 
{ 
    header('Location: index.php'); 
} 

它可能不是最好的解决方案,但作为一个PHP初学者,我很满意它提供的验证。

0

要检查是否具有特定属性的值的元素在你的$xmlDOMDocument存在,你可以使用DOMXPath:做

$movieID = 3; 
$expression = sprintf('boolean(//movie[@movieID="%d"])', $movieID); 

$exists = $xpath->evaluate($expression); 

if (!$exists) { 
    echo "Invalid movieID!\n"; 
} 
+0

我已经用你的解决方案更新了我的movie_details.php代码,但是我一直收到一个错误“Undefined variable:xpath”“致命错误:调用成员函数evaluate()在非对象” – Alex 2013-03-20 18:10:20