PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wer kann mir anhand eines beispiels mein problem lösen



icebaby
24.07.2006, 17:57
Habe diese Aufgaben zu erledigen , probiers schon den ganzen tag- komme aber nicht darauf: hoffe mir kann wer helfen




.1 Das Formular

Wir stürzen uns gleich in die großen Weiten des Nutzen von PHP und wollen uns über ein HTML Formular eine E-mail schicken. Dazu sehen wir uns zunächst das nötige Formular an. Wir brauchen ein Feld für eine Betreffzeile und ein Feld, in das die Nachricht kommt, was alles in HTML realisiert wird. Interessant ist für uns zunächst das Form-Tag.







echo "<form action='index.php?Seite=email_senden.php' method='POST'>
// HTML Code für das Formular

</form>";


Innerhalb action steht die Seite, auf die man weitergeleitet wird, wenn man den Sende Button klickt. In method steht die Art, in der die Formular Daten zur Übergabe an die Antwortseite gespeichert werden.
Innerhalb des Form Tags kommt nun das Formular:

echo "<b>Betreff:</b> <input type='text' name='Betreff' size='50'><br>
<textarea name='Nachricht' cols='45' rows='15'></textarea><br><br>
<input type='submit' name='Abschicken' value='Abschicken'>";

Lange HTML Passagen könnte man eigentlich auch außerhalb des PHP Codes schreiben und normal als HTML Code aufrufen lassen, muss aber nicht, und du wirst in der nächsten Lektion sehen, warum es praktischer ist.

Sehen wir uns aber nun erst einmal die Felder an. Jedes Feld hat seinen eigenen Namen innerhalb name=' '. Und genau das wird der Name der Variablen sein, aus denen du auf der Antwortseite die Werte erhälst.
Speicher die Seite nun unter formular.php ab und verlinke sie im Menü deines PHP Layouts.



3.2 Die Antwortseite

Kommen wir nun zur interessanteren Seite email_senden.php. Auslesen wollen wir die Felder Betreff und Nachricht, die nach den Klicken des Sende Button in den Variablen $_POST['Betreff'] und $_POST['Nachricht'] stecken. Wie bei den $_GET Variablen würden auf den meisten Servern auch $Betreff und $Nachricht funktionieren, aber wir wollen ja ordentlich bleiben. Die Anweisung, mit der du deine E-mail verschickst, lautet

mail ("ich@eMail.de", $_POST['Betreff'], $_POST['Nachricht']);

Die Funktion mail() verschickt die E-mail. Überzugebene Werte in den Klammern nennt man Parameter. Der erste Parameter ist deine E-mail Adresse, die du hier ersetzen solltest. Der Zweite Paramenter ist die Betreffzeile und der dritte Parameter die Nachricht, die in der E-mail erscheint. Dein E-Mail Versand Formular würde nun schon funktionieren, aber du würdest eine leere Seite als Antwort erhalten, da du dem Browser ja nicht gesagt hast, dass er etwas ausgeben soll. Schreibe also ein Satz zur Bestätigung.

Wenn jemand den Sende Button betätigt, ohne, dass er etwas geschrieben hat, wirst du eine leere eMail erhalten. Wie man dem vobeugen kann, wirst du in der nächsten Lektion sehen.



3.3 E-mail mit Absender

Wenn du dein Formular gerade getestet hast, wirst du festgestellt haben, dass der Absender einen komischen Namen hatte, und solltest du versucht haben zu antworten, kam die Mail als unzustellbar zurück. Wenn dir jemand eine E-mail schreibt, möchtest du vielleicht aber auch antworten. Deshalb erweiter dein Formular um die Textfelder mit den Namen Name und E-mail. Wenn du das getan hast, musst du noch deine mail() Funktion um einen vierten Parameter erweitern:

mail ("ich@eMail.de", $_POST['Betreff'], $_POST['Nachricht'], "From: ".$_POST['Name']." <".$_POST['E-mail'].">");

Nun wird als Absender der eingetragene Name angezeigt und die E-mail Adresse angesteuert, wenn du auf Antworten klickst.



3.4 Nachricht formatieren

