Kontaktformular implementieren mit PHP

Diskussionen zur Smarty-Template-Engine
Locked
SCM
Forum Members
Forum Members
Posts: 74
Joined: Fri Mar 13, 2009 1:01 pm

Kontaktformular implementieren mit PHP

Post by SCM »

Hallo zusammen

Ich bin mir nicht ganz sicher ob das das richtige Unterforum dafür ist, aber auf jeden Fall habe ich das folgende Problem:

Ich habe ein Formular um mir ein Email zu senden folgendermassen definiert:

Code: Select all

<form action="{$send_mail}" method="post"> 
<table border="0">
<tbody>
<tr>
<td><label for="absender">Ihr Name:</label></td>
<td><input id="absender" name="absender" size="25" type="text" /></td>
</tr>
<tr>
<td><label for="email">Ihre E-Mail Adresse:</label></td>
<td><input id="email" name="email" size="25" type="text" /></td>
</tr>
<tr>
<td><label for="betreff">Betreff ihrer Nachricht:</label></td>
<td><input id="betreff" name="betreff" size="25" type="betreff" /></td>
</tr>
<tr>
<td><label for="nachricht">Ihre Nachricht:</label></td>
<td><textarea id="nachricht" cols="30" rows="8" name="nachricht"></textarea></td>
</tr>
<tr height="20">
<td></td>
<td></td>
</tr>
<tr>
<th colspan="2" align="center"><input name="abschicken" type="submit" value="Nachricht verschicken" /></th>
</tr>
</tbody>
</table>
</form>
Das PHP Script habe ich als benutzerdefinierter Tag folgendermassen definiert:

Code: Select all

/* Geben Sie hier Ihre E-Mail Adresse zwischen den beiden " an: */

$_emails[0] = "sebi@icu.uzh.ch";

// Wenn keine $_POST Daten übermittelt wurden, dann abbrechen
if(!isset($_POST) OR empty($_POST))
{
   header("Content-type: text/plain; charset=utf-8");
    echo "Es wurden keine Daten übermittelt!";
    exit;
}
else
{
    // Datum, Uhrzeit und Pfad zum eigenen Script feststellen
    $date = date("d.m.Y");
    $time = date("H:i");
    $host = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
   
    // Empfänger feststellen und auf Gültigkeit prüfen
    if(isset($_POST['recipient']) AND isset($_emails[ $_POST['recipient'] ])
       AND preg_match("/^.*@.*\..*$/", $_emails[ $_POST['recipient'] ]))
    {
        $recipient = $_emails[ $_POST['recipient'] ];
    }
    // Wurde kein (gültiger) Empfänger angegeben, es mit $_email[0] versuchen
    elseif(isset($_emails[0]) AND preg_match("/^.*@.*\..*$/", $_emails[0]))
    {
        $recipient = $_emails[0];
    }
    // Ist auch diese Adresse ungültig, mit Fehlermeldung abbrechen
    else
    {
        header("Content-type: text/plain");
        echo "Fehler im Script - es wurde kein Empfänger oder eine ungültige E-Mail Adresse in \ angegeben.";
        exit;
    }
   
    // Wenn Betreff übermittelt, diesen verwenden
    if(isset($_POST['subject']))
    {
        $subject = $_POST['subject'];
    }
    // sonst einen Default Betreff verwenden
    else
    {
        $subject = "Formular Daten von {$_SERVER['HTTP_HOST']}";
    }
   
    // E-Mai Kopf generieren
    $email = "Formular Eintrag\n"
           . "\n"
           . "Am $date um $time Uhr hast das Script auf $host Formulardaten empfangen,\n"
           . "welche nach Angabe des Browsers von {$_SERVER['HTTP_REFERER']} stammen.\n"
           . "\n"
           . "Der Formular Inhalt wird nachfolgend wiedergegeben.\n"
           . "\n";
   
    // Alle $_POST Werte an den E-Mail Kopf anhängen
    foreach($_POST as $key => $value)
    {
        if($key == "redirect" OR $key == "recipient" OR $key == "subject")
        {
            continue;
        }
        $email .= "Fomular Feld '$key':\n"
               .  "=============================\n"
               .  "$value\n"
               .  "\n";
    }
   
    // E-Mail Fuß anfügen
    $email .= "=============================\n"
           .  "Ende der automatisch generierten E-Mail.";
   
    // Versuchen E-Mail zu versenden
    if(!mail($recipient, $subject, $email)) {
        // Ist dies gescheitert, Fehlermeldung ausgeben
        echo "Es ist ein Fehler beim Versenden der E-Mail aufgetreten,"
             . " eventuell liegt ein Konfigurationsfehler am Server vor.\n\n";
        exit;
    }
   
    // Wenn gewünscht, auf Bestätigungsseite weiterleiten
    if(isset($_POST['redirect']) AND preg_match("=^(http|ftp)://.*\..*$=", $_POST['redirect'])) {
       header("Location: ".$_POST['redirect']);
        exit;
    } else {
        header("Content-type: text/html");
        echo "Die E-Mail wurde erfolgreich versendet.";
	echo '<br>';
	  echo '<a href="http://www.ornitholog.li/cms/index.php?page=kontakt">Zurueck</a>';
        exit;
    }
}
Nun ist es so, dass Mails die ich damit verschicke nie bei mir an. Allerdings bekomme ich auch keine Fehlermeldung. Früher hatte ich das script in einer einzelnen php Datei auf dem Server gespeichert. Damals hatte alles funktioniert, nur leider wurde dann der echo Teil des PHP Scripts auf einer neuen Seite ausgegeben. Um das zu verhindern, habe ich auf SO den Tip erhalten, das PHP Script so einzufügen.

Kann jemand von euch den Fehler finden? Oder mir eine andere Lösung vorschlagen??

Vielen Dank!
SCM
Forum Members
Forum Members
Posts: 74
Joined: Fri Mar 13, 2009 1:01 pm

Re: Kontaktformular implementieren mit PHP

Post by SCM »

Danke. Kann eigentlich geschlossen werden. Ich habe jetzt den FormBuilder verwendet um das Problem zu lösen.
cyberman

Re: Kontaktformular implementieren mit PHP

Post by cyberman »

Hättest auch das alte contact_form plugin für deine Experimente verwenden können

http://dev.cmsmadesimple.org/projects/contact_form

FormBuilder ist nach meinem Geschmack für ein Kontaktformular etwas oversized :/ ...
Locked

Return to “Smarty-Tipps und -Tricks”