[PHP] Kontaktformular: Empfänger auswählen

Virginia

Ensign
Registriert
Aug. 2005
Beiträge
133
Hi!
Ich als absoluter PHP-Anfänger brauche eure Hilfe ^^
Habe mir ein erstes ganz simples Kontaktformular gebastelt, das soweit auch super funktioniert. So sieht die kontakt.php aus:
HTML:
<form action="mailer2.php" method="post">
<table width="250" border="0" cellpadding="2">
  <tr>
    <td>Vorname <font color=red>*</font></td>
    <td><input type="text" name="vorname" value="" size="40"></td>
  </tr>
  <tr>
    <td>Nachname</td>
    <td><input type="text" name="nachname" value="" size="40"></td>
  </tr>
  <tr>
    <td>E-Mail <font color=red>*</font></td>
    <td><input type="text" name="email" value="" size="40"></td>
  </tr>
  <tr>
  <td>Empfänger</td>
  <td>Ja <input name="Empfaenger" checked type="radio" value="empfaenger1">    Nein <input name="Empfaenger" type="radio" value="empfaenger2"></td>
</tr>
<tr>
  <td>Nachricht <font color=red>*</font></td>
  <td><textarea cols="39" name="Nachricht" rows="5"></textarea></td>
</tr>
<tr>
</table>
<div align="center"><br>
    <input type="submit" value="Senden"> &nbsp; 
    <input type="reset" value="Zurücksetzen">
</div>
</form>
Nun weiß ich aber leider nicht, wie ich es einrichte, dass das Formular die Mail an den richtigen Empfänger schickt und auch NUR an den. :( Kann mir jemand helfen?? Hab zwar im Netz was gefunden, aber war zu kompliziert für mich :freaky:
 
Zuletzt bearbeitet von einem Moderator:
Ich persönlich hab mal gegooglet und der 2. Treffer war:
http://www.webmatze.de/webdesign/php/email.htm
Den finde ich persönlich recht einleuchtend =)

Wenn Serverseitig alles eingestellt ist, brauchst du eigentlich nur noch:

Code:
 mail('$_POST['email']', '$_POST['betreff']', 'Und hier steht die Nachricht!');
etc.. wobei dieser Code net wirklich sicher ist und auch gar keine Überprüfungen tätigt, ob die einzelnen Teile leer sind etc.
 
Zuletzt bearbeitet:
Das ist meine mailer2:
<?php
//zurück-link
$referer = getenv("HTTP_REFERER");

// E-Mails
$mail = "Name: $vorname/n E-Mail: $email/n Nachricht: $Nachricht";


if ($vorname == "" || $email == "" || $Nachricht == "") {
echo "Du hast ein oder mehrere erforderliche Felder nicht ausgefüllt. Bitte gehe <a href=\"".$referer."\">zurück</a> und korrigiere deine Angaben.";}