Vielleicht willst du aber auch die E-mail Adresse gleich in deiner E-mail sehen, oder das Formular sogar noch um einige Felder erweitern, die ebenfalls in der E-mail stehen sollen. Im dritten Parameter der Funktion wird zur Zeit nur übergeben, was der Absender in des Textfeld Nachricht eingegeben hat, das ist uns nun nicht mehr genug. Stelle dir deine E-mail selbst zusammen:

$Mitteilung = "Absender: ".$_POST['Name']."\n".
"E-mail: ".$_POST['E-mail']."\n\n".
$_POST['Nachricht'];

mail ("ich@eMail.de", $_POST['Betreff'], $Mitteilung, "From: ".$_POST['Name']." <".$_POST['E-mail'].">");

echo "<p align='center'>Deine E-mail wurde erfolgreich versandt!</p>";


Neues steckt hier nicht drin. Dass \n erzeugt hier nun nur keinen Zeilenumbruch im Quelltext, sondern einen in deiner E-mail und macht sie übersichtlicher. In der Variablen Mitteilung siehst du nun einige mit einem Punkt aneinander gereihte Strings und Variablen.




--------------------------------------------------------------------------------

3.5 Aufgaben

3.5.1 Wenn die eMail verschickt wurde, soll eine Bestätigung ausgegeben werden. Gib ebenfalls die übersendeten Werte Name, E-mail, Betreff und Nachricht auf der der Antwortseite noch einmal aus, damit dein Besucher seine Angaben noch einmal sehen kann. Lade die Seite anschließend auf deinen Server.

Dein Quelltext aus email_senden.php


3.5.2 Du möchtest gerne wissen, von wo die E-mail abgeschickt wurde und schreibst dir selbst die Gedankenstütze, zB E-mail von meiner PHP Page, an den Anfang deiner E-mail. Wie sieht die neue Formatierung aus?



3.5.3 Wie müsste die mail() Funktion aussehen, wenn du einen vordefinierten Betreff, z.B Kontaktformular, angibst?





So sieht mein Code aus




<?php


if ($_GET['action'] == "senden") {
$error = 0;

if (empty($_POST['Name'] )){
$error = 1;
$msg = "Bitte Name eintragen!";
}
if(empty($_POST['E-mail'])) {
$error = 1;
$msg .= "Bitte Email eintragen!";
}
if(empty($_POST['Betreff'])) {
$error = 1;
$msg .= "Bitte Betreff eintragen!";
}
if(empty($_POST['Nachricht'] )){
$error = 1;
$msg .= "Bitte Nachricht eintragen!";
}
if($error == 0) {


$Mitteilung = "Absender: ".$_POST['Name']."\n".
"E-mail: ".$_POST['E-mail']."\n\n".
$_POST['Nachricht'];
mail ("icebaby@inode.at", $_POST['Betreff'], $Mitteilung,
"From:".$_POST['Name']." <".$_POST['E-mail'].">");
echo "<p align='center'>Deine E-mail wurde erfolgreich versandt!</p>";
$Gesendet = 1;
}


echo $msg;

}

if ($_GET['action'] == "senden") {
// Verschicke eMail
$Gesendet = 1;
}
if ($Gesendet != 1) {
// Zeige das Formular an
echo "<form action=\"".$_SERVER['PHP_SELF']."\"method=\"POST\">";
echo "<b>Betreff:</b> <input type='text' name='Betreff' size='50'><br>
<b>Name:</b> <input type='text' name='Name' size='50'><br>
<b>E-Mail:</b> <input type='text' name='Mail' size='50'><br>
<textarea name='Nachricht' cols='45' rows='15'></textarea><br><br>
<input type='submit' name='Abschicken' value='Abschicken'>";

echo "</form>";
}
?>

skopionmaster
24.07.2006, 18:21
Moin,
das erste was mir auffällt, ist das "if ($_GET['action'] == "senden")" so nie true werden kann.
Da: <form action='index.php?Seite=email_senden.php' method='POST'>

Du könntest daher z.B. $_POST['action'] statt $_GET['action'] verwenden und im Formular ein <input type="hidden" name="action" value="senden"> reinbasteln.



Wie gesagt, hab den Text nur schnell überflogen und das ist mir auf die schnelle aufgefallen.



;FG skop