2013-03-19 96 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