Suchmaschinenoptimierung
   
 

SEMSEO Konferenz 2012
 

 
 

PHP Suchfiunktion

Gehe zu Seite 1, 2  Weiter
Neues Thema eröffnen   Neue Antwort erstellen    ABAKUS Foren-Übersicht -> Webprogrammierung, Templatedesign & Microformats
 Prüfen, ob eine Seite mit JS angefordert wird HTML Code in Variable schreiben  
ben78

pr


: 30.03.2007
: 143



: 25.01.2010, 01:31    : PHP Suchfiunktion Antworten mit Zitat

Hi Abakusler,

ich habe folgendes Script:

Code:
<?php
...
?>


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
ben78 Private Nachricht senden
nerd

pr


: 15.02.2005
: 1733
: AKL


: 25.01.2010, 01:50    : PHP Suchfiunktion Antworten mit Zitat

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
nerd Private Nachricht senden
ben78

pr


: 30.03.2007
: 143



: 25.01.2010, 02:57    : PHP Suchfiunktion Antworten mit Zitat

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
ben78 Private Nachricht senden
nerd

pr


: 15.02.2005
: 1733
: AKL


: 25.01.2010, 03:24    : PHP Suchfiunktion Antworten mit Zitat

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
nerd Private Nachricht senden
ben78

pr


: 30.03.2007
: 143



: 25.01.2010, 03:53    : PHP Suchfiunktion Antworten mit Zitat

Script ist nicht gekauft. Sondern selbst zusammengebastellt. Schon seit ca. äähhhmmm einer Woche?... #Cussing out ...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
ben78 Private Nachricht senden
nerd

pr


: 15.02.2005
: 1733
: AKL


: 25.01.2010, 04:29    : PHP Suchfiunktion Antworten mit Zitat

$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
nerd Private Nachricht senden
Kassandra70

pr


: 11.01.2006
: 198
: Gran Canaria


: 25.01.2010, 04:50    : PHP Suchfiunktion Antworten mit Zitat

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
Kassandra70 Private Nachricht senden WWW
ben78

pr


: 30.03.2007
: 143



: 25.01.2010, 05:43    : PHP Suchfiunktion Antworten mit Zitat

AAAAAAAAAAAAAHHHHHHHHHHHHHHHHHHahahfaaaaaaaaaaaaaaaaaa

jetzt It works es.........VIELEN DANK LEUTZ!!!!! #Milti
Nach oben
ben78 Private Nachricht senden
ben78

pr


: 30.03.2007
: 143



: 25.01.2010, 05:54    : PHP Suchfiunktion Antworten mit Zitat

@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
ben78 Private Nachricht senden
Mork vom Ork

pr


: 08.07.2008
: 2568
: Aufm Friedhof.


: 25.01.2010, 11:08    : PHP Suchfiunktion Antworten mit Zitat

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
Mork vom Ork Private Nachricht senden
ben78

pr


: 30.03.2007
: 143



: 25.01.2010, 19:06    : PHP Suchfiunktion Antworten mit Zitat

THX @ ALL...ihr seid der Wahnsinn...vielen Dank Leutz...vor allem @ Mork vom Ork, Kassandra70 & nerd
Nach oben
ben78 Private Nachricht senden
net(t)worker
Gast







: 25.01.2010, 19:15    : PHP Suchfiunktion Antworten mit Zitat



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

pr


: 11.10.2006
: 939
: Berlin


: 25.01.2010, 19:27    : PHP Suchfiunktion Antworten mit Zitat

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
w3news Private Nachricht senden E-Mail senden
ben78

pr


: 30.03.2007
: 143



: 25.01.2010, 22:02    : PHP Suchfiunktion Antworten mit Zitat

ja richtig, aus phpMyadmin
Nach oben
ben78 Private Nachricht senden
Kassandra70

pr


: 11.01.2006
: 198
: Gran Canaria


: 25.01.2010, 23:08    : PHP Suchfiunktion Antworten mit Zitat

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
Kassandra70 Private Nachricht senden WWW
Neues Thema eröffnen   Neue Antwort erstellen    ABAKUS Foren-Übersicht -> Webprogrammierung, Templatedesign & Microformats
Seite 1 von 2
Gehe zu Seite 1, 2  Weiter

 






Suchmaschinenoptimierung | Latent Semantische Optimierung (LSO) | SEO Blog | SEO Online Tools | Suchmaschinenmarketing Angebot | Online Marketing

Impressum

Dieses SEO Forum läuft unter phpBB.


Sie lesen gerade: PHP Suchfiunktion