PHP检查通过XSLT中的URL传递的有效参数

PHP检查通过XSLT中的URL传递的有效参数,php,xml,xslt,parameters,hyperlink,Php,Xml,Xslt,Parameters,Hyperlink,我有以下XML存储2个电影ID及其标题 <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"> <titl

我有以下XML存储2个电影ID及其标题

<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>

电影一
电影2
My XSL将电影标题显示为超链接,将用户带到“电影详细信息”页面,根据通过URL传递的ID显示电影信息

电影列表.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?movieID=
这是我的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中执行以下参数验证:

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

    如果movieID无效并且不存在于xml中,那么我希望页面将我重定向到
    index.php

  • 检查movieID参数是否通过URL传递。例如,如果我手动将浏览器中的URL更改为
    myserveraddress.com/movie\u details.php
    ,则页面应将我重定向到
    index.php
    ,因为URL中没有传递任何参数


  • 要检查
    $xml
    DOMDocument
    中是否存在具有特定属性值的元素,可以使用
    DOMXPath

    $movieID    = 3;
    $expression = sprintf('boolean(//movie[@movieID="%d"])', $movieID);
    
    $exists = $xpath->evaluate($expression);
    
    if (!$exists) {
        echo "Invalid movieID!\n";
    }
    

    我已通过执行以下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');
    }
    
    if(isset($\u GET[“movieID”])&&&!empty($\u GET[“movieID”])&&($\u GET[“movieID”]加载($test.xml));
    $xsl=新文档;
    $xsl->load('movie_details.xsl');
    $proc=new XSLTProcessor();
    $proc->importStyleSheet($xsl);
    $params=$_GET['movieID'];
    $proc->setParameter(''movieID',$params);
    echo$proc->transformToXML($xml);
    }
    其他的
    {
    标题('Location:index.php');
    }
    

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

    你在哪里遇到了这样的障碍?我对PHP非常陌生,不太确定如何做到这一点。我需要以某种方式检查$\u GET['movieID']是一个有效参数。但如何在php中做到这一点?我已经用您的解决方案更新了movie_details.php代码,但我一直收到一个错误“Undefined variable:xpath”“致命错误:调用非对象上的成员函数evaluate()”