|
|
ben78

: 30.03.2007 : 143
|
| : 25.01.2010, 01:31 : PHP Suchfiunktion |
|
|
Hi Abakusler,
ich habe folgendes Script:
Ich möchte jetzt eine Suchfunktion einbauen. Also so, dass man in einem Suchfeld ein Suchbegriff eingeben kann, wonach dann die die MySQL-DB durchsucht wird.
Wenn jemand z. B. Schuhe eingibt, dann sollen alle Datensätze aus der MySQL-Tabelle die irgendwas mit dem Begriff Schuhe zu tun haben in bestehender HTML-Tabelle ausgespuckt werden.
PLEASE CAN SomeBody HELP??? Ich hocke schon seit zwei Tage und Nächte da.
Schonmal THX im Voraus!!!
Zuletzt bearbeitet von ben78 am 25.01.2010, 04:22, insgesamt 2-mal bearbeitet |
|
| Nach oben |
|
 |
nerd


: 15.02.2005 : 1733 : AKL
|
| : 25.01.2010, 01:50 : PHP Suchfiunktion |
|
|
Suchen? wo denn? in Bezeichnung, Beschreibung, Marke oder Anbieter? Grundsaetzlich geht das mit "where Bezeichnung LIKE '%".$keyword."%' "; allerdings solltest du ggf. fulltext search auf diesen spalten setzen, sonst wirds eventuell zu langsam, je nachdem wie deine db aussieht...
deine css styles direkt in den code gehackt wird dich spaeter auch noch beissen, mach lieber sowas wie
<td class="text">bescheibung 1</td>
<td class="preis">123.45</td>
marketing through social media is just like herding cats. and just to make it interesting, many of the cats are drunk and stupid...
blackhat linkkauf und so...  |
|
| Nach oben |
|
 |
ben78

: 30.03.2007 : 143
|
| : 25.01.2010, 02:57 : PHP Suchfiunktion |
|
|
Ich habe jetzt folgende Zeile:
| Code: |
$sql = "SELECT * FROM `tabelle` WHERE `Bezeichnung` LIKE \'Schuhe\' AND `Beschreibung` LIKE \'Schuhe\' AND `Marke` LIKE \'Schuhe\' AND `Anbieter` LIKE \'Schuhe\' LIMIT 0, 30 "; $db_erg = mysql_query( $sql );
if ( ! $db_erg ) |
anstelle von folgender Zeile:
| Code: |
$sql = "SELECT * FROM `tabelle` WHERE `Bezeichnung` LIKE \'%".$keyword."%'\' AND `Beschreibung` LIKE \'%".$keyword."%'\' AND `Marke` LIKE \'%".$keyword."%'\' AND `Anbieter` LIKE \'%".$keyword."%'\' LIMIT 0, 30 "; $db_erg = mysql_query( $sql );
if ( ! $db_erg ) |
Eingefügt.
Ich bekomme immer als Fehlermeldung folgendes:
Notice: Undefined variable: keyword in /Applications/XAMPP/xamppfiles/htdocs/web-content/mysql/search.php on line 25
und
Notice: Undefined variable: keyword in /Applications/XAMPP/xamppfiles/htdocs/web-content/mysql/search.php on line 25
Ungültige Abfrage: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'%%'\' AND `Beschreibung` LIKE \'%%'\' AND `Marke` LIKE \'%%'\' AND `Anbieter` ' at line 1 |
|
| Nach oben |
|
 |
nerd


: 15.02.2005 : 1733 : AKL
|
| : 25.01.2010, 03:24 : PHP Suchfiunktion |
|
|
ohje - weisst du ueberhaupt was du tust oder kopierst du dir den kram nur irgendwo zusammen? $keyword musst du schon selbst definieren, deine quotes sind falsch gesetzt in der neuen abfrage, es muss "OR" statt "AND" sein und dein table heisst ganz sicher nicht "tabelle".
frage mal lieber den der dir das script verkauft hat.
marketing through social media is just like herding cats. and just to make it interesting, many of the cats are drunk and stupid...
blackhat linkkauf und so...  |
|
| Nach oben |
|
 |
ben78

