Webstatt.org - Community seit 2006 - 2012 (2024?)

suchergebnisse formatieren

Avatar user-247
21.11.2006 04:58

nach 5h vergeblicher suche im netz bin ich nahe drann aus dem fenster zu springen. aber keine angst, ich wohne im erdgeschoss. Fettes Grinsen

nun, worum gehts...?
ein freundlicher nachbar war so nett und hat mir, bekannt als php-noob, ne kleine datenbank für ein browsergame gemacht.
da es sich um ein sonnensystem handelt welches pro sternensystem 16 koordinaten und allerlei informationen enthält, war eine copy/past lösung angebracht.
es wird also das komplette sternensystem als text gespeichert und bei der suche auch wieder so ausgegeben.

und nun zum problem:
die suche nach einem einzelnen spielernamen ( z.b. Arcturus ) liefert mit folgendes ergebniss:

1 • ¤ LS ¤ ZU VERMIETEN Arcturus
2 • ¤ LS ¤ Vivatown Vivajohn
3 # ¤ LS ¤ :::: BC-MM-02 Arcturus
4 # ¤ LS ¤ :::: BC-MM-01 Arcturus
5 • =|BC|= Tenacious G user-197 user-135
6 # ¤ LS ¤ NOX Outpost user-135Sheep
7 # =|BC|= Tenacious D user-197 user-135
8 • QinShi Tanus -John-
9 • ¤ LS ¤ Exodus user-135Sheep
10 • =|BC|= Atlantus Cynred (u)
11 • =|BC|= Jesiri Cynred (u)
12 • =|BC|= Manes Cynred (u)
13 • ¤ LS ¤ DWX Outpost user-135Sheep
14 # =|BC|= HAL9005 HAL9000
15 # ¤ LS ¤ °|!|° user-135Sheep
16 • ¤ LS ¤ Vivacity Vivajohn

was ich nun suche ist eine möglichkeit nur DIE ZEILEN anzeigen zu lassen in der auch der SUCHBEGRIFF vorkommt.

das sollte dann in etwa so aussehen ( suchbegriff "BlackSheep" ):


6 # ¤ LS ¤ NOX Outpost user-135Sheep
7 # =|BC|= Tenacious D user-197 user-135
9 • ¤ LS ¤ Exodus user-135Sheep
13 • ¤ LS ¤ DWX Outpost user-135Sheep
15 # ¤ LS ¤ °|!|° user-135Sheep

wer gerne mal einen blick auf den bisherigen code werfen will, bitte:

