我正在尝试使用我在xpath查询中传递给页面的参数。这工作正常(硬编码):
<?php
$xml = simplexml_load_file("bookstore.xml");
$res = $xml->xpath("/bookstore/book[title = 'Everyday Italian']");
echo $res[0]->author
?>
但是我将参数传递给:
bookdetails.php?title="Everyday Italian"
然后执行:
<?php
$xml = simplexml_load_file("bookstore.xml");
$res = $xml->xpath("/bookstore/book[title = $_GET['title']]");
echo $res[0]->author
?>
我收到500错误。
有什么想法吗?
谢谢,
大卫
答案 0 :(得分:0)
尝试使用urlencode('bookdetails.php?title=Everyday Italian')
传递参数。
答案 1 :(得分:0)
PHP变量将扩展为一个字符串值,在XPATH表达式中计算时应该用引号括起来。
我不熟悉PHP,并且不确定嵌套引号(用于引用$_GET
变量)在已经用单引号和双引号包装时如何工作。
我假设您可以通过连接字符串片段和变量来构建字符串:
$res = $xml->xpath("/bookstore/book[title = '" . $_GET['title'] . "']");
或者,您可以将值分配给可以不带引号引用的变量:
<?php
$xml = simplexml_load_file("bookstore.xml");
$title = $_GET['title'];
$res = $xml->xpath("/bookstore/book[title = '$title']");
echo $res[0]->author
?>
答案 2 :(得分:0)
$res = $xml->xpath("/bookstore/book[title = $_GET['title']]");
这是不正确的。在双引号字符串中插入数组/哈希元素时,不能引用索引值。以下任何一种都是正确的:
$res = $xml->xpath("/bookstore/book[title = {$_GET['title']}]"); // surround with {}
$res = $xml->xpath("/bookstore/book[title = $_GET[title]]"); // remove the '
当然,当不在双引号字符串的上下文中时,则执行:
$res = $_GET[title];
将PHP解释为'title'作为常量,很可能没有定义的值,因此代码将被解释为
$res = $_GET[];