Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „Kontaktformular“

Mausi89

*Mausi*

Hallo,

ich hab auf meiner Webseite ein Kontaktformular mit folgendem Code.

Code:
<?php

    // wenn das Formular übermittelt wurde
    if(isset($_POST['abschicken'])){
       while(list($feld,$wert)=each($_POST)){
           
          // ü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>- Bitte den Nachnamen angeben.</p>" : false;
       empty($vorname) ? $err[] = "<p>- Bitte den Vornamen angeben.</p>" : false;
       empty($email) ? $err[] = "<p>- Bitte die Email-Adresse angeben.</p>" : false;
       empty($text) ? $err[] = "<p>- 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>Bitte korrigieren Sie folgende Fehler:</p>";
          foreach($err as $fehler){
             echo $fehler;
          }
?>



                    <div id='fg_membersite'>
       
                        <form id='kontakt' action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
           
                            <fieldset >
           
                                <div class='container2'>
                                    <label class='labelclass' for='lastname' >*Nachname:</label>
                                    <input type="text" id="lastname" name="nachname" value="<?php echo $nachname; ?>" maxlength="70" />
                                </div>
                               
                                <div class='container2'>
                                    <label class='labelclass' for='firstname' >*Vorname:</label>
                                    <input type="text" id="firstname" name="vorname" value="<?php echo $vorname; ?>" maxlength="70" />
                                </div>
                               
                                <div class='container2'>
                                    <label class='labelclass' for='company' >Firma:</label>
                                    <input type="text" id="company" name="firma" value="<?php echo $firma; ?>" maxlength="70" />
                                </div>
                               
                                <div class='container2'>
                                    <label class='labelclass' for='address' >Postanschrift:</label>
                                    <input type="text" id="address" name="strasse" value="<?php echo $strasse; ?>" maxlength="70" />
                                </div>
                               
                                <div class='container2'>
                                    <label class='labelclass' for='phone' >Telefon:</label>
                                    <input type="text" id="phone" name="telefon" value="<?php echo $telefon; ?>" maxlength="70" />
                                </div>

                                <div class='container2'>
                                    <label class='labelclass' for='email' >*E-Mail:</label>
                                    <input type="text" id="email" name="email" value="<?php echo $email; ?>" maxlength="70" />
                                </div>

                                <div class='container2'>
                                    <textarea cols="20" rows="2" style="width:476px" name="text"><?php echo $text; ?></textarea>
                                </div>
                               
                                <div class='container3'>
                                    <p class='pflichtfelder'>*Pflichtfelder</p>
                                </div>
                               
                                <div class='short_explanation3'>
                                    <input class="button" type="reset" value="Formular löschen" style="width:100%" />
                                </div>
                                <div class='short_explanation3'>
                                    <input class="button" type="submit" name="abschicken" value="Formular absenden" style="width:100%" />
                                </div>
               

                            </fieldset>
           
                        </form>
                       
                    </div>


   


<?php    // sind keine Fehler vorhanden, wird die Email versendet
       } else {
          $mailbetreff="Kontaktformular ".$_SERVER['HTTP_HOST'];
          // HIER DIE EMPFÄNGER EMAIL-ADRESSE ANPASSEN!!!       
          echo (mail("meine Email", $betreff, $nachricht, "From: ".$email."")) ? "<p>Vielen Dank für Ihre eMail!</p>": "<p>Ein Fehler ist aufgetreten!</p>";
       }
        // das Formular welches als erstes dem Besucher angezeigt wird
    } else {
?>



                    <div id='fg_membersite'>
       
                        <form id='kontakt' action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

                            <fieldset >
           
                                <div class='zeile'>
           
                                <div class='container2'>
                                    <label class='labelclass' for='lastname' >*Nachname:</label>
                                    <input type="text" id="lastname" name="nachname" value="" style="width:176px" />
                                </div>
                               
                                <div class='container2'>
                                    <label class='labelclass' for='firstname' >*Vorname:</label>
                                    <input type="text" id="firstname" name="vorname" value="" style="width:176px" />
                                </div>
                               
                                </div>
                                <div class='zeile'>
                               
                                <div class='container2'>
                                    <label class='labelclass' for='company' >Firma:</label>
                                    <input type="text" id="company" name="firma" value="" style="width:176px" />
                                </div>
                               
                                <div class='container2'>
                                    <label class='labelclass' for='address' >Postanschrift:</label>
                                    <input type="text" id="address" name="strasse" value="" style="width:176px" />
                                </div>
                               
                                </div>
                                <div class='zeile'>
                               
                                <div class='container2'>
                                    <label class='labelclass' for='phone' >Telefon:</label>
                                    <input type="text" id="phone" name="telefon" value="" style="width:176px" />
                                </div>

                                <div class='container2'>
                                    <label class='labelclass' for='email' >*E-Mail:</label>
                                    <input type="text" id="email" name="email" value="" style="width:176px" />
                                </div>

                                </div>

                                <div class='container4'>
                                    <textarea cols="20" rows="2" style="width:393px" name="text"></textarea>
                                </div>
                               
                               
                                <div class='container3'>
                                    <p class='pflichtfelder'>*Pflichtfelder</p>
                                </div>
                               
                               
                                <div class='short_explanation3'>
                                    <input class="button" type="reset" value="Formular löschen" style="width:100%" />
                                </div>
                                <div class='short_explanation3'>
                                    <input class="button" type="submit" name="abschicken" value="Formular absenden" style="width:100%" />
                                </div>

                            </fieldset>
           
                        </form>
                       
                       
                       
                    </div>

    <?php
           
    }
