• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Suchwort automatisch mit einem * ergänzen

magann

New member
Hallo,
ich möchte die Eingabe in einem Suchformular automatisch mit einem * ergänzen. So dass eine Suche nach "Auto" auch automatisch "Auto(s)" oder "Auto(türe)" anzeigt.
Im Idealfall sollte geprüft werden, ob der User schon einen * eingegeben hat, so dass dieser nicht mehr ergänzt werden muss.

Ich hoffe, hier kann mir geholfen werden.

Viele Grüße
Markus
 
Hi magann, willkommen hier im Forum - fein, dass Du da bist.

a) Wenn der User aktiv das * eingeben soll, musst Du serverseitig nur auf die Präsenz dieses Zeichens prüfen. Wenn Du mit PHP arbeitest, könntest Du mit einem substr_count() prüfen, wieviele * präsent sind - bei einer Anzahl > 0 unternimmst Du einen $suchwort = explode('*', $_POST['uebergebener_Wert']); und hast als Ergebnis ein Array, auf dessen Index 0 bspw. der Begriff "Auto" steht. Die Abfrage auf der mgl. Datenbank erfolgt mit "$suchbegriff%".

b) Wenn der User generell immer alles angeboten bekommen soll, so kannst Du das * auch vollständig entfernen und direkt mit "Suchbegriff%" im SQL-Query arbeiten.

Achte hierbei auf "_" - der führte hier im Forum kürzlich zu anderen Ergebnissen! ^^ (es ist auch eine Wildcard wie %, funktioniert aber nur mit einem Zeichen)

Hat der User mehrere * angegeben, stört es Dich nicht - Du nimmst immer den vorderen Teil. Wenn es Witzbolde wie "*auto" gibt, wäre Dein Index[0] natürlich leer - prüfe das mit strlen() (immer noch PHP) vor einer weiteren Verarbeitung (damit kein SELECT * (sinnwahrend; ohne Filter/Begrenzer) entsteht).

Wenn Du das jetzt nur mit JavaScript machen willst, funktioniert das ebenso (fände ich aber nicht soooo brauchbar, da serverseitig eh validiert wird etc.).

Hat geholfen? Prima. Falls nicht: Nachhaken!

Grüße
 
Danke, dass du dich meinem Problem annimmst. Ich verstehe allerdings nicht viel von der ganzen Materie. Wie schaut so etwas denn als Code aus?

Ich möchte, dass in diesem Suchformular der Suchbegriff immer mit einem Stern endet. Das ist dann die allgemeine/einfache Suchfunktion auf der Seite. Eine erweiterte Suchfunktion gibt es auf einer extra Seite.
Deshalb funktioniert die Datenbankversion auch leider nicht.
 
Immer mit * enden: Du könntest nach jedem onkeyup (Event aus JavaScript) stets bestehende * aus Deinem Feld entnehmen (bzw. direkt bei Eingabe unterbinden) und über die gleiche Funktion am Ende automatisch ein * eintragen (wenn keins da ist). Warum es unbedingt sichtbar sein muss, ist ganz allein erstmal Deine Sache. :D (denn: wie sucht einer, der wirklich nur "Auto" haben will, wenn Du stets * dranhängst und auch "Autotür" lieferst?)

Die Datenbankversion hat mit dem * gar nix zu tun - der muss serverseitig mit einem % ersetzt werden. Ein Suchbefehl über ein Feld könnte fiktiv so (simpel) ausschauen:
SELECT `foo` FROM `bar` WHERE `foo` LIKE "BEGRIFF%" LIMIT N;

N steht hierbei für eine natürliche Zahl - aka Ganzzahl zwischen 1 - was-Du-benötigst. :D (wäre also von Dir zu ersetzen) Dieser Befehl sucht Dir alle Datensätze, die im Feld (Typ String) "foo" mit BEGRIFF starten - und alle, die mit dem Teil "BEGRIFF" beginnen (bspw. "Begrifflichkeit").

