Datenbank durchsuchen
Tanja
- php
0 Philipp Hasenfratz0 Tanja
0 Ilja
Hallo,
ich habe ein kleines Datenbank Suchscript geschrieben.
Die Suchwörter sollen anschließend im Ergebnis rot markiert werden, aber es werden keine roten Wörter angezeigt?
Wo ist hier der Fehler?
// OK, wir haben etwas
$search = $_POST['searchfor'];
$verbindung = $_POST['howtosearch'];
$words = explode(" ",$search);
$query = "SELECT * FROM " . $tabellen_name . " WHERE ";
for ($i=0; $i<count($words); $i++)
{
$query .= "( " . $feldname . " like '%" . $words[$i] . "%' ) ";
if($i<count($words)-1)
{
$query .= " " . $verbindung . " ";
}
}
$conid = @mysql_connect($host,$db_user,$db_pass);
$db = mysql_select_db($db_name,$conid);
$result = mysql_query($query,$conid);
if(mysql_affected_rows() > 0)
{
$num_found = mysql_num_rows($result); //Anzahl der Treffer
echo 'Ihre Suche war erfolgreich. ' . $num_found . ' Ergebnisse:<br><br>';
for($i = 0; $i < $num_found; $i++)
{
$textstring = mysql_result($result,$i);
$textstring = str_replace($words[$i], "<font color="red"><b>".$words[$i]."</b></font>", $textstring);
echo $textstring . "<hr>";
}
Halihallo Tanja
$textstring = mysql_result($result,$i);
$textstring = str_replace($words[$i], "<font color="red"><b>".$words[$i]."</b></font>", $textstring);
echo $textstring . "<hr>";
}
Was sagt dir http://www.php.net/mysql_result, was
mysql_result() für Parameter und Ergebnisse liefert? - Nämlich nicht
das, was du möchtest...
Du hast zum einen potenziell mehrere Datensätze und zum anderen
mehrere Attribute (wegen 'SELECT * ...') die die Anfrage zurück gibt.
Wenn du also alle Datensätze und alle Attribute ausgeben möchtest,
musst du auch für alle Datensätze und alle Attribute einen
str_replace() und eine Ausgabe machen.
Typischerweise nimmt man für mehrere Datensätze und mehrere Attribute
jedoch nicht mysql_result(), sondern mysql_fetch_row,
mysql_fetch_object oder mysql_fetch_assoc, um gleich einen ganzen
Datensatz als Objekt, Array, assoziatives Array vorliegen zu haben
und nicht jedes Attribut eines jeden Datensätzes separat auslesen zu
müssen.
Viele Grüsse
Philipp
Hallo!
Halihallo Tanja
Es heißt Hallo nicht "Halihallo"
$textstring = mysql_result($result,$i);
$textstring = str_replace($words[$i], "<font color="red"><b>".$words[$i]."</b></font>", $textstring);
echo $textstring . "<hr>";
}Was sagt dir http://www.php.net/mysql_result, was
mysql_result() für Parameter und Ergebnisse liefert? - Nämlich nicht
das, was du möchtest...
doch das möchte ich!
Du hast zum einen potenziell mehrere Datensätze und zum anderen
mehrere Attribute (wegen 'SELECT * ...') die die Anfrage zurück gibt.
Es ist nur ein Testscript deswegen *
Das was du mir nun sagen willst ist nicht der Fehler der liegt woanders... Aber Du musst es ja wissen!
Halihallo Tanja
Es ist nur ein Testscript deswegen *
Das was du mir nun sagen willst ist nicht der Fehler der liegt woanders... Aber Du musst es ja wissen!
mysql_result($ressource,$datensatz_index,$feld);
Du schreibst bei dir lediglich mysql_result($ressource,$datensatz_index)
mysql_result arbeitet lauf Doku auf Attributebene, es gibt dir also
lediglich das Ergebnisses *eines* Attributs (Feldes) zurück. Ich
nehme weiterhin an, dass beim Unterlassen von $feld das erste
Attribut zurückgegeben wird. Bei der Selektion innerhalb des SELECT-
Statements selektierst du nach verschiedenen Feldern wenn sie auf
einen Begriff deiner Anfrage zutreffen. Aber ausgegeben wird nur das
erste Attribut (obwohl mit * alle Attribute der Relation ausgegeben
werden). Da du sagst, dass keine Wörter rot markiert werden folgere
ich, dass in der ersten Spalte (erstes Attribut) die entsprechenden
Wörter eben gar nicht vorkommen (sondern in irgendeinem anderen
Attribut vorhanden sind, welches du gar nicht ausgibst).
Visualisieren wir mal etwas:
test1 test2
a b
c d
e f
Du suchst nach 'b'. Es wird also der erste Datensatz ausgewählt.
Dieser wird nun über mysql_result(1) geholt, aber was wird geholt?
Das erste Attribut: 'test1', also 'a'. Da du nach 'b' gesucht hast,
wird dir natürlich nichts rot gefärbt...
Viele Grüsse
Philipp
PS: Wandle deine Abneigung mir gegenüber in Dankbarkeit um, sonst
wandelt sich meine Bitte(r)keit in Abneigung :-)
hi,
Es heißt Hallo nicht "Halihallo"
[...]
Das was du mir nun sagen willst ist nicht der Fehler der liegt woanders... Aber Du musst es ja wissen!
ja, genauso wie du wissen musst, ob du hier hilfe bekommen, oder mit äußerungen wie oben zitierten die potentiellen helfer vergraulen willst.
gruß,
wahsaga
yo,
Wo ist hier der Fehler?
zum einen würde ich mir mal die variable $query ausgeben lassen, nachdem du sie in der schleife gebildet hast. so ist es schwer zu sagen, ob es einen fehler innerhalb der query gibt.
if(mysql_affected_rows() > 0)
diese funktion basiert auf DML befehle, sprich updates, inserts und deletes nicht aber auch select abfragen. dafür ist mysql_num_rows zuständig, dass du auch weiter unten benutzt.
Ilja