• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Reguläre Ausdrücke für Suchscript in php

R

rico2009

Guest
Hallo,

bin grade dabei mir ein Suchscript in php zu schreiben. Dieses Suchscript soll meine komplette HP nach dem eingegebenen Suchwort durchsuchen. Nach langem googlen und lesen, habe ich es nun mit regulären ausdrücken so in etwa hinbekommen. Mein Problem: Er findet immer das selbe oder garnix. Meine Seite ist eine Fanpage über den ICE, wenn ich jetzt also "ice" als Suchwort eingebe, findet er nur 2 Sachen, eigentlich sollte er aber viel mehr finden. Wie kann ich das machen bzw. hat jemand eine gute Seite wo sowas erklärt ist?

Ein Teil meines Codes (Wenn ihr mehr braucht, sagt einfach bescheid):
PHP:
$find = '@'.preg_quote($find, '@').'@i'; //Das nehme ich für die RegEx - In $find steht das Suchwort drin.
$search = preg_match_all($find,$doc,$search); //Damit suche ich

Gruß
rico2009
 
Ja schon, aber die Groß/Kleinschreibung habe ich mit dem Modi. /i unterbunden.
 
Ich habe gerade mal deine Such getestet. Kann es sein dass du
a) nicht alle Seiten mit deiner Suche abdeckst
oder
b) gar nicht mehr als 2 Treffer zulässt?
Weil ich finde nur max. 2 Treffer und diese beziehen sich immer auf die gleichen Seiten!

edit:
ich denke dass a) zutrifft, ich finde egal was ich suche immer nur die seite:
- streckenkarte
- ice3mf
 
Zuletzt bearbeitet von einem Moderator:
Weil ich finde nur max. 2 Treffer und diese beziehen sich immer auf die gleichen Seiten!

edit:
ich denke dass a) zutrifft, ich finde egal was ich suche immer nur die seite:
- streckenkarte
- ice3mf

Genau das ist mein Problem. Dein Vorschlag a) klingt sehr gut, dass könnte sein, wie kann ich das denn überprüfen? Der Vorschlag b) ist schonmal nicht der Fehler, ich lasse auf jeden Fall mehr als 2 Treffer zu.
 
wie sieht denn dein script aus mit dem du die seiten durchsuchst?
 
Das zeige ich dir morgen, bin heute net mehr an meinem rechner. Hoffe das geht in Ordnung? Danke, dass du mir helfen willst.
 
So mein Code, habe ihn versucht ein bisschen zu formatieren, damit man ihn hier besser lesen kann. Meinen Verzeichnisnamen der in $dir[] stand, habe ich aus Sicherheitsgründen entfernt, braucht ihr ja eh nicht.

PHP:
if(isset($_POST["B1"]) && $_POST["suche"] != "")
{
	$dir[] = ""; //Verzeichnis das ausgelesen werden soll
	$find = $_POST["suche"];
	$find = htmlspecialchars($find);
	$find = '@'.preg_quote($find, '@').'@i';
	for($i=0; $i<count($dir); $i++)
	{
		if($handle = opendir($dir[$i])) //Öffnet das Verzeichnis
		{
			#chdir($dir[$i]); //Wechseln des Verzeichnisses
			$num = 1;
			while(false !== ($file = readdir($handle)) && strstr($file, ".php"))
			{
				$doc = file_get_contents($file); //Liest die gesamte Datei in einen String
				$doc = strip_tags($doc, '<br />'); //Entfernt HTML- und PHP-Tags aus einem String
				$search = preg_match_all($find,$doc,$search);
				$pattern = array('/_/', '/.php/');
				$replace = array('', '');
				$file = preg_replace($pattern,$replace,$file); //Sucht und ersetzt
				if($search)
				{
					$result[] = '<div>'.'Eintrag '.$num.': <a href="'.$file.'.php">'.$file.'</a></div><div> ...</div><br />';
					$num++;
				}
						
			}

		}
	}
if(count($result) == 0)
{ 
	$result[] = '<div>Nichts gefunden.</div>';
	$treffer = 0;
}
else
{
	$treffer = count($result); 
}
}

if(isset($_POST["B1"]) && $_POST["suche"] != "")
{ 
	echo '<div style="border:2px solid #000000; padding:10px; width: 600px;">Treffer: '.$treffer.' Suche nach: "'.$_POST["suche"].'"</div><br/><br/><br/>'; 
	foreach($result as $i)
	{
		echo $i;
	} 
}

Hoffe das hilft euch weiter?

Gruß
rico2009
 
Ohha, jetzt wo das so sagst, dass könnte gut sein. Werde ich morgen mal ausprobieren.
 
Das er dann überhaupt was anzeigt, wundert mich. Normalerweise sind die ersten Dateien die zurückgegeben werden . und ..
 
@kkapsner: Ich glaube dieses strstr($file, ".php") bringt mich sowieso nicht allzu viel, oder?

EDIT: Habe grade mal das strstr($file, ".php") komplet weg gemacht, jetzt kommen da auch mehr Treffer hin. Allerdings kommt jetzt auch ein neuer Fehler, aber den werde ich auch noch gelöst bekommen. :-D
 
Zuletzt bearbeitet:
Wollte mich für die gute von euch bedanken, jetzt klappt das ganze schonmal recht gut.

Habe noch eine Frage: Wie bekommt man so einen "Vorschau Text" hin, muss ich dazu die Datei öffnen und einen Teil auslesen oder wie geht das?
 
Jep, oder du speicherst den Vorschautext separat. Den müßtest du dann nur jedesmal anpassen wenn du die Datei änderst.

Ich würde an deiner Stelle mal über die Verwendung von Datenbanken nachdenken.
 
Jo, das werde dann mal machen. Mit Datenbanken wäre das ganze wahrscheinlich auch einfacher, als jedesmal die Datei zu öffnen und einen Teil davon auszulesen.
 
Auch wenn es nicht umbedingt zum Themenname passt, habe ich noch eine Frage zum Thema Datenbanken und Suchen. Habe mir ein paar Infos geholt und ein php Sciprt gebastelt, dieses klappt leider nicht.

Mein Code:
PHP:
$sql = "SELECT * FROM suche WHERE MATCH (Seite,Beschreibung) AGAINST ('".$suche."')";
$result = mysql_query($sql);
					
$i = 0;
while ($row = mysql_fetch_assoc($result))
{
	$i++;
	echo "Ihre Suche nach ".$suche." ergab ".$i." Treffer!";
	echo $row["Beschreibung"];
}
In $suche steht der eingegeben Suchbegriff drin. Beim ausführen kommt dieser Fehler hier: Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource. Warum?? Ich habe die Ausgabe bis jetzt immer auf diese Art gemacht, muss ich bei einer Datenbanksuche eine andere Ausgabe verwenden?

Ich hoffe ihr versteht mich. :confused:

P.S.: Wie kann man hier einen Themennamen ändern?
 
Danke für deine Antwort, das werde ich mir dann mal ausgeben lassen.
 
Zurück
Oben