Textfeld zwischenspeichern bzw. wieder füllen

Jan-Frederik Stieler

Monsterator
Moderator
Hallo,
ich habe ein Mailformular bei welchem das Formular wieder automatisch mit den Inhalten durch Variablen gefüllt wird wenn der Validator einen Fehler ausgibt.
Nur beim Textfeld funktioniert das nicht. Hier eine abgespeckte Variante des Formulars:
PHP:
form method="post" class="mailform">
       
            <?php if($alert): ?>
            <div class="alert">
                <h3><?php echo l::get('warning')?></h3>
                <button type="button" class="unloadalert btn btn-default-white pull-right"><i class="icon-cross"></i></button>
                <ul>
                <?php foreach($alert as $message): ?>
                    <li><?php echo html($message) ?></li>
                <?php endforeach ?>
                </ul>
            </div>
            <?php endif ?>

            <div class="form-group col-xs-24 col-sm-24 col-md-24 col-lg-24">
                <label for="name" class="sr-only"><?php echo l::get('name') ?></label>
                <input type="text" id="name" class="form-control" name="name" placeholder="<?php echo l::get('name') ?>" value="<?php if (isset($_POST['name'])) : echo $_POST['name']; else: ''; endif ?>">
            </div>
<textarea id="text" name="text" class="form-control" rows="6" placeholder="<?php echo l::get('text') ?>" value="<?php if (isset($_POST['text'])) : echo $_POST['text']; else: ''; endif ?>"></textarea>
            <div class="form-group col-xs-24 col-sm-24 col-md-24 col-lg-24">           
                <button class="reset btn btn-red col-xs-11 col-sm-11 col-md-11 col-lg-11 pull-left" type="reset" name="reset" ><?php echo l::get('reset') ?></button>   
                <button class="submit btn btn-green col-xs-11 col-sm-11 col-md-11 col-lg-11 pull-right" type="submit" name="contactsubmit" value="Submit"><?php echo l::get('submit') ?></button>
            </div>   
        </form>

hat jemand eine Idee warum das nicht funktioniert?

Viele Grüße
 
Bei textarea gibt es kein value-Attribut. Der Inhalt muss zwischen das Anfangs- und Ende-Tag. Beispiel:

Funktioniert nicht:

<textarea value="bla"></textarea>

Funktioniert:
<textarea>bla</textarea>
 
Etwa hier…

Code:
value="<?php if (isset($_POST['text'])) : echo $_POST['text']; else: ''; endif ?>"

…noch ans Escaping denken. Sonst hast du Probleme, wenn jemand in den Text ein Anführungszeichen setzt. Ich glaube, die Funktion, die du dafür hast, heißt html().

Ich würde auch noch mal gucken, ob die Rückgaben von l::get() schon escapet sind (oder escapet werden müssen, vielleicht sollen die auch HTML liefern). Ansonsten dort auch immer noch ein html() drum. (Wenn das denn die passende Funktion ist.)

Am Rande: Statt "<?php echo $var ?>" kannst du ab PHP 5.4 auch "<?=$var?>" schreiben.

- http://php.net/manual/en/ini.core.php#ini.short-open-tag
 
HI,
dank dir für deine Erklärung und Anmerkung!
Ich hab mich aktiv geegn die Shorthandschreibweise der php-tags entschieden. Finde das irgendwie angenehmer :) und es bricht nicht wenn Shorthand auf dem Server nicht aktiviert ist.
l::get() liefert nur einen Textstring. Ob der jedoch escaped ist weiß ich grad nicht.

Grüße
 
Jo, ist natürlich okay, die Schreibweise nicht zu nutzen. Ich meinte aber wirklich explizit nur "<?=". "<?" sollte man in der Tat nicht nutzen. (Aus genau dem Grund, den du nennst.)

"<?php" und "<?=" sind ab PHP 5.4 immer verfügbar. Zuvor hing "<?=" auch an der Config-Einstellung.
 
Zurück