BERLINlOGGER 
Online for 7707 days
Last update: 2004.02.16, 09:33
You're not logged in ... login
 
Januar 2004
Mo
Di
Mi
Do
Fr
Sa
So
 
 
 
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 9 
10
11
12
13
14
15
16
17
18
19
20
22
23
25
27
28
29
30
31
 
 
 
es spricht schon für...
.. und für Sie, dass selbst nach der erfolgten...
by Hans.Mittendorfer.Uni-Linz (2004.02.16, 09:33)
...und sogar, wem der...
...und sogar, wem der Blog gehört, in dem das...
by lars.willemsen.berlin (2004.02.16, 02:49)
So Herr Mittendorfer, die...
So Herr Mittendorfer, die Ergebnissliste zeigt jetzt...
by lars.willemsen.berlin (2004.02.16, 02:37)
der jeweilige Autor ..
.. eines Beitrages oder Kommentares wäre eine...
by Hans.Mittendorfer.Uni-Linz (2004.02.03, 17:35)
Nö...
war mir vorher nicht bekannt, ist mir wohl (??) entgangen...
by lars.willemsen.berlin (2004.01.30, 14:14)
 
Beschreibung des PHP Scripts zur globalen Suche
Im folgenden Text beschreibe ich, wie das PHP Script aufgebaut ist, mit dem die Suche erfolgt.

Nachdem das Script den Suchbegriff und die Suchoptionen über die URL zur Verfügung gestellt bekommen hat
(z.B. "collabor.f4.fhtw-berlin.de/php/globalsearch/request.php?MaxResult=25& SearchTopics=true&SearchStorys=true& SearchComments=true&Query=php&Suchen=Suchen"),
wird zuerst aus dieser URL der Suchbegriff abgegriffen

$query = trim($_GET['Query']);

[Erläuterung: $query ist eine Variable, die Funktion trim entfernt führende und nachfolgende Leerzeichen und mit $_Get wird der (hier mit dem Namen 'Query' bezeichnete) Wert entgegengenommen]


und anschliessend werden die Suchoptionen ausgewertet

isset($_GET['SearchTopics'],isset($_GET['SearchStorys'], isset($_GET['SearchComments']

[Erläuterung: mit isset wird abgeprüft ob die in Klammer folgende Bedingung existiert]


und auf dieser Basis wird dann der SQL Query aufgebaut (wie so ein Query dann aussieht, siehe SQL Dokumentation).

Dann wird eine Verbindung zur Datenbank hergestellt


mysql_connect($db_server,$db_user,$db_passwort)

[Erläuterung: Die Variablen $db_server,$db_user,$db_passwort enthalten die Werte Server auf dem die Datenbank liegt, zugreifender Nutzer, Passwort des Nutzers]


und der Query abgeschickt.

mysql_db_query($db_name,$querystring)

[Erläuterung: db_name enthält den Datenbanknamen, $querystring den Query]


Die erhaltene Ergebnissliste wird dann durchlaufen, es werden die benötigten Informationen in Variablen gespeichert und die Ausgabe in HTML wird für jedes Element der Ergebnissliste generiert.
Dazu werden der Beitragstitel , der Topic und der Beitragsinhalt vorher noch 'bereinigt', daß heißt, es wird versucht, alle HTML Codes (z.B. <) in HTML Zeichen zu wandeln

$topic_org = unhtmlentities($topic_org);
$storyctitle_org = unhtmlentities($storytitle_org);
$storycontent_org = unhtmlentities($storycontent_org);

[Erläuterung: Bei unhtmlentities handelt es sich um eine Funktion, die versucht, die Umwandlung vorzunehmen, wobei es nicht bei allen HTML Codes einwandfrei funktioniert]


und anschliessend werden alle HTML Tags entfernt, damit es bei der Ergebnissdarstellung nicht zu visuellen Anomalien kommt.

$topic = strip_tags($topic_org);
$storytitle = strip_tags($storytitle_org);
$story = strip_tags($storycontent_org);

[Erläuterung: Bei strip_tags handelt es sich um eine PHP Funktion, die die Entfernugn der HTML Tags aus dem String vornimmt]


Dann wird noch der Inhalt der Variablen $story so aufbereitet, daß der Suchbegriff fett geschrieben wird und 150 Zeichen vor und 150 Zeichen danach dargestellt werden.
Dazu wird zuerst der String vor dem Suchbegriff zerlegt,

$storytiling[0] = substr($story, 0, strpos($story, trim($_GET['Query'])));
$storytiling[1] = substr($story, strpos($story, trim($_GET['Query'])), strlen($story));

[Erläuterung: $storytiling ist ein Array mit zwei Elemeten, das erste enthält den Teilstring vom ersten Zeichen (0) bis zum Auftauchen des Suchbegriffs (strpos($story, trim($_GET['Query'])) ), das zweite den Rest von der Position des Auftauchen des Suchbegriffs (strpos($story, trim($_GET['Query'])) ) bis zum Ende (strlen($story) )]


anschliessend werden die beiden Teile auf ihre Länge geprüft und gegebenfalls auf 150 Zeichen Länge beschränkt,

if (strlen($storytiling[0]) > 150){
$storytiling[0] = substr($storytiling[0],-150);
$storytiling[0] = '... '.$storytiling[0];
}
if (strlen($storytiling[1]) > 150){
$storytiling[1] = substr($storytiling[1],0,150);
$storytiling[1] = $storytiling[1].' ...';
}

[Erläuterung: die Funktion strlen liefert die Länge eines Strings, die Funktion substr 'beschneidet' einen String]

dann wird der Suchbegriff, der sich ja im zweiten Element des Array befindet, mit den HTML Tags <b> und </b> versehen,

$storytiling[1] = str_replace(trim($_GET['Query']), '<b>'.trim($_GET['Query']).'</b>',$storytiling[1]);

[Erläuterung: Die str_replace Funktion ersetzt in einem String eine Zeichenfolge (trim($_GET['Query']) durch eine andere ('<b>'.trim($_GET['Query']).'</b>')]


zuletzt werden die beiden Arrayelemete wieder zu einem String zusammengefügt.

$storycontent = implode("",$storytiling);


Somit ist der Beitraginhalt aufbereitet und kann ausgegeben werden.
Damit in der Ausgabe auch angezeigt werden kann zu welchem Blog eine Story gehört, muss diese Zugehörigkeit noch aus der Datenbank ermittelt werden.
Handelt es sich bei der Story um einen Kommentar, muss noch ermittelt werden, zu welcher Story er gehört (wie die beiden Querys aussehen, siehe ebenfalls SQL Dokumentation).
Somit sieht dann in dem PHP Script die Ausgabe einer Story folgendermaßen aus:

echo ...;
if ($type == "story"){
if ($topic != "NULL" && $topic !=""){
echo ...;
}
echo ...;
}

[Erläuterung: Zuerst wird der Kopf des Ergebnissatzes ausgegeben(erstes echo). In der ersten if-Bedingung wird überprüft ob es sich bei dem Beitrag um eine Story handelt, wenn ja wird geprüft, ob der Topic der Story leer ist (NULL), gegebenenfalls auf einen Leerstring ("") gesetzt und ausgegeben (zweites echo).
Dann folgt die Ausgabe des eigentlichen Inhalts und der Links zur Story/zum Blog (drittes echo)]


Das solls im Wesentlichen gewesen sein. Ich hoffe, Interessierte mit dieser Dokumentation angesprochen zu haben.

comment