Seite 1 von 2

Kontaktformular

Verfasst: 04.06.2010, 08:06
von Erdbeertorte
Hallo Leute

ich habe ein Kontaktformular, welches zwar funktioniert, aber nicht ganz so wie ich möchte.
Wenn ich eine E-Mail erhalte, dann sehe ich nämlich in der Übersicht meines Posteingangs nicht, von wem diese E-Mail ist.
Stattdessen steht der Benutzername für meinen Webspace (zum Beispiel web123) dort.

Was muss ich denn an dem Formular ändern, damit der Name des Versenders in der Übersicht Posteingangs erscheint und nicht mein Benutzername für den Webspace?

Code: Alles auswählen

        <div class="right">
          <form action="contact.php" method="post" id="contactform">
            <ol>
              <li>
                <label for="name">First Name</label>
                <input id="name" name="name" class="text" />
              </li>
              <li>
                <label for="email">Your email</label>
                <input id="email" name="email" class="text" />
              </li>
              <li>
                <label for="company">Company</label>
                <input id="company" name="company" class="text" />
              </li>
              <li>
                <label for="subject">Subject</label>
                <input id="subject" name="subject" class="text" />
              </li>
              <li>
                <label for="message">Message</label>
                <textarea id="message" name="message" rows="6" cols="50"></textarea>
              </li>
              <li class="buttons">
                <input type="image" name="imageField" id="imageField" src="images/send.gif" class="send" />
                <div class="clr"></div>
              </li>
            </ol>
          </form>
        </div>
und hier die dazugehörige PHP

Code: Alles auswählen

<?php

if&#40;!$_POST&#41; exit;

$email = $_POST&#91;'email'&#93;;


//$error&#91;&#93; = preg_match&#40;'/\b&#91;A-Z0-9._%-&#93;+@&#91;A-Z0-9.-&#93;+\.&#91;A-Z&#93;&#123;2,4&#125;\b/i', $_POST&#91;'email'&#93;&#41; ? '' &#58; 'INVALID EMAIL ADDRESS';
if&#40;!eregi&#40;"^&#91;a-z0-9&#93;+&#40;&#91;_\\.-&#93;&#91;a-z0-9&#93;+&#41;*" ."@"."&#40;&#91;a-z0-9&#93;+&#40;&#91;\.-&#93;&#91;a-z0-9&#93;+&#41;*&#41;+"."\\.&#91;a-z&#93;&#123;2,&#125;"."$",$email &#41;&#41;&#123;
	$error.="Invalid email address entered";
	$errors=1;
&#125;
if&#40;$errors==1&#41; echo $error;
else&#123;
	$values = array &#40;'name','email','message'&#41;;
	$required = array&#40;'name','email','message'&#41;;
	 
	$your_email = "james@example.com";
	$email_subject = "New Message&#58; ".$_POST&#91;'subject'&#93;;
	$email_content = "new message&#58;\n";
	
	foreach&#40;$values as $key => $value&#41;&#123;
	  if&#40;in_array&#40;$value,$required&#41;&#41;&#123;
		if &#40;$key != 'subject' && $key != 'company'&#41; &#123;
		  if&#40; empty&#40;$_POST&#91;$value&#93;&#41; &#41; &#123; echo 'PLEASE FILL IN REQUIRED FIELDS'; exit; &#125;
		&#125;
		$email_content .= $value.'&#58; '.$_POST&#91;$value&#93;."\n";
	  &#125;
	&#125;
	 
	if&#40;@mail&#40;$your_email,$email_subject,$email_content&#41;&#41; &#123;
		echo 'Message sent!'; 
	&#125; else &#123;
		echo 'ERROR!';
	&#125;
&#125;
?>

Verfasst:
von
Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Verfasst: 04.06.2010, 08:14
von Nullpointer
https://php.net/manual/de/function.mail.php

schau dir auf der seite beispiel 2 an. da wird eine variable header als vierter parameter an die mailfunktion übergeben und dieser header enthält die from adresse.

