Wort suchen und mit einer Erweiterung aus MySQL Datenbank ersetzen

  • Hallo liebe Leute,


    ich glaube ich habe mein Problem schon fast gelöst. Ich möchte einfach, dass meine Seite, die als string in $tmp gespeichert ist, nach einem Wert aus einem Datensatz aus meiner Datenbank durchsucht wird (ein Wort). Findet die foreach Schleife dann einen Datensatz der den gleichen Wert hat wie ein String in meiner $tmp, soll dieser String einfach mit einem Link "ergänzt" und überschrieben werden.
    Im Endeffekt soll man auf meiner Website bestimmte Wörter anklicken können, wo sich dann ein Fenster öffnet, wo bestimmte Daten aus meiner Datenbank enthalten sind.


    Mein jetziger Quelltext sieht so aus:



    Die login.php ist einfach nur der Login zu meiner Datenbank. Der funktioniert.


    Es wird auf meiner Website kein Fehler oder Notiz ausgegeben. Alles ist so, wie als hätte ich das script garnicht eingefügt.


    Vielen Dank schonmal für eure Hilfe,


    Liebe Grüße,
    Simon P.

  • Kommt das Script den überhaupt in: if (preg_match($word.'$', $contents)){}
    ?
    Mach mal Testausgaben wie zB:

  • Okay, cooler Tipp mit dem "Echo". Also, das hier:


    PHP
    ...if (!empty($data)){echo 'debug...'


    Macht er, in dem er mir den Text über meinem header ausgibt. das steht, ganz über meiner Website.


    Bei der hier passiert nichts mehr:


    PHP
    ...
    if (!empty($data)){echo 'debug...'foreach ($woerter_jlpt_n5_data as $set){if (preg_match($word.'%', $contents)){echo 'debug...'


    Da passiert einfach nichts mehr. Es wird auch weiterhin kein Fehler ausgegeben.


    Kurz ne Erklärung:


    So soll das sein und eigentlich auch funktionieren. tut es leider nicht :pinch: . Das script wird dann in meine index.php included und die macht danach nur noch echo $tmp.


    Hoffe das hilft.


    Liebe Grüße,


    Simon P.


    Edit: habe bei der If-Schleife aus $data, $woerter_jlpt_n5_data gemacht. Hat auch nichts geholfen.
    Edit2: Ich weiß, dass alles bis nach @mysqli_close($db); funktionieren muss, weil es der gleiche Syntax ist, wie bei meiner anderen Datenbank ( http://simon-no-japan.de/?p=animes_geschaut ).

  • Schreib an mehreren Stellen des scriptes immer (dort wo du denkst das der fehler liegt vermehrt)

    PHP
    debug('foreach(jlmp_data_5');


    Dann noch irgendwo

    PHP
    function debug($beschreibung){
        echo $beschreibung.' in '.__FUNCTION__.' on line '.__LINE__;
    }


    In die klammern von debug kannst du dann immer irgendwas reinschreiben was interresant wäre. Das script gibt dann immerwieder die Debug possition aus, wo sie abbricht, weist du das der Fehler liegt.


    EDIT:
    etwa so:

  • Okay danke für den Tipp mit der debug function. Leider habe ich dadurch nur herausgefunden, dass die if-Schleife nicht funktionierte. Nehme ich also die If-Schleife raus müsste ja alles funktionieren... tut es aber nicht. Also muss es ein Logik-Problem sein. Es werden auch ohne If-Schleife keine Fehler angezeigt.


    Jemand nen Tipp?


    Schönen Tag euch noch.

  • Habe das Problem durch Zufall selbst gefunden. Gleichzeitg ist mir aber auch eine andere Frage in den Sinn gekommen.


    Fürs Protokoll:


    PHP
    $word = '%1$s';


    Funktioniert in der Foreach nicht:


    PHP
    foreach ($woerter_jlpt_n5_data as $set)


    Ich musste das so machen:


    PHP
    $word = $set['kanji'];


    und schon funktioniert es.


    So und jetzt meine zweite Frage. Ich habe z.B. 2 Datensätze. Ein Datensatz in der Spalte "Kanji" hat nun diesen Wert ->赤<- und der zweite Datensatz hat diesen ->赤ã„<- wie ihr seht wurde einfach nur ein zweites Zeichen drangehangen. Wenn auf meiner Website der Wert "赤ã„" steht, wird trotzdem der Datensatz "赤" genommen. Wie kann ich meinem Script nun sagen, dass er aber bitte den Wert nehmen soll, der auch da steht. In diesem Falle also "赤ã„". Ich hoffe ihr habt verstanden was ich meine. Beispiel ist hier: http://simon-no-japan.de/?p=japanisch_grammatik , unten im Absatz, 2. Zeichen.



    Fals hier jemand nen Algorhytmus-Tipp hat, nur her damit ;)


    Grüße,


    Simon P.


    Edit: Das Forum unterstützt UTF-8 Zeichen nicht, kann ich das sonst irgendwie hier darstellen?

  • Jap, ich habe mich doof ausgedrückt. Ist aber auch schwierig, wenn man nicht weiß, wie das heißt was man will. Ich versuchs mal anders:
    Wie kann ich z.B. sagen, dass...


    PHP
    $word = $set['kanji'];
    if (preg_match('\''.$word.'\'', $contents))


    ... preg match schon "true" ausgeben soll, wenn die ersten 2 zeichen stimmen. Der rest von $word kann sozusagen schnuppe sein.

  • Hm, naja habs schlecht formuliert, aber hab jetzt mein Problem gelöst. Wollte im prinzip nur, dass er von einem Wort hinten immer ein Zeichen abschneidet, falls das Wort, in ganzer Länge nicht gibt. Habs so gelöst:


    PHP
    $word = substr($word, 0, -1);


    Und dann halt mit "else" fals es dann immer noch nicht gibt. Also mehrere If-Anweisungen hintereinander.


    Danke nochmal,
    Simon P.

  • Vielleicht ist dein Probem, dass PHP nicht wirklich mit UTF 8 arbeitet. Das haben sie erst kürzlich (glaube 5.5) als Standard genommen.


    Probier mal die ganzen Stringvergleiche (zb "substr") in ihre Multibytevarianten zu tauschen, falls existent (zb "substr" zu "mb_substr") und dabei halt UTF 8 als Kodierung anzugeben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!