: 30.03.2007 : 143
|
| : 25.01.2010, 03:53 : PHP Suchfiunktion |
|
|
Script ist nicht gekauft. Sondern selbst zusammengebastellt. Schon seit ca. äähhhmmm einer Woche?... ...Bin halt noch ganz frisch in PHP & MySQL.
Das meine Tabelle nicht tabelle heißt ist mir schon klar.
Habe jetzt folgende Zeile im Script:
| Code: |
$sql = "SELECT * FROM `test`.`schuhe` WHERE (`ID` LIKE \'%$_POST['searchquery']%\' OR `Abbildung` LIKE \'%$_POST['searchquery']%\' OR `Bezeichnung` LIKE \'%$_POST['searchquery']%\' OR `Beschreibung` LIKE \'%$_POST['searchquery']%\' OR `Marke` LIKE \'%$_POST['searchquery']%\' OR `Preis` LIKE \'%$_POST['searchquery']%\' OR `Anbieter` LIKE \'%$_POST['searchquery']%\')"; $db_erg = mysql_query( $sql );
if ( ! $db_erg ) |
...und bekomme nun folgende Fehlermeldung:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /Applications/XAMPP/xamppfiles/htdocs/web-content/mysql/search.php on line 25
F R A G E:
Wie und wo kann ich denn $keyword selbst definieren? |
|
| Nach oben |
|
 |
nerd


: 15.02.2005 : 1733 : AKL
|
| : 25.01.2010, 04:29 : PHP Suchfiunktion |
|
|
$keyword = mysql_real_escape_string($_POST['searchquery']);
$sql = "SELECT * FROM schuhe WHERE `Bezeichnung` LIKE '%".$keyword."%' OR `Beschreibung` LIKE '%".$keyword."%' OR `Marke` LIKE '%".$keyword."%' OR `Anbieter` LIKE '%".$keyword."%'";
ich gehe mal davon aus das der suchbegriff nie im feld "preis", "Abbildung" oder "ID" enthalten ist.
marketing through social media is just like herding cats. and just to make it interesting, many of the cats are drunk and stupid...
blackhat linkkauf und so...  |
|
| Nach oben |
|
 |
Kassandra70

: 11.01.2006 : 198 : Gran Canaria
|
| : 25.01.2010, 04:50 : PHP Suchfiunktion |
|
|
also normalerweise hast du ein schickes kleines Formular mit einem Feld in der der User das Suchwort eingegeben kann. So wie die Google Startseite
Dann drückt der User auf Absenden und die Anfrage mit dem Suchwort wird an das in <form method=post…> vorgegebene Ziel gesendet und da wird das dann in deine Abfrage im idealfall überprüft, dann wenn ok eingesetzt und ausgewertet. Wobei das Ziel durchaus auch auf der gleichen Seite sein kann ...
Warum du überall \ einsetzt ist mir allerdings etwas unklar. Die werden wohl eher für deine Fehlermeldung sorgen. Und warum du das Suchwort vor der Anfrage nicht einfach einmal per POST holst und dabei auch gleich überprüfst nach den langen Vorträgen, die du hier schon über Sicherheit gehört hast, ist mir auch ein Rätsel….
Und wenn du über x Felder nach Schuhen suchen mußt, dann hast du dir beim Anlegen deiner Datenbank zu wenig Gedanken über die zukünftige Struktur derselben gemacht. ... Ich täte, wenn ich mit dieser DB weiterarbeiten müßte, mir schleunigst entweder noch ein Flag-Feld setzen, wo ich Schuhe einmal ankreuzen kann, dann brauch ich nur das durchsuchen, oder, wenn ich zukünftig nicht nur Schuhe sondern auch Handtaschen selektieren möchte, würde ich das in eine extra Tabelle hauen und die vorhandenen Datensätze überarbeiten.
Du hättest vielleicht an einer Witzedatenbank üben sollen, dann hätten wir hier wenigstens ein biskin was zu lachen 
http://www.anabell.de - ein nicht optimiertes Projekt mit tausend Themen |
|
| Nach oben |
|
 |
ben78

: 30.03.2007 : 143
|
| : 25.01.2010, 05:43 : PHP Suchfiunktion |
|
|
AAAAAAAAAAAAAHHHHHHHHHHHHHHHHHHahahfaaaaaaaaaaaaaaaaaa
jetzt It works es.........VIELEN DANK LEUTZ!!!!!  |
|
| Nach oben |
|
 |
ben78

