Richard: Schlagwort eingeben... wie hier im Forum

Ich würde gerne ein Formular mittels HTML und zur Verarbeitung PHP erstellen.

Dabei auch, so etwas wie hier im Forum, das mit den Schlagwörter eingeben.

Ich denke es wird über die Eingabe in der Datenbank nachgesehen ob es ein betreffendes Schlagworte gib und dann die Vorschläge ausgegeben.

Ich weis ich muss selber suche, aber wie heißt den sowas? Nach was muss ich den suchen?

Vielleicht kann mich jemand in die richtige Richtung schupsen.

Richard

  1. Hallo Richard,

    Vielleicht kann mich jemand in die richtige Richtung schupsen.

    Ich schubse dich unter anderem in Richtung Rechtschreibprüfung...

    Aber welche Stichworte kann ich Dir geben? Schwierig.

    Das Forum tut mehrere Dinge.

    • den Posting-Text analysieren und Schlagwortvorschläge machen - da habe ich keine Ahnung, wie Christian das gelöst hat.
    • selbst eingegebene Schlagwörter gegen die Liste der zulässigen Schlagwörter prüfen
    • einem Posting die ausgewählten Schlagwörter zuordnen
    • beim Suchen nach Beiträgen eine Suche nach Schlagwörtern ermöglichen

    Das wird aber - sofern der Browser JavaScript unterstützt - nicht alles am Server gemacht, sondern es passiert auch eine Menge mit JavaScript im Browser, damit die Schlagwortvorschläge live erscheinen. Tatsächlich scheint das komplett im Browser zu passieren; ich beobachte keinen Netzwerkverkehr, der das am Server erledigt.

    Auch das Prüfen selbst eingegebener Schlagwörter erfolgt ohne Serverzugriff, rein mit JavaScript.

    Wenn man das mit reinem PHP machen will, verschwindet ein guter Teil der Interaktivität. Du kannst das Formular dann nur zum Server senden und dann Schlagwortvorschläge hinzufügen, die der User ankreuzen kann. Und selbst eingegebene Schlagwörter überprüfen. Unbekannte oder unzulässige Schlagwörter abweisen.

    Je nach dem, ob Du Schlagwörter whitelisten (nur Wörter aus der Whitelist, alles andere ist verboten) oder blacklisten (alles außer den Wörtern in der Blacklist ist erlaubt) willst, musst Du dann die vom User gewünschten Schlagwörter gegen die Schlagwortliste abgleichen.

    Für Schlagwortvorschläge müsstest Du den Formulartext in Wörter zerlegen (PHP explode). Und dann brauchst Du eine Datenbank, mit der Du Schlagwortvorschläge finden kannst. Es ist vermutlich am einfachsten, zu jedem Schlagwort, das Du vorschlagen können willst, eine Liste von Triggerwörtern zu erstellen. Stimmt ein Wort im Posting mit einem der Triggerwörter überein, bringst Du den Schlagwortvorschlag dazu. Das macht man sinnvollerweise mit einer Datenbanktabelle. Natürlich musst Du auch Varianten der Triggerwörter kennen (Singular/Plural, Deklination, etc).

    Wenn Du einen Text mit 400 Worten hast, wären das 400 SQL Abfragen. Viele dieser Worte werden aber keine Triggerwörter sein, sondern Wörter, die Satzstrukturen bilden: Artikel (der, die, das), Pronomen (ich, du, er, sie, es), Konjunktionen (und, oder, aber). Für solche Wörter solltest Du gar nicht erst in die Schlagwortsuche einsteigen, allerdings ist das auch ein Balanceakt. Wenn Du nämlich eine Datenbankabfrage machen musst, um zu wissen, ob ein Wort ein Schlagwort-Trigger sein kann, bringt das nichts. In PHP wäre hier ein Assoziatives Array angesagt, dessen Schlüssel die Stopwörter darstellen. Mit isset($stopwords[$wort]) findest Du dann schnell heraus, ob ein Wort ein Stopwort ist oder nicht.

    Hier solltest Du dann, wenn das Ganze in Betrieb geht, auch ein bisschen Statistik machen und die Wörter loggen, mit denen nach Schlagworttriggern gesucht wird. Daraus können sich dann nützliche Stopworte ableiten. Aber es dürfen nicht zu viele Stopworte werden, sonst dauert der Aufbau der Stopwortliste länger als die Zeit, die Du mit dem Stopworten sparst.

    Das Zuordnen der Schlagworte zu Dokumenten (Postings, Blogeinträge, Gästebucheinträge, wasauchimmer) ist dann eine Sache für eine M:N Zuordnung. Ein Dokument kann N Schlagworte haben, ein Schlagwort kann M Dokumenten zugehörig sein, das löst man über eine Beziehungstabelle. Komm nicht auf die Idee, Dich auf 3 Schlagworte festzulegen und am Dokument drei Spalten für Schlagwörter vorzusehen. Damit verlässt Du den Bereich sauberen Datenbankdesigns (Stichwort Normalisierung).

    Rolf

    --
    sumpsi - posui - obstruxi
    1. @@Rolf B

      Vielleicht kann mich jemand in die richtige Richtung schupsen.

      Ich schubse dich unter anderem in Richtung Rechtschreibprüfung...

      Da fallen mir die Schubben von den Augen!

      Artikel (der, die, das)

      Fragewörter (wer, wie was)

      😷 LLAP

      --
      „Guten Tag, mein Name ist Karl-Heinz. Ich will mich nicht impfen lassen und erwarte, dass die Solidargemeinschaft, die wegen Leuten wie mir weniger Freiheit hat, meine Tests weiter finanziert. Und das nenne ich dann Eigenverantwortung.“
      — @Hoellenaufsicht
    2. Tach!

      Ich schubse dich unter anderem in Richtung Rechtschreibprüfung...

      Aber welche Stichworte kann ich Dir geben?

      Das Wort "Wort" hat zwei grundlegende Bedeutungen. Je nachdem bildet man die Pluralform "Wörter" oder "Worte". Damit erklärt sich unter anderem, warum man beispielsweise Wörterbuch aber nicht Wortebuch sagt. Genaueres siehe Wiktionary → Wort. (Für die zweite Bedeutung muss man recht weit scrollen, oder man nimmt den Link im Inhaltsverzeichnis.)

      Tatsächlich scheint das komplett im Browser zu passieren; ich beobachte keinen Netzwerkverkehr, der das am Server erledigt.

      Schaust du da nur nach extra dafür aufgebauten Verbindungen oder auch in den WebSocket-Stream?

      dedlfix.

      1. Hallo,

        Aber welche Stichworte kann ich Dir geben?

        Das Wort "Wort" hat zwei grundlegende Bedeutungen.

        ja, ich bin aber sogar geneigt, die Pluralform "Worte" hier richtig zu finden. Denn ein Stichwort ist nicht immer nur ein Wort im syntaktischen Sinn, sondern oft auch eine Wortgruppe, eine Phrase.

        Aber die deutsche Sprache ist wahrlich nicht immer leicht. Was mir immer wieder unangenehm auffällt, ist das falsche Partizip Perfekt für hängen (einschließlich Varianten wie aufhängen oder anhängen). Tatsächlich hat hängen zwei verschiedene Partizip-Formen, je nachdem, ob es transitiv oder intransitiv verwendet wird. Mir rollen sich immer die Zehennägel auf, wenn jemand mit Strings hantiert und berichtet, er habe da noch einen Zeilenumbruch angehangen.

        Live long and pros healthy,
         Martin

        --
        Klein φ macht auch Mist.
      2. Hallo dedlfix,

        ja, danke für den Hinweis. Wusste bis gerade gar nicht, wie man einen WS Stream monitored.

        Aber der eine, den ich finde, enthält Heartbeats und andere Dinge, aber nichts, was nach Upload meines Postings und Download von Schlagworten aussieht. Ich habe jetzt aber auch keine Lust, mich durch das react-Gestrüpp durchzuwühlen (oder im Github im Source zu wühlen), um herauszufinden, wie Christian die Schlagwortvorschläge macht.

        Rolf

        --
        sumpsi - posui - obstruxi
  2. Lieber Richard,

    Ich weis ich muss selber suche, aber wie heißt den sowas? Nach was muss ich den suchen?

    Du kennst dann wahrscheinlich unser Tutorial zum serverseitigen Auswerten von Formulareingaben mit PHP noch nicht. Dort solltest Du bereits wesentlichen Zutaten für Dein Vorhaben finden. Das Interagieren mit einer Datenbank ist dort nicht behandelt, aber dazu kannst Du ja hier wieder fragen, wenn Du mit dem prinzipiellen Auswerten von Formulardaten schon genügend gut zurecht kommst.

    Deine Schlagwortliste wird zunächst fest durch eine Liste in der DB vorgegeben werden. Das automatische Vorschlagen beim Eingeben in ein Formularfeld kann bei nur einem einzigen Vorschlag mit einer Datalist gemacht werden. Die Schlagwörter stehen dann in <option>-Elementen versteckt im Quelltext, woraus sich der Browser dann bedient, wenn der User etwas eingibt.

    Wenn mehrere Schlagworte auf einmal unterstützt werden sollen, dann braucht es eine größere Ladung Intelligenz, die in JavaScript implementiert werden müsste und die sich ebenfalls an der im Dokument hinterlegten Liste bedient. Sie hakt sich dann über das Input-Ereignis ein und überwacht den momentanen Inhalt des Eingabefelds, um dann fleißig passende Buttons für die vorgeschlagenen Wörter im Dokument zu erzeugen und einzublenden, und beim Klick auf ein solches das Schlagwort passend im Formular (z.B. mittels eines versteckten Eingabefeldes) einzutragen. Natürlich benötigen derlei künstlich hinzugefügte Schlagwörter auch einen Entfernen-Button, der diese versteckte Hinzufügung im Formular wieder rückgängig macht... aber das sind dann schon wirklich die höheren Weihen.

    Wo brauchst Du Verständnishilfen und Anleitung? Was hast Du schon und ab wo kommst Du nicht weiter?

    Liebe Grüße

    Felix Riesterer

  3. Hallo,

    Ich würde gerne ein Formular mittels HTML und zur Verarbeitung PHP erstellen.

    Dabei auch, so etwas wie hier im Forum, das mit den Schlagwörter eingeben.

    da hast du ja nun schon viel Input bekommen und merkst, dass das keine triviale Aufgabe ist. Ein Teil der Aufgabenstellung, nämlich das Vorschlagen von Tags beim Eingeben der ersten zwei, drei Buchstaben, ist allgemein als Autosuggest, Autocomplete oder Auto-Vervollständigen bekannt. Aber das ist wirklich nur ein kleiner Teil des Ganzen.

    Ich denke es wird über die Eingabe in der Datenbank nachgesehen ob es ein betreffendes Schlagworte gib und dann die Vorschläge ausgegeben.

    Datenbank (serverseitig) ist denkbar, aber auf jeden Fall brauchst du massive Javascript-Unterstützung auf der Clientseite.

    Live long and pros healthy,
     Martin

    --
    Klein φ macht auch Mist.