mathefritz: php in TextAreaElement

$_POST['eintrag'] HAT Inhalt aber die phpFunction

<?php
 function pet($n) {

 echo "name=\"$n\" value=\"$_POST[$n]\" required ";
}
?>

die aufgerufen in inputElementenauf wie erwünscht abeitet
produziert im folgenden garnichts

...      <td><textarea <?php pet('eintrag'); ?> rows="10" cols="50" placeholder="Artikel, Benennung oder sonstige Daten bitte hier dazu eingeben"></textarea><br></td>
  1. Tach!

    $_POST['eintrag'] HAT Inhalt aber die phpFunction

    <?php
     function pet($n) {
    
     echo "name=\"$n\" value=\"$_POST[$n]\" required ";
    }
    ?>
    

    die aufgerufen in inputElementenauf wie erwünscht abeitet
    produziert im folgenden garnichts

    Oh doch, das macht sie. Schau dir die Quelltextansicht im Browser an.

    ...      <td><textarea <?php pet('eintrag'); ?> rows="10" cols="50" placeholder="Artikel, Benennung oder sonstige Daten bitte hier dazu eingeben"></textarea><br></td>
    

    Eine Textarea hat kein value-Attribut. Der Inhalt muss zwischen die Tags geschrieben werden. Der gezeigte Code ist auch noch anderweitig defekt, nämlich weil der Kontextwechsel nicht beachtet.

    dedlfix.

    1. @@dedlfix

      Eine Textarea hat kein value-Attribut. Der Inhalt muss zwischen die Tags geschrieben werden. Der gezeigte Code ist auch noch anderweitig defekt, nämlich weil der Kontextwechsel nicht beachtet.

      TL;DR: $_POST[] unbehandelt in HTML auszugeben ist immer falsch; dass muss durch htmlspecialchars() laufen. (Wenn nicht durch htmlentities(), aber das sollte man i.a.R. nicht tun.)

      Bei $n kann es auch nicht schaden. Ob es notwendig ist, hängt davon ab, wo $n herkommt/was da drinstehen kann.

      Der gezeigte Code ist aber noch aus einem anderen Grund defekt: weil Markup mit PHP reingeschrieben wird. Das sollte eher so aussehen:

      <textarea name="<?php echo htmlspecialchars($n); ?>" required>
      	<?php echo htmlspecialchars($_POST[$n]); ?>
      </textarea>
      

      oder in Kurzform

      <textarea name="<?= htmlspecialchars($n) ?>" required>
      	<?= htmlspecialchars($_POST[$n]) ?>
      </textarea>
      

      LLAP 🖖

      --
      “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
    2. Danke erstmal,
      mit

            <td><textarea
                  reqired rows="10"
                          cols="50"
                   placeholder="Artikel, Benennung oder sonstige
                                Daten bitte hier dazu eingeben"> <?php echo $_POST['eintrag']; ?>
               </textarea><br></td>
      

      klappt es erstmal auf dieser Seite; aber die Textarea ist natürlich Teil eines Formulars, das submitted wird - und um den Inhalt auch weiter zu posten fehlte natürlich noch der name;
      läßt sich das mit dem Kontext kurz fassen ( worauf bezieht es sich speziell hier?),
      kann es damit noch Propbleme geben wenn der nächste Schritt Eintrag in die Datenbank ist, oder kann ich die Lektüre auf ein Mußeststunde verschieben?

      1. Tach!

        läßt sich das mit dem Kontext kurz fassen ( worauf bezieht es sich speziell hier?),

        Es lässt sich in einem Satz zusammenfassen, ja, aber der ist dann so allgemein, dass er nicht zum Lernen taugt. Es handelt sich hierbei um ein grundlegendes Prinzip, das man verstanden haben muss, um korrekte (und injectionssichere) Programme schreiben zu können.

        kann es damit noch Propbleme geben wenn der nächste Schritt Eintrag in die Datenbank ist,

        Datenbank und HTML sind verschiedene Kontexte. Das Prinzip ist dasselbe, aber die Vorgehensweisen unterscheiden sich. Beides klärt der verlinkte Artikel auf.

        oder kann ich die Lektüre auf ein Mußeststunde verschieben?

        Solltest du nicht. Korrekt und damit auch sicher funktionierende Programme sind essentiell wichtig. Es sei denn, du legst keinen Wert darauf, dass deine Daten korrekt und sicher verarbeitet werden.

        dedlfix.

        1. oder kann ich die Lektüre auf ein Mußeststunde verschieben?

          Solltest du nicht.

          na gut;
          aber eine Frage noch: hat jemand, außer den Entwicklern, eine Ahnung warum die Einträge in $_POST die von Seite A zu Seite B kommen auf Seite B nicht erhalten bleiben, wenn Seite B per Submit an C weitergibt.

          1. Lieber mathefritz,

            warum die Einträge in $_POST die von Seite A zu Seite B kommen auf Seite B nicht erhalten bleiben, wenn Seite B per Submit an C weitergibt.

            das kommt auf den HTTP-Request an C an, insbesondere darauf, ob der Request alle Parameter aus $_POST enthält.

            Liebe Grüße,

            Felix Riesterer.

            1. Danke;
              ich meinte, konkreter Fall,
              A gibt mit SubmitClick an B,
              B gibt mit SubmitClick an C,
              C benötigt Formulardaten aus A
              die
              in B nicht benötigt und auch nicht sichtbar sein sollen;
              gelöst
              habe ich das in B mit display:none inputElementen mit entsprechendem name und value aus $_POST; ist aber lästig.

              1. @@mathefritz

                habe ich das in B mit display:none inputElementen mit entsprechendem name und value aus $_POST; ist aber lästig.

                Für sowas gibt es <input type="hidden">.

                LLAP 🖖

                --
                “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                1. Danke;
                  aber WARUM $_POST Inhalte explizit 'regeneriert' werden müßen ist offen.

                  1. Lieber mathefritz,

                    aber WARUM $_POST Inhalte explizit 'regeneriert' werden müßen ist offen.

                    nö, ist es nicht. Zumindest für diejenigen, die verstanden haben, dass HTTP ein zustandsloses Protokoll ist. Das bedeutet, dass nach einem Request und dessen Response die Sache erledigt ist. Neuer Request bedeutet neue Angelegenheit. Das bedeutet auch, dass Du "einfach so" keine Daten des einen Requests in einen anderen "einpflanzen kannst".

                    Wenn Du mit einer $_SESSION arbeitest, dann ist das etwas anderes...

                    Liebe Grüße,

                    Felix Riesterer.

      2. Hallo mathefritz,

              <td><textarea
                    reqired rows="10"
                            cols="50"
                     placeholder="Artikel, Benennung oder sonstige
                                  Daten bitte hier dazu eingeben"> <?php echo $_POST['eintrag']; ?>
                 </textarea><br></td>
        

        Der harte Zeilenumbruch innerhalb des Attributwertes könnte u.U. problematisch sein.

        Wozu das br-Element?

        Vergiss auch nicht ein dazugehörendes label-Element.

        Bis demnächst
        Matthias

        --
        Rosen sind rot.
        1. @@Matthias Apsel

                <td><textarea
                      reqired rows="10"
                              cols="50"
                       placeholder="Artikel, Benennung oder sonstige
                                    Daten bitte hier dazu eingeben">
          

          Der harte Zeilenumbruch innerhalb des Attributwertes könnte u.U. problematisch sein.

          Der Placeholder könnte u.U. problematisch sein.

          Wozu das br-Element?

          Wozu das placeholder-Attribut?

          Vergiss auch nicht ein dazugehörendes label-Element.

          Label-less is okay for musicians, not for forms.” – “It’s quite obvious.

          LLAP 🖖

          --
          “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory