1

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

<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 显示电影信息。

电影列表.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 是否有效并且存在于 XML 文件中。如果我手动将浏览器中的 URL 更改为myserveraddress.com/movie_details.php?movieID=3,我会得到一个空白页面,因为movieID=3XML 文件中不存在并且没有任何内容可显示。

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

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

4

2 回答 2

0

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

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

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

if (!$exists) {
    echo "Invalid movieID!\n";
}
于 2013-03-20T17:58:09.253 回答
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 初学者,我对它提供的验证非常满意。

于 2013-03-25T22:05:49.340 回答