Problem mit Kontaktformular (POST Var. gehen verloren)
Andreas
- javascript
Hallo,
ich habe ein Problem.
Auf einer Webseite habe ich ein Kontaktformular.
Ganz normal wie man's kennt, da ist nichts ausergewöhnliches dran.
Der User füllt die Felder aus -> beim klick auf "Versenden" wird per JavaScript überprüft ob die erforderlichen Felder ausgefüllt sind -> und dann, wenn alles stimmt, wird das Formular per JavaScript an meiner sendmail.php geschickt.
In der sendmail.php lese ich die POST Variablen per $_POST['bla'] aus und sende sie an die Ziel-Email-Adresse (per PHP).
Dann kommt ein "Vielen Dank" und das wars dann.
Funktioniert ja auch alles aber irgendwie doch nicht ;-)
Es ist jetzt schon zum 2ten mal passiert das ein Formular leer per Email geschickt wurde. Das dürfte doch eigentlich nicht sein, denn wenn der User JavaScript deaktiviert hat, kann man das Formular gar nicht abschicken (hab ich schon getestet). Und wenn er JavaScript aktiviert hat, dann wird das Formular niemals leer an meine sendmail.php geschickt. Und die macht ja nicht mehr als die POST Variablen an die Ziel-Email zu senden.
Bei dem Ausnahmefall weis ich leider nichts über dem User. Ich kann das ganze deshalb auch nicht nachvollziehen.
Woran kann das liegen?
POST Variablen die einfach verloren gehen ?
Ich kann's mir einfach nicht erklären.
Textfelder per JavaScript nach leer überprüfen und anschließend wenn erwünscht das Formular per JavaScript versenden kann doch jeder Browser, oder täusch ich mich da?
Kann es sein das ein Browser die überprüfen einfach ignoriert und das Formular auch leer verschickt?
Hier noch die JavaScript funktion mit der ich das Formular prüfe:
-----------------------CODE START------------------------------------
function validate_form() {
validity = true; // assume valid
var varString = "";
if (!check_empty(document.Kontakt.vorname.value))
{ validity = false; varString+="Vorname\n"; }
if (!check_empty(document.Kontakt.nachname.value))
{ validity = false; varString+="Nachname\n"; }
if (!check_empty(document.Kontakt.firma.value))
{ validity = false; varString+="Firma\n"; }
if (!check_empty(document.Kontakt.strasse.value))
{ validity = false; varString+="Straße\n"; }
if (!check_empty(document.Kontakt.plz.value))
{ validity = false; varString+="Plz\n"; }
if (!check_empty(document.Kontakt.ort.value))
{ validity = false; varString+="Ort\n"; }
if (!check_empty(document.Kontakt.land.value))
{ validity = false; varString+="Land\n"; }
if (!check_empty(document.Kontakt.telefon.value))
{ validity = false; varString+="Telefon\n"; }
if (!check_empty(document.Kontakt.fax.value))
{ validity = false; varString+="Fax\n"; }
check = false;
if (document.Kontakt.art[0].checked==true)
{ check=true; }
if (document.Kontakt.art[1].checked==true)
{ check=true; }
if (document.Kontakt.art[2].checked==true)
{ check=true; }
if (check==false)
{ validity = false; varString+="Privat/Kunde\n"; }
if (document.Kontakt.information.value=="Bitte auswählen"){
informationValue="";
}
if (document.Kontakt.information.value!="Bitte auswählen"){
informationValue=document.Kontakt.information.value;
}
if (!check_empty(informationValue))
{ validity = false; varString+="gewünschte Information\n"; }
if (!check_email(document.Kontakt.email.value))
{ validity = false; varString+="Email\n"; }
//if (validity)
//return validity;
if (validity==true){
document.Kontakt.submit();
}
if (varString!=""){
alert('Bitte geben Sie noch folgende \nInformationen an:\n\n'+varString);
}
}
-----------------------CODE ENDE------------------------------------
Hat jemand eine Idee wodurch mein Problem entsteht?
Wäre dankbar für jeden Tip.
Danke.
Gruß
Andreas
Hello,
Das dürfte doch eigentlich nicht sein, denn wenn der User JavaScript deaktiviert hat, kann man das Formular gar nicht abschicken (hab ich schon getestet).
hier liegt schonmal ein gewaltiger Irrtum - Warum sollte das nicht gehen, wie ist das Formular aufgebaut? Offenbar macht doch JavaScript nichts anderes als einen submit() Aufruf. Wenn ich nun kein Browser wäre, oder ein Nutzer mit einer Developer Toolbar, warum soll ich das submit nicht einfach selbst abfeuern?
Merke: Werte immer Serverseitig validieren.
MfG
Rouven
Das dürfte doch eigentlich nicht sein, denn wenn der User JavaScript deaktiviert hat, kann man das Formular gar nicht abschicken (hab ich schon getestet).
hier liegt schonmal ein gewaltiger Irrtum - Warum sollte das nicht gehen, wie ist das Formular aufgebaut? Offenbar macht doch JavaScript nichts anderes als einen submit() Aufruf. Wenn ich nun kein Browser wäre, oder ein Nutzer mit einer Developer Toolbar, warum soll ich das submit nicht einfach selbst abfeuern?MfG
Rouven
Daran hab ich noch gar nicht gedacht das man das Formular auch über andere Wege abschicken kann.
Ich schließe die Developer Toolbar jetzt einfach mal aus, weil ich zu 100% sagen kann das die keiner meiner User benutzt/besitzt.
Was wäre ich denn wenn ich kein Browser wäre? ;-)
Merke: Werte immer Serverseitig validieren.
Das weis ich. Ich werde das auch noch abändern aber vorerst muss das so laufen.
Hello,
Was wäre ich denn wenn ich kein Browser wäre? ;-)
dann könntest du ein Formularbot sein, der versucht offene formmailer zu finden. Du würdest dir also angucken aus welchen Formfeldern das Formular besteht und einfach mal versuchen es abzuschicken. Wenn das gelingt könntest du als nächstes versuchen eine zufällige E-Mail-Adresse als Empfänger zu platzieren und einen Text beizufügen, vielleicht wird ja was draus.
MfG
Rouven
Was wäre ich denn wenn ich kein Browser wäre? ;-)
dann könntest du ein Formularbot sein, der versucht offene formmailer zu finden. Du würdest dir also angucken aus welchen Formfeldern das Formular besteht und einfach mal versuchen es abzuschicken.
Das würde die leere Email erklären.
Wenn das gelingt könntest du als nächstes versuchen eine zufällige E-Mail-Adresse als Empfänger zu platzieren und einen Text beizufügen, vielleicht wird ja was draus.
In diesem Fall denke ich zumindest nicht, da meine Empfänger-Email-Adresse nicht mit übergeben wird. Die steht hartkodiert in meiner sendmail.php und ich denke da kann ein Formularbot nichts dran ändern.
Naja also könnte ein Formularbot sein.
Auf jedenfall würde ich wahrscheinlich das Problem lösen in dem ich die überprüfung Serverseitig durchführe.
Naja, irgendwie nervt mich das schon, dass ich nicht genau weis woran das liegt.
Gruß
Naja, irgendwie nervt mich das schon, dass ich nicht genau weis woran das liegt.
Wieso es wurde dir doch schon gesgt, an der fehlenden Prüfung auf dem Server.
Du kannst nicht verhindern, dass ein Skript aufgerufen wird, nur weil du eine Seite hast in dem das Formular nicht abgeschickt werden kann. Du brauchst gar kein Formular um das Skript aufzurufen
Struppi.
Wieso es wurde dir doch schon gesgt, an der fehlenden Prüfung auf dem Server.
Du kannst nicht verhindern, dass ein Skript aufgerufen wird, nur weil du eine Seite hast in dem das Formular nicht abgeschickt werden kann. Du brauchst gar kein Formular um das Skript aufzurufen
Struppi.
Ja das hab ich schon verstanden.
Ich werde das ja jetzt auch ändern.
Aber wer macht sowas? wer ruft mein script einfach so auf? ;-)
Es ist halt so das ich es allen meiner User nicht zutrau, soetwas mit Absicht zu machen. Ein Grund ist unter anderem deren unkenntniss.
Aber vieleicht durch Zufall gut möglich.
Der User wollte die Seite aufrufen, tippt die URL ein, dann wird automatisch das Script in der Adressleiste angezeigt und der User drückt einfach auf ENTER. Ja das kann gut sein.
Ok, also werde ich es jetzt ändern und dann müsste es ja klappen.
Danke.
Mahlzeit,
Aber wer macht sowas? wer ruft mein script einfach so auf? ;-)
Es ist halt so das ich es allen meiner User nicht zutrau, soetwas mit Absicht zu machen. Ein Grund ist unter anderem deren unkenntniss.
Wer sind denn "deine User"? Wenn das Skript öffentlich zugänglich und erreichbar ist, dann sind potentiell ALLE Benutzer ALLER Rechner, die mit dem Internet verbunden sind, "deine User" ... ich denke nicht, dass du über die Kenntnisse oder Unkenntnisse ALLER Benutzer ALLER Rechner so vorschnell urteilen solltest. ;-)
MfG,
EKKi
Wer sind denn "deine User"? Wenn das Skript öffentlich zugänglich und erreichbar ist, dann sind potentiell ALLE Benutzer ALLER Rechner, die mit dem Internet verbunden sind, "deine User" ... ich denke nicht, dass du über die Kenntnisse oder Unkenntnisse ALLER Benutzer ALLER Rechner so vorschnell urteilen solltest. ;-)
ok, geb ich dir recht!
Also meins sieht so aus und funktioniert auch, sendet nichts leer, kannst ja mal schaun. Gruß Enzo
<?php
$Empfaenger = "test@mail.de";
if($_REQUEST['Send'])
{
if(empty($_REQUEST['Firma']) || empty($_REQUEST['Name']) || empty($_REQUEST['Straße']) || empty($_REQUEST['Nr']) || empty($_REQUEST['PLZ']) || empty($_REQUEST['Ort']) || empty($_REQUEST['Telefon']) || empty($_REQUEST['Telefonzusatz']) || empty($_REQUEST['Quelle']))
{
echo"Bitte gehen Sie <a href="javascript:history.back();">zurück</a> und füllen Sie die mit * markierten Felder aus.";
}
else
{
$Mailnachricht = "Sie haben folgende Nachricht erhalten: \n\n";
while(list($Formularfeld, $Wert)=each($_REQUEST))
{
if($Formularfeld!="Send")
{
$Mailnachricht .= $Formularfeld.": ".$Wert."\n";
}
}
$Mailnachricht .= "\nGesendet am: ";
$Mailnachricht .= date("d.m.Y H:i:s");
$Mailbetreff = "Anfrage Werbevideo";
mail($Empfaenger, $Mailbetreff, $Mailnachricht, "From: ".$_REQUEST['Email']);
echo"Vielen Dank für Ihre eMail!";
}
}
else
{
echo"Ein Fehler ist aufgetreten. Bitte gehen Sie auf diese <a href="formular.htm">Seite</a>.";
}
?>