Formmailer sendet keinen inhalt
dusti
- php
Hallo zusammen,
da ich hier schon einiges hilfreiches gefunden habe und nun doch nicht mehr weiter komme wende ich mich mal direkt an euch =)
also ich hab folgendes problem:
ich hab mir eine HP in HTML und auch ein Kommentar/Kontakt Formular geschrieben. Die felder werden mit javascript auf korrektheit geprüft, also das im namesfeld nur bustaben und im emailfeld ein @(AT-Zeichen) und ein "."(punkt) vorhanden sind. beim klick auf den senden button wird es halt geprüft und habe als " action="Senden.php" verwiesen. darin ist dann halt der formmailer. die nachricht wird auch versendet, nur leider ohne inhalt und der teil mit der AR funzt auch nicht wirklich.
ausserdem würd ich gerne das, dass fenster sich nach 5 sek oder so schließt. ist aber imom eher optional.
ich hoffe ihr könnt mir vll. sagen wo ich den fehler drin habe.
die codes sind hier:
Formular.html:
<form name="mailer" action="Senden.php" target="_new" method="POST" enctype="text/plain">
<table border="0" cellpadding="5" cellspacing="0">
<tr>
<td align="right">Name*</td>
<td>
<input type="text" name="d_name" value="" size="36" maxlength="30"></td>
</tr>
<tr>
<td align="right">eMail*</td>
<td>
<input type="text" name="d_email" value="" size="36" maxlength="30"></td>
</tr>
<tr>
<td align="right">Betreff</td>
<td>
<input type="text" name="d_betreff" size="36" maxlength="80"></td>
</tr>
<tr>
<td align="right">Nachricht*</td>
<td>
<textarea rows="4" name="nachricht" value="" cols="27"></textarea></td>
</tr>
<tr>
<td align="right"></td>
<td>
<small>* erforderliche Angaben</small>
<br>
<input type="Submit" value="Abschicken" onclick="return checkForm()">
<input type="reset" value="Abbrechen" onclick="return confirm ('Willst Du wirklich alle Eingaben löschen?')">
</td>
</tr>
</table>
</form>
Hier der JavaScript teil im <head> teil vom formular.html:
<SCRIPT LANGUAGE="JavaScript">
function checkForm()
{
if(document.mailer.d_name.value=="")
{
alert ("Bitte Deinen Namen eingeben");
document.mailer.d_name.focus();
return false;
}
if( document.mailer.d_name.value.length <2 )
{
alert ("Dein Name sollte doch schon aus zwei Zeichen bestehen, sonst wäre es ja kein Name sondern ein Buchstabe oder eine Ziffer");
document.mailer.d_name.focus();
return false;
}
if(!isNaN (document.mailer.d_name.value))
{
alert ("Nur Buchstaben bitte");
document.mailer.d_name.focus();
return false;
}
if (document.mailer.d_email.value=="")
{
alert ("Bitte eine Email eingeben");
document.mailer.d_email.focus();
return false
}
if(document.mailer.d_email.value.indexOf('@')==-1 ||document.mailer.d_email.value.indexOf('.')==-1)
{
alert ("Eine gültige Emailadresse muss ein \n '@' (At-Zeichen)und einen '.' (Punkt)\n enthalten.");
document.mailer.d_email.focus();
return false
}
var zeichen="/ ;:,äüö";
eingabe=document.mailer.d_email.value;
laenge=eingabe.length;
for( i=0;i<laenge;i++ )
{
badchar=eingabe.charAt(i);
if (zeichen.indexOf(badchar)>-1)
{
alert("Die Zeichen \n Slash(/),\n Doppelpunkt (:),\n Semikolon (;),\n Komma (,)\n und Leerzeichen ( )\n sowie deutsche Umlaute (ä,ü,ö) \n sind in einer Email nicht erlaubt." );
document.mailer.d_email.focus();
return false;
}
}
atPosition=document.mailer.d_email.value.indexOf('@');
if(document.mailer.d_email.value.indexOf('@',atPosition+1)>-1)
{
alert ("Du hast mehr als ein '@-Zeichen' eingegeben.");
document.mailer.d_email.focus();
return false
}
if(document.mailer.d_email.value.indexOf('.',atPosition)==-1)
{
alert ("An irgendeiner Stelle NACH dem '@-Zeichen' sollte ein Punkt folgen.");
document.mailer.d_email.focus();
return false
}
punktPosition=document.mailer.d_email.value.lastIndexOf('.');
if(punktPosition+3>document.mailer.d_email.value.length){alert("Nach dem Punkt müssen noch mindestens 2 Zeichen folgen.")
return false};
if(punktPosition+5<document.mailer.d_email.value.length){alert("Bitte mindestens 2, aber NICHT mehr als 4 Zeichen nach dem Punkt.\n Zum Beispiel: \ meinemail@.de \n meinemail@.com \n meinemail@.info\n")
return false};
if(document.mailer.nachricht.value.length<15)
{
alert ("Mehr als 15 Zeichen sollten es schon sein ;-) ");
document.mailer.nachricht.focus();
return false;
}
}
</script>
und hier ist die Senden.php:
<?php
$betreff = "Betreff";
$an = "meineemail@adresse.com";
$von = "$d_email";
$date = date("d.m.Y");
$inhalt = "Name: $d_name\nMail: $d_email\nBetreff: $d_betreff\nNachricht: $nachricht\n";
mail ($an,$betreff,$inhalt,$von);
echo "erfolgreich Versendet!!! Du kannst diese Seite jetzt schließen.";
############################
#jetzt kommt der Teil der Auto-Response#
###########################
$von="meineemail@adresse.com";
$vtext="Vielen dank für dein Kommentar!
Mfg, Dusti
http://www.meineseite.de.vu
Du hast folgendes eingegeben:
Name: $d_name
Mail: $d_email
Nachricht: $nachricht";
$bestaetigung="Deine Mail ist angekommen!";
$betreff = "Danke für dein Kommentar!!";
mail ($email,$bestaetigung,$vtext,"From: Dusti <meineemail@adresse.com>\n");
?>
Vielen dank für eure hilfe schonmal.
Gruß
Dusti
Hi,
ich hab mir eine HP in HTML und auch ein Kommentar/Kontakt Formular geschrieben. Die felder werden mit javascript auf korrektheit geprüft, also das im namesfeld nur bustaben und im emailfeld ein @(AT-Zeichen) und ein "."(punkt) vorhanden sind.
Dass das eine serverseitige Prüfung nicht ersetzen kann, sollte dir klar sein.
die nachricht wird auch versendet, nur leider ohne inhalt und der teil mit der AR funzt auch nicht wirklich.
Informiere dich, was register_globals=off bedeutet, warum das so eingestellt bleiben sollte, und wie du Formularparameter in PHP in Empfang nehmen musst.
Informiere dich außerdem über das Stichwort E-Mail Header Injection, weil dein Script sonst eine potentielle Spamschleuder darstellt.
MfG ChrisB
Hey
Dass das eine serverseitige Prüfung nicht ersetzen kann, sollte dir klar sein.
inwiefern meinste das ? kann ich also auch die prüfung vom server selber machen lassen ? weil das ist mir schon wichtig, dass nicht jeder irgendein mist da eintippt.
Informiere dich, was register_globals=off bedeutet, warum das so eingestellt bleiben sollte, und wie du Formularparameter in PHP in Empfang nehmen musst.
also ich hab da jetzt was vongelesen, dass man damit den code auslesen kann auch über cookies oder so. wenns so stimmt, wärs nicht so toll.
wie kann ich den dann da hinzufügen ?
Informiere dich außerdem über das Stichwort E-Mail Header Injection, weil dein Script sonst eine potentielle Spamschleuder darstellt.
ja okay, das was sich dabei herrausstellt, ist nicht gut das geb ich zu.
wie kann ich das denn ändern ? da muss ich ja das gesammte senden.php srcipt änder oder ?
Gruß Dusti
Mahlzeit dusti,
Dass das eine serverseitige Prüfung nicht ersetzen kann, sollte dir klar sein.
inwiefern meinste das ?
ChrisB meint damit, dass eine Client-seitige Prüfung keine Prüfung ist. Die Ausführung von Javascript (und damit die "Prüfung") kann man verhindern/ausschalten - und damit wären die Eingaben eben *nicht* überprüft, wenn sie zum Server gesendet werden. Darüber hinaus muss man noch nicht einmal Dein Formular verwenden, um irgendwelche Daten per POST an Dein PHP-Skript zu schicken.
kann ich also auch die prüfung vom server selber machen lassen ?
Nein. Du *kannst* das nicht nur, Du *solltest* das auch unbedingt!
Merke: "All input is evil!" Immer.
Vertraue also nicht darauf, dass das, was Deinem PHP-Skript per POST übergeben wird, schon irgendwie korrekt ist - sondern überprüfe das genau dort.
Falls irgendeine Eingabe fehlerhaft ist, solltest Du natürlich wieder das Formular (mit allen bisher gemachten Eingaben und einer entsprechenden Fehlermeldung) darstellen. Dafür bietet sich ein sog. "Affenformular" an - informiere Dich also zu diesem Stichwort.
weil das ist mir schon wichtig, dass nicht jeder irgendein mist da eintippt.
Dann überprüfe den Inhalt an der einzig sinnvollen Stelle: am Anfang des PHP-Skripts (d.h. im "Eingabe"-Teil ... siehe Stichwort "EVA-Prinzip", zu dem Du Dich auch ausführlich informieren solltest).
Informiere dich, was register_globals=off bedeutet, warum das so eingestellt bleiben sollte, und wie du Formularparameter in PHP in Empfang nehmen musst.
also ich hab da jetzt was vongelesen, dass man damit den code auslesen kann auch über cookies oder so.
Dann hast Du Dich nicht richtig informiert. Versuch's doch einfach mal im zuständigen Handbuch (bzw. dessen Online-Ausgabe) ...
wie kann ich den dann da hinzufügen ?
Du sollst nichts hinzufügen, sondern verstehen, was das bedeutet und welche Änderungen Du dann an Deiner PHP-Datei durchführen musst, damit sie wie gewünscht funktioniert.
Informiere dich außerdem über das Stichwort E-Mail Header Injection, weil dein Script sonst eine potentielle Spamschleuder darstellt.
ja okay, das was sich dabei herrausstellt, ist nicht gut das geb ich zu.
wie kann ich das denn ändern ? da muss ich ja das gesammte senden.php srcipt änder oder ?
Darum wirst Du wohl nicht herumkommen - aber Übung macht bekanntlich den Meister.
MfG,
EKKi
Hello,
Informiere dich, was register_globals=off bedeutet, warum das so eingestellt bleiben sollte, und wie du Formularparameter in PHP in Empfang nehmen musst.
Das ist jetzt aber schon wieder ganz doooof ausgedrückt :-P
Die Formularparameter müssen im Script nicht extra "in Empfang genommen" werden, weil sie dem Script bereits in einem Variablen-Array ($_POST) zur Verfügung stehen, wenn das Script startet.
Du bist sonst immer so pingelig, da solltest Du hier nicht implizit zum Umkopieren verleiten.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
neben den Posts von den anderen auch noch mal ein paar Hinweise von mir.
Die felder werden mit javascript auf korrektheit geprüft
Dass nur eine Javascript-Prüfung schlecht ist hast du ja mittlerweile schon gelernt. Aber wenn sie eh schon da ist, dann verfeinere sie und lasse sie da, wenn du denkst, dass es für die User hilfreich ist. Vor allem bei längeren Formularen ist es z.B. nicht hilfreich, wenn der User 10 Alerts bekommt. Da wäre eine Einfärbung sicher besser...
Die Prüfung auf dem Server ist dann schon der 1. Schritt, injections zu vermeiden.
die nachricht wird auch versendet, nur leider ohne inhalt und der teil mit der AR funzt auch nicht wirklich.
Arbeite bitte an deinen Problembeschreibungen. Du gibts heir sehr wage Beschreibungen ab und postest 3 Meter Quelltext. Das darf man meiner Meinung nach nicht bringen, wenn man kostenlose Hilfe erwartet.
Also: Was heißt "funzt nicht"? Was heißt überhaupt AR? Was heißt "ohne Inhalt" - kommen nur die eingegebenen Daten nicht an, oder steht gar nix in der Mail?
ausserdem würd ich gerne das, dass fenster sich nach 5 sek oder so schließt. ist aber imom eher optional.
Das mag in Einzelfällen vielleicht OK sein. Generell finde ich das aber schlecht. Der User erwartet eine Statusmeldung, ob der Versand der Mail geklappt hat nachdem er auf Senden geklickt hat. Nicht jeder liest das so schnell. Vielleicht denkt er auch, das Fenster ist einfach so verschwunden und probiert es nochmals. Es kann also für Verwirrung sorgen.
Formular.html:
<form name="mailer" action="Senden.php" target="_new" method="POST" enctype="text/plain">
...
</form>
>
Das ist bei deiner Problembeschreibung nur zu kleinsten Teilen relevant. Also wieso posten?
> Hier der JavaScript teil im <head> teil vom formular.html:
>
> ~~~javascript
> <SCRIPT LANGUAGE="JavaScript">
> ...
> if(document.mailer.d_email.value.indexOf('@')==-1 ||document.mailer.d_email.value.indexOf('.')==-1)
> {
> alert ("Eine gültige Emailadresse muss ein \n '@' (At-Zeichen)und einen '.' (Punkt)\n enthalten.");
> document.mailer.d_email.focus();
> return false
> }
>
>
> var zeichen="/ ;:,äüö";
> eingabe=document.mailer.d_email.value;
> laenge=eingabe.length;
>
> for( i=0;i<laenge;i++ )
> {
> badchar=eingabe.charAt(i);
> if (zeichen.indexOf(badchar)>-1)
> {
> alert("Die Zeichen \n Slash(/),\n Doppelpunkt (:),\n Semikolon (;),\n Komma (,)\n und Leerzeichen ( )\n sowie deutsche Umlaute (ä,ü,ö) \n sind in einer Email nicht erlaubt." );
> document.mailer.d_email.focus();
> return false;
>
> }
>
> }
>
> atPosition=document.mailer.d_email.value.indexOf('@');
>
> if(document.mailer.d_email.value.indexOf('@',atPosition+1)>-1)
> {
> alert ("Du hast mehr als ein '@-Zeichen' eingegeben.");
> document.mailer.d_email.focus();
> return false
> }
>
>
> if(document.mailer.d_email.value.indexOf('.',atPosition)==-1)
> {
> alert ("An irgendeiner Stelle NACH dem '@-Zeichen' sollte ein Punkt folgen.");
> document.mailer.d_email.focus();
> return false
> }
>
> punktPosition=document.mailer.d_email.value.lastIndexOf('.');
>
> if(punktPosition+3>document.mailer.d_email.value.length){alert("Nach dem Punkt müssen noch mindestens 2 Zeichen folgen.")
> return false};
>
> if(punktPosition+5<document.mailer.d_email.value.length){alert("Bitte mindestens 2, aber NICHT mehr als 4 Zeichen nach dem Punkt.\n Zum Beispiel: \ meinemail@.de \n meinemail@.com \n meinemail@.info\n")
> return false};
>
> </script>
>
Das ist bei deiner Problembeschreibung völlig irrelevant.
Man kann hier aber Fehler erkennen. Auf SelfHTML gibt es einen Artikel darüber wie unsinnig eine solche Mail-Adressen-Validierung ist - den solltest du mal suchen und lesen.
Gruß
Alex