Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php xml文件搜索结果的查询错误_Php_Xml_Search - Fatal编程技术网

Php xml文件搜索结果的查询错误

Php xml文件搜索结果的查询错误,php,xml,search,Php,Xml,Search,我为xml文件创建了一个小查询搜索。我的问题是,当使用选定的摄影师id进行搜索时,因为它是一个数字,即1,2,3 ect,我得到了结果,但是如果我将表单和xml文件从1更改为1,从2更改为2,搜索工作正常,我尝试将get请求和摄影师id的值转换为整数带(int)且为数字,但结果相同 $xml = simplexml_load_file("photo.xml"); for ($i = 0; $i < count($xml); $i++){ if(isset($_GET[

我为xml文件创建了一个小查询搜索。我的问题是,当使用选定的摄影师id进行搜索时,因为它是一个数字,即1,2,3 ect,我得到了结果,但是如果我将表单和xml文件从1更改为1,从2更改为2,搜索工作正常,我尝试将get请求和摄影师id的值转换为整数带(int)且为数字,但结果相同

 $xml = simplexml_load_file("photo.xml");


   for ($i = 0; $i < count($xml); $i++){

    if(isset($_GET["LocationName"])) 

    {
       $photographer = $_GET["LocationName"];
    }

    $result = $xml->xpath('/root/area[photographer="' . $photographer . '"]  ');
    }


    if(isset($_GET["photographer_id"]))
    {
        $photographer_id = $_GET["photographer_id"];
    } 

    if(isset($_GET["images"]))
    {
        $image = $_GET["images"];
        }

    //echo $photographer_id;
    //echo $photographer;
    //echo $image;

    $filteredResult = array();

    foreach($result as $obj){
        if(in_array($photographer_id, (array)$obj)  || $photographer_id == 'x'){ 
            if(in_array($image, (array)$obj) || $image == 'x'){
                array_push($filteredResult, $obj);
            }
        }
    }

    foreach($filteredResult as &$obj){
        //how to access values in the object
        //echo $obj->{'photographer'};
        echo $obj->{'image'};
        }
        if (empty($filteredResult)) {
    echo 'Empty';
}
$xml=simplexml\u加载文件(“photo.xml”);
对于($i=0;$ixpath('/root/area[摄影家=“'.$摄影家”“”);
}
如果(isset($\u GET[“摄影师id”]))
{
$摄影师id=$\u获取[“摄影师id”];
} 
如果(isset($_GET[“images”]))
{
$image=$\u获取[“图像”];
}
//echo$摄影师id;
//echo$摄影师;
//回波图像;
$filteredResult=array();
foreach(结果为$obj){
如果(在_数组中($摄影师_id,(数组)$obj)| |$摄影师_id=='x'){
if(在_数组($image,(数组)$obj)| |$image=='x'){
阵列推送($filteredResult,$obj);
}
}
}
foreach($filteredResult as和$obj){
//如何访问对象中的值
//echo$obj->{'摄影师'};
echo$obj->{'image'};
}
if(空($filteredResult)){
回声“空”;
}
我已经试过调试这段代码,但仍然无法找出哪里出了问题

  <?xml version="1.0" encoding="UTF-8"?>
  <root>
   <area>
    <photographer_id>1</photographer_id>
    <photographer>John</photographer>
    <image>a</image>
    <image_id>1</image_id>
   </area>
   <area>
    <photographer_id>1</photographer_id>
    <photographer>John</photographer>
    <image>b</image>
    <image_id>2</image_id>
   </area>
   <area>
    <photographer_id>1</photographer_id>
    <photographer>John</photographer>
    <image>c</image>
    <image_id>3</image_id>
   </area>
   <area>
    <photographer_id>2</photographer_id>
    <photographer>Fred</photographer>
    <image>a</image>
    <image_id>4</image_id>
   </area>
   <area>
    <photographer_id>3</photographer_id>
    <photographer>Joseph</photographer>
    <image>a</image>
    <image_id>5</image_id>
   </area>
  </root>

1.
约翰
A.
1.
1.
约翰
B
2.
1.
约翰
C
3.
2.
弗莱德
A.
4.
3.
约瑟夫
A.
5.

这个问题与XPATH无关,XPATH搜索很好,它解释了为什么搜索查询“one”返回正确,而如果使用了“1”,则搜索模式是不正确的 出于安全原因,我使用
$\u POST
而不是
$\u GET

<!-- here's the complete <head> etc. -->
<body>
<?php

$xml = simplexml_load_file('file.xml');

if (isset($_POST['submit'])) { // form has been sent, process and show results...

    // get data
    $id  = $_POST['id'];
    $img = $_POST['img'];

    if ($id <> '*') $id = "'$id'";
    if ($img <> '*') $img = "'$img'"; // wrap $id/$img in '' if is isn't *   

    $results = $xml->xpath("//area[photographer_id=$id and image=$img]");

    echo "<h1>search results</h1><p>results found: ". count($results) . "</p>";        

    // show results
    foreach ($results as $r)
    echo "result #" . ++$c . ": $r->photographer_id, $r->photographer, image: $r->image<br />"; 

} else { // form not sent, display form

    // get lists of unique ids / images from XML
    $ids = $imgs = array();
    foreach ($xml->area as $a) {
        $ids[(string)$a->photographer_id] = (string)$a->photographer;
        $imgs[(string)$a->image] =(string)$a->image;
    }
    ?>

<h1>Search</h1>
<form method="post">
    <label for="id">select a photographer</label>
    <select name ="id" id="id" size="1">
        <option value="*" selected="selected">all</option>
<?php // edit: typo corrected in NEXT LINE at value=\"$id\"
foreach ($ids as $id => $name) echo "<option value=\"$id\">$name ($id)</option>";
?>
    </select>
    <label for="img">select a photographer</label>
    <select name ="img" id="img" size="1">
        <option value="*" selected="selected">all</option>
<?php
foreach ($imgs as $img) echo "<option value=\"$img\">$img</option>";
?>
    </select>
    <input type="submit" name="submit" />    
</form>
<?php
} // if isset
?>
</body>
</html>


你能展示你的xml吗?这个想法是,用户可以在网站上搜索主要是摄影师和要链接到图像的摄影师id,因此如果用户通过id优化他们对图像的搜索,我希望这是有意义的。当我使用表单搜索xml文件中的摄影师id时,我希望在get请求上显示结果,即如果摄影师id 1被选中我只想显示id为1的摄影师和摄影师id为1的图像如果我将xml文件中摄影师id的值从1更改为1,查询工作正常,所以我想我试图解决的是字符串“1”和字符串“1”之间的区别我不敢相信,你在5月18日问了同样的问题,我在那里回答了。。。怎么了?我认为,当你在php中作为一个新手重新获得你的答案后,当你花更多的时间整理你不完全理解的错误时,你很难学到一些东西,你的代码不会返回基于任何用户输入的结果,正如我在三个下拉列表中所做的那样,用户可以通过photograger进行选择,id或图像搜索中唯一有问题的部分是id,因为它使用1,2,3ect如果我将值更改为1,2,3 ect,那么搜索工作正常我认为可能是因为它是一个字符串,所以我尝试更改为与(int)积分但是搜索结果没有改变我已经玩了一段时间了如果添加一个0 ie 01,我会得到不同的结果似乎问题出在01和02,03以后的工作正常我在不同的pc上尝试了没有用,这对我来说毫无意义。她只是想到我的完整xml文件中有一个image\u id元素来识别图像。image\u id和摄影师id是否会导致查询错误?如果是的话,我会测试和检查结果。对不起,我在works pc上遇到这个错误“解析错误:语法错误,意外”\”(T_NS_分隔符),在C:\wamp\www\test search\test.php的第39行中应为“,”或“;”,所以我回家后会测试它michi@Artful_dodger:抱歉,输入错误,已更正并在代码中标记注释。