用XPath和php搜索

时间:2012-03-28 08:44:47

标签: php forms search xpath refresh

目前我有一个索引页面,它使用simpleXML显示来自XML页面的值。还有一个打印到另一个页面的搜索功能,我想要做的是刷新首页,以便在点击按钮时仅显示搜索结果。

索引页。

<?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 个答案:

答案 0 :(得分:2)

是的,您可以在表单中添加另一个变量来检查您必须显示的功能,如下所示:

<?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 -->

我希望这很有用!