PHP Mail senden per PHP/HTML formular

ReVo

Lieutenant
Registriert
Jan. 2006
Beiträge
567
Hallo,

ich möchte, dass der benutzer seine mailadresse und eine nachricht per buttonklick verschicken kann. Habe rumgegoogelt...ich denke, dass ich weiß wie man per php nachrichten schickt. Aber wie man das schickt was im formular steht und das per button kann ich nicht.

Also normalerweise wäre das so:

PHP:
  <?php
  $empfaenger = "hans@wurst.de";
  $betreff = "Guten Tag";
  $text = "Bla Bla Bla Bla";
  mail($empfaenger, $betreff, $text,
       "From: $sender <$sendermail>");
  ?>
Das ist toll, funkt auch... wird aber sofort verschickt ^^, naja kommen wir später dazu. Nehmen wir an ich habe einige textfelder die dann geschickt werden sollten:

HTML:
<html><head><title></title></head>
<body>
<form action=maili.php4>
<table>
<tr><td>Nachname</td><td><input type=text name=Name></td></tr>
<tr>
  <td>Nachricht</td><td><input type=text name=Text></td></tr>
<tr><td>email</td><td><input type=text name=mailaddi></td></tr>
<tr><td colspan=2 align=middle><input type=submit value="abschicken"></td></tr>
</table>
</form>
</body>
</html>
Jetzt sollten die zwei sachen "irgendwie" verschmolzen werden :) ...also egal wielange ich mir das im google gesucht habe ging das nie richtig. Habe zwei recht gute artikeln dazu zb. steht das HIER sogar ganz genau wie man das machen sollte, wenn man das per HTML und formular versenden möchte. Aber keine chance, geht nicht. Kommt nur ein syntax error.

Also könnte mir bitte jemand aushelfen? ^^

Danke!

Gruß
 
Zuletzt bearbeitet:
Hi,

PHP:
<?php
$nachname = $_POST["Name"];
$nachricht = $_POST["Text"];
$email = $_POST["mailaddi"];

$text = 'Herr'.$nachname.' mit der email '.$email.' hat folgendes geschrieben: '.$text.' Ende';

// $text mit mail() versenden

?>

Die wohl primitivste Lösung.
Mfg, Michi.
 
würde einmal alle als Variable machen, falls du Filter noch baust ist das einfacher.
$betreff = $_POST["betreff"];
So kann man einfach auf Submit klicken und ein Postfach läuft mit leeren, zu 100% leeren emails voll.
Mit if && (und) oder || (oder) funktionen kann man da gut filter schreiben.
 
Hallo ReVo!

Zuerst einmal zum Stil: Wenn du Dinge wie "type" oder "name" eines Elements festlegst (das gilt auch für Elemente im "form"-Tag), solltest du dir angewöhnen, dies in Anführungszeichen zu schreiben, also etwa:
HTML:
<input type="text" name="Name">
Jetzt zu deinem Problem: Im HTML-Body brauchst du ein Formular mit entsprechenden Feldern und dem Button; ist vorhanden, mit der Ausnahme, dass du dem Button noch einen Namen ("Abschicken") geben musst! Jetzt musst du zu Beginn des Scripts zunächst die Post-Variablen deklarieren (also die Werte aus den Input-Feldern) und dann abfragen, ob der Button gedrückt wurde, und im Positivfall die E-Mail versenden. Das sieht dann etwa so aus (kommt ganz nach oben in die Datei):

PHP:
<?php
  $empfaenger='hans@wurst.de';
  $betreff='Nachricht von '.$_POST[name].' ('.$_POST[mailaddi].')';
  $text=$_POST[Text];

  if(isset($_POST[Abschicken]))
  {
    mail($empfaenger, $betreff, $text);
    //Hier kannst du noch Weiteres für den Fall des geklickten Buttons hineinschreiben, etwa eine Erfolgsmeldung o. a.
  }
?>

Die if-Abfrage kontrolliert, ob der Button gedrückt wurde, und verschickt im Positivfall die Mail.

VORSICHT: Dies ist nur die rudimentärste Form eines Mail-Scripts; um dein Formular nicht im Handumdrehen zur Spam-Grube zu machen, solltest du zusätzliche Abfragen einbauen, die HTML-Code herausfiltern, das Verschicken von mehr als einer Nachricht unterbinden etc. Mehr dazu findest du im Web unter dem Stichwort "PHP-Sicherheit" -- und das sollte man nicht auf die leichte Schulter nehmen!

Gruß und viel Erfolg beim Ausprobieren!
 
Hallo,

danke für die hilfe! Leider klappt es noch nicht ganz. Also wenn ich das so mache wie du uburoi dann kommt nur "Fehler: Seite nicht gefunden" - habe das mal so gemacht:

PHP:
<html><head><title>Mail verschicken mit PHP </title></head>
<body>
<form action=maili.php4>
<table>
<tr><td>Nachname</td><td><input type="text" name="name"></td></tr>
<tr><td>Vorname</td><td><input type="text" name="text"></td></tr>
<tr><td>email</td><td><input type="text" name="mailaddi"></td></tr>
<tr><td colspan=2 align=middle><input name="Senden" type=submit value="abschicken"></td></tr>
</table>


<?php
	$empfaenger = 'hans@wurst.de';
	$nachname = $_POST["name"];
	$nachricht = $_POST["text"];
	$email = $_POST["mailaddi"];
	
	$text = 'Herr'.$nachname.' mit der email '.$email.' hat folgendes geschrieben: '.$text.'  Ende';
	
	if(isset($_POST[abschicken]))
  { 
	  mail($empfaenger, $text,
       "From: $sender <$sendermail>"); 
  }
  
?>

</form>
</body>
</html>

Habe da mal rumgemacht und und... aber das ganze prob liegt an dem if. Ohne das scheint er alles zu verschicken... nur halt unausgefüllt ^^, aber will ich das so mit if also per buttonklick dann kommt wieder 404 seite nicht gefunden. Warum passiert das eigentlich?

Danke, Gruß
 
Da sind deine Fehler:

Code:
<form action=[COLOR="Red"][B]maili.php4[/B][/COLOR]> 
// heißt deine Datei wirklich maili.php4 ? eher nicht, deshabl kommt fehler 404 Seite nicht gefunden
// richtigen Namen (Pfad) reinschreiben !

<?php	
	if(isset($_POST[[COLOR="Red"][B]abschicken[/B][/COLOR]]))  
// hier hast du abschicken, oben beim Button hast du aber name="Senden" -> kann nicht funktionieren, beides muss gleich sein
?>

Desweiteren solltest du auf jedenfall noch die Email auf richtigkeit überprüfen, HTML-Code herausfiltern etc., sonstig wird das ganze sehr schnell zu einem Sicherheitsrisiko für denjenigen, der die Email bekommt.

Außerdem solltest du eine Captcha-Abfrage durchführen, sonst kann das Forumlar schnell von automatischen Bots mißbraucht und im schlimmsten Fall als Spam-Schleuder benutzt und der Server zum Absturz gebracht werden.

Allgemein: beschäftige dich erst einmal mit dem Thema Sicherheit in PHP !
 
Zuletzt bearbeitet:
Hi,

vielen dank. Ja das mit maili.php4 ist quatsch. Das habe ich korrigiert, ist auch ok jetzt. Das mit if geht weiter nicht. Ich habe jetzt senden durch abschicken(button namen) ersetzt, so wie du meintest, dass beides gleich sein müssen = passiert nix. Der geht einfach nicht rein. Ohne if geht es dagegen wunderbar (sags nur, weil das muss an der if bedingung liegen).

Ansonsten danke für die security hinweise. Ja... ah wird das kompliziert. Ich wollte doch nur so eine kleine erweiterung auf der seite machen und sonst nix mehr auf php basis, überhaupt ist das ganze webzeug nicht meine welt ^^. Und mir wurde noch gesagt "ah php wirst du sofort verstehen, ist ja wie C" - huhu,haha :)
 
Zuletzt bearbeitet:
Eigentlich wollte man dir damit sagen, dass beim "if(isset($_POST[abschicken]))" die Hochkommas fehlen. Das soll $_POST['abschicken'] heißen.
 
Hallo ReVo,

beim nächsten Mal bitte etwas genauer lesen! Zunächst war da der Hinweis mit den Anführungszeichen für das <form>-Tag; zudem ist dein <form>-Tag noch unvollständig. Damit dein Script überhaupt weiß, dass es POST-Variablen enthält, musst du es so anlegen:

HTML:
<form action="./[Dateiname]" method="POST">

Natürlich muss der POST-Wert in der if-Abfrage den Namen und nicht den Value des Buttons enthalten, aber das hast du ja schon geändert. Außerdem soll -- wie gesagt -- das Script AN DEN ANFANG der Datei, also am besten noch vor das <HTML>-Tag!

Was die Hochkommas beim assoziativen Wert im $_POST-Array betrifft, ist das wohl wieder eine Stil-Frage -- nötig sind sie nicht.
 
Hallo,

tut mir leid für die missverständnisse ^^ und danke für die hilfreiche erklärung. Jetzt klappt alles wunderbar.

Gruß
 

Ähnliche Themen

Antworten
10
Aufrufe
1.129
D
Antworten
4
Aufrufe
1.527
=DarkEagle=
D
Antworten
3
Aufrufe
1.097
Zurück
Oben