?>

Leider funktioniert es nicht. Wenn ich es ausfülle und abschicke, wird

1. nicht der Text angezeigt der angegeben ist und
2. kommt bei mir keine Mail an mit den Daten.

Kann mir da vielleicht jemand helfen? Wär super, komm selber nicht mehr weiter.

Danke schon mal.


Schöne Grüße
 

msa1989

Bin da

Hi,
ich hab das nur mal kurz durchgetestet. Der Spaghetti Code macht es leider nicht sehr einfach.
Aber folgendes ist mir gleich aufgefallen:
PHP:
if($feld != "abschicken") $mailnachricht .= ucfirst($feld).": $wert\n";
die Variable $mailnachricht gibt es zu diesem Zeitpunkt noch nicht.
Sprich das .= ist schon mal ein Fehler. Vorher mit $mailnachricht = ''; initialisieren ist eine Option.

Dann beim eigentlichen "mail" code in Zeile 99.
Die Variablen $betreff und $nachricht gibt es nicht. Also kann auch nichts verschickt werden.
 

Curanai

Aktives Mitglied

Hi,

nicht initialisierte Variablen erzeugen eine Notice (Hinweis) - aber keinen Fehler (Error). Davon bricht das Script auch nicht ab.

Wie mein Vorredner aber korrekt erwähnt: $betreff soll wohl eher $mailbetreff sein und $nachricht wohl eher $mailnachricht. Aber auch $err wird als Array bspw. nicht initialisiert.

Copy/Paste kann echt die Pest sein! :)

Noch ein paar Tipps/Anregungen aufs Haus:
In einer Entwicklungsumgebung ist es zwingend notwendig, dass Du Dir Fehler anzeigen lässt. Hierzu nutzt Du in einer Konfigurationsdatei (wird dann überall eingebunden) bspw. sowas:
ini_set("display_errors",true);
error_reporting(E_ALL);


Wenn Du bzgl. allem (!!!), was ein Problem sein könnte, angehalten werden willst, nimmst Du einen eigenen Error-Handler, der mehr Infos liefert:
set_error_handler(
function($nSeverity, $strMessage, $strFilePath, $nLineNumber){
if (error_reporting() !== 0){ // @
throw new \ErrorException($strMessage, /*nExceptionCode*/ 0, $nSeverity, $strFilePath, $nLineNumber);
}
},
/*E_ALL*/ -1
);

- was passiert beim Drücken von F5, Refresh, STRG + R (etc.), wenn erstmalig das Formular verschickt wurde? (nutze einen einmaligen Hashwert, welcher im Formular und in der Session präsent ist)
- verwende bitte double-quotes statt single-quotes (bspw. bei vergebenen IDs)
- inline-CSS in Inputs schiebe ich jetzt mal auf "Prototyping" - gehört aber raus (nämlich ins CSS)
- trenne Funktion (PHP) und Ausgabe (HTML) voneinander
- Zeile 8 führt ein $$feld=$wert, was ganz schlechter Stil ist (Du hast es doch bereits als Array vorliegen?!)
- Zeile 17 bis 20 sind unlogisch aufgebaut (für wen ist "false"?)
- im "core" werden Vergleiche mittels "!=" unnötig gecastet (also umgewandelt) – nutze stattdessen "!=="
- als Tag im "form" empfehle ich Dir noch accept-charset="utf-8" (damit Dir auch Japaner schreiben können ^^)
- von mir erweiterte Felder an Dein Kontaktform sind problemlos möglich; damit liest Du meine Werbung, da dies zugestellt wird ^^

Final und vor einer Nutzung einer erhaltenen E-Mail-Adresse lässt Du bitte prüfen, ob dies auch eine E-Mail ist. Hier bietet Dir PHP sog. Filter an: FILTER_VALIDATE_EMAIL

Und da gibbet noch mehr ... aber dann beschmeißt ihr mich mit Steinen. ;)

Schönen Sonntag wünsche ich.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
175.182
Beiträge
2.582.054
Mitglieder
67.254
Neuestes Mitglied
MKP
Oben