PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "SUCHE" Script


mirch-online
24.10.2003, 01:12:34
Hallo
Ich bin seit nun schon einigen Stunden auf der Suche nach einem Script, mit dem ich meine Datenbank nach einem bestimmten begriff durchsuchen lassen kann und dann eine entsprechende Ausgabe bekomme. Leider hab ich bisher nix passendes gefunden - kann mir vielleicht jemand helfen? Wäre echt nett!
Gruß Mirko

diver-network
24.10.2003, 09:35:20
Hallo Mirko,

willkommmen bei SelfPHP.
Zu Deiner Frage bzgl. Suchskript in einer DB:
Es gibt keins.
Felder bzw. den Inhalt einer Datenbank frägt man mit Hilfe von SQL Querys (Abfragen) ab.
Diese sind, für "Suchskripte" folgendermaßen aufgebaut:
SELECT <feld1>,<feld2> FROM <tabellenname> WHERE <feld1> LIKE '%<gesuchter Wert1>%' [[AND|OR] <feld2> LIKE '%<gesuchter Wert2>%']

SELECT: Gebe mir den Inhalt aller Felder
<feld1> des Feldes (der Spalte) 1
FROM <tabellenname> der Tabelle
WHERE einschränkende Bedingung, "wo"
<feld1> LIKE der Wert des Feldes 1 folgendes enthält
'%<gesuchter Wert1>%' der entsprechende Wert, wobei die "%" eine generische Suche auslösen, sprich es wird alles gesucht, wo der Begriff in irgend einer Form drin steht, auch "mittendrin". Lässt Du die "%" weg wird nach dem exakten Begriff gesucht, wobei z.T. GrOsS-kLeInScHrEiBuNg vernachlässigt wird
[[AND|OR]... weitere Einschränkungen zur Suche

Schau hierzu aber mal in der Hilfe zu MySQL nach, dort steht der korrekte Aufbau von SQL Querys auch drin. Ansonsten gibt es genug Tutorials im Internet bzw. Bücher zu diesem Thema.

HTH,

Andy

mirch-online
24.10.2003, 12:43:21
Ja, das hab ich schon versucht, leider nur mit eingeschränktem Erfolg!
Ich poste mal den Code - villeicht hab ich irgendwo en Fehler drin!

<?php
include("db_connect1.php");
echo "Ihre Suche nach $suchwort ergab folgende Ergebnisse: <br>";
// an dieser Stelle wird das Suchwort aus dem Formular korrekt übergeben und ich bekomm auch die richtige Ausgabe
$abfrage="SELECT * FROM getraenke WHERE sorte LIKE '%suchwort%'";
$ergebnis=mysql_query($abfrage) or die (mysql_error());
while($row=mysql_fetch_array($ergebnis))
{
?>
<table border="1">
<tr>
<td width="277">
<?echo $row->sorte;?>
</td>
<td width="90">
<p align="center"><img src="/Andres/Web/<?=$row->code;?>.jpg" width="80" height="60" alt="" border="0">
</td>
</tr>
</table>
<?php
}
?>

diver-network
24.10.2003, 14:42:35
Hi,

das Skript sieht auf den ersten Blick eigentlich gut aus, daher jetzt mal eine Aufzählung möglicher Fehlerquellen:
- Verbindung zur Datenbank existiert nicht (mysql_connect() UND mysql_select_db())
- Feldnamen/ Tabellennamen falsch geschrieben
- Bei der Funktion mysql_fetch_array() muß anscheinend der Feldname EXAKT so geschrieben sein, wie er in der Datenbank steht. Hierzu gab es aber verschiedene Threads hier im Forum, suche mal nach "chris17" als Antwortenden, er hatte diese Antwort ca. vor 1 Monat
- Kein passender Datensatz in der Datenbank

Was ich gerade gesehen habe: Du schreibst ... LIKE '%suchwort%'"; !! Warum nicht LIKE '%$suchwort%' ?? $suchwort enthält doch Deinen Suchbegriff, nicht "suchwort" ohne $


Was auch nicht gut ist, ist Dein SQL Statement. SELECT * sollte man NIE machen. Ein Grund ist z.B. daß Du dadurch nicht genau weißt, welche Felder in welcher Reihenfolge zurückliefert werden. Mal abgesehen davon, daß Du erst mal 100 Spalten ausgibst, davon aber nur 1 benötigst (Beispiel).

HTH,

Andy

P.S.: Wenn Du nähere Fehlerbeschreibungen liefern würdest wäre es einfacher. Z.B. Fehlermeldungen, die Du bekommst, bis wohin läuft Dein Skript (kannst Du im Zweifelsfall ja auch mit echo("hier bin ich"); prüfen), wie ist die relevante Tabelle aufgebaut, da man LIKE nur bei CHARakterbasierten Feldern nehmen sollte, bei INTeger Feldern ist ein "=" Zeichen angebrachter,....

mirch-online
24.10.2003, 15:15:40
Jaaaa - an dem $ hats gelegen, allerdings drängt sich jetz das Problem auf, es werden entsprechend viele Datensätze ausgegeben, allerdings ohne Inhalt, d.h. ich erhalte eine Tabelle mit mehreren leeren Spalten als Ergebnis. Die Anzahl der Zeilen entspricht der kerrekten Anzahl an Datensätzen in der Datenbank!
Gruß Mirko