Probleme mit Kontaktformular

julieann

Erfahrenes Mitglied
Hallo!

Ich bin PHP-Anfängerin und habe Probleme mit einem einfachen Kontaktformular, das ich vor einiger Zeit erstellt habe.

Es hat tadellos funktioniert, doch seit einiger Zeit habe ich nun ein Problem. Obwohl die Felder ausgefüllt wurden, zeigt er immer die entsprechende Fehlermeldung an. Hat jemand eine Idee, wieso das plötzlich auftritt?


Hier habe ich einmal das komplette Formular mit dem entsprechenden Code.
PHP:
<?php
// wenn das Formular übermittelt wurde
if(isset($_POST['abschicken'])){
    while(list($feld,$wert)=each($HTTP_POST_VARS)){
        // übermittelte Inhalte "entschärfen"
        $wert=preg_replace("/(content-type:|bcc:|cc:|to:|from:)/im", "",$wert);
           $$feld=$wert;
        // die übermittelten Variablen werden zum "Text der Email" zusammengefasst
        if($feld!="abschicken"){
            $mailnachricht.=ucfirst($feld).": $wert\n";
                        }
    }

    $mailnachricht.="\nDatum/Zeit: ". date("d.m.Y H:i:s");

    // Überprüfen ob alle Pflichtfelder gefüllt sind
    empty($nachname) ? $err[] = "<p class=form>- Bitte den Nachnamen angeben.</p>" : false;
    empty($vorname) ? $err[] = "<p class=form>- Bitte den Vornamen angeben.</p>" : false;
        empty($Branche) ? $err[] = "<p class=form>- Bitte die Branche angeben.</p>" : false;
    empty($email) ? $err[] = "<p class=form>- Bitte die Email-Adresse angeben.</p>" : false;
    empty($text) ? $err[] = "<p class=form>- Welchen Wunsch haben Sie? Bitte den Text eingeben.</p>" : false;
    // wenn nicht, werden die Fehlermeldungen ausgegeben und das "halbgefüllte" Formular angezeigt
    if(!empty($err)) {
        echo "<p class=form>Bitte korrigieren Sie folgende Fehler:</p>";
        foreach($err as $fehler){
            echo $fehler;
        } ?>
        <form action="#" method="post">
        <table width="100%" border="0" cellpadding="3" cellspacing="1">
        <tr><td width="140" align="right">*Nachname:</td><td align="left"><input type="text" name="nachname" value="<?php echo $nachname; ?>" style="width:100%;" /></td></tr>
        <tr><td align="right">*Vorname:</td><td align="left"><input type="text" name="vorname" value="<?php echo $vorname; ?>" style="width:100%" /></td></tr>
           <tr><td align="right">Branche:</td><td align="left">
                        <select name="Branche" size="1">
                        <option>bitte wählen</option>
        <option value="Schule/Kindergarten">Schule/Kindergarten</option>
      <option value="Gemeinde">Gemeinde</option>
      <option value="Architekt">Architekt</option>
      <option value="Private Agentur">Private Agentur</option>
      <option value="Garten und Landschaft">Garten und Landschaft</option>
          <option value="Privat">Privat</option>
    </select></td></tr>
                <tr><td align="right">Firma:</td><td align="left"><input type="text" name="firma" value="<?php echo $firma; ?>" style="width:100%" /></td></tr>
        <tr><td align="right">Straße, Hausnr.:</td><td align="left"><input type="text" name="strasse" value="<?php echo $strasse; ?>" style="width:100%" /></td></tr>
        <tr><td align="right">PLZ, Ort:</td><td align="left"><input type="text" name="ort" value="<?php echo $ort; ?>" style="width:100%" /></td></tr>
                <tr><td align="right">Telefon:</td><td align="left"><input type="text" name="telefon" value="<?php echo $telefon; ?>" style="width:100%" /></td></tr>
        <tr><td align="right">Telefax:</td><td align="left"><input type="text" name="fax" value="<?php echo $fax; ?>" style="width:100%" /></td></tr>
                <tr><td align="right">*E-Mail:</td><td align="left"><input type="text" name="email" value="<?php echo $email; ?>" style="width:100%" /></td></tr>
        <tr><td align="right">Prospektmaterial bestellen:</td><td align="left"><input type="checkbox" name="prospekt" value="true" /></td></tr>
                <tr><td colspan="2"><textarea rows="12"  style="width:100%" name="text"><?php echo $text; ?></textarea></td><td>&nbsp;</td></tr>
        <tr><td colspan="2" align="left" nowrap><br /><input type="reset" value="Formular l&ouml;schen" style="width:49%" />&nbsp;&nbsp;<input type="submit" name="abschicken" class="button" value="Formular absenden" style="width:49%" /></td></tr>
        </table>
        </form>
        <p>*Pflichtfelder</p>
<?php    // sind keine Fehler vorhanden, wird die Email versendet
    } else {
        $mailbetreff="Kontaktformular ".$_SERVER['HTTP_HOST'];
        // HIER DIE EMPFÄNGER EMAIL-ADRESSE ANPASSEN!!!
        if(mail("info@XXXXXX.de", $mailbetreff, $mailnachricht, "From: $email")){
            echo "<p>Vielen Dank für Ihre eMail!</p>";
        } else {
            echo "<p>Ein Fehler ist aufgetreten!</p>";
        }
    }
// das Formular welches als erstes dem Besucher angezeigt wird
} else { ?>
        <form action="#" method="post">
        <table width="90%" border="0" cellpadding="3" cellspacing="1">
        <tr><td width="140" align="right">*Nachname:</td><td align="left"><input type="text" name="nachname" value="" style="width:100%;" /></td></tr>
        <tr><td align="right">*Vorname:</td><td align="left"><input type="text" name="vorname" value="" style="width:100%" /></td></tr>
          <tr><td align="right">Branche:</td><td align="left">
                        <select name="Branche" size="1">
                        <option>bitte wählen</option>
        <option value="Schule/Kindergarten">Schule/Kindergarten</option>
      <option value="Gemeinde">Gemeinde</option>
      <option value="Architekt">Architekt</option>
      <option value="Private Agentur">Private Agentur</option>
      <option value="Garten und Landschaft">Garten und Landschaft</option>
          <option value="Privat">Privat</option>
    </select></td></tr>
                <tr><td align="right">Firma:</td><td align="left"><input type="text" name="firma" value="" style="width:100%" /></td></tr>
        <tr><td align="right">Straße, Hausnr.:</td><td align="left"><input type="text" name="strasse" value="" style="width:100%" /></td></tr>
        <tr><td align="right">PLZ, Ort:</td><td align="left"><input type="text" name="ort" value="" style="width:100%" /></td></tr>
                <tr><td align="right">Telefon:</td><td align="left"><input type="text" name="telefon" value="" style="width:100%" /></td></tr>
        <tr><td align="right">Telefax:</td><td align="left"><input type="text" name="fax" value="" style="width:100%" /></td></tr>
                <tr><td align="right">*E-Mail:</td><td align="left"><input type="text" name="email" value="" style="width:100%" /></td></tr>
        <tr><td align="right">Prospektmaterial bestellen:</td><td align="left"><INPUT TYPE=CHECKBOX NAME="prospekt" VALUE="yes"></td></tr>
                <tr><td colspan="2"><textarea rows="12"  style="width:100%" name="text"></textarea></td><td>&nbsp;</td></tr>
        <tr><td colspan="2" align="left" nowrap><br /><input type="reset" value="Formular l&ouml;schen" style="width:49%" />&nbsp;&nbsp;<input type="submit" name="abschicken" value="Formular absenden" style="width:49%" /></td></tr>
        </table>
        </form>
        <p>*Pflichtfelder</p>
        <?php
}
?>
 
