Ankündigung

Einklappen
Keine Ankündigung bisher.

str_replace funkt nicht immer

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • str_replace funkt nicht immer

    Hallo

    Ich habe 3 Tabellen und pro Eintrag sind es 2 Personen. Der Select funktioniert. Jetzt muss ich das Ganze noch in ein Wordfile exportieren, und da geht nur eine Person. Es ist mir nicht klar, weshalb ich keinen Inhalt habe bei der zweiten Person. Es muss am $content = str_replace() liegen. Ich kann es drehen und überschreiben, es geht nicht.


    Im var_dump werden die Daten ausgegeben: array(16) { [0]=> string(4) "Frau" ["Anrede1"]=> string(4) "Frau" [1]=> string(7) "Susanne" ["Vorname1"]=> string(7) "Susanne" [2]=> string(5) "Huber" ["Nachname1"]=> string(5) "Huber" [3]=> string(11) "Blumenweg 2" ["Adresse1"]=> string(11) "Blumenweg 2" [4]=> string(4) "Herr" ["Anrede2"]=> string(4) "Herr" [5]=> string(5) "Peter" ["Vorname2"]=> string(5) "Peter" [6]=> string(11) "Hugentobler" ["Nachname2"]=> string(11) "Hugentobler" [7]=> string(16) "Asternstrasse 56" ["Adresse2"]=> string(16) "Asternstrasse 56" }

    Das geht: $content = str_replace('%Vorname1%', $row['Vorname1'], $content);

    Doch ein zweiter Vorname, ob Vorname2 oder Versalien oder anders geschrieben geht nicht. Auch wenn ich es kopieren, es geht immer nur Vorname1

    Was habe ich nicht beachtet? Wieso kommt der "Peter Hugentobler" nicht im Word? Wieso geht $content = str_replace('%Vorname2%', $row['Vorname2'], $content); nicht?


    Hier noch mein ganzer Code


    PHP-Code:
      $query = "SELECT
    l1.anrede AS Anrede1, l1.vorname AS Vorname1, l1.nachname AS Nachname1,
    l3.adresse AS Adresse1, 
    l2.anrede AS Anrede2, l2.vorname AS Vorname2, l2.nachname AS Nachname2,
    l4.adresse AS Adresse2
    FROM 
      `t_tagesfamilie`
    LEFT JOIN 
      `t_person` AS l1
       ON (
        t_tagesfamilie.kontakt1 = l1.id_person
       )
    LEFT JOIN 
      `t_person` AS l2
       ON (
        t_tagesfamilie.kontakt2 = l2.id_person
       )
     LEFT JOIN 
      `t_adresse` AS l3
       ON (
        l1.id_adresse = l3.id_adresse
       )
    LEFT JOIN 
      `t_adresse` AS l4
       ON (
        l2.id_adresse = l4.id_adresse
       )
    where t_tagesfamilie.id_tagesfamilie=$id_tagesfamilie";
    $result = $mysqli->query ($query);
    $row = $result->fetch_array(MYSQLI_BOTH);

    $content = file_get_contents('vorlagebesprechungfamilie.rtf.php');

    //remove php tags
    $content = str_replace('<?php /*', '', $content);
    $content = str_replace('?>', '', $content);

    // replace variables
    $content = str_replace('%Anrede2%', $row['Anrede2'], $content);
    $content = str_replace('%Vorname2%', $row['Vorname2'], $content);
    $content = str_replace('%Nachname2%', $row['Nachname2'], $content);
    $content = str_replace('%Adresse2%', $row['Adresse2'], $content);
    $content = str_replace('%Anrede1%', $row['Anrede1'], $content);
    $content = str_replace('%Vorname1%', $row['Vorname1'], $content);
    $content = str_replace('%Nachname1%', $row['Nachname1'], $content);
    $content = str_replace('%Adresse1%', $row['Adresse1'], $content);

    // send file to user
    $tfname=$row['tfname'];

    $dokumentenname=date("Ymd")."_".$tfname."."."doc";
    header('Content-Type: application/rtf;charset=utf-8');
    header('Content-Disposition: attachment; filename='.$dokumentenname);
    print $content;


  • #2
    Sieht für mich nach ziemlichen Pfusch aus. Du liest eine PHP-Datei aus und gibst dann application/rtf aus? Das passt hinten und vorne nicht zusammen.

    Kommentar


    • #3
      Ja, das ist sicher so, doch es funktioniert. hatte nur bei einzelnen Parameter Probleme, doch jetzt geht es. Habe den ganzen Text in den Editor kopiert, und wieder zurück und so alles unsichtbare und unnötige eliminiert.

      Habe nun mit der Suche noch andere Möglichkeiten gefunden, und werde auch jene versuchen.
      Danke

      Kommentar


      • #4
        Übrigens.. sowas ist häßlich, unnötig und verstößt irgendwie auch gegen das DRY-Prinzip ("don' repeat yourself")

        PHP-Code:
        // replace variables
        $content str_replace('%Anrede2%'$row['Anrede2'], $content);
        $content str_replace('%Vorname2%'$row['Vorname2'], $content);
        $content str_replace('%Nachname2%'$row['Nachname2'], $content);
        $content str_replace('%Adresse2%'$row['Adresse2'], $content);
        $content str_replace('%Anrede1%'$row['Anrede1'], $content);
        $content str_replace('%Vorname1%'$row['Vorname1'], $content);
        $content str_replace('%Nachname1%'$row['Nachname1'], $content);
        $content str_replace('%Adresse1%'$row['Adresse1'], $content

        str_replace() kann auch direkt mit Arrays umgehen, nur so erwähnt. Dann würde die einmalige Ausführung von der Funktion ausreichen.

        PHP-Code:
        $aFrom = [
            
        '%Anrede2%',
            
        '%Vorname2%',
            
        // ...
        ];

        $aTo  = [
            
        $row['Anrede2'],
            
        $row['Vorname2'],
            
        // ...
        ];

        $content str_replace($aFrom$aTo$content); 


        oder man nimmt gleich strtr(), ist noch eleganter:

        PHP-Code:
        $aReplacements = [
            
        '%Anrede2%'   => $row['Anrede2'],
            
        '%Vorname2%'  => $row['Vorname2'],
            
        // ...
        ];

        $content strtr($content$aReplacements); 
        LG
        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar

        Lädt...
        X