[PHP/HTML] Suche in Webseite integrieren

Aspri

Klamm-Fux
ID: 67481
L
27 Mai 2006
255
21
Hallo,
ich muss zugeben, ich bin ein ziemlicher PHP Noob, bin aber trotzdem gerade dabei mein Projekt in PHP zu realisieren.
Ich verwende ein kleines CMS, welches ich bisher problemlos integrieren und an meine Bedürfnisse anpassen konnte. Nun aber zu meinem Problem. Das CMS beeinhaltet auch ein Suchskript als Extra Datei, so dass man dies bei Bedarf einfügen kann.

Das Suchscript selbst hat selber ein Formular, so dass man es einfach per PHP Include in die Seite einfügen kann. Sucht man nun aber, so erscheint das Suchergebnis allerdings auch an der Stelle wo man dieses Script eingefügt hat. Ich möchte aber, dass das Suchergebnis an der Stelle angezeigt wird, wo mein Content ist. An der Stelle habe ich ebenfalls ein PHP Include mit mehreren Variablen.

Meine bisherigen Versuche sahen so aus, dass ich ein extra Formular eingefügt habe und versucht habe, die Eingaben an das Suchscript zu übergeben. Allerdings ergab dies bisher immer einen Error oder lief ins leere.

Hier mal der Code:

PHP:
<?php
error_reporting (E_ALL ^ E_NOTICE);

$cutepath =  __FILE__;
$cutepath = preg_replace( "'\\\search\.php'", "", $cutepath);
$cutepath = preg_replace( "'/search\.php'", "", $cutepath);

$files_arch = array();

require_once("$cutepath/inc/functions.inc.php");

//check for bad _GET and _POST
if($dosearch == "yes"){
  $check_params = array_merge($_GET, $_POST);
  foreach($check_params as $param_key=>$param_val){
    if( !empty($param_val) && !preg_match('/^[a-zA-Z0-9\- ]{0,255}$/', $param_val) ){
      die("Error! the parameter '$param_key' contains illigal characters");
    }
  }
}

$user_query = cute_query_string($QUERY_STRING, array("search_in_archives", "start_from", "archive", "subaction", "id", "cnshow",
"ucat","dosearch", "story", "title", "user", "from_date_day", "from_date_month", "from_date_year", "to_date_day", "to_date_month", "to_date_year"));
$user_post_query = cute_query_string($QUERY_STRING, array("search_in_archives", "start_from", "archive", "subaction", "id", "cnshow",
"ucat","dosearch", "story", "title", "user", "from_date_day", "from_date_month", "from_date_year", "to_date_day", "to_date_month", "to_date_year"), "post");

// Define Users
$all_users = file("$cutepath/data/users.db.php");
$my_names = array();
foreach($all_users as $my_user)
{
        if(!eregi("<\?",$member_db_line)){
                $user_arr = explode("|",$my_user);
                if($user_arr[4] != ""){ $my_names[$user_arr[2]] = "$user_arr[4]"; }
                else{ $my_names[$user_arr[2]] = "$user_arr[2]"; }
    }
}
// Show Search Form
echo<<<HTML
<script language='javascript' type="text/javascript">
        function mySelect(form){
            form.select();
    }
        function ShowOrHide(d1, d2) {
          if (d1 != '') DoDiv(d1);
          if (d2 != '') DoDiv(d2);
        }
        function DoDiv(id) {
          var item = null;
          if (document.getElementById) {
                item = document.getElementById(id);
          } else if (document.all){
                item = document.all[id];
          } else if (document.layers){
                item = document.layers[id];
          }
          if (!item) {
          }
          else if (item.style) {
                if (item.style.display == "none"){ item.style.display = ""; }
                else {item.style.display = "none"; }
          }else{ item.visibility = "show"; }
         }
</script>
<form method=GET action="$PHP_SELF?subaction=search">
<input type=hidden name=dosearch value=yes>

<div align="center">
  <table border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td><table width="100%" cellspacing="0" cellpadding="0">
          <td width="100%">
            <p align="right">News <input type=text value="$story" name=story size="24">
        </table></td>
    </tr>
    <tr>
      <td>

<div id='advanced' style='display:none;z-index:1;'>
<table width="100%" cellspacing="0" cellpadding="0">
          <td width="100%" align="right">
            <p align="right">Title <input type=text value="$title" name=title size="24">
  <tr>
    <td width="100%" align="right">Author <input type=text value="$user" name=user size="24">
  </tr>



  <tr>
    <td width="100%" align="right">From date
       <select name=from_date_day>
       <option value="">  </option>
HTML;
for($i=1;$i<32;$i++){
    if($from_date_day == $i){ echo"<option selected value=$i>$i</option>"; }
    else{ echo"<option value=$i>$i</option>"; }
}

