Supportnet / Forum / Skripte(PHP,ASP,Perl...)
E-Mail mit Formular absenden (PHP). Wie Schutzsystem einbauen?
Frage
Halle ich habe mir einen einfachen Formmailer mit PHP erstellt. Es wird die Datei mail.html aufegrufen, um eine Mail zu versenden (Formatierungen habe ich wegen der Übersichtlichkeit weggelassen). Das sieht jetzt wie folgt aus:
Datei [b]mail.html[/b]:
[code]<html>
<head>
<title>Formmailer</title>
</head>
<body>
<form method="POST" name="formmailer" action="mail.php">
<p>Name: <input type="text" name="sender"></p>
<p>E-Mail: <input type="text" name="sendermail"></p>
<p>Betreff: <input type="text" name="betreff"></p>
<p>Nachricht: <textarea name="text"></textarea></p>
<p><input type="submit" value="Abschicken" name="abschicken"> <input type="reset" value="Zurücksetzen" name="zuruecksetzen"></p>
</form>
</body>
</html>[/code]
Datei [b]mail.php[/b]:
[code]<?php
echo "<html>\n\n";
echo "<head>\n";
echo "<title>Formmailer</title>\n";
echo "</head>\n\n";
echo "<body>\n\n";
$empfaenger = "alias@domain.de";
$text .= "\n\n--------------------------------------------------\nDiese Nachricht wurde mit dem Formmailer erstellt.";
mail($empfaenger, $betreff, $text, "From: $sender <$sendermail>");
echo "<p>Die E-Mail wurde versendet.</p>\n\n";
echo "</body>\n\n";
echo "</html>";
?>[/code]
Wie kann ich jetzt aber erreichen, das niemand anderes die Datei mail.php nutzen kann, um mich zuzumailen (ich meine es ist doch kein Problem die Seite (mit absoluter Adressierung auf meinen Server) mit einen anderen Formmailer aufzurufen)? Die Datei mail.php soll also nur mit den Werten aus meiner Datei mail.html etwas senden, ansonsten nichts tun (oder einen Text ausgegen, etwa wie "Es können nur Mails von http://.../mail versendet werden")
Und wie kann ich ohne Scripte (Java, VB) mit PHP prüfen, ob in den Feldern etwas steht (so wie es oben aussieht, sendet die Datei mail.php auch dann eine Mail, wenn sogar alle Felder leer sind).
[i]<gruß thj>[/i]
Antwort 1 von Nessus
Hi,
Datei .htaccess:
Durch den Apache werden sämtliche Zugriffe auf deinen Webserver von
externen PHP-Skripten auf den localhost des Clientrechners umzuleiten.
Die überprüfung machst Du mit einer Kontrollstruktur:
if ($betreff == "")
{
Fehler
}
else
{
versende Mail
}
Vieleicht hilft Dir noch folgender Link weiter:
http://www.phpcenter.de/faq/faq-mail.html#mail-9
HTH
Nessus
Datei .htaccess:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^PHP
RewriteRule ^.*$ http://localhost/ [L,R] [/1]
Durch den Apache werden sämtliche Zugriffe auf deinen Webserver von
externen PHP-Skripten auf den localhost des Clientrechners umzuleiten.
Die überprüfung machst Du mit einer Kontrollstruktur:
if ($betreff == "")
{
Fehler
}
else
{
versende Mail
}
Vieleicht hilft Dir noch folgender Link weiter:
http://www.phpcenter.de/faq/faq-mail.html#mail-9
HTH
Nessus
Antwort 2 von thomasn1975
Um zu prüfen, ob eine Variable Daten enthält würde ich lieber die Funktionen isset() und empty() verwenden, da man bei enspr. Konfiguration von PHP eine Warnmeldung im Browserfenster erhält, wenn die zu prüfende Variable nicht definiert wurde.
Sieht halt besser aus, wenn vom Parser keine Meldungen im Browser des Benutzers erscheinen.
Sieht halt besser aus, wenn vom Parser keine Meldungen im Browser des Benutzers erscheinen.
Antwort 3 von Nessus
Hi
natürlich sollte in der Konttrollstruktur eine Anweisung stehen, zb.
include ("./fehler.php");
break;
dann kommt garantiert keine Fehlermeldung vom Parser.
HTH
Nessus
natürlich sollte in der Konttrollstruktur eine Anweisung stehen, zb.
include ("./fehler.php");
break;
dann kommt garantiert keine Fehlermeldung vom Parser.
HTH
Nessus
Antwort 4 von TheHappyJoker
Ich danke euch!
Das mit .htaccess hatte ich auch schon im Hinderkopf, wusste blos nicht wie ich's realisieren soll.
Werde das gleich mal probieren.
<gruß thj>
Das mit .htaccess hatte ich auch schon im Hinderkopf, wusste blos nicht wie ich's realisieren soll.
Werde das gleich mal probieren.
<gruß thj>

