Ingo Turski: Einfacher Formmailer

Beitrag lesen

Hi,

Ein beispiel für eine Funktion:

function tsInput($feld) {

echo "<label for="$feld">$feld</label>
<input type="text" name="$feld" id="$feld" class="input_text_klasse" ";

if(isset($_POST[$feld]) && $_POST[$feld]!=='')
echo 'value="'.htmlspecialchars($_POST[$feld]).'"';

elseif(isset($_POST[$feld]) && $_POST[$feld]=='')
echo  'value="'.htmlspecialchars($_POST[$feld]).'" ';

echo ' />';
}

  
das finde ich viel wie Cheatah viel zu viel und außerdem noch schlecht lesbar und größtenteils überflüssig.  
- Es ist unflexibel, den gesamten HTML-Code von PHP zu generieren.  
- Die Maskierungen machen den Code schlecht lesbar. [1]  
- Die Abfrage auf Existenz ist überflüssig und zudem unsinnig, wenn das label trotzdem ausgegeben wird.  
- Die Unterscheidung ob Daten vorhanden sind oder nicht ist überflüssig.  
  
Kurzum, das geht kürzer z.B. so:  
~~~php
function tsInput($field,$def='') {  
  echo 'name="',$field,'" value="';  
  if(!empty($_POST[$field])) echo htmlspecialchars($_POST[$field]);  
  elseif($def) echo htmlspecialchars($def);  
  echo '"';  
}

Dies trennt zum einen die Verarbeitung von der Ausgabe und im HTML kann dann ganz flexibel z.B. auch dies angeben:

<dt><label for="strasse">Straße / Hausnummer:</label></dt>  
<dd><input type="text" id="strasse" <?php tsInput("Strasse"); ?> /></dd>

Übrigens musst Du htmlspecialchars() wirklich nicht auf fest integrierte Strings ohne kritische Zeichen im Code anwenden.

[1] Statt echo "<label for=\"$feld\">$feld</label>" würde ich
echo '<label for="',$feld,'">',$feld,'</label>' schreiben.

freundliche Grüße
Ingo