Raketenwissenschaftler: HTML 1 Formular für EDIT und CREATE

Beitrag lesen

Ich verstehe Dich so, dass Du ein Template oder eine Funktion willst, die quasi ein- und das selbe Formular ausgibt, damit Du nicht mehrere ändern musst.

Dafür gibt es ca. 1 Mio Möglichkeiten mit unterschiedlichen Vor- und Nachteilen - und das ist eine konservative Schätzung. Eine stell ich Dir vor.

Du hast Die Daten optimal in einem Array:

<?php
$arrFormdata['id']='0815';
$arrFormdata['foo']='Na';
$arrFormdata['bar']='so';
$arrFormdata['tok']='auch';
$arrFormdata['gret']='was aber';
?>

Dann könnte die Funktion zum Ausgeben des Formulars die fehlenden Formulardaten durch passende leere Werte ersetzen und danach das Forular mit - je nach Kontext (HTML, Input, Textarea/Button, Javascript) oder Inhalt ( → siehe intval()) entschärften(sic!) Daten ausgeben.

function writeForm ( $caption, $arrFormdata = false ) {
	if ( ! is_array( $arrFormdata ) ) {
		foreach ( [ 'id', 'foo', 'bar', 'tok', 'baz', 'gret' ] as $i ) {
			$arrFormdata[ $i ] = '';
		}
		 
	}
?>
<form id="<?='F_' . intval( $arrFormdata['id'] ); ?>">
    <fieldset><legend><?=htmlspecialchars( $caption );?></legend>
        <input id="id" value="<?=intval( $arrFormdata['id'] ); ?>"><br>
        <input id="foo" name="foo" value="<?=htmlspecialchars( $arrFormdata['foo'], ENT_QUOTES ); ?>" /><br>
        <textarea id="bar" name="bar"><?=htmlspecialchars( $arrFormdata['bar'] ); ?><textarea><br>
        <button id="send" name="send" onclick="say('<?=trim( json_encode( $arrFormdata['gret'] ),'"' ); ?>')"><?=htmlspecialchars( $arrFormdata['tok'] ); ?></button>
    <fieldset>
</form>
<?php
}
?>

Dann muss man die Funktion nur mit (zum Editieren) oder aber ohne Angabe des Arrays (oder mit einem leeren Wert wie false, '' statt des Arrays) aufrufen:

<?php
writeForm ( 'Formular mit Daten (zum Editieren)', $arrFormdata );
writeForm ( 'Formula ohne Daten (Für neuen Datensatz)');

Hier das gesamte, funktionsfähige Beispiel:

<?php
$arrFormdata['id']='0815';
$arrFormdata['foo']='Na';
$arrFormdata['bar']='so';
$arrFormdata['tok']='auch';
$arrFormdata['gret']='was aber';

# ...

writeForm ( 'Formular mit Daten (zum Editieren)', $arrFormdata );
writeForm ( 'Formula ohne Daten (Für neuen Datensatz)');

function writeForm ( $caption, $arrFormdata = false ) {
	if ( ! is_array( $arrFormdata ) ) {
		foreach ( [ 'id', 'foo', 'bar', 'tok', 'baz', 'gret' ] as $i ) {
			$arrFormdata[ $i ] = '';
		}
		 
	}
?>
<form id="<?='F_' . intval( $arrFormdata['id'] ); ?>">
    <fieldset><legend><?=htmlspecialchars( $caption );?></legend>
        <input id="id" value="<?=intval( $arrFormdata['id'] ); ?>"><br>
        <input id="foo" name="foo" value="<?=htmlspecialchars( $arrFormdata['foo'], ENT_QUOTES ); ?>" /><br>
        <textarea id="bar" name="bar"><?=htmlspecialchars( $arrFormdata['bar'] ); ?><textarea><br>
        <button id="send" name="send" onclick="say('<?=trim( json_encode( $arrFormdata['gret'] ),'"' ); ?>')"><?=htmlspecialchars( $arrFormdata['tok'] ); ?></button>
    <fieldset>
</form>
<?php
}
?>

und der Output:

<form id="F_815">
    <fieldset><legend>Formular mit Daten (zum Editieren)</legend>
        <input id="id" value="815"><br>
        <input id="foo" name="foo" value="Na" /><br>
        <textarea id="bar" name="bar">so<textarea><br>
        <button id="send" name="send" onclick="say('was aber')">auch</button>
    <fieldset>
</form>
<form id="F_0">
    <fieldset><legend>Formula ohne Daten (Für neuen Datensatz)</legend>
        <input id="id" value="0"><br>
        <input id="foo" name="foo" value="" /><br>
        <textarea id="bar" name="bar"><textarea><br>
        <button id="send" name="send" onclick="say('')"></button>
    <fieldset>
</form>

Man kann übrigens auch Template-Systeme benutzen. Verbreitet ist z.B. Smarty.