AJAX Live Search: The PHP File

The page on the server called by the JavaScript above is a PHP file called liveSearch.php. The source code in liveSearch.php searches the XML file links.xml for titles matching the search string and returns the result. If there is any text sent from the JavaScript (strlen($q)>0), the following happens:
  1. Load the XML file links.xml into a new XML DOM object.

  2. Loop through all <title> elements to find matches from the text sent from the JavaScript.

  3. Set the correct url and title in the $response variable. If more than one match is found, all matches are added to the variable.

  4. If no matches are found, the $response variable is set to “No suggestion.”
<?php
  $xmlDoc = new DOMDocument( );
  $xmlDoc->load( "links.xml" );
  $x = $xmlDoc->getElementsByTagName('link');

  // Get the q parameter from URL.
  $q = $_GET["q"];

  // Lookup all links from the xml file if length of q > 0.
  if ( strlen($q) > 0 ) {
    $hint = "";
    for( $i=0; $i<($x->length); $i++ ) {
      $y = $x->item($i)->getElementsByTagName('title');
      $z = $x->item($i)->getElementsByTagName('url');
      if ( $y->item(0)->nodeType == 1 ) {  // 1: element
        // Find a link matching the search text.
        if ( stristr( $y->item(0)->childNodes->item(0)->nodeValue, $q ) ) {
          if ( $hint == "" ) {
            $hint = "<a href='" .
            $z->item(0)->childNodes->item(0)->nodeValue . "' target='_blank'>" .
            $y->item(0)->childNodes->item(0)->nodeValue . "</a>";
          }
          else {
            $hint = $hint . "<a href='" .
            $z->item(0)->childNodes->item(0)->nodeValue . "' target='_blank'>" .
            $y->item(0)->childNodes->item(0)->nodeValue . "</a>";
          }
        }
      }
    }
  }

  // Set output to "No suggestion" if no hint were found
  //   or to the correct values.
  if ( $hint == "" ) {
    $response = "No suggestion";
  }
  else {
    $response = $hint;
  }

  // Output the response.
  echo $response;
?>