Sara: Wert ersetzten

Hallo,

ich habe ein kleines technisches Problem :/ Folgende Zeile kommt aus einer Datenbank

Ich möchte gerne 7 Nachrichten pro Woche erhalten

Die Zahl kann allerdings in den Usereinstellungen geändert werden, dieser Wert steht dann in einer Variable die $Nachrichten_pro_Tag heißt.

Meine Frage, ist es möglich die Zahl irgendwie ersetzten zu lassen und zwar mit dem Wert, was der User gegebenenfalls abändert? Alternativ kann ich natürlich den Wert 7 auch durch ein anderes Zeichen ersetzten wenn dieses vielleicht einfacher ist.

Eine Idee wäre etwa so

$Wert_aus_DB = "14";
$Nachricht   = "Ich möchte gerne %Mails Nachrichten pro Woche erhalten";
$Nachricht   = str_replace ($Wert_aus_DB, "%Mails", $Nachricht);

EDIT: So sollte es gehen, ob es die beste Lösung ist weiß ich natürlich nicht

$Wert_aus_DB = "14";
$Nachricht   = "Ich möchte gerne %Mails Nachrichten pro Woche erhalten";
$Nachricht   = str_replace ("%Mails",$Wert_aus_DB, $Nachricht);
  1. @@Sara

    Folgende Zeile kommt aus einer Datenbank

    Ich möchte gerne 7 Nachrichten pro Woche erhalten

    ?? Das sollte so nicht in der Datenbank stehen. Weiter unten lässt du auch durchblicken, dass es das nicht tut, sondern lediglich die Zahl aus der Datenbank kommt:

    $Wert_aus_DB = "14";
    $Nachricht   = "Ich möchte gerne %Mails Nachrichten pro Woche erhalten";
    $Nachricht   = str_replace ($Wert_aus_DB, "%Mails", $Nachricht);
    

    Nee, nicht mit regulärem Ausdruck suchen und ersetzen, sondern Platzhalter verwenden:

    $Nachricht = 'Ich möchte gerne %1$d Nachrichten pro Woche erhalten';
    

    Bei der Ausgabe dafür dann den entsprechenden Wert einsetzen:

    printf($Nachricht, $Wert_aus_DB);
    

    Das geht davon aus, dass in $Nachricht und $Wert_aus_DB nichts Böses drinstehen kann. Ansonsten wären die Werten noch durch htmlspecialchars() zu jagen.

    Falls du den Text nicht gleich ausgeben, sondern erstmal in einer Variablen haben willst: sprintf().

    LLAP 🖖

    --
    „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
    „Hat auf dem Forum herumgelungert …“
    (Wachen in Asterix 36: Der Papyrus des Cäsar)
    1. Hallo,

      Nee, nicht mit regulärem Ausdruck suchen und ersetzen, sondern Platzhalter verwenden:

      $Nachricht = 'Ich möchte gerne %1$d Nachrichten pro Woche erhalten';
      

      Bei der Ausgabe dafür dann den entsprechenden Wert einsetzen:

      printf($Nachricht, $Wert_aus_DB);
      

      danke für deine Verbesserung, ich verstehe zwar nicht wirklich was an deiner Lösung besser sein soll als an meiner, denn bei beiden funktioniert es bzw. bei deiner Funktioniert es derzeit nicht ganz, ich kann nl2br nicht mehr anwenden.

      if ($user->MailSetting == "") { 
             $NewWert =  $MailSetting;  }
               else { 
                  $NewWert = $user->MailSetting ; 
               };
      
      nl2br(printf($TextDisplayPDF, $NewWert));
      

      Wenn ich nl2br weg lasse, wird alles hintereinander weg geschrieben. Wenn ich es so versuche

      printf(nl2br($TextDisplayPDF, $NewWert));
      

      dann erhalte ich gar keine Ausgabe mehr. Du siehst, deine Lösung bereitet mir sehr viel mehr Sorgen / Probleme die ich nicht gelöst bekomme.

      1. Hallo,

        ok so geht es:

        if ($user->MailSetting == "") { 
               $NewWert =  $MailSetting;  }
                 else { 
                    $NewWert = $user->MailSetting ; 
                 };
        
        $test = sprintf($TextDisplayPDF, $NewWert);
        echo nl2br(htmlspecialchars($test));
        

        Jetzt bleibt nur die Frage, was ist an dieser Version besser, als an meiner mit einem Wert ersetzten?

      2. @@Sara

        ich kann nl2br nicht mehr anwenden.

        Das sollte man auch i.a.R. gar nicht anwenden.

        if ($user->MailSetting == "") { 
               $NewWert =  $MailSetting;  }
                 else { 
                    $NewWert = $user->MailSetting ; 
                 };
        

        Das geht auch kürzer und – wie ich finde – besser lesbar:

        $NewWert = ($user->MailSetting == '') ? $MailSetting : $user->MailSetting
        

        Und noch besser lesbar:

        $NewWert = empty($user->MailSetting) ? $MailSetting : $user->MailSetting
        

        Wenn ich nl2br weg lasse, wird alles hintereinander weg geschrieben.

        ??

        Man sollte Eingabe, Verarbeitung und Ausgabe streng voneinander trennen (EVA-Prinzip).

        Bei der Ausgabe wird der Wert von Variablen ins Markup geschrieben:

        <p><?php printf($TextDisplayPDF, $NewWert); ?></p>
        

        Und schon brauchst du – wie ich eingangs schon erwähnte – kein nl2br().

        Warum ist der Text „Ich möchte gerne … Nachrichten pro Woche erhalten“ überhaupt in PHP? Kommt der auch aus der Datenbank?

        Warum nicht einfach so?

        <p>Ich möchte gerne <?php echo $NewWert; ?> Nachrichten pro Woche erhalten</p>
        

        (Mit dem schon gegebenen Hinweis auf htmlspecialchars().

        Wenn ich es so versuche

        printf(nl2br($TextDisplayPDF, $NewWert));
        

        Dann stimmt das syntaktisch nicht.

        LLAP 🖖

        --
        „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
        „Hat auf dem Forum herumgelungert …“
        (Wachen in Asterix 36: Der Papyrus des Cäsar)
        1. Hallo,

          Und noch besser lesbar:

          $NewWert = empty($user->MailSetting) ? $MailSetting : $user->MailSetting
          

          stimmt, dieses sieht kompakter aus, mal schauen ob ich mir diese Schreibweise angewöhnen kann.

          Wenn ich nl2br weg lasse, wird alles hintereinander weg geschrieben. ??

          Der Text kommt aus einer Datenbank, dieser ganz spezielle hat mehrere Zeile, also muss ich dafür sorgen dass bei der Ausgabe die Umbrüche wieder vorhanden sind. Deshalb nutze ich nl2br.

          Warum ist der Text „Ich möchte gerne … Nachrichten pro Woche erhalten“ überhaupt in PHP? Kommt der auch aus der Datenbank?

          Weil der Text in mehreren Sprachen vorliegt und jeder im Team etwas übersetzt. Wir haben uns vor langem mal dazu entscheiden alle Text in die Datenbank zu packen. Hat den Vorteil alles liegt zentral, jeder kann dran arbeiten, sieht sofort was erledigt ist und wenn eine externe Person hilft benötigt diese keinen FTP Zugang um irgendwelche PHP Dateien herunterzuladen.

          1. @@Sara

            Der Text kommt aus einer Datenbank, dieser ganz spezielle hat mehrere Zeile, also muss ich dafür sorgen dass bei der Ausgabe die Umbrüche wieder vorhanden sind. Deshalb nutze ich nl2br.

            Umbrüche? Oder Absätze?

            Vielleicht sollte nicht 'foo \n bar \n baz %1$d quz' in der Datenbank stehen, sondern die Schnipsel 'foo' und 'bar' und 'baz %1$d quz' getrennt? Ausgabe mit

            <p><?php echo $schnipsel1; ?></p>
            <p><?php echo $schnipsel2; ?></p>
            <p><?php printf($schnipsel3, $wert); ?></p>
            

            Oder das Markup steht mit in der Datenbank: '<p>foo</p><p>bar</p><p>baz %1$d quz</p>'; Ausgabe mit

            <?php printf($schnipsel, $wert); ?>
            

            Ich tendiere zu ersterem.

            LLAP 🖖

            --
            „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
            „Hat auf dem Forum herumgelungert …“
            (Wachen in Asterix 36: Der Papyrus des Cäsar)