Felix Riesterer: Formmailer - PHP, Perl od. Javascript?

Beitrag lesen

Liebe(r) Nathi,

Du beschreibst ein "Affenformular".

Wenn Du den einfachen Formmailer in PHP zu Grunde legst, dann kannst Du der Reihe nach die Indices in $_POST überprüfen, um im Fehlerfalle eine Variable entsprechend zu befüllen und das Formular eben wieder ausgeben.

Beispiel für ein Affenformular:

<?php  
/* Formular auswerten */  
$fehler = false; // Noch ist alles OK.  
  
if (!empty($_POST)) {  
    // Es wurden POST-Daten gesendet -> Auswerten!  
    $pflichtfelder = array("vname", "nname", "adresse", "plz", "ort");  
  
    foreach ($pflichtfelder as $pf) {  
        if (!isset($_POST[$pf]) || empty($_POST[$pf])) {  
            $fehler = true;  
        }  
    }  
  
    // Verarbeiten oder Formular wieder ausgeben?  
    if (!$fehler) {  
        // Verarbeiten!  
        echo "Vielen Dank. Die Daten wurden verarbeitet.";  
    }  
  
}  
  
if ($fehler || empty($_POST)) {  
    // Formular ausgeben (entweder war $_POST leer oder $fehler war true)  
  
?>
~~~~~~html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">  
    <head>  
        <title>Einfacher PHP-Formmailer</title>  
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />  
        <style type="text/css">

~~~css .fehler {
            background-color: #ff8080;
            border-color: #ff0000;
        }

        ~~~html
</style>  
    </head>  
    <body>  
        <h1>Beispielformular</h1>  
        <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">  
            <!-- Hier die eigentlichen Formularfelder eintragen. Die folgenden sind Beispielangaben. -->  
            <dl>  
                <dt><label for="vname">Ihr Vorname</label>:</dt>  
                <dd><input type="text" name="vname" id="vname" 
~~~~~~php
<?php  
    $test = isset($_POST["vname"]) ? $_POST["vname"] : "";  
    echo 'value="', $test, '"';  
    if (empty($test) && $fehler)  
        echo ' class="fehler"';  
                ?>
~~~ ~~~html
/></dd>  
                <dt><label for="nname">Ihr Nachname</label>:</dt>  
                <dd><input type="text" name="nname" id="nname" 
~~~~~~php
<?php  
    $test = isset($_POST["nname"]) ? $_POST["nname"] : "";  
    echo 'value="', $test, '"';  
    if (empty($test) && $fehler)  
        echo ' class="fehler"';  
                ?>
~~~ ~~~html
/></dd>  
                <dt><label for="adresse">Ihre Anschrift</label>:</dt>  
                <dd><input type="text" name="adresse" id="adresse" 
~~~~~~php
<?php  
    $test = isset($_POST["adresse"]) ? $_POST["adresse"] : "";  
    echo 'value="', $test, '"';  
    if (empty($test) && $fehler)  
        echo ' class="fehler"';  
                ?>
~~~ ~~~html
/></dd>  
                <dt><label for="plz">PLZ</label> und <label for="ort">Wohnort</label>:</dt>  
                <dd>  
                    <input type="text" name="plz" id="plz" 
~~~~~~php
<?php  
    $test = isset($_POST["plz"]) ? $_POST["plz"] : "";  
    echo 'value="', $test, '"';  
    if (empty($test) && $fehler)  
        echo ' class="fehler"';  
                ?>
~~~ ~~~html
/>  
                    <input type="text" name="ort" id="ort" 
~~~~~~php
<?php  
    $test = isset($_POST["ort"]) ? $_POST["ort"] : "";  
    echo 'value="', $test, '"';  
    if (empty($test) && $fehler)  
        echo ' class="fehler"';  
                ?>
~~~ ~~~html
/>  
                </dd>  
            </dl>  
            <!-- Ende der Beispielangaben -->  
            <p>  
            <input type="submit" value="Senden" />  
            <input type="reset" value="Zurücksetzen" />  
            </p>  
        </form>  
    </body>  
</html>
<?php  
}  
?>

Du siehst wahrscheinlich selbst, dass obiger Code suboptimal ist. Besser wäre es, den HTML-Code in eine HTML-Datei auszulagern, die dann vom eigentlichen PHP-Script eingelesen, und bei Bedarf modifiziert wird.

Ich mache das eher so:

[HTML-Datei "formular-template.html"]

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">  
    <head>  
        <title>Einfacher PHP-Formmailer</title>  
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />  
        <style type="text/css">

~~~css .fehler {
            background-color: #ff8080;
            border-color: #ff0000;
        }

        ~~~html
</style>  
    </head>  
    <body>  
        <h1>Beispielformular</h1>  
        <form action="" method="post">  
            <!-- Hier die eigentlichen Formularfelder eintragen. Die folgenden sind Beispielangaben. -->  
            <dl>  
                <dt><label for="vname">Ihr Vorname</label>:</dt>  
                <dd><input type="text" name="vname" id="vname" /></dd>  
                <dt><label for="nname">Ihr Nachname</label>:</dt>  
                <dd><input type="text" name="nname" id="nname" /></dd>  
                <dt><label for="adresse">Ihre Anschrift</label>:</dt>  
                <dd><input type="text" name="adresse" id="adresse" /></dd>  
                <dt><label for="plz">PLZ</label> und <label for="ort">Wohnort</label>:</dt>  
                <dd>  
                    <input type="text" name="plz" id="plz" />  
                    <input type="text" name="ort" id="ort" />  
                </dd>  
            </dl>  
            <!-- Ende der Beispielangaben -->  
            <p>  
                <input name="submit-button" type="submit" value="Senden" />  
            </p>  
        </form>  
    </body>  
</html>

[PHP-Datei "test.php"]

<?php  
/* Formular auswerten */  
$fehler = false; // Noch ist alles OK.  
$pflichtfelder = array("vname", "nname", "adresse", "plz", "ort");  
  
if (!empty($_POST)) {  
    // Es wurden POST-Daten gesendet -> Auswerten!  
  
    foreach ($pflichtfelder as $pf) {  
        if (!isset($_POST[$pf]) || empty($_POST[$pf])) {  
            $fehler = true;  
        }  
    }  
  
    // Verarbeiten oder Formular wieder ausgeben?  
    if (!$fehler) {  
        // Verarbeiten!  
        echo "Vielen Dank. Die Daten wurden verarbeitet.";  
    }  
}  
  
if ($fehler || empty($_POST)) {  
    // Formular ausgeben (entweder war $_POST leer oder $fehler war true)  
    $html = file_get_contents('formular-template.html');  
  
    foreach ($pflichtfelder as $pf) {  
        $test = isset($_POST[$pf]) ? $_POST[$pf] : "";  
        $html_zusatz = 'value="'.$test.'"';  
        if (empty($test) && $fehler)  
            $html_zusatz .= ' class="fehler"';  
  
        $html = preg_replace('~(?is)(id="'.$pf.'")~', '\\1 '.$html_zusatz, $html);  
    }  
  
    echo $html;  
}  
?>

Hoffentlich hilft's...

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)