Kontaktformular erweitern

Html

Erfahrenes Mitglied
Hallo, habe nach folgender Anleitung das beschriebene Kontaktformular erstellt und es erfolgreich mit xampp und mercury zum laufen bekommen.

Nun meine Frage: Sind irgendwelche Einträge nicht in Ordnung und man klickt auf Abschicken dann erscheint auf der nächsten Seite Bitte gehen Sie <a href=\"javascript:history.back();\">zurück</a> und füllen Sie alle Felder aus!. Diese Meldung soll nicht mehr erscheinen sondern habe mir folgendes gedacht:

Ist es möglich zu überprüfen ob ein Name, falls eine e-mail eigegeben wurde diese korrekt ist und ob eine Nachricht eingegeben wurde. Falls eine dieser Bedingungen fehlt soll das Formular nicht abgeschickt werden und es soll direkt über dem Formular die jeweilige Fehlermeldung erscheinen z.B

Bitte überprüfen Sie Ihren Namen

Bitte hinterlassen sie eine Nachricht

--- Formular ---

Zusätzlich soll wenn eine email eingegeben wurde und diese nicht korrekt ist das Feld nachdem die Nachricht abgeschickt werden sollte und die fehlermeldung erscheint wieder gelöscht werden.


Und ist es möglich eine checkbox einzubinden mit der ich Abfrage ob der Absender eine Kopie der Email zugeschickt haben möchte und wenn ja diese dann an die im email Feld angegebene Adresse zu senden?


Hoffe habe es verständlich erklärt. Habe leider kaum Ahnung von php, daher auch das eigentlich fast fertige Script.

Vielleicht wäre es ja trotzdem möglich, das mir jemand weiterhelfen kann.

mfg,Olli
 
Jo das geht.
Du fragst erstmal die Fälle ab. Also

PHP:
if(empty($_POST['name']))
  {
    //hier dann die Ausgabe falls nichts drin steht
   }
else 
  {
   //Die Ausgabe wen alles in Ordnung ist.
  }
...

So könntes du es z.B. verschachteln. Oder aber auch alles in eine Funktion packen das sähe dann so aus.
PHP:
function Name() {
if (empty($_POST['name']))
 {
   return -1;
 }
 if (empty($_POST['mail']))
 {
   return -2;
 }
...
$errorStringName = '';
$NameSwitch = name();

switch ($NameSwitch) {
  case -1: $errorStringName = 'Sie haben kein... !'; break;
  case -2: $errorStringName = 'Sie haben kein... !'; break;
  default: //Script macht weiter.
...
  }
}

So könntes du dann über die Errorstrings deine Fehler ausgeben lassen, oder du gibts sie per URL weiter, ist bei meheren Fehler aber nicht gerade so das Gelbe vom Ei.

Dieses Tutorial könnte dir allerdings auch weiterhelfen.
 
Hallo,
so sollte es auch funktionieren:
PHP:
<?php
    $fehler = '';
    if (isset($_POST['Send'])){
        if (empty($_POST['Name'])){
            $fehler .= 'Bitte Namen eingeben!<br />';
        }
        if (empty($_POST['Email'])){
            $fehler .= 'Bitte E-Mail eingeben!<br />';
        }
        if (empty($_POST['Nachricht'])){
            $fehler .= 'Bitte Nachricht eingeben!<br />';
        }
        if (!empty($fehler)){
            echo $fehler.'<br />';
        } else {
            // Hier dann die E-Mail verschicken
            if (isset($_POST['Kopie']) && $_POST['Kopie'] == 'ja'){
                // Hier dann die Kopie der E-Mail an den Absender schicken
            }
            echo"Vielen Dank für Ihre eMail!";
            exit;
        }
    }