: 30.03.2007 : 143
|
| : 25.01.2010, 05:54 : PHP Suchfiunktion |
|
|
@Kassandra70
Schaut das jetzt besser aus? Zumindest läuft's jetzt auf'm Apache...
| Code: |
$suchwort = mysql_real_escape_string($_POST['suche']);
$sql = "SELECT
*
FROM `test`.`schuhe`
WHERE (
`Bezeichnung` LIKE '%".$suchwort."%' OR
`Beschreibung` LIKE '%".$suchwort."%' OR
`Marke` LIKE '%".$suchwort."%' )";
$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{ |
...und hier mein HTML
| Code: |
<form action="./mysql/search.php" method="post">
<input type="text" name="suche" size="30" onfocus="if (this.value =='Produktfinder') { this.value=''}" onblur="if (value == '') {value='Produktfinder'}" value="Produktfinder" />
<input type="submit" value="GO">
</form> |
|
|
| Nach oben |
|
 |
Mork vom Ork

: 08.07.2008 : 2568 : Aufm Friedhof.
|
| : 25.01.2010, 11:08 : PHP Suchfiunktion |
|
|
| ben78 hat Folgendes geschrieben: |
| Schaut das jetzt besser aus? |
Nö ;>
| : |
| Code: |
$sql = "SELECT
*
FROM `test`.`schuhe`
WHERE (
`Bezeichnung` LIKE '%".$suchwort."%' OR
`Beschreibung` LIKE '%".$suchwort."%' OR
`Marke` LIKE '%".$suchwort."%' )"; |
|
Was sollen die ganzen Akzente da, hattest du Schluckauf? Brüllen musst du eigentlich auch nicht, dafür tut etwas Luftholen um PHP-Operatoren herum immer ganz gut:
| Code: |
| $sql = "select * from test.schuhe where Bezeichnung like '%" . $suchwort . "%' or Beschreibung like '%" . $suchwort . "%' or Marke like '%" . $suchwort . "%'"; |
Aber mal abgesehen von der Schönheit: Textsuchen mit einem Platzhalter am Anfang sind immer sehr schlecht, das ist das Schlechteste, was du bei MySQL bekommen kannst. Egal, ob ein Index auf der Spalte liegt oder nicht, die Datenbank muss immer sämtliche Zeilen durchsuchen - und das kann dauern. Wenn du nur drei Paar Schuhe verkaufst, ist das natürlich wurscht, bei dreihundert wird's mit Sicherheit gut messbar, bei dreitausend merkbar.
Nach einer Woche PHP und SQL wäre das zweifelsohne zu viel verlangt, aber falls dir die Sucherei irgendwann zu lange dauert, befasse dich mit N-Grammen. Dabei werden die zu durchsuchenden Texte in kleine Bruchstücke à drei oder vier Zeichen zerlegt (Text = "Beispiel" > N-Gramme = "Bei", "eis", "isp", "spi", "pie", "iel"), in einer separaten Tabelle gespeichert (zwei Spalten ngramm und text, jeweils "Bei" > "Beispiel", "eis" > "Beispiel", etc.) und diese statt des Originals durchsucht, die Anzahl der Vorkommen aufaddiert und danach sortiert (select text,count(*) as n from textindex where ngram="Bei" or ngram="eis" or ngram="isp" [etc.] group by text order by n desc, die Suche nach"Beispiel" käme auf sechs Vorkommen, das vertippte "Beipiel" immerhin noch auf drei, "Beisitzer" auf hingegen nur eines).
Das hat nicht nur den Vorteil, dass die Datenbank einen Index nutzen kann und somit sehr schnell ist, du merzt auch noch Schreibfehler aus und lieferst der Eingabe sehr ähnliche Ergebnisse. Falls du dich mal gefragt hast, wie Amazon & Co. so schnell ihre Vorschläge herbeizaubern: Jetzt weisst du es, zumindest ansatzweise :) |
|
| Nach oben |
|
 |
ben78

: 30.03.2007 : 143
|
| : 25.01.2010, 19:06 : PHP Suchfiunktion |
|
|
THX @ ALL...ihr seid der Wahnsinn...vielen Dank Leutz...vor allem @ Mork vom Ork, Kassandra70 & nerd  |
|
| Nach oben |
|
 |
net(t)worker Gast
|
| : 25.01.2010, 19:15 : PHP Suchfiunktion |
|
|
omg....
eine Query mit mehreren LIKE über or verknüpft... sehr effektiv um den DB Server auf Dauer in die Knie zu zwingen....
nutz die eingebaute volltextsuche von mysql, dafür isse schließlich da... http://dev.mysql.com/doc/refman/5.1/de/fulltext-search.html |
|
| Nach oben |
|
 |
w3news


: 11.10.2006 : 939 : Berlin
|
| : 25.01.2010, 19:27 : PHP Suchfiunktion |
|
|
| Mork vom Ork hat Folgendes geschrieben: |
| Was sollen die ganzen Akzente da, hattest du Schluckauf? |
Sieht mir so aus, als ob er das aus phpmyadmin rauskopiert hat...
MfG Lars
News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates |
|
| Nach oben |
|
 |
ben78

: 30.03.2007 : 143
|
| : 25.01.2010, 22:02 : PHP Suchfiunktion |
|
|
| ja richtig, aus phpMyadmin |
|
| Nach oben |
|
 |
Kassandra70

: 11.01.2006 : 198 : Gran Canaria
|
| : 25.01.2010, 23:08 : PHP Suchfiunktion |
|
|
Und ich hab schon den Monitor geputzt ...
Aber schön, dass du weitergekommen bist. Ich bin schon gespannt, was Dir als nächstes einfällt 
http://www.anabell.de - ein nicht optimiertes Projekt mit tausend Themen |
|
| Nach oben |
|
 |