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に基づいて映画情報を表示します。

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が有効であり、XMLファイルに存在することを確認してください。ブラウザのURLを手動でに変更すると、XMLファイルに存在せず、表示するものがないmyserveraddress.com/movie_details.php?movieID=3ため、空白のページが表示されます。movieID=3

    movieIDが無効であり、xmlに存在しない場合は、ページをリダイレクトしてくださいindex.php

  2. movieIDパラメータがURLを介して渡されていることを確認してください。たとえば、ブラウザのURLを手動でに変更した場合、URLにパラメータが渡されないmyserveraddress.com/movie_details.phpため、ページはにリダイレクトする必要があります。index.php

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 に答える