Verfasst: 04.06.2010, 10:04
von Erdbeertorte
Vielen Dank! Werde ich mir zu Gemüte führen. Hoffentlich verstehe ich das

Verfasst:
von

Verfasst: 04.06.2010, 10:33
von oliverp19

Code: Alles auswählen

header = 'From&#58; Vorname Nachname <absender@example.com>';
@mail&#40;$your_email,$email_subject,$email_content,$header&#41;
Grüße
Oli

Verfasst: 04.06.2010, 10:54
von Nullpointer
oliverp19 hat geschrieben:

Code: Alles auswählen

header = 'From&#58; Vorname Nachname <absender@example.com>';
@mail&#40;$your_email,$email_subject,$email_content,$header&#41;
Grüße
Oli
dann aber gleich angepaßt.

Code: Alles auswählen

$header = 'From&#58; Vorname Nachname '.$email;
@mail&#40;$your_email,$email_subject,$email_content,$header&#41;

Verfasst: 04.06.2010, 15:07
von Erdbeertorte
Danke für eure Hilfe. Dummerweise verstehe ich anscheinend überhaupt nichts von PHP, denn vom Kontaktformular empfange ich keine E-Mails mehr :(

die PHP schaut folgendermaßen aus

Code: Alles auswählen

<?php

if&#40;!$_POST&#41; exit;

$email = $_POST&#91;'email'&#93;;


//$error&#91;&#93; = preg_match&#40;'/\b&#91;A-Z0-9._%-&#93;+@&#91;A-Z0-9.-&#93;+\.&#91;A-Z&#93;&#123;2,4&#125;\b/i', $_POST&#91;'email'&#93;&#41; ? '' &#58; 'INVALID EMAIL ADDRESS';
if&#40;!eregi&#40;"^&#91;a-z0-9&#93;+&#40;&#91;_\\.-&#93;&#91;a-z0-9&#93;+&#41;*" ."@"."&#40;&#91;a-z0-9&#93;+&#40;&#91;\.-&#93;&#91;a-z0-9&#93;+&#41;*&#41;+"."\\.&#91;a-z&#93;&#123;2,&#125;"."$",$email &#41;&#41;&#123;
	$error.="Invalid email address entered";
	$errors=1;
&#125;
if&#40;$errors==1&#41; echo $error;
else&#123;
	$values = array &#40;'name','email','message'&#41;;
	$required = array&#40;'name','email','message'&#41;;
	 
	$your_email = "james@example.com";
	$email_subject = "New Message&#58; ".$_POST&#91;'subject'&#93;;
	$email_content = "new message&#58;\n";
	
	$header = 'From&#58; Vorname Nachname '.$email; 
 
	foreach&#40;$values as $key => $value&#41;&#123;
	  if&#40;in_array&#40;$value,$required&#41;&#41;&#123;
		if &#40;$key != 'subject' && $key != 'company'&#41; &#123;
		  if&#40; empty&#40;$_POST&#91;$value&#93;&#41; &#41; &#123; echo 'PLEASE FILL IN REQUIRED FIELDS'; exit; &#125;
		&#125;
		$email_content .= $value.'&#58; '.$_POST&#91;$value&#93;."\n";
	  &#125;
	&#125;
	 
	if&#40;@mail&#40;$your_email,$email_subject,$email_content,$header&#41;&#41; &#123;
		echo 'Message sent!'; 
	&#125; else &#123;
		echo 'ERROR!';
	&#125;
&#125;
?>

Verfasst: 04.06.2010, 15:19
von DanielS
Nimm mal das @ vor @mail raus, dann kriegst Du vielleicht ein Fehlermeldung mit der Du was anfangen kannst.

Verfasst: 05.06.2010, 06:24
von Nullpointer
in der zeile, wo $header gesetzt wird, muß natürlich auch der name eingefügt werden. das nur am rande, hat aber nichts damit zu tun, dass das script jetzt nicht mehr mailt.

Verfasst: 05.06.2010, 08:16
von Synonym

Code: Alles auswählen

$header = 'From&#58; Vorname Nachname '.$email; 
"Vorname Nachname" ist der Name des Absenders.
$email ist die EMailadresse des Absenders.

Aber! Die Email muss in <> gesetzt werden, also als

Code: Alles auswählen

$header = 'From&#58; Vorname Nachname <'.$email.'>'; 
Das @ zu entfernen bringt nicht viel, da die mail()-Funktion nur true oder false als Antwort liefert und keinen Error-Code.

Möglich wäre allerdings auch, dass es am fünften-Parameter liegt. Siehe dazu Beispiel #3, auf der von Nullpointer genannten Seite.

Verfasst: 05.06.2010, 13:23
von DanielS
Synonym hat geschrieben:Das @ zu entfernen bringt nicht viel, da die mail()-Funktion nur true oder false als Antwort liefert und keinen Error-Code.
Ok, das wusste ich nicht. Danke für den Hinweis!

Verfasst: 06.06.2010, 18:25
von Erdbeertorte
Es hatte nichts mit dem @ zu tun. Die E-Mails wurden anscheinend einfach nicht sofort versendet. Erst ein paar Stunden später. Ich habe nun die ganze Zeit die Sonne genossen und gerade erst mit dem Kontaktformular weitergemacht.

Leider passt es noch immer nicht. Ich möchte doch den Namen in der Übersicht des Posteingangs erscheinen lassen und wenn man die E-Mail anschließend anklickt und dann auf Antworten geht, sollte gleich die E-Mail-Adresse des Absenders im entsprechenden Feld eingetragen sein.
Bisher hat der dazugehörige Teil so gelautet

Code: Alles auswählen

	$header = 'From&#58; Vorname '.$email; 
Statt des Namens, welcher im Kontaktformular angegeben wurde, steht nur " Vorname ".


Bei meinem derzeitigen Stand sieht es so aus

Code: Alles auswählen

	$header = 'From&#58; <'.$email.'>'; 
aber damit fehlt natürlich ein entscheidender Teil.



Der folgende Absatz von der Beispielseite hat mir dabei auch nicht geholfen. Diesen konnte ich nicht auf mein Beispiel anwenden.

Code: Alles auswählen

$header = 'From&#58; webmaster@example.com' . "\r\n" .
    'Reply-To&#58; webmaster@example.com' . "\r\n" .
    'X-Mailer&#58; PHP/' . phpversion&#40;&#41;;

Verfasst: 07.06.2010, 18:26
von Erdbeertorte
Zumindest funktioniert es schon, dass die E-Mail-Adresse des Absenders im entsprechenden Feld eingetragen ist, wenn man auf Antwort klickt


aber wie macht man das mit dem Namen?

Verfasst: 08.06.2010, 07:20
von Nullpointer
Erdbeertorte hat geschrieben:.....

$header = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: '.$name.' <webmaster@example.com>' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
hast du das mal probiert?wobei in $name dann natürlich der name des absenders stehen muss.

Verfasst: 08.06.2010, 15:28
von Erdbeertorte
Ich meine den Namen, den der Absender im Kontaktformular eingegeben hat.
Das Formular beinhaltet doch ein Feld mit dem Namen, ein Feld für die E-Mail-Adresse, ein Feld für den Betreff und dann noch ein Feld für die eigentliche Nachricht.


In der Übersicht des Posteingangs gibt es bei den ganzen E-Mails eine Spalte, in der der Name der Person angezeigt wird, von der die E-Mails stammt. Und neben dieser Spalte steht dann der Betreff der E-Mail.


Oder funktioniert das nicht so wie ich meine?

Verfasst: 08.06.2010, 16:14
von Synonym
Na das

Code: Alles auswählen

$header = 'From&#58; Vorname Nachname <'.$email.'>'; 
war ja auch nur ein Beispiel. Das "Vorname Nachname" musst Du natürlich noch ersetzen.

Code: Alles auswählen

$header = 'From&#58; '.$_POST&#91;'name'&#93;.' <'.$email.'>'; 
Wobei dann noch die Prüfung fehlt, ob der Name überhaupt gültig ist oder unzulässige Zeichen enthält.