Suchfunktion für Frameless Seite

tacef

Mitglied
Hallo

Ich hoffe mal ich poste hier in der richtigen Sektion. Falls nicht, sry.

Also mein Problem ist wie folgt:

Ich habe eine Seite programmiert wo die Inhalte in einer Datenbank gespeichert wird.

Jetzt will ich eine Suchfunktion einbauen. Das Suchfeld befindet sich im header und ich will das ergebnis im Content bereich anzeigen lassen.

Im moment steht nur der HTML teil:
PHP:
          <tr>
          
            <form ><td height="23"><label>
              <input name="suchen" type="text" id="suchen" size="40">
            </label></td>
            <td><input type="submit" name="button" id="button" value="suchen"></td>
    </form>
          </tr>

Wenn ich jetzt auf den Suchen Button klicke kommt in der Adressleiste des Browsers folgendes: ?suchen=&button=suchen

Leider bin ich am ende mit meinem Latein.

Ich habe die Tabelle Member, und will die Spalte Name durchsuchen lassen und dieses wie schon gesagt im content bereich ausgeben lassen.

Bin für jede hilfe dankbar
 
Nabend tacef,

zunächst einmal brauchst du ein valides Formular (das form-Element benötigt mindest ein action- und ein method-Attribut). Die Tabellenelemente scheinen mir da fehl am Platz und lassen mich erahnen, dass du Tabellen zum Positionieren anstatt zum Auszeichnen von tabellarischen Daten benutzt, wofür sie da sind. Aber das ist ein anderes Thema und wäre wohl eher was für's HTML-Forum. Ich möchte dir trotzdem an dieser Stelle http://jendryschik.de/wsdev/einfuehrung/ ans Herz legen.
Und Formular zum Suchen könnte so aussehen:
HTML:
<form action="search.php" method="post">
  <fieldset>
    <legend>Suche</legend>

    <label for="search_term">Suchbegriff:</label>
    <input type="text" name="search_term" id="search_term" size="70" /><br />

    <input type="submit" value="Suchen" />
  </fieldset>
</form>

Dann kannst du in der search.php mittels $_POST auf die übertragene Werte zugreifen und in deiner Abfrage an die Datenbank verwenden:
PHP:
$sql = "SELECT
            ...
        FROM
            members
        WHERE
            name LIKE '%" . mysql_real_escape_string($_POST['search_term']) . "%'";

Das LIKE '%suchbegriff%' bewirkt, dass der Suchbegriff innerhalb des Namens gesucht wird. Das kannst du natürlich noch auf deine Wünsche anpassen, wenn du zum Beispiel nur exakte Treffer anzeigen willst.

Viele Grüße,
Marvin (der jetzt weiter Fußball guckt)
 
Danke für die schnelle Antwort.

Ich hab das jetzt so ziemlich zum funktionieren gebracht, bis auf eine Sache:

Wenn ich das feld leer lasse wirft er mir alle Mitglieder aus nicht wie beabsichtigt, den Text: Keine Übereinstimmung gefunden.

Hier meine Search.php
PHP:
<?php

	echo "<table width=\"50\" border=\"0\">";
	
	$sql = "SELECT
				name
			FROM
				mitglieder
			WHERE
				name LIKE '%" . mysql_real_escape_string($_POST['search_term']) . "%'"; 
			
	$result = mysql_query($sql) OR die(mysql_error());
	if(mysql_num_rows($result)) { // gucken ob was im Query drinsteckt
		while($row = mysql_fetch_assoc($result)) {
	  	echo "<tr>";
		echo "<td><a href=\"index.php?p=mitarbeiter#".$row['name']."\">".$row['name']."</a>";
		echo "</tr>";
			}
		} else{
			echo "Kein Mitarbeiter mit diesem Namen gefunden<br />\n";
		}

echo "</table>";
?>
 
Zuletzt bearbeitet:
Lässt du den Suchbegriff leer wird die DB nach %% durchsucht, was quasi auf alles zu trifft. Du musst also vor dem MySQL Query überprüfen ob der Suchbegriff einer Mindestlänge entspricht. Hier im Forum z.B. wird die Suche erst ab einer Länge von drei Buchstaben möglich.
 
Hab das jetzt so gelöst:

PHP:
<?php

	echo "<table width=\"50\" border=\"0\">";
	
	$editfeld = $_POST['search_term'];
	if (strlen( $editfeld )> 0)
	{
	$sql = "SELECT
				name
			FROM
				mitglieder
			WHERE
				name LIKE '%" . mysql_real_escape_string($_POST['search_term']) . "%'"; 
			
	$result = mysql_query($sql) OR die(mysql_error());
	if(mysql_num_rows($result)) { // gucken ob was im Query drinsteckt
		while($row = mysql_fetch_assoc($result)) {
	  	echo "<tr>";
		echo "<td><a href=\"index.php?p=mitglieder#".$row['name']."\">".$row['name']."</a>";
		echo "</tr>";
			}
		} 
		}
		else{
			echo "Kein Mitglied mit diesem Namen gefunden<br />\n";
		}

echo "</table>";
?>

Ist zwar nicht die ganze saubere lösung, für ein Intranet fürn Verein wirds wohl reichen find ich. Funktionieren tut sie.

Sollte wer Verbesserungsvorschläge haben, ich bin für jede Anregung offen.
 
Zurück