echo"</select><select name=from_date_month>       <option value=\"\">  </option>";

for($i=1;$i<13;$i++){
    $timestamp = mktime(0,0,0,$i,1,2003);
    if($from_date_month == $i){ echo"<option selected value=$i>". date("M", $timestamp) ."</option>"; }
    else{ echo"<option value=$i>". date("M", $timestamp) ."</option>"; }
}

echo"</select><select name=from_date_year>       <option value=\"\">  </option>";

for($i=2003;$i<2011;$i++){
    if($from_date_year == $i){ echo"<option selected value=$i>$i</option>"; }
    else{ echo"<option value=$i>$i</option>"; }
}
//////////////////////////////////////////////////////////////////////////
echo<<<HTML
  </tr>
  <tr>
    <td width="100%" align="right">To date
       <select name=to_date_day>
       <option value="">  </option>
HTML;
for($i=1;$i<32;$i++){
    if($to_date_day == $i){ echo"<option selected value=$i>$i</option>"; }
    else{ echo"<option value=$i>$i</option>"; }
}

echo"</select><select name=to_date_month><option value=\"\">  </option>";

for($i=1;$i<13;$i++){
    $timestamp = mktime(0,0,0,$i,1,2003);
    if($to_date_month == $i){ echo"<option selected value=$i>". date("M", $timestamp) ."</option>"; }
    else{ echo"<option value=$i>". date("M", $timestamp) ."</option>"; }
}

echo"</select><select name=to_date_year><option value=\"\">  </option>";

for($i=2003;$i<2011;$i++){
    if($to_date_year == $i){ echo"<option selected value=$i>$i</option>"; }
    else{ echo"<option value=$i>$i</option>"; }
}

if($search_in_archives){ $selected_search_arch = "checked=\"checked\""; }

echo<<<HTML
      </select>
  </tr>
  <tr>
    <td width="100%" align="right">
      <p align="right"><label>Search and archives
    <input type=checkbox $selected_search_arch name="search_in_archives" value="TRUE"></label>
  </tr>
</table>
</div>

          </td>
    </tr>
    <tr>
      <td>
        <p align="right"> 
    <a href="javascript:ShowOrHide('advanced','')">advanced</a>   <input type=submit value=Search>
      </td>
    </tr>
  </table>
</div>
$user_post_query
</form>
<center>
HTML;

// Don't edit below this line unless you know what you are doing !!!

if($dosearch == "yes")
{

    if( $from_date_day != "" and $from_date_month != "" and $from_date_year != "" and $to_date_day != "" and $to_date_month != "" and $to_date_year != "" )
    {
        $date_from         = mktime(0,0,0,$from_date_month,$from_date_day,$from_date_year);
        $date_to         = mktime(0,0,0,$to_date_month,$to_date_day,$to_date_year);

        $do_date = TRUE;
    }


        $story = trim($story);

        if($search_in_archives){
            if(!$handle = opendir("$cutepath/data/archives")){ die("<center>Can not open directory $cutepath/data/archives "); }
                while (false !== ($file = readdir($handle)))
                {
                        if($file != "." and $file != ".." and eregi("news", $file))
                        {
                                $files_arch[] = "$cutepath/data/archives/$file";
                }
                }
        }
    $files_arch[] = "$cutepath/data/news.txt";

    foreach($files_arch as $file)
    {
        $archive = FALSE;
        if(ereg("([[:digit:]]{0,})\.news\.arch", $file, $regs)){ $archive = $regs[1]; }
        $all_news_db = file("$file");
            foreach($all_news_db as $news_line){
                        $news_db_arr = explode("|",$news_line);
                        $found  = 0;

                        $fuser  = FALSE;
                        $ftitle = FALSE;
                        $fstory = FALSE;
                        if($title and @preg_match("/$title/i", "$news_db_arr[2]")){ $ftitle = TRUE; }
                        if($user  and @preg_match("/\b$user\b/i", "$news_db_arr[1]")){ $fuser = TRUE; }
                        if($story and (@preg_match("/$story/i", "$news_db_arr[4]") or @preg_match("/$story/i", "$news_db_arr[3]"))){ $fstory = TRUE;}

                        if($title and $ftitle){ $ftitle = TRUE; }elseif(!$title){ $ftitle = TRUE; }else{ $ftitle = FALSE; }
                        if($story and $fstory){ $fstory = TRUE; }elseif(!$story){ $fstory = TRUE; }else{ $fstory = FALSE; }
                        if($user  and $fuser) { $fuser  = TRUE; }elseif(!$user) { $fuser  = TRUE; }else{ $fuser  = FALSE; }
            if($do_date)
            {
                    if($date_from < $news_db_arr[0] and  $news_db_arr[0] < $date_to){ $fdate = TRUE; }else{ $fdate = FALSE; }
            }else{ $fdate = TRUE; }

                        if($fdate and $ftitle and $fuser and $fstory){ $found_arr[$news_db_arr[0]] = $archive; }

                }//foreach news line
        }


        echo"<br /><b>Founded News articles [". count($found_arr)."]:</b><br />";


            if($do_date){echo"from ".@date("d F Y",$date_from)." to ".@date("d F Y",$date_to)."<br />";}


    // Display Search Results
    if(is_array($found_arr)){
        foreach($found_arr as $news_id => $archive)
        {
            if($archive){$all_news = file("$cutepath/data/archives/$archive.news.arch");}
            else{ $all_news = file("$cutepath/data/news.txt"); }

            foreach($all_news as $single_line)
                           {
                                   $item_arr = explode("|",$single_line);
                                   $local_id = $item_arr[0];

                                   if($local_id == $news_id){
////////// Showing Result

                    echo"<br /><b><a href=\"$PHP_SELF?misc=search&subaction=showfull&id=$local_id&archive=$archive&cnshow=news&ucat=$item_arr[6]&start_from=&$user_query\">$item_arr[2]</a></b> (". date("d F, Y", $item_arr[0]) .")";

////////// End Showing Result
                }
                           }
                   }
     }else{ echo"There are no news matching your search criteria"; }

}//if user wants to search
elseif( ($misc == "search") and ($subaction == "showfull" or $subaction == "showcomments" or $_POST["subaction"] == "addcomment" or $subaction == "addcomment")){

        require_once("$cutepath/show_news.php");

        unset($action,$subaction);
}

