Kontaktformular funktioniert nicht! (Anfänger)
WhiteZEUS
- php
0 Felix Riesterer
0 Tom0 WhiteZEUS0 EKKi
Hallo!
Ich habe eine Frage, die hier bestimmt schon tausendmal gestellt wurde, aber ich finde einfach nicht die richtigen Antworten. Deshalb möchte ich sie hiermit nochmal stellen:
Ich versuche schon seit Tagen ein Kontaktformular zu erstellen, welches die Daten via PHP-Skript an meine Email senden soll.
Das Kontakformular zu basteln war nicht das Problem... aber dann...
Aus irgendeinem Grund wollen alle Versionen, die aus dem I-Net in mein Formular integriere nicht funktionieren. Jetzt habe ich von einem Schulkollegen den Tipp bekommen, die ganze Sache mit WAMP5 zu Simulieren.
Die Website lässt sich auch super ausführen, nur dieses Kontakformular streikt. Wer es sich mal anschauen möchte, es ist auf (www.meetra-recycling.de), dann auf über uns und dann auf kontakt. (Sollte dann eigentlich eine kontakt.php zum downloaden sein)
Wäre prima, wenn mir jemand helfen könnte...
Lieber WhiteZEUS,
Aus irgendeinem Grund wollen alle Versionen, die aus dem I-Net in mein Formular integriere nicht funktionieren.
"nicht funktionieren" tut nicht funktionieren.
Wer es sich mal anschauen möchte, es ist auf (www.meetra-recycling.de), dann auf über uns und dann auf kontakt. (Sollte dann eigentlich eine kontakt.php zum downloaden sein)
Warum postest Du hier nicht gleich den Link selbst?
http://www.meetra-recycling.de/kontakt.php
Ja, da erscheint ein Download-Dialog. Dein Server interpretiert PHP-Dateien nicht als ausführbare Scripte, sondern liefert sie unverändert an den Browser aus. Der interpretiert auch nix, sondern bietet einen Download an.
Du wirst das Hosting-Paket auf eine Nummer teurer umsteigen müssen, damit von Deinem Hoster PHP verfügbar gemacht wird, oder einfach mal mit dem Support reden...
Liebe Grüße,
Felix Riesterer.
Mahlzeit!
So ich habe das Problem lösen können...
War kein PHP auf dem Server installiert, Admin hat das nachgeholt und schon lief die ganze Sache. Damit andere, die genauso verwirrt sind, wie ich schneller eine Lösung finden, Versuche ich hier mal meinen Code zu Posten:
<?php
if(isset($HTTP_POST_VARS['check'])){
$firma = $HTTP_POST_VARS['firma'];
$gesch = $HTTP_POST_VARS['gesch'];
$tel = $HTTP_POST_VARS['tel'];
$vorname = $HTTP_POST_VARS['vorname'];
$Mobil = $HTTP_POST_VARS['Mobil'];
$nachname = $HTTP_POST_VARS['nachname'];
$fax = $HTTP_POST_VARS['fax'];
$strasse = $HTTP_POST_VARS['strasse'];
$email = $HTTP_POST_VARS['email'];
$plz = $HTTP_POST_VARS['plz'];
$ort = $HTTP_POST_VARS['ort'];
$referenz = $HTTP_POST_VARS['referenz'];
$land = $HTTP_POST_VARS['land'];
$Eigenschaft = $HTTP_POST_VARS['Eigenschaft'];
$mitteilung = $HTTP_POST_VARS['mitteilung'];
if($tel == "" || $vorname == "" || $nachname == "" || $email == "" || $land == "" || $mitteilung == "" || !preg_match("/[.a-z0-9_-]+@+[.a-z0-9_-]+.+[.a-z0-9_-]{2,}/i", $email))
echo "<meta http-equiv='refresh'content='2;URL=versandn.html'>";
else{
$text = "Firma:_________".$HTTP_POST_VARS['firma']."\n"."\n"."Anrede:________".$HTTP_POST_VARS['gesch']."\n"."Vorname:_______".$HTTP_POST_VARS['vorname']."\n"."Nachname:______".$HTTP_POST_VARS['nachname']."\n"."Strasse:_______".$HTTP_POST_VARS['strasse']."\n"."Ort:___________".$HTTP_POST_VARS['plz']." ".$HTTP_POST_VARS['ort']."\n"."Land:__________".$HTTP_POST_VARS['land']."\n"."\n"."Telefon:_______".$HTTP_POST_VARS['tel']."\n"."Mobil:_________".$HTTP_POST_VARS['Mobil']."\n"."Fax:___________".$HTTP_POST_VARS['fax']."\n"."\n"."Ref-Nr:________".$HTTP_POST_VARS['referenz']."\n"."Zustand:_______".$HTTP_POST_VARS['Eigenschaft']."\n"."\n"."MITTEILUNG AN DIE MEETRA:"."\n"."\n".$HTTP_POST_VARS['mitteilung'];
mail("Deine@Email.de","Email per Kontaktformular",$text,"From: $email");
echo "<meta http-equiv='refresh'content='2;URL=versand.html'>";
}
}
else{
?>
das is der PHP-teil zum Versenden einer Nachricht aus einem Kontaktformular mit 15 Feldern. (Schon n bisschen formatiert)
<table width="100%" cellpadding="2" cellspacing="0">
<form action="kontakt.php" method="POST">
<tr>
<td width="11%" bgcolor="#EFEFEF" class="arial">Firma</td>
<td bgcolor="#EFEFEF"><input type="Text" name="firma" size="25" value=""></td>
</tr>
<tr>
<td bgcolor="#EFEFEF"> </td>
<td bgcolor="#EFEFEF">
<select name="gesch" >
<option value="">Bitte wählen: </option>
<option value="Herr">Herr</option>
<option value="Frau">Frau</option>
</select>
</td>
<td> </td>
<td bgcolor="#EFEFEF" class="arial">Tel. *</td>
<td bgcolor="#EFEFEF"><input type="Text" name="tel" size="25" value=""></td>
<td> </td>
</tr>
<tr>
<td bgcolor="#EFEFEF" class="arial">Vorname *</td>
<td bgcolor="#EFEFEF"><input type="Text" name="vorname" size="25" value=""></td>
<td> </td>
<td bgcolor="#EFEFEF" class="arial">Mobil </td>
<td bgcolor="#EFEFEF"><input type="Text" name="Mobil" size="25" value=""></td>
<td> </td>
</tr>
<tr>
<td bgcolor="#EFEFEF" class="arial">Nachname *</td>
<td bgcolor="#EFEFEF"><input type="Text" name="nachname" size="25" value=""></td>
<td> </td>
<td bgcolor="#EFEFEF" class="arial">Fax</td>
<td bgcolor="#EFEFEF"><input type="Text" name="fax" size="25" value=""></td>
<td> </td>
</tr>
<tr>
<td bgcolor="#EFEFEF" class="arial">Strasse</td>
<td bgcolor="#EFEFEF"><input type="Text" name="strasse" size="25" value=""></td>
<td width="7%"> </td>
<td bgcolor="#EFEFEF" class="arial">E-Mail *</td>
<td width="27%" bgcolor="#EFEFEF"><input type="Text" name="email" size="25" value=""></td>
<td> </td>
</tr>
<tr>
<td bgcolor="#EFEFEF" class="arial">PLZ</td>
<td width="27%" bgcolor="#EFEFEF"><input type="Text" name="plz" size="25" value=""></td>
<td> </td>
<td bgcolor="#EFEFEF" colspan="2"> </td>
</tr>
<tr>
<td bgcolor="#EFEFEF" class="arial">Ort</td>
<td bgcolor="#EFEFEF"><input type="Text" name="ort" size="25" value=""></td>
<td> </td>
<td width="11%" bgcolor="#EFEFEF" class="arial">Referenz Nr.</td>
<td bgcolor="#EFEFEF"><input type="Text" name="referenz" size="25" value=""></td>
<td width="17%"> </td>
</tr>
<tr>
<td bgcolor="#EFEFEF" class="arial">Land *</td>
<td bgcolor="#EFEFEF"><input type="Text" name="land" size="25" value=""></td>
<td class="arial"> </td>
<td bgcolor="#EFEFEF" class="arial"> </td>
<td bgcolor="#EFEFEF" class="arial">
<input type="checkbox" class="Check" name="Eigenschaft" value="Neu">Neu
<input type="checkbox" class="Check" name="Eigenschaft" value="Gebraucht"> Gebraucht</td>
</tr>
<tr>
<td class="arial"> </td>
<td class="arial"> </td>
<td class="arial"> </td>
</tr>
<tr>
<td bgcolor="#EFEFEF" class="arial">Mitteilung *</td>
<td colspan="4" bgcolor="#EFEFEF"><textarea name="mitteilung" cols="62" rows="8" wrap="virtual"></textarea></td>
</tr>
<tr>
<td colspan="5"> </td>
</tr>
<tr>
<td> </td>
<td class="arial" colspan="2"><input type="Submit" name="check" value="Senden">
<input type="Reset" name="reset" value="Zurücksetzen"></td>
<td class="arial1" colspan="3">Angaben mit * sind notwendig.</td>
</tr>
</form>
</table>
und das is das Formular als Tabelle. CSS macht ihr dann bitte selbst?
am Ende der Datei (bei mir Kontakt.php) kommt dann noch sowas:
<?php
}
?>
Ich hoffe ich konnte nicht nur mir, sondern auch noch wem anders helfen.
Hello,
So ich habe das Problem lösen können...
Nein! So hast Du dir und der ganzen Internetgemeinde ein neues Problem gechaffen!
Warum hast Du denn meine Ratschläge noch nicht berücksichtigt?
https://forum.selfhtml.org/?t=186523&m=1238857
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
JUHUUU!!
Ich bin noch blöder, als ich dachte. Tschuldigung. ich ha gedacht, das wäre so OK! Danke für den hinweis. Wenn ich dann also die Variablen austausche, dann is OK?
Wie würde das dann denn aussehen?
$firma = $HTTP_POST_VARS['firma']; alt
$firma = $_POST['firma']; neu?
Ich bin halt absoluter Anfänger in PHP.
Hello,
Ich bin noch blöder, als ich dachte. Tschuldigung. ich ha gedacht, das wäre so OK! Danke für den hinweis. Wenn ich dann also die Variablen austausche, dann is OK?
Wie würde das dann denn aussehen?
$firma = $HTTP_POST_VARS['firma']; alt
$firma = $_POST['firma']; neu?
Du brauchst diese Umkopiererei gar nicht zu machen. Du kannst direkt mit $_POST['firma'] arbeiten. Das ist ein ganz normales Arrayelement.
Du solltest Dir die Threads aus dem Archiv ziehen zum Thema "Formmailer",
"Mail Injection", "Mail Header Manipulation", "MIME Mail".
Zur Sache:
Du musst verhindern, dass Benutzereingaben ungeprüft in die Mailheader
gelangen können. Die Mailheader haben Steuerfunktion und man kann damit den
Mailserver für sich instrumentalisieren.
In der PHP-Mail()-Funktion kommen für diese Manipulation die Felder
in Frage.
Außerdem müssen die header auch passend codiert werden.
Dafür hat PHP die Funktion
http://de3.php.net/manual/en/function.mb-encode-mimeheader.php
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Mahlzeit WhiteZEUS,
Damit andere, die genauso verwirrt sind, wie ich schneller eine Lösung finden, Versuche ich hier mal meinen Code zu Posten:
Erbarmen - was haben wir Dir denn getan? So einen grauenhaften Code will doch niemand ernsthaft benutzen.
Warum hast Du Toms Ratschläge so konsequent ignoriert?
Ich hoffe ich konnte nicht nur mir, sondern auch noch wem anders helfen.
Naja ... zumindest Dein Code kann anderen helfen ... als abschreckendes Beispiel.
MfG,
EKKi
Hello,
bei dieser Formularvearbeitung handelt es sich um eine antiquierte Spamschleuder!
1.) es werden noch die "Long-Arrays" benutzt
HTTP_POST_VARS
die bei vielen Serverinstallationen inzwischen abgeschaltet sind und demnächst gar nicht
mehr vorhanden sind.
2.) Die Übernahme von direkten Benutzereingaben in die Header einer Mail machen das Programm
angreifbar für Spammer, die gerne solche Formulare suchen und benutzten, um auf anderer
Leute Geld und VERANTWORTUNG Spam zu verteilen.
mail("zeus3005@gmx.de", $nachname, $vorname." sendete ihnen eine Mail mit
folgendem Text:n".$mitteilung, "From: $email");
entscheidend ist hier die Zuweisung $email = $HTTP_POST_VARS['email'];
Hier wird ermöglicht, dass ein Angreifer über den Formular-Parameter email
manipulierte Header in die Mail einbaut.
3. Das Umkopieren von Globalen Variablen ist überflüssing
$email = $HTTP_POST_VARS['email'];
Lese Dir bitte hier im Archiv die Diskussionen über "MIME Mail" und "Mail Injection" (oder ähnlich formuliert) durch.
Die Long-Arrays $HTTP_POST_VARS (also $HTTP_*_VARS) solltest Du austauschen gegen die "superglobalen" Arrays $_POST, $_GET, usw. und diese dann auch im ganzen Script benutzten, also die Werte nicht umkopieren in lose Variablen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Noch ne kleinigkeit:
ich finde es toll, das es solche Foren gibt. Das erspart ne Menge Bücher und man trifft ne Menge Leute, die in der Regel mehr Erfahrung haben als man selbst.
Ich versuche nach Möglichkeit immer etwas wieder zu geben, wenn ich was genommen habe.
Leider gibt es immer wieder Leute, die einfach mal an Anfängerwissen rumkritisieren, ohne Verbesserungsvorschläge zu machen. Ich denke, das hilt dem nächsten Leser genauso wenig weiter, wie eventuelle Fehler, die ich oder andere hier reinschreiben.
Ich bin schon oft auf Threads gestossen, wo es dann nachher nur um die Feststellung der unwissenheit von Anfängern geht. ich hoffe ich konnte meinen Fehler gewissenhaft korrigieren.
Mein Code läuft eigentlich zügig und funktioniert, deshalb hätte ich gerne mal gewusst, was daran so schlecht ist, das ich hier scheinbar jemanden belästige? (Ekki?).
Auch ich versuche aus Fehlern zu lernen.
Mahlzeit WhiteZEUS,
Mein Code läuft eigentlich zügig und funktioniert,
Nein, das ist nicht korrekt. Es hat den Anschein, als funktioniere er wie gewünscht. Darüber hinaus jedoch hast Du es geschafft, eine neue SPAM-Schleuder ins Netz zu stellen.
deshalb hätte ich gerne mal gewusst, was daran so schlecht ist, das ich hier scheinbar jemanden belästige? (Ekki?).
Du belästigst mich nicht. Aber wenn Du hier nahezu unkommentiert Code postest, der vor (prinzipiellen) Fehlern nur so strotzt, dann ist die Gefahr groß, dass irgendwann in Zukunft sich irgendwer diese Code aus dem Archiv kopiert, dann selbst daran herumbastelt, damit auf die Schnauze fliegt und anschließend jammert "Aber den habe ich doch so aus dem SELFHTML-Forum!".
Tom hatte Dir auf Dein Ursprungsposting mehrere wirklich wichtige und hilfreiche Hinweise gegeben. Du hast diese jedoch komplett ignoriert und stattdessen Deinen ursprünglichen, fehlerhaften und IMHO gefährlichen Code gepostet, ohne dass das zu dem Zeitpunkt sinnvoll gewesen wäre. Dies hier ist keine Code-Tausch-Börse. Inbesondere nicht für derartig sicherheitsrelevante und kritische Anwendungen wie Formmailer mit scheunentorgroßen Sicherheitslücken.
MfG,
EKKi