我有以下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>
我的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 中进行以下参数验证:
检查通过URL传递的movieID是否有效并存在于XML文件中。如果我手动将浏览器中的网址更改为myserveraddress.com/movie_details.php?movieID=3
,
我得到一个空白页面,因为XML文件中不存在movieID=3
,并且没有任何内容可以显示。
如果movieID无效且xml中不存在,那么我希望该页面将我重定向到index.php
检查movieID参数是否完全通过URL传递。例如,如果我手动将浏览器中的URL更改为myserveraddress.com/movie_details.php
,则页面应将我重定向到index.php
,因为URL中没有传递参数。
答案 0 :(得分:0)
要检查$xml
DOMDocument
中是否存在具有特定属性值的元素,您可以使用DOMXPath
:
$movieID = 3;
$expression = sprintf('boolean(//movie[@movieID="%d"])', $movieID);
$exists = $xpath->evaluate($expression);
if (!$exists) {
echo "Invalid movieID!\n";
}
答案 1 :(得分: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初学者,我对它提供的验证非常满意。