Um einen richtig guten Vergleich zu haben, solltest Du den ankommenden Suchbegriff vollständig klein schreiben - und mit der Datenbank (LOWER() war's glaube ich) ebenfalls auf "klein" alles machen. Damit ist egal wie der User es eintippt (bspw. "auto" gibt die gleichen Ergebnisse wie "AUTo", "aUTO" usw.).

Wie sowas als Code ausschaut:
- HTML5 Seite mit Formular und entsprechender Eingabemöglichkeit
- Eingabefeld hat Event-Listener "onkeyup" (JavaScript) dran, der Dir Dein * anhängt und eingegebene * vom Benutzer entfernt/abfängt
- submit oder asynchron schickt den Begriff per POST oder AJAX an den Server
- Server übernimmt Validierung des Begriffes (hier gibt es schöne Sachen in PHP!)
- Verbindung an Datenbank
- Übergabe des Queries aus PHP an Datenbank
- Ergebnis auswerten
- Ausgabe aufbereiten
- Anzeige

Glaube, dass ich nichts vergessen habe. :)
 
Danke für die Rückfrage. Clientseitig wäre spitze! So dass der Formularinhalt mit einem * ergänzt abgeschickt wird.
 
Dann brauchst du im Grunde nur den Button für die Suche ändern. Also das onclick Event abfangen und dann im Suchfeld das Sternchen hinten konkatenieren. Wenn du uns mal zeigst, wie das Suchformular in der Webseite aussieht können wir dir mehr Details dazu sagen.
 
Das Suchformular ist recht simpel:

HTML:
<form class="search" action="{$baseDir}extended_search.php" method="post"> 
<input name="search_string" value="" class="mg_search_text" placeholder="Hier Suchbegriff eingeben."> 
<input type="submit" value="Suchen" class="input_button1">
</form>
 
Zuletzt bearbeitet von einem Moderator:
Dann versuch mal das hier:

HTML:
<form class="search" name="sucheform" action="{$baseDir}extended_search.php" method="post"> 
<input name="search_string" value="" class="mg_search_text" placeholder="Hier Suchbegriff eingeben."> 
<input type="button" value="Suchen" class="input_button1" onclick="document.forms['sucheform'].elements['search_string'].value+='*';document.forms['sucheform'].submit();">
</form>

Und Code hier im Forum bitte in Code- oder HTML-Tags setzen (die mit der eckigen Klammer). Hab das in #12 schon erledigt.
 
Danke, dass du mir helfen möchtest.
Es hat aber leider nicht funktioniert. Sie Suchanfrage klappt! Allerdings ohne den *
 
Was heißt denn "klappt nicht"? Ist es wie vorher ohne * oder wie oder was? Zeig mal deinen fertigen Code. Hast du meinen Code mit Copy&Paste übernommen oder abgetippt und vielleicht was vergessen? Was sagt die Browserkonsole (F12)?
 
Genau, die Suchanfrage funktioniert wie zuvor ohne *, sorry, wenn ich mich da unklar ausgedrückt hatte.
Ich habe deinen Code per copy & paste eingefügt! Mit der Browserkonsole kenne ich mich leider nicht aus. Was mache ich damit?

- - - Aktualisiert - - -

OK, ich habe es nochmal versucht und dabei ist mir aufgefallen, dass es funktioniert wenn ich mit der Maus auf den Suchbutton klicke. Es funktioniert allerdings nicht, wenn ich mit der Eingabetaste die Suchanfrage starte.
Hast du dafür eine Idee?

- - - Aktualisiert - - -

Jetzt funktioniert es! Ich habe den type "button" wieder in "submit" geändert.

Viele herzlichen Dank für deine Hilfe!!!
 
Jetzt funktioniert es! Ich habe den type "button" wieder in "submit" geändert.
Mit dem Button als submit funktioniert es? Welcher Browser/Version ist das denn? Ich wusste garnicht, dass ein Enter das onclick im Submit Button feuert. Dann könnte man sich ja das onsubmit komplett sparen?

Die Konsole ist übrigens zum Ablesen von Fehlern, die der Browser erkennt. Wenn sie leer ist weiß man zumindest, dass es kein Fehler im Code ist der zur Fehlfunktion führt.
 
Zurück
Oben