• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP - Formular überprüfen und per Mail versenden

Hallo-Welt

Aktives Mitglied
Guten Abend,

Ich sitze grade vor einem PHP-Scribt und bin am Verzweifeln. Eigentlich sollte das Scribt die Eingabe aus dem vorigen Dokument überprüfen, ob auch wirklich etwas eingegeben wurde. Wenn Nein, soll eine Weiterleitung erfolgen. Wenn ja, soll das Formular versendet werden und ebenfalls eine Weiterleitung erfolgen. Das Problem ist nur, dass die Mail ob mit oder ohne Eingabe Versendet wird, nie weitergeleitet wird und in der Mail das jeweilige HTML-Dokument steht, an das das Scribt hätte weiterleiten sollen, nicht aber das Formular. Es funktioniert also so gut wie gar nichts. Und ich finde einfach keinen Fehler:

PHP:
<?php
$recipient = "[email protected]";
$fmtResponse= implode("", file("response.html"));
$fmtMail= implode("", file("mail.html"));
foreach($_POST as $key=> $val) {
$fmtResponse= str_replace("<$key>", $val, $fmtResponse);
$fmtMail= str_replace("<$key>", $val, $fmtMail);
}
if ($_POST["access"] == "check") {
mail($recipient, $_POST["subject"], $fmtMail);
}
echo $fmtResponse;
?>

Der Wert "check" mit dem Namen "access" (wie auch "subject" ist im Vorherigen HTML-Dokument natürlich eingegeben worden. Der Punkt funktioniert ja auch. Der ganze Rest ist allerdings irgendwie verdreht. Was hab ich falsch gemacht?
 
Wieso prüfst Du nicht, ob $_POST überhaupt gesetzt ist? Das ist ein Sicherheitsrisiko.
Ebenso kritisch ist wie Du die $_POST-Einträge übernimmst um die Mail zu verschicken - ohne jede weitere Prüfung. Ebenfalls ein Sicherheitsrisiko.
Wieso verwendest Du noch mail()? Diese Funktion ist bekanntlich unsicher. Ich würde dir zu phpmailer als Alternative raten.
Und wo soll da eine Weiterleitung sein?
 
So dann?

PHP:
<?php
$recipient = "[email protected]";
$fmtResponse= implode("", file("response.html"));
$fmtMail= implode("", file("mail.html"));
foreach($_GET as $key=> $val) {
$fmtResponse= str_replace("<$key>", $val, $fmtResponse);
$fmtMail= str_replace("<$key>", $val, $fmtMail);
}
if ($_GET["access"] == "check") {
phpmailer($recipient, $_GET["subject"], $fmtMail);
}
echo $fmtResponse;
?>

So geht es dann aber immer noch nicht. Die Sicherheit spielt auch relativ wenig Rolle. Ich wäre schon froh, wenn es überhaupt gehen würde. Ich hab igendetwas vertauscht, nur was?
 
Hallo,

ne, wenn ein unbekanntes wort hörst, nicht einfach einfügen sondern vielleicht mal schauen was das bedeuten könnte :O)
PHPMailer ist eine class die einbinden musst: Worx International Inc.

das mail nicht funktioniert kann mehrere grunde haben zb das hoster das blockt, das kann man aber so generel nicht sehen sondern nur testen.

Cheffchen
 
Ist nett gemeint, aber eigentlich will ich meinen Scribt ja nicht sicherer machen, sondern meinen Fehler finden...
 
Hallo,
aber eigentlich will ich meinen Scribt ja nicht sicherer machen, sondern meinen Fehler finden.
rate mal was das war
das mail nicht funktioniert kann mehrere grunde haben zb das hoster das blockt, das kann man aber so generel nicht sehen sondern nur testen.

füge doch einfach mal das hier ein, natürlich mit deiner E-Mail-Adresse.
PHP:
<?php
// Die Nachricht
$nachricht = "Zeile 1\Zeile 2\Zeile 3";

// Falls eine Zeile der Nachricht mehr als 70 Zeichen enthälten könnte,
// sollte wordwrap() benutzt werden
$nachricht = wordwrap($nachricht, 70);

// Send
mail('[email protected]', 'Mein Betreff', $nachricht);
?>
funzt das nicht, dann hast entweder billig Provider oder billig Postfach oder guten Spamschutz.
such dir dann was aus :O)

Cheffchen
 
Hallo,

äh, weitergeleitet?
was fehlt am script?

füge das mal einfach ein und ruf die Seite auf, um zu testen ob mail überhaupt funzt? wenn ja bekommst ein E-Mail, wenn nicht such dir ein möglichkeit von oben.

Cheffchen
 
Zurück
Oben