?>
<html>
    <head>
        <title>Kontaktformular mit PHP</title>
    </head>
    <body>
        <table border="0" cellpadding="1" cellspacing="2">
            <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
                <tr>
                  <td>Name:</td>
                  <td><input name="Name" value="<?php echo $_POST['Name']; ?>" size="20" type="text"></td>
                </tr>
                <tr>
                  <td>eMail:</td>
                  <td><input name="Email" value="<?php echo $_POST['Email']; ?>" size="20" type="text"></td>
                </tr>
                <tr>
                  <td>Betreff:</td>
                  <td><select name="Betreff" size="1"><option>Hilfe</option>
                <option>Kritik</option><option>Werbung</option></select></td>
                </tr>
                <tr>
                  <td>Nachricht:</td>
                  <td><textarea cols="25" name="Nachricht" rows="5"><?php echo $_POST['Nachricht']; ?></textarea></td>
                </tr>
                <tr>
                  <td>Wünsche Antwort:</td>
                  <td>Ja <input name="Antwort" checked type="radio" value="ja">    Nein <input name="Antwort" type="radio" value="nein"></td>
                </tr>
                <tr>
                  <td>Newsletter abonnieren:</td>
                  <td><input checked name="Newsletter" type="checkbox" value="ja"></td>
                </tr>
                <tr>
                  <td>M&ouml;chten Sie eine Kopie dieser Nachricht:</td>
                  <td>Ja <input name="Kopie" type="radio" value="ja">    Nein <input checked name="Kopie" type="radio" value="nein"></td>
                </tr>
                <tr>
                  <td align="center" colspan="2"><input name="Send" type="submit" value="Abschicken">    <input name="Reset" type="reset" value="Löschen"></td>
                </tr>
            </form>
        </table>
    </body>
</html>

mfg
forsterm
 
Danke, für die schnelle Antwort. Denke so hab ich es mir vorgestellt, kann es leider erst morgen ausprobieren da ich noch auf der arbeit bin.

Nur eins fehlt doch noch oder-die ganze sache mit der email erzeugung

->
Code:
$Empfaenger = "Ihre@Mailadresse.land";