Er zeigt immer an, dass Vor- und Nachname, Email, Text etc. nicht ausgefüllt seien. Also alle Pflichtfelder. Obwohl man sie ausgefüllt hat.
 
Du arbeitest mit $HTTP_POST_VARS. Das Ding ist mMn veraltet. Nimm doch $_POST.

Abgeshen von grossen klaffenden Sicherheitslücken sehe ich grad kein Fehler
 
Leider hat sich dadurch nichts geändert. Ich bekomme immer wieder die Fehlermeldungen. Welche Sicherheitslücken sind das? Ich bin Anfängerin in PHP und für Tipps immer dankbar.
 
Du übernimmst einfach alles was über POST reinkommt in Variablen. Die POST-Daten können problemlos bearbeitet werden. So kann jede Variable deines Codes von Aussen gesetzt werden.
 
Der erste Schritt bei Problemen wie "plötzlich geht's nicht mehr": Error-Reporting aktivieren.

Schreib mal als erstes im PHP-Teil folgende Zeilen:

PHP:
error_reporting(E_ALL);
ini_set('display_errors', 1);

Dann solltest du mit einigen "Undefined variable"-Ausgaben beschossen werden. Die Variablen á $nachname sind alle nicht in dem Script definiert. Wahrscheinlich war früher mal register_globals aktiviert und mittlerweile nicht mehr (zu Recht).
empty() gibt bei nicht-definierten Variablen klammheimlich true zurück, von daher werden alle Felder als nicht befüllt interpretiert.

Du musst also die Variablen innerhalb deiner while-Schleife mit Werten befüllen. Ich würde da aber eher zu einem Array tendieren.
 
Zurück