<?php
session_start();
include("config.inc.php"zwinkern;
include("auth.php"zwinkern;
// $rang = $_SESSION['rang'];
?>
<!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" xml:lang="de">
<head>
<title><? print $area ?></title></head>
<script type="text/javascript">
var stripe = function() {
var tables = document.getElementsByTagName("table"zwinkern;
for(var x=0;x!=tables.length;x++){
var table = tables[x];
if (! table) { return; }

var tbodies = table.getElementsByTagName("tbody"zwinkern;

for (var h = 0; h < tbodies.length; h++) {
var even = true;
var trs = tbodies[h].getElementsByTagName("tr"zwinkern;

for (var i = 0; i < trs.length; i++) {
trs[i].onmouseover=function(){
this.className += " ruled"; return false
}
trs[i].onmouseout=function(){
this.className = this.className.replace("ruled", ""zwinkern; return false
}
if(even)
trs[i].className += " even";

even = !even;
}
}
}
}
window.onload = stripe;
</script>
<link rel="stylesheet" href="style.css" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>

<?
echo "<div class='menueleiste'>";
echo "<strong>Status: </strong>";
echo $status[$_SESSION['rang']];
echo "<strong>&nbsp;&nbsp;|&nbsp;&nbsp;Benutzer: </strong>";
echo $_SESSION['username'];
echo "<strong>&nbsp;&nbsp;|&nbsp;&nbsp;<a href='logout.php'>Abmelden</a></strong></div><br />";
// echo "<form>";
// echo "<form action='logout.php' method='post'>";
// echo "<input type='submit' value='Eintragen' />";
// echo "</form>";
// echo $_SESSION['rang'];


// Datenbank verbinden

mysql_connect($db_server,$db_username,$db_password) or die ("Keine Verbindung moeglich"zwinkern;
mysql_select_db($db_name) or die ("Die Datenbank existiert nicht"zwinkern;

// Datenbank erstellen wenn nicht existent

mysql_query("CREATE TABLE IF NOT EXISTS $db_table (`x` int(3) NOT NULL,`y` int(2) NOT NULL,`z` int(2) NOT NULL,`tf` varchar(1) collate latin1_general_ci NOT NULL,`details` varchar(999) collate latin1_general_ci NOT NULL, `status` varchar(999) collate latin1_general_ci NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci"zwinkern;

// Unnütze Informationen ersetzen

$_POST[csv] = preg_replace('=([\s\S]*)(S])=',NULL,$_POST[csv]);
$_POST[csv] = preg_replace('=(Entfernunglächeln([\s\S]*)=',NULL,$_POST[csv]);

// Eintrag schon vorhanden ?

$test = mysql_query("SELECT * FROM $db_table WHERE x = '$_POST[x]' AND y = '$_POST[y]'"zwinkern;

// Post updaten oder speichern

if (mysql_num_rows($test) > 0) {
$eintrag = "UPDATE $db_table SET details = '$_POST[csv]' WHERE x = '$_POST[x]' AND y = '$_POST[y]'";
}
else {
$eintrag = "INSERT INTO $db_table (x, y, z, tf, details, status) VALUES ('$_POST[x]', '$_POST[y]', '0', '', '$_POST[csv]',''zwinkern";
}

// Query ausführen, aber nur wenn eingaben nicht leer sind

if ($_POST[x] > 0 && $_POST[y] > 0) {
$eintragen = mysql_query($eintrag);
}

// Erfassungsmaske darstellen wenn Status = Admin

if ($_SESSION['rang'] > 1) {
echo "<strong>Erfassen</strong>";
echo "<form action='";
print $_SERVER['PHP_SELF'];
echo "' method='post'>";
echo "<dl>";
echo "<dt>X-Koordinate:</dt>";
echo "<dt><input type='text' name='x' /></dt>";
echo "<dt>Y-Koordinate:</dt>";
echo "<dt><input type='text' name='y' /></dt>";
echo "<dt>Copy & Paste (Ctrl + A / Ctrl + C / Ctrl + V):</dt>";
echo "<dt><textarea name='csv' rows='16' cols='70'></textarea></dt>";
echo "</dl>";
echo "<p>";
echo "<input type='submit' value='Eintragen' />";
echo "&nbsp;<input type='reset' value='Zurücksetzen' />";
echo "</p>";
echo "</form>";
}
else {
echo "";
}
// Suchmaske darstellen

echo "<strong>Suchen</strong>";
echo "<form action='";
print $_SERVER['PHP_SELF'];
echo "' method='post'>";
echo "<dl>";
echo "<dt>Beim Suchen kann man auch Platzhalter (%) verwenden! Beispiel: Don%Duck</dt>";
echo "<dt><br /></dt>";
echo "<dt>Suchwort:</dt>";
echo "<dt><input type='text' name='suchwort' /></dt>";
echo "<dt><br /></dt>";
echo "<dt><input type='submit' value='Suchen' /></dt>";
echo "</dl>";
echo "</form>";

// Hier beginnt der Suchen-Teil

$suchvariable=mysql_query("SELECT * FROM $db_table WHERE details LIKE '%$_POST[suchwort]%'"zwinkern;

//Auswahl ausführen und Ergebnis in Variable z speichern
if (!empty($_POST[suchwort])){

// Statusnachrichten
// SELECT * FROM $db_table WHERE hersteller = 'Toshiba'
if (mysql_num_rows($suchvariable) == 1) {echo "Es wurde <b>", mysql_num_rows($suchvariable), "</b> Datenbankeintrag mit dem Suchwort <b>$_POST[suchwort]</b> gefunden<br /><br />";}
if (mysql_num_rows($suchvariable) == 0) {echo "Es wurden <b>KEINE</b> Datenbankeinträge mit dem Suchwort <b>$_POST[suchwort]</b> gefunden.<br />Bitte versuchen Sie es mit einer anderen Eingabe.<br /><br />";}
if (mysql_num_rows($suchvariable) > 1) {echo "Es wurden <b>", mysql_num_rows($suchvariable), "</b> Datenbankeinträge mit dem Suchwort <b>$_POST[suchwort]</b> gefunden<br /><br />";}

// Suchwort markieren

$suchwort = $_POST[suchwort];
$pattern = '/('.preg_quote($suchwort, '/'zwinkern.'zwinkern/i';
$replace = '<span style="background-color:none; color: #ff0000; font-weight:bold">$1</span>';

// Suchergebnis darstellen
if (mysql_num_rows($suchvariable) > 0) {
echo "<table width=600 valign=top>";
echo "<thead><tr><td width=100><STRONG>X-Koordinate</STRONG></td><td width=100><STRONG>Y-Koordinate</STRONG></td><td><STRONG>NR TF Allianz Planet Spieler [S]</STRONG></td></tr></thead>";
}
// Nun wird das Ergebnis welches in $suchvariable steht in ein Array $unter umgewandelt und so lange durchlaufen wie Zeilen die Abfrage ausgibt.

while($unter=mysql_fetch_array($suchvariable))
{
$unter["details"] = str_replace('zwinkern ','zwinkern<br />',$unter["details"]);
$unter["details"] = str_replace('• ','•<br />',$unter["details"]);
$unter["details"] = str_replace('# ','#<br />',$unter["details"]);
$unter["details"] = str_replace(' ','<br />',$unter["details"]);
echo "<tr>";
echo "<td valign=top>";
echo $unter["x"];
echo "</td><td valign=top>";
echo $unter["y"];
echo "</td><td valign=top>";
echo preg_replace($pattern, $replace, $unter["details"]);
echo "</td>";
echo "</tr>";




}

//Verbindung zum Server schließen

mysql_close();
echo "</table>";
}
?>
</html>



ich hoffe mir kann jemand weiterhelfen. zwinkern

Wo kämen wir denn hin, wenn jeder sagen würde wo kämen wir hin, aber niemand gehen würde um zu sehen wohin wir kämen wenn wir gingen?
Avatar user-162
21.11.2006 12:37

mh such mal nach Infos zu Fulltextsearch in mySql... damit lässt das sich glaube ich ziemlich easy lösen (hab's selbst aber noch nie ausprobiert...)

ansonsten gibts noch die sog. Wildcards:

$sql = "SELECT `...` FROM `...` WHERE `...` LIKE '%Suchbegriff%'"


aber die Fulltextsearch ist halt besser

Perfection is not when there’s nothing to add, but when there’s nothing to take away swisscheek.com/magazine
Avatar user-168
21.11.2006 15:16

Such mal nach Match Against!

Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche
Avatar user-247
21.11.2006 17:13

Nach meinen Recherchen funktioniert "Match Against" nur mit Suchbegriffen ab einer Wortlänge von 3 Buchstaben.
Da jedoch Spielernicks mit weniger als 3 Buchstaben erlaubt sind, kann ich das vergessen.


Folgende Zeile ist im Code schon zu finden
$sql = "SELECT `...` FROM `...` WHERE `...` LIKE '%Suchbegriff%'"


und zwar hier ( oder? ):
$suchvariable=mysql_query("SELECT * FROM $db_table WHERE details LIKE '%$_POST[suchwort]%'"zwinkern; 


Ich möchte das Suchergebniss aber weiter einschränken und aus dem Ergebniss nur DIE EINE ZIELE MIT DEM GESUCHTEN BEGRIFF erhalten.

Noch n'Beispiel:

DB-Eintrag:

Sie erinnern sich?
Der Blindtext-Fall im vorigen Jahr.
Nun will Karl noch nach Canossa.
Und Claudia heiratet zur Busse Copperfield.
Jeden Morgen entzünden sie eine Kerze.



Ich suche nun nach "Karl" und das Ergebniss sollte so aussehen:

Nun will Karl noch nach Canossa.


------------

aja.. um es nochmal ganz deutlich zu sagen:
ME = PHP_NOOB Fettes Grinsen

Wäre also nett wenn man mir auch gleich ein Beispiel zeigt wenn der Aufwand nicht zu gross ist. zwinkern

Wo kämen wir denn hin, wenn jeder sagen würde wo kämen wir hin, aber niemand gehen würde um zu sehen wohin wir kämen wenn wir gingen?