if($_REQUEST['Send'])
{
   if(empty($_REQUEST['Name']) || empty($_REQUEST['Email']) || empty($_REQUEST['Nachricht']))
   {
      echo"Bitte gehen Sie <a href=\"javascript:history.back();\">zurück</a> und füllen Sie alle Felder aus!";
   }
   else
   {
      $Mailnachricht = "Sie haben folgende Nachricht erhalten: \n\n";
      while(list($Formularfeld, $Wert)=each($_REQUEST))
      {
         if($Formularfeld!="Send")
         {
            $Mailnachricht .= $Formularfeld.": ".$Wert."\n";
         }
      }
      $Mailnachricht .= "\nDatum/Zeit: ";
      $Mailnachricht .= date("d.m.Y H:i:s");
      $Mailbetreff = "Kontakt: ";
      $Mailbetreff .= $_REQUEST['Betreff'];
      mail($Empfaenger, $Mailbetreff, $Mailnachricht, "From: ".$_REQUEST['Email']);
      echo"Vielen Dank für Ihre eMail!";
   }

Und die kopie der nachricht wird ja so auch noch nicht versand oder?

Wäre echt klasse wenn ihr mir das noch posten könntet.

mfg,Olli
 
Hallo, habe mal selber versucht den code zu vervollständigen nur leider erscheint dann immer die Meldung Ein Fehler ist aufgetreten. Bitte gehen Sie auf diese Seite..

Hier mal mein code:

Code:
<?php
  $Empfaenger = "Ihre@Mailadresse.land";
  
    $fehler = '';
    if (isset($_POST['Send'])){
        if (empty($_POST['Name'])){
            $fehler .= 'Bitte Namen eingeben!<br />';
        }
        if (empty($_POST['Email'])){
            $fehler .= 'Bitte E-Mail eingeben!<br />';
        }
        if (empty($_POST['Nachricht'])){
            $fehler .= 'Bitte Nachricht eingeben!<br />';
        }
        if (!empty($fehler)){
            echo $fehler.'<br />';
        } else {
            // Hier dann die E-Mail verschicken
            
  
      $Mailnachricht = "Sie haben folgende Nachricht erhalten: \n\n";
      while(list($Formularfeld, $Wert)=each($_REQUEST))
      {
         if($Formularfeld!="Send")
         {
            $Mailnachricht .= $Formularfeld.": ".$Wert."\n";
         }
      }
      $Mailnachricht .= "\nDatum/Zeit: ";
      $Mailnachricht .= date("d.m.Y H:i:s");
      $Mailbetreff = "Kontakt: ";
      $Mailbetreff .= $_REQUEST['Betreff'];
      mail($Empfaenger, $Mailbetreff, $Mailnachricht, "From: ".$_REQUEST['Email']);
      echo"Vielen Dank für Ihre eMail!";
   }
}
else
{
   echo"Ein Fehler ist aufgetreten. Bitte gehen Sie auf diese <a href=\"kontaktformular1.php\">Seite</a>.";
}
			
			
			
			if (isset($_POST['Kopie']) && $_POST['Kopie'] == 'ja'){
                // Hier dann die Kopie der E-Mail an den Absender schicken
            }
           
            exit;
       
  
?>
<html>
    <head>
        <title>Kontaktformular mit PHP</title>
    </head>
    <body>
        <table border="0" cellpadding="1" cellspacing="2">
            <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
                <tr>
                  <td>Name:</td>
                  <td><input name="Name" value="<?php echo $_POST['Name']; ?>" size="20" type="text"></td>
                </tr>
                <tr>
                  <td>eMail:</td>
                  <td><input name="Email" value="<?php echo $_POST['Email']; ?>" size="20" type="text"></td>
                </tr>
                <tr>
                  <td>Betreff:</td>
                  <td><select name="Betreff" size="1"><option>Hilfe</option>
                <option>Kritik</option><option>Werbung</option></select></td>
                </tr>
                <tr>
                  <td>Nachricht:</td>
                  <td><textarea cols="25" name="Nachricht" rows="5"><?php echo $_POST['Nachricht']; ?></textarea></td>
                </tr>
                <tr>
                  <td>Wünsche Antwort:</td>
                  <td>Ja <input name="Antwort" checked type="radio" value="ja">    Nein <input name="Antwort" type="radio" value="nein"></td>
                </tr>
                <tr>
                  <td>Newsletter abonnieren:</td>
                  <td><input checked name="Newsletter" type="checkbox" value="ja"></td>
                </tr>
                <tr>
                  <td>M&ouml;chten Sie eine Kopie dieser Nachricht:</td>
                  <td>Ja <input name="Kopie" type="radio" value="ja">    Nein <input checked name="Kopie" type="radio" value="nein"></td>
                </tr>
                <tr>
                  <td align="center" colspan="2"><input name="Send" type="submit" value="Abschicken">    <input name="Reset" type="reset" value="Löschen"></td>
                </tr>
            </form>
        </table>
    </body>
</html>

Vielleicht kann mir ja mal jemand sagen wie der code richtig lauten muss...

mfg,Olli
 
Hallo,
so vielleicht:
PHP:
<?php
    $Empfaenger = "Ihre@Mailadresse.land";
  
    $fehler = '';
    if (isset($_POST['Send'])){
        if (empty($_POST['Name'])){
            $fehler .= 'Bitte Namen eingeben!<br />';
        }
        if (empty($_POST['Email'])){
            $fehler .= 'Bitte E-Mail eingeben!<br />';
        }
        if (empty($_POST['Nachricht'])){
            $fehler .= 'Bitte Nachricht eingeben!<br />';
        }
        if (!empty($fehler)){
            echo $fehler.'<br />';
        } else {
            // Hier dann die E-Mail verschicken
            $Mailnachricht = "Sie haben folgende Nachricht erhalten: \n\n";
            foreach ($_POST as $key => $value){
                if ($key <> 'Kopie' && $key <> 'Send'){
                    $Mailnachricht .= $key.': '.$value."\n";
                }
            }
            $Mailnachricht .= "\nDatum/Zeit: ";
            $Mailnachricht .= date('d.m.Y H:i:s');
            $Mailbetreff = 'Kontakt: ';
            $Mailbetreff .= $_POST['Betreff'];
            
            mail($Empfaenger, $Mailbetreff, $Mailnachricht, 'From: '.$_POST['Email']);
            echo 'Vielen Dank für Ihre eMail!';
            
            if (isset($_POST['Kopie']) && $_POST['Kopie'] == 'ja'){
                // Hier dann die Kopie der E-Mail an den Absender schicken
            }
            exit;
        }
    }
?>
<html>
    <head>
        <title>Kontaktformular mit PHP</title>
    </head>
    <body>
        <table border="0" cellpadding="1" cellspacing="2">
            <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
                <tr>
                    <td>Name:</td>
                    <td><input name="Name" value="<?php echo $_POST['Name']; ?>" size="20" type="text"></td>
                </tr>
                <tr>
                    <td>eMail:</td>
                    <td><input name="Email" value="<?php echo $_POST['Email']; ?>" size="20" type="text"></td>
                </tr>
                <tr>
                    <td>Betreff:</td>
                <td>
                    <select name="Betreff" size="1">
                        <option>Hilfe</option>
                        <option>Kritik</option>
                        <option>Werbung</option>
                    </select>
                 </td>
                </tr>
                <tr>
                    <td>Nachricht:</td>
                    <td><textarea cols="25" name="Nachricht" rows="5"><?php echo $_POST['Nachricht']; ?></textarea></td>
                </tr>
                <tr>
                    <td>Wünsche Antwort:</td>
                    <td>Ja <input name="Antwort" checked type="radio" value="ja">Nein <input name="Antwort" type="radio" value="nein"></td>
                </tr>
                <tr>
                    <td>Newsletter abonnieren:</td>
                    <td><input checked name="Newsletter" type="checkbox" value="ja"></td>
                </tr>
                <tr>
                    <td>M&ouml;chten Sie eine Kopie dieser Nachricht:</td>
                    <td>Ja <input name="Kopie" type="radio" value="ja">Nein <input checked name="Kopie" type="radio" value="nein"></td>
                </tr>
                <tr>
                    <td align="center" colspan="2"><input name="Send" type="submit" value="Abschicken"><input name="Reset" type="reset" value="Löschen"></td>
                </tr>
            </form>
        </table>
    </body>
</html>

mfg
forsterm
 
warum lagert man das denn nicht einfach aus:
kontaktformular1.php
PHP:
<html>
    <head>
        <title>Kontaktformular mit PHP</title>
    </head>
    <body>
<?php 
$Empfaenger = "Ihre@Mailadresse.land";
	unset($fehler);
	if (isset($_POST['Send'])){
		if (empty($_POST['Name']))
        	$fehler .= 'Bitte Namen eingeben!<br />';
		if (empty($_POST['Email']))
			$fehler .= 'Bitte E-Mail eingeben!<br />';
		if (empty($_POST['Nachricht']))
			$fehler .= 'Bitte Nachricht eingeben!<br />';
		if (!empty($fehler)){
			echo $fehler.'<br />';
			require_once('formular.php');
		}
        else {
			$Mailnachricht = "Sie haben folgende Nachricht erhalten: \n\n";
			while(list($Formularfeld, $Wert)=each($_REQUEST))
				if($Formularfeld!="Send")
					$Mailnachricht .= $Formularfeld.": ".$Wert."\n";
			$Mailnachricht .= "\nDatum/Zeit: ";
			$Mailnachricht .= date("d.m.Y H:i:s");
			$Mailbetreff = "Kontakt: ";
			$Mailbetreff .= $_REQUEST['Betreff'];
			mail($Empfaenger, $Mailbetreff, $Mailnachricht, "From: ".$_REQUEST['Email']);
			if (isset($_POST['Kopie']) && $_POST['Kopie'] == 'ja')
				mail($_POST['Email'], $Mailbetreff, $Mailnachricht, "From: ".$_REQUEST['Email']);
			echo"Vielen Dank für Ihre eMail!";
		}
	}
else 
   require_once('formular.php');
?>
    </body>
</html>

und dann noch
formular.php
PHP:
<table border="0" cellpadding="1" cellspacing="2">
            <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
                <tr>
                  <td>Name:</td>
                  <td><input name="Name" value="<?php echo $_POST['Name']; ?>" size="20" type="text"></td>
                </tr>
                <tr>
                  <td>eMail:</td>
                  <td><input name="Email" value="<?php echo $_POST['Email']; ?>" size="20" type="text"></td>
                </tr>
                <tr>
                  <td>Betreff:</td>
                  <td><select name="Betreff" size="1"><option>Hilfe</option>
                <option>Kritik</option><option>Werbung</option></select></td>
                </tr>
                <tr>
                  <td>Nachricht:</td>
                  <td><textarea cols="25" name="Nachricht" rows="5"><?php echo $_POST['Nachricht']; ?></textarea></td>
                </tr>
                <tr>
                  <td>Wünsche Antwort:</td>
                  <td>Ja <input name="Antwort" checked type="radio" value="ja">    Nein <input name="Antwort" type="radio" value="nein"></td>
                </tr>
                <tr>
                  <td>Newsletter abonnieren:</td>
                  <td><input checked name="Newsletter" type="checkbox" value="ja"></td>
                </tr>
                <tr>
                  <td>M&ouml;chten Sie eine Kopie dieser Nachricht:</td>
                  <td>Ja <input name="Kopie" type="radio" value="ja">    Nein <input checked name="Kopie" type="radio" value="nein"></td>
                </tr>
                <tr>
                  <td align="center" colspan="2"><input name="Send" type="submit" value="Abschicken">    <input name="Reset" type="reset" value="Löschen"></td>
                </tr>
            </form>
        </table>
Ich finde das immer anschaulicher, und einfacher wenn man was ändert...aber ist ansichtssache...Außerdem steht dann auch wenns gesendet wurde alles im <html><body> teil
 
Zuletzt bearbeitet:
Irgendwie werden Leerzeichen ignoriert, hoffe man kann trotzdem erkennen wie es gemeint ist.

Super, danke für die schnellen und hilfreichen antworten.

Nur zwei Fragen habe ich noch:

1. Wie ist es jetzt möglich das ganze in ein bestehendes Tabellelayout
Code:
|---------------------------------------------------------------|
|                         Überschrift                           |
|---------------------------------------------------------------|
|                           Fehler 1                            |
|---------------------------------------------------------------|
|                           Fehler 2                            |
|---------------------------------------------------------------|
|                          Leerzeile                            |
|---------------------------------------------------------------|
|                         Formular                              |
|                                                               |
|                                                               |
|                                                               |
|---------------------------------------------------------------|

einzubinden, so das ich irgewie einen Platzhalter für die Fehlermeldungen habe und diesen an beliebiger Stelle einzetzen kann.

2. Wie muss der code ergänzt werden, damit es erst nach z.B 5min wieder möglich ist die nächste nachricht zu versenden.

mfg,Olli
 
Zuletzt bearbeitet:
Hallo,
zu 1:
PHP:
<html>
    <head>
        <title>Kontaktformular mit PHP</title>
    </head>
    <body>
        <table border="0" cellpadding="1" cellspacing="2">
            <tr>
                <td colspan="2"><h2>Überschrift</h2></td>
            </tr>
<?php
    $Empfaenger = "Ihre@Mailadresse.land";
  
    $fehler = array();
    if (isset($_POST['Send'])){
        if (empty($_POST['Name'])){
            $fehler[] = 'Bitte Namen eingeben!<br />';
        }
        if (empty($_POST['Email'])){
            $fehler[] = 'Bitte E-Mail eingeben!<br />';
        }
        if (empty($_POST['Nachricht'])){
            $fehler[] = 'Bitte Nachricht eingeben!<br />';
        }
        if (!empty($fehler)){
            foreach ($fehler as $fehlermeldung){
                echo '<tr><td colspan="2">'.$fehlermeldung.'</td></tr>';
            }
            echo '<tr><td colspan="2">&nbsp;</td></tr>';
        } else {
            // Hier dann die E-Mail verschicken
            $Mailnachricht = "Sie haben folgende Nachricht erhalten: \n\n";
            foreach ($_POST as $key => $value){
                if ($key <> 'Kopie' && $key <> 'Send'){
                    $Mailnachricht .= $key.': '.$value."\n";
                }
            }
            $Mailnachricht .= "\nDatum/Zeit: ";
            $Mailnachricht .= date('d.m.Y H:i:s');
            $Mailbetreff = 'Kontakt: ';
            $Mailbetreff .= $_POST['Betreff'];
            
            #mail($Empfaenger, $Mailbetreff, $Mailnachricht, 'From: '.$_POST['Email']);
            echo '<tr><td colspan="2">Vielen Dank für Ihre eMail!</td></tr>';
            
            if (isset($_POST['Kopie']) && $_POST['Kopie'] == 'ja'){
                // Hier dann die Kopie der E-Mail an den Absender schicken
            }
            exit;
        }
    }
?>
            <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
                <tr>
                    <td>Name:</td>
                    <td><input name="Name" value="<?php echo $_POST['Name']; ?>" size="20" type="text"></td>
                </tr>
                <tr>
                    <td>eMail:</td>
                    <td><input name="Email" value="<?php echo $_POST['Email']; ?>" size="20" type="text"></td>
                </tr>
                <tr>
                    <td>Betreff:</td>
                <td>
                    <select name="Betreff" size="1">
                        <option>Hilfe</option>
                        <option>Kritik</option>
                        <option>Werbung</option>
                    </select>
                 </td>
                </tr>
                <tr>
                    <td>Nachricht:</td>
                    <td><textarea cols="25" name="Nachricht" rows="5"><?php echo $_POST['Nachricht']; ?></textarea></td>
                </tr>
                <tr>
                    <td>Wünsche Antwort:</td>
                    <td>Ja <input name="Antwort" checked type="radio" value="ja">Nein <input name="Antwort" type="radio" value="nein"></td>
                </tr>
                <tr>
                    <td>Newsletter abonnieren:</td>
                    <td><input checked name="Newsletter" type="checkbox" value="ja"></td>
                </tr>
                <tr>
                    <td>M&ouml;chten Sie eine Kopie dieser Nachricht:</td>
                    <td>Ja <input name="Kopie" type="radio" value="ja">Nein <input checked name="Kopie" type="radio" value="nein"></td>
                </tr>
                <tr>
                    <td align="center" colspan="2"><input name="Send" type="submit" value="Abschicken"><input name="Reset" type="reset" value="Löschen"></td>
                </tr>
            </form>
        </table>
    </body>
</html>
zu 2:
Du speicherst einfach, wenn du die E-Mail verschickst die aktuelle Zeit ([phpf]time[/phpf]) z.B. in einer Textdatei, es wäre aber auch eine Datenbank möglich, somit kannst du beim nächsten Senden einer E-Mail einfach überprüfen, wann die letzte E-Mail versandt wurde und je nachdem handeln.

mfg
forsterm
 
Sorry wenn ich nerve aber könntest du mir vielleicht noch den code für die Zeitsperre posten, da ich leider nicht wirklich viel Ahnung von php habe.

Ach und noch etwas, wie müsste man den code umschreiben damit die jeweilige Fehlermeldung über dem betreffenden Eingabefeld erscheint.

mfg,Olli
 
Zurück