?>
Meine Frage also, wie kann ich das Search-Script modifizieren, so dass das Suchergebnis im Mainpart meiner Seite angezeigt wird, bzw. wie muss ich das Suchformular gestallten, so dass die Eingabe korrekt an das Suchscript übergeben wird und im Mainpart meiner Seite angezeigt wird.

Edit: irgendwie wird der Code hier merkwürdig formatiert
 
Zuletzt bearbeitet von einem Moderator:
das scheint ja eine per include() eingebundene Datei zu sein, die du da angegeben hast.

folglich solltest du die Ausgabe der Ergebnisse , die in dieser Datei stattfindet, rausnehmen bzw zwischenspeichern und in deinem Hauptscript ausgeben.

so wie ich das sehe beginnt diese Ausgabe ab Zeile 233.


1:(Vorraussetzung: die Suchmaschine wird von dieser per include oder require eingebunden)
a)
du setzt den fuer die Ausgabe verantwortlichen Code in deine "Hauptseite" ein
b)
du laesst den COde in dieser Datei stehen, ersetzt jedoch den Echo-Befehl durch etwas wie $such_ergebnisse.= und schrreibst in deine "Hauptseite" dann: echo $such_ergebnisse;

viel Spass weiterhin mit PHP;)
 
Danke für die Antwort, aber irgendwie bekomme ich es nicht hin.

Am liebsten wäre mir ein extra Formular, was einfach nur die Eingaben an das Suchscript übergibt.

Also, wenn ich das Suchscript integriere bringt mir das Suchscript selbstständig ein Formular und gibt mir das Ergebniss aber auch genau an dieser Stelle wieder aus.

Auf meiner Mainpage habe ich selber ein PHP Include was in etwa wie folgt aussieht.
PHP:
<?php
switch($_GET["id"]) {
case "1": include("1.php");break;
case "2": include("2.php");break;
case "3": include("3.php");break;
case "4": include("4.php");break;
case "suche": include("/home/www/doc/886/blabla/www/cms/search.php");breack;
case "comment": include("/home/www/doc/886/blabla/www/latest_comments.php");breack;
default:  include("/home/www/doc/886/blabla/www/headlines.php");
}
?>

Die Seiten werden also durch die entsprechende ID aufgerufen. Am liebsten wäre mir also, das ich in dem Formular einfach meine Daten eingebe und das an meineseite.php?id=suche übergebe. Damit wird die ID Suche im Mainpart aufgerufen und somit das Searchscript aktiviert, aber das funzt natürlich nicht.

Das Suchscript gibt in Zeile 65 durch das Formular die ?subaction=search an sich weiter.
Modifiziere ich nun meine eigenes Formular, was das ganze an das Suchscript weiter gibt auf meineseite.php?id=suche&subaction=search haut das nicht hin und das verstehe ich nicht.

Hat da wer ne Idee, blickt jemand überhaupt bei dem Code des Suchscripts durch?