Beiträge von Arne Drews

    Also wenn es um Rechtschreibfehler o.ä. geht, kommst Du sicher um eine Vergleichsauswertung nicht rum.

    Ob das mit similar_text() oder levenshtein() noch in einer brauchbaren Performance liegt, kann ich nicht beurteilen. Das müsstest Du mal ausprobieren.


    Alternativ kann der Prozess selbst bspw. in C/C++ ausgelagert werden, aber das erfordert etwas mehr Kenntnisse, als für die reine PHP-Variante.

    Jo, Du hast recht, ich habe mich verlesen.

    Aber auch das wäre genau genommen überflüssig, weil bei einem leeren $_POST['csrf_token'] das hash_equals() auch false liefern würde.

    Genau, levenshtein() funktioniert genau so, ist allerdings nicht so "teuer", wie similar_text(), von daher also etwas performanter.

    Wenn Du aber schon 1000 Dokumente erwähnst, würde ich das grundsätzlich nicht für eine gute Idee halten, die so zu durchsuchen.


    Muss das live passieren?

    Für welchen Anwendungsfall benötigst Du das denn genau. Evtl. gibt es ganz andere Möglichkeiten.

    Du fragst:

    Code
    WENN csrf_token LEER IST {
    
        // do something
    
    } ANDERNFALLS {
    
       WENN csrf_token LEER IST ...
    
    }

    Das ist überflüssig, weil an der Stelle csfr_token nicht empty sein kann.

    Die Bedingung, die Du mit ODER rangehängt hast, kann hier auch alleine stehen.


    Evtl. kann man das auch ohne ELSE schreiben:

    Nach Verarbeitung des ersten IF kann csrf_token nicht mehr leer sein.

    Ich glaube nicht, dass das ohne explizites Mapping über eine Whitelist o.ä. möglich ist.

    similar_text(), levenshtein() u.a. benötigen zwei Strings, die sie vergleichen können. Um mit dem Suchwort vergleichen zu können, müsstest Du den Ursprungstext auf Wörter aufbrechen und alle Wörter mit dem Suchwort vergleichen. Anhand der Ähnlichkeit kannst Du dann bestimmen, welche Wörter gefunden werden sollten.


    Allerdings empfinde ich es auch als eher fragwürdig, warum man das so haben möchte.

    Welche Gründe hast Du dafür?

    Macht aber keinen Sinn im IF und ELSE dieselbe Bedingung abzufragen.

    Wenn $_SESSION['csfr_token'] leer ist, wird immer der IF-Block angesprungen. Die Bedingung kannst Du im ELSE weglassen.

    Ich habe mich lediglich auf Deine Aussage aus #40 bezogen, dass angeblich das gefundene Suchwort nicht markiert wird.

    Da Du mich in dem Beitrag ansprichst, gehe ich davon aus, dass Du Dich auf meinen Vorschlag in #36 beziehst.


    Dort aber wird definitiv das gefundene Wort hervorgehoben, wenn Du es so testest, wie ich es gepostet habe.


    Heißt für mich: Du hast es nicht probiert, sonst wärst Du nicht zu der Aussage gekommen, es würde nichts markiert werden.

    Die 100 Zeichen davor und dahinter habe ich nur eingebaut, weil Du in #6 gesagt hast:

    Zitat

    Deswegen habe ich mir gedacht ich lese die nächsten 200 Zeichen ein und fertig.Bzw wollte ich davor ein paar Zeichen und danach ein paar Zeichen einlesen.

    Was genau ist Dir neu dabei? Ein Ajax-Request ist nichts anderes, wie ein "normaler" Request, nur dass er asynchron läuft, also im Hintergrund. Ein HTTP-Request bleibt es dennoch immer.

    Das was da passiert ist eigentlich schon grundlegendes Templating. PHP selbst ist prinzipiell gesehen eigentlich u.a. auch eine Template-Sprache.

    Dun kannst echo verwenden, aber <?= ist das selbe an der Stelle:

    Code
    <div><? echo $someValue; ?></div>
    <div><?= $someValue; ?></div>

    Ich würde die Werte gefühlt nicht über :start und :offset per bindParam übergeben, sondern einfach konkatenieren ersetzen.

    In solchen Fällen arbeite ich auch gerne mit "Schablonen":

    PHP
    <?php
    const QUERY_USERS = "SELECT `userId`, `username`, `avatar`, `rang` FROM `users` LIMIT {{INDEX}}, {{OFFSET}}";
    // ... some code
    $oStmntUsers = $dbv->prepare(
            strtr( QUERY_USERS )
            , [
                '{{INDEX}}' => $start,
                '{{OFFSET}}' => $offset        ]
            ]
        );

    Ist aber nur die von mir bevorzugte Variante, musst Du nicht so machen.

    bindParam u.a. nutze ich eigentlich nur innerhalb der WHERE-Klausel oder bei INSERTs und UPDATEs

    Das ist gut.Nur leider bringt mich das der Fehlersuche nicht weiter.

    Weil er Zeigt ein Text an was ca 100 Zeichen lang ist ,aber weit nach den gefundene Wort und markiert ist auch nix.

    Mit den Zahlen spielen bringt auch nix.

    Die Formatierung passiert doch um das $1 herum, probiere es halt mal, bevor Du sagst das passt nicht.

    Siehe #14 von m.scatello

    Über Ajax wird die Session gehalten, bzw. bleibt diese bekannt.


    Das Vorhaben wird i.d.R. eigentlich alternativ zu Ajax mit einem lokalen JS-Array umgesetzt.

    Bei der Variante wird halt in dem Array nach Treffern gesucht.


    Die Ajax-Variante ist natürlich aber auch möglich. Man muss dann nur bedenken, dass für jede Treffersuche ein HTTP Request durchgeführt wird.

    Aber ein session_start() in der Ziel-PHP-Datei des Ajax-Request erkennt die Session und verfügt damit auch über alle darin enthaltenen Werte.

    $1 ist eine Backreference. Die Klammerungen in dem Pattern werden intern durchnummeriert und bilden Resultatgruppen.

    Mit $1 greifst Du lediglich auf die erste Gruppe des Resultat zu, in meinem Fall also das "foobar".

    Zitat

    Der 2te Parameter nach dem Komma ist dass OFFSET.

    SELECT ... WHERE ... LIMIT 1, 5;


    Gib mir eine row und skippe die ersten 5.

    Kannst Du das etwas genauer erklären, wie Du das "skippen" meinst cottton? Klingt für mich falsch, aber es mag sein, dass Du es anders meinst, als ich es lese.

    Die Syntax lautet:

    Zitat

    SELECT column1, column2 from table1 LIMIT <index>, <offset>

    <index> gibt den Startwert an

    <offset> gibt die Anzahl an Datensätzen an, beginnend ab <index>


    Der index muß damit nicht zwingend kleiner sein als der offset.

    Nein, genau das müsste man nicht, einfaches Beispiel ( basierend auf Deinem Beispiel, minimiert! )

    Keine Logik im HTML-Text!


    Ich würde sogar soweit gehen, das HTML im Vorwege zu rendern und anschließend komplett auszugeben, aber das wäre noch ein Schritt weiter in Richtung Templating.

    Aber genau das ist der richtige Weg.

    Um dem Wunsch der führenden und folgenden 100 Zeichen nachzukommen, kann man das so erweitern:


    $result = preg_replace("/.{1,100}\b(foobar)\b.{1,100}/i", "<span style='font-weight: bold; color:#ff0000;'>$1</span>", $haystack);