php in TextAreaElement
mathefritz
- php
$_POST['eintrag']
HAT Inhalt aber die phpFunction
<?php
function pet($n) {
echo "name=\"$n\" value=\"$_POST[$n]\" required ";
}
?>
die aufgerufen in input
Elementenauf 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>
Tach!
$_POST['eintrag']
HAT Inhalt aber die phpFunction<?php function pet($n) { echo "name=\"$n\" value=\"$_POST[$n]\" required "; } ?>
die aufgerufen in
input
Elementenauf 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.
@@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 🖖
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?
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.
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.
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.
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.
@@mathefritz
habe ich das in B mit
display:none
inputElementen mit entsprechendemname
undvalue
aus$_POST
; ist aber lästig.
Für sowas gibt es <input type="hidden">
.
LLAP 🖖
Danke;
aber WARUM $_POST Inhalte explizit 'regeneriert' werden müßen ist offen.
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.
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
@@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 🖖