Loading...   Upload Image

Newssystem - Such FunktionTutorials » PHP/MySQL Tutorials » Newssystem - Such Funktion

Verfasst von Alice am 01.03.2012 - wurde schon 21454 mal gelesen

Kategorie: PHP/MySQL
Bewertung:
13x bewertet
Schwierigkeit: einfach
Kommentare: [ 0 ]

Tag - Schlagwort PHP Tag - Schlagwort Suchfunktion Tag - Schlagwort Suchen Tag - Schlagwort MySQL

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>&nbsp;&nbsp;</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 ...


       ALL-INKL.COM - Webhosting Server Hosting Domain Provider