else {
if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,3})$", $email))
{mail("virginia@vl-marienhof.de, manuel@vl-marienhof.de", "Neue Nachricht", $mail, "From:$email"); //Mail an Team
echo "Vielen Dank für deine Nachricht.";}
else {echo "Bitte gib eine gültige E-Mail-Adresse an.";}
} ?>
Bis jetzt wird die Mail halt automatisch an beide Webmaster geschickt... ich möchte aber dass der User zwischen den beiden auswählen kann. :(
 
Virginia schrieb:
Das ist meine mailer2:
Bis jetzt wird die Mail halt automatisch an beide Webmaster geschickt... ich möchte aber dass der User zwischen den beiden auswählen kann. :(
Naja dann müsstest du im Formular erst einmal eine Auswahlmöglichkeit einbauen. Das Ergebnis dieser Auswahl wird dann in der mailer2.php ausgelesen und dann brauchst du halt eine if-Schleife:
if ( $Wer_soll_die_Mail_empfangen = "Der 1. Webmaster " ) { Dann schicke sie an den 1. Webmaster }
else { Dann schicke sie an den 2. Webmaster }
 
Die Auswahlmöglichkeit hat der User ja schon mit den checkboxen (siehe Code oben). Ich hab meine mailer2 jetzt mal so gebaut:
if ($vorname == "" || $email == "" || $Nachricht == "") {
echo "Du hast ein oder mehrere erforderliche Felder nicht ausgefüllt. Bitte gehe <a href=\"".$referer."\">zurück</a> und korrigiere deine Angaben.";}

else {
if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,3})$", $email))
{
if ($Empfaenger="Virginia") {
mail("virginia@vl-marienhof.de", "Neue Nachricht", $mail, "From:$email"); //Mail an Virginia
echo "Vielen Dank für deine Nachricht.";}
else {
mail("manuel@vl-marienhof.de", "Neue Nachricht", $mail, "From:$email"); //Mail an Manuel
echo "Vielen Dank für deine Nachricht.";}
}
else {echo "Bitte gib eine gültige E-Mail-Adresse an.";}
} ?>
Die Mails gehen aber immer an mich, egal was ich auswähle :( Anscheinend teilt die kontakt.php nicht richtig mit, was ausgewählt wurde. Was mach ich da?
 
PHP:
 if ($Empfaenger="Virginia") {

Muss das nicht if($_POST['Empfaenger']=="empfaenger1") heißen?
Zumindest sind das die Werte aus dem Formular.

HTML:
  <td>Ja <input name="Empfaenger" checked type="radio" value="empfaenger1">    Nein <input name="Empfaenger" type="radio" value="empfaenger2"></td>

KoЯn
 
Man kann die $_POST-Variante benutzen, muss aber nicht sein.

Dein Fehler liegt beim Vergleichsoperator:

Es muss
PHP:
if ( $Empfaenger == "..." ) ...
heißen! Also mit doppelten "=". Dann sollte es funktionieren.
 
Zuletzt bearbeitet:
@zatarc: Guter Fang!

Aber ganz möchte ich dir nicht zustimmen. Aus Sicherheitsgründen wird Register Globals sinnvollerweise oft deaktiviert, und dann ist man auf $_POST oder $_GET angewiesen.
 
Stimmt schon, aber ich nehme an, dass diese Methode ohne $_POST bei ihm funktioniert, sonst hätte er sicher schon gefragt, warum die Mail nicht versendet wird.

Aber kann ja sein, dass das Skript mal umziehen muss (anderer Webspace/Server), wo Register Globals deaktiviert ist. Deshalb sollte man trotzdem die $_POST-Methode benutzen.
Du musst jetzt aber nicht den gesamten Quellcode umändern. Schreibe einfach am Anfang:
PHP:
$Empfaenger = $_POST["Empfaenger"];
$email = $_POST["email"]; 

usw...
 
Danke hab das alles gemacht und es geht :)

Falls ich noch ne Frage habe (möchte das Ding noch ein bisschen erweitern...) poste ich hier nochmal.

Und ach ja @ zatarc: ich bin eine "sie" :p
 
Hi, hab doch wieder ne Frage.
Wenn der User was nicht ausgefüllt hat, gibts ja ne Fehlermeldung und es erscheint ein Zurück-Link. Wenn man den aber anklickt, sind alle Felder wieder leer :( Wie verhindere ich das?
 
Mach das am besten mit JavaScript.

HTML:
<a href="javascript:history.back()">Zur&uuml;ck</a>

Bewirkt das selbe wie wenn man auf den Zurück Button im Browser klickt.

KoЯn
 
Oder verbinde beide Dateien miteinander.

Die einfachste Lösung hierzu ist imo, ein verstecktes Input-Feld ins Formular zu setzen, die Datei per POST an sich selbst zu schicken und das versteckte Feld beim Öffnen der Datei abzufragen.

PHP:
<?php
if (isset ($_POST['abgeschickt'])) {
?>

.
.
(Inhalt deiner mailer2.php)
.
.

<?php
} else { 
?>

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

.
.
(Inhalt deiner kontakt.php)
.
.

<input type="hidden" name="abgeschickt" value="1" />

.

</form>

<?php
}
?>
So hab ichs gelöst und über den Zurück-Link bleiben die Einträge erhalten.
 
Virginia schrieb:
Danke hab das alles gemacht und es geht :)

Falls ich noch ne Frage habe (möchte das Ding noch ein bisschen erweitern...) poste ich hier nochmal.

Und ach ja @ zatarc: ich bin eine "sie" :p
Ups :heul:

Tschuldige :freaky:
 
@Quidoff

und wenn jmd javascript deaktiviert hat??
 
Ähm, in meiner Zusammenfassung oben ist ein grober Fehler drin, das kann so gar nicht nicht funktionieren. Hier die Korrektur:


PHP:
<?php
if (isset ($_POST['abgeschickt'])) {
?>

.
.
(Inhalt der mailer2.php...)
.
.

<?php
}
?>

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

.
.
(Mail-Formular...)
.

<tr>
  <td>Vorname <font color=red>*</font></td>
  <td><input type="text" name="vorname" value="<?php if (isset($_POST['vorname'])) echo $_POST['vorname']; ?>" size="40"></td>
</tr>
.


<tr>
  <td>Nachricht <font color=red>*</font></td>
  <td><textarea cols="39" name="Nachricht" rows="5"><?php if (isset($_POST['Nachricht'])) echo $_POST['Nachricht']; ?></textarea></td>
</tr>

.

<input type="hidden" name="abgeschickt" value="1" />

.

</form>

Probier das mal bitte so. Hab jetzt leider keine Zeit mehr zum Testen, werde aber heut abend/morgen nochmal reinschauen...
 
Also irgendwie lädt das Formular sich nun einfach neu, wenn man auf "Senden" klickt. Es zeigt keine Nachricht mehr :(

Ich poste euch nochmal beides:

mailer.php
<?php

if (isset ($_POST['abgeschickt'])) {

$Empfaenger = $_POST["Empfaenger"];
$email = $_POST["email"];
$vorname = $_POST["vorname"];
$nachname = $_POST["nachname"];
$website = $_POST["website"];
$nickname = $_POST["nickname"];
$Nachricht = $_POST["Nachricht"];

//zurück-link
$referer = getenv("HTTP_REFERER");

// E-Mail an Team
$mail = "Name: $vorname $nachname\nE-Mail: $email\nNachricht: $Nachricht\n\n\nWebsite: $website\nNickname: $nickname";

//Fehlermeldung
if ($vorname == "" || $email == "" || $Nachricht == "") {
echo "Du hast ein oder mehrere erforderliche Felder nicht ausgefüllt. Bitte gehe <a href=\"".$referer."\">zurück</a> und korrigiere deine Angaben.";}

else {
if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,3})$", $email))
{
if ($Empfaenger == "Virginia") {
mail("virginia@vl-marienhof.de", "Neue Nachricht", $mail, "From:$email"); //Mail an Virginia
echo "Vielen Dank für deine Nachricht. Sie ist auf dem Weg zu Virginia und wird schnellstm&ouml;glich bearbeitet.";}
else {
mail("manuel@vl-marienhof.de", "Neue Nachricht", $mail, "From:$email"); //Mail an Manuel
echo "Vielen Dank für deine Nachricht. Sie ist auf dem Weg zu Manuel und wird schnellstm&ouml;glich bearbeitet.";}
}
else {echo "Bitte gib eine gültige E-Mail-Adresse an. <a href=\"".$referer."\">Zurück</a>";}
}

}?>

kontakt.php
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<!-- <form action="mailer.php" method="post"> -->
<table width="95%" border="0" cellpadding="2">
<tr>
<td width="33%">Vorname<font color=red>*</font>:</td>
<td width="67%"><input type="text" name="vorname" value="<?php if (isset($_POST['vorname'])) echo $_POST['vorname']; ?>" size="40"></td>
</tr>
<tr>
<td>Nachname:</td>
<td><input type="text" name="nachname" value="<?php if (isset($_POST['nachname'])) echo $_POST['nachname']; ?>" size="40"></td>
</tr>
<tr>
<td>Nickname im Forum<br>
(falls vorhanden):</td>
<td><input type="text" name="nickname" value="<?php if (isset($_POST['nickname'])) echo $_POST['nickname']; ?>" size="40"></td>
</tr>

<tr>
<td>E-Mail<font color=red>*</font>:</td>
<td><input type="text" name="email" value="<?php if (isset($_POST['email'])) echo $_POST['email']; ?>" size="40"></td>
</tr>
<tr>
<td>Website:</td>
<td><input type="text" name="website" value="<?php if (isset($_POST['website'])) echo $_POST['website']; ?>" size="40"></td>
</tr>
<tr>
<td>Empfänger:<br>
<br></td>
<td><input name="Empfaenger" checked type="radio" value="Virginia">
Virginia
(Webmasterin)<br>
<input name="Empfaenger" type="radio" value="Manuel">
Manuel (Co-Webmaster) </td>
</tr>
<tr>
<td>Nachricht<font color=red>*</font>:</td>
<td><textarea cols="30" name="Nachricht" rows="5"><?php if (isset($_POST['Nachricht'])) echo $_POST['Nachricht']; ?></textarea></td>
</tr>
<tr>
</table>
<div align="center"><br>
<input type="submit" value="Senden"> &nbsp;
<input type="reset" value="Zurücksetzen">
<input type="hidden" name="abgeschickt" value="1" />
<br>
<br>
</div>
</form>
 
Zuletzt bearbeitet:
PHP:
 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Sollte da nicht die mailer.php aufgerufen werden?

also:
PHP:
 <form action="mailer.php" method="post">
Und wolltest du das alles nicht in einer Datei machen? So wie du es jetzt machst, hast du doch wieder das Problem, dass man wieder alles neu eingeben muss. Oder sehe ich das falsch?

KoЯn
 
Zurück
Oben