поиск с XPath и php - PullRequest
       4

поиск с XPath и php

0 голосов
/ 28 марта 2012

В настоящее время у меня есть страница индекса, которая показывает значения со страницы XML, используя simpleXML. И функция поиска, которая печатает на другую страницу, я хочу обновить переднюю страницу, чтобы при нажатии кнопки отображались только результаты поиска.

страница указателя.

<?php
  $action = "searchFunctionDescription.php";
?>
   <form name="search" method="get" action=<?php echo "\"$action"?>">
   <input name="txtSearch" type="text" id="txtSearch" size="30"/>
   <input type="submit" value="Search" />
    <?php
        // load the xml file into a simplexml instance variable
        $holiday = simplexml_load_file('holidays.xml');

        // draw a table and column headers
        echo "<table border=\"1\">";

        // iterate through the item nodes displaying the contents
        foreach ($holiday->channel->item as $holiday) {
          echo "<tr><td><a href=\"{$holiday->link}\">{$holiday->title}</a>" . "<br />" . 
            "{$holiday->pubDate}" . "<br />" . 
            "{$holiday->description}</td>" . "<br />" . 
            "</tr>";
        }
        echo "</table>";
    ?>

У меня есть страница searchProcessDescription.php

<?php
    // create an instance
    $holidayDoc = simplexml_load_file('holidays.xml');      

    // Passes txtSearch to current script from searchFormDescription.php
    $txtSearch = $_GET['txtSearch'];

    // Informs user of what they have searched
    echo "Showing Results for <strong>$txtSearch</strong>";

    // set the query using the description
    if (!is_null($txtSearch)) {
        $qry = "//channel/item[description[contains(text(),\"$txtSearch\")]]";
    }
    else {
    // blank search entered so all holidays are shown.
        $qry = "/channel/'ALL'";
    }

    // execute the xpath query
    $holidays = $holidayDoc->xpath($qry);

    // now loop through all holidays and entered results into table
    echo "<table border=\"0\">\n";
    foreach ($holidays as $holiday) 
    {
        echo "<tr>\n";
        echo "<td><a href=\"{$holiday->link}\">{$holiday->title}</a></td>";
        echo "<td>{$holiday->description}</td>";
        echo "<td>{$holiday->pubDate}</td>";
        echo "<td><input type=\"checkbox\" name=\"saveCB\" value=\"3\"/></td>";
        echo "</tr>\n";
    }
        echo "</table>\n";
?>

Есть ли простой способ добавить этот процесс на страницу индекса и обновить страницу при нажатии кнопки поиска?

Спасибо

1 Ответ

2 голосов
/ 28 марта 2012

Да, вы можете добавить еще одну переменную в форму, чтобы проверить функцию, которую вы должны показать, что-то вроде этого:

<?php
// create an instance
$holidayDoc = simplexml_load_file('holidays.xml');

$resultTable = "";

switch (@$_POST['action']){
    case "Search":

        $txtSearch = $_POST['txtSearch'];
    $resultTable .= "Showing Results for <strong>$txtSearch</strong><br />";

        // set the query using the description
        if (!is_null($txtSearch)) {
            $qry = "//channel/item[description[contains(text(),\"$txtSearch\")]]";
        }
        else {
        // blank search entered so all holidays are shown.
            $qry = "/channel/'ALL'";
        }

        // execute the xpath query
        $holidays = $holidayDoc->xpath($qry);

        // now loop through all holidays and entered results into table
        $resultTable .= "<table border=\"0\">\n";

        foreach ($holidays as $holiday) 
        {
            $resultTable .= "<tr>\n";
            $resultTable .= "<td><a href=\"{$holiday->link}\">{$holiday->title}</a></td>";
            $resultTable .= "<td>{$holiday->description}</td>";
            $resultTable .= "<td>{$holiday->pubDate}</td>";
            $resultTable .= "<td><input type=\"checkbox\" name=\"saveCB\" value=\"3\"/></td>";
            $resultTable .= "</tr>\n";
        }
        $resultTable .= "</table>\n";

        break;

    default: // this means the home page, as is, without the query into XML file
        $resultTable .= "<table border=\"1\">";// draw a table and column headers

        // iterate through the item nodes displaying the contents
        foreach ($holidayDoc->channel->item as $holiday) {
            $resultTable .=  "<tr><td><a href=\"{$holiday->link}\">{$holiday->title}</a>" . "<br />" . 
            "{$holiday->pubDate}" . "<br />" . 
            "{$holiday->description}</td>" . "<br />" . 
            "</tr>";
        }
        $resultTable .= "</table>";
    break;
    }

?>

<form name="search" method="POST" action=#">
    <input name="txtSearch" type="text" id="txtSearch" size="30"/>
    <input type="submit" value="Search" name="action" />
</form>

<?=$resultTable ?> <!-- finally show the result table -->

Надеюсь, это полезно!

...