PHP Suchfunktion Suchen MySQL
Newssystem - Such FunktionTutorials » PHP/MySQL Tutorials » Newssystem - Such Funktion
Newssystem - Such Funktion - Tutorial
Da nun schon mehrfach der Wunsch bezueglich eines Tutorials in Punkto Such-Funktion fuer das Newssystem geaeussert wurde...Widmen wir uns heute als der Durchsuchung einer MySQL Datenbank, nichts leichter als das, denn mit dem Operator LIKE in einer SELECT Anweisung, laesst sich eine MySQL Datenbank ganz einfach durchsuchen ...
Step 1 - das Formular
Wir benoetigen ein Formular, in welches wir einen Suchbegriff eingeben koennen, denn ohne Suchbegriff kann man ja schlecht etwas suchen...Unser Formular fuer die Suche besteht aus einem INPUT Feld, zur Eingabe des Suchbegriffes und einem Button mit dem das Formular abgeschickt wird. Das Attribut action im Form-Tag enthaelt die Angabe welche Datei unsere Formulareingabe verarbeiten soll, in unserem Falle ist das jetzt die Dateie suchen.php.
Das Formular kann an beliebiger Stelle auf der Website platziert werden, wo man eben die Suche haben moechte ...
<form action="suchen.php" method="post"> <input type="text" name="suchen" /> <input type="submit" name="submit" value="Suchen"/> </form>
Step 2 - suchen.php
Die Datei suchen.php listet die Suchergebnisse auf und ist wie folgt aufgebaut:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>GrafixxNews</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta http-equiv="imagetoolbar" content="no" /> <meta http-equiv="Content-Language" content="de" /> <link rel="stylesheet" href="style.css" type="text/css" /> </head> <body> <div id="ram"> <div id="header"> <h1>GrafixxNews</h1> </div> <div id="content"> <?php // suchen.php include('config.inc.php'); // DB-Verbindung einbinden if(isset($_POST['submit'])){ // Sofern Submit geklickt wurde if(empty($_POST['suchen'])){ // Pruefen ob Suchbegriff angegeben wurde echo "Bitte danke Suchbegriff angeben!"; }else{ // sofern Suchbegriff angegeben wurde $pfad = "suchen.php?go="; // Variable definieren => Blaetterfunktion $search = clean_it($_POST['suchen']); // Variable definieren // Suchergebnisse auslesen $abfrage = mysql_query("SELECT id, autor, title, cat, news, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM news WHERE title LIKE '%".$search."%' OR news LIKE '%".$search."%'"); $total = mysql_num_rows($abfrage); // Anzahl aller Zeilen in DB ermitteln echo "<h2 class=\"blue\">Suchergebniss(e) zu \"".$search."\"</h2>\n"; // headline if($total == 0){//wenn nichts gefunden wurde echo "<p>Es wurde leider nichts gefunden...</p>"; }else{ // sofern denn was gefunden wurde $form = 'no'; // Variable definieren => Formular nicht mehr anzeigen // Suchergebnisse ausgeben ausgeben while($row = mysql_fetch_object($abfrage)){ // Anzahl der Kommentare ermitteln $comments = mysql_query("SELECT id FROM comments WHERE news_id='$row->id'"); $com_num = mysql_num_rows($comments); // Anzahl der Kommentare echo "<div class=\"news\">\n"; echo "<h2>".$row->title."\n <small>verfasst von ".$row->autor." am ".$row->datum." | \n"; if(!empty($row->cat)){ // sofern Kategorie angegeben echo "abgelegt unter: <a href=\"news.php?cat=".urlencode($row->cat)."\">".$row->cat."</a> | \n"; } echo "<a href=\"comments.php?id=".$row->id."\">Kommentare ".$com_num."</a></small>\n </h2>"; if(isset($_GET['cat'])){ // Kategorieseite nur einen Auszug ausgeben $max_show = "250"; // max 450 Zeichen anzeigen if (strlen($row->news) > $max_show){ // sofern $news mehr als 450 Zeichen enthaelt echo "<p>".substr($row->news, 0, strpos($row->news, ".", 120 )+1 )."\n"; // Ab 150 Zeichen nach nem punkt suchen und alles das was davor enthalten ist ausgeben echo "<a href=\"comments.php?id=".$row->id."\" class=\"right\">read more...</a>\n"; echo "<br style=\"clear: right;\" /></p>"; // link ausgeben }else{ // komplett ausgeben echo "<p>".bbcode($row->news)."</p>"; } }else{ echo "<p>".bbcode($row->news)."</p>"; } echo "</div>\n"; } // close while } // close DB gefunden }// close suchbegriff pruefen }// close submit gedrueckt if(!isset($form)){ // Formular ?> <form action="" method="post"> <input type="text" name="suchen" /> <input type="submit" name="submit" value="Suchen" class="button"/> </form> <?php } // Close isset form ?> </div> </div> <div id="footer"> <p class="right">Valid <a href="http://validator.w3.org/check/referer" title="This page validates as XHTML 1.0 Transitional"> <abbr title="eXtensible HyperText Markup Language">XHTML</abbr></a> | Valid <a href="http://jigsaw.w3.org/css-validator/check/referer" title="CSS ist valide!"><abbr title="Cascading Style Sheets"> CSS</abbr></a> </p> <p><a href="http://unnecessary.de">GrafixxNews</a> <a href="http://alice-grafixx.de"> Alice-Grafixx.de</a></p> </div> </body> </html>
Ausschlaggebend fuer die Suche ist die DB Abfrage in Zeile 41
$abfrage = mysql_query("SELECT id, autor, title, cat, news, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM news WHERE title LIKE '%".$search."%' OR news LIKE '%".$search."%'");
Hiermit weisen wir die Datenbank an, uns alle Ergebnisse auszuspucken, wo in title oder aber in news unser Suchbegriff enthalten ist ...
Die beiden % jeweils vor und nach unserem Suchbegriff, geben an dass sowohl VOR als auch NACH unserem Suchbegriff text vorhanden sein kann.
Wuerde unsere DB Abfrage stattdessen wie folg lauten:
$abfrage = mysql_query("SELECT id, autor, title, cat, news, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM news WHERE title LIKE '%".$search."%'");
Wuerden nur Ergebnisse ausgegeben werden, in denen title unseren Suchbegriff enthaelt.
Und wenn die Abfrage so aussehen wuerde:
$abfrage = mysql_query("SELECT id, autor, title, cat, news, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM news WHERE news LIKE '%".$search."%'");
Wuerden nur Ergebnisse ausgegeben werden, in denen ausschliesslich in news unseren Suchbegriff enthaelt ...
Man koennte z.B. auch nur Suchergebnisse eines bestimmten Autoren anzeigen lassen, dann wuerde unsere Abfrage so aussehen:
$abfrage = mysql_query("SELECT id, autor, title, cat, news, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM news WHERE autor = 'NAMEdesAutors' AND title LIKE '%".$search."%' OR news LIKE '%".$search."%'");
Oder aber man koennte sich auch die Suche fuer nur eine bestimmte Kategorie zulassen, dann wuerde die Datenbankabfrage so aussehen:
$abfrage = mysql_query("SELECT id, autor, title, cat, news, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM news WHERE cat = 'KATEGORIEBEZEICHNUNG' AND title LIKE '%".$search."%' OR news LIKE '%".$search."%'");
Kommentar schreibenHinterlasse einen Kommentar
Du musst angemeldet sein, um einen Kommentar zu hinterlassen...
Du bist noch kein Mitglied von Alice-Grafixx.de?
Dann kannst du dich hier kostenlos registrieren ...