Formmailer lädt nur 1x

OsunSeyi

Grünschnabel
,nach dem Verschicken kommt man nicht wieder auf's Formular zurück:
Der Browser findet die Seite, stellt aber nichts dar:

URL: http://okonfo-rao-kawawa.de/mail/kontakt.php
Typ: text/html Anzeigemodus:
Kompatibilitätsmodus (Quirks)
Quelle: Festplatten-Cache
Kodierung: ISO-8859-1 Größe: 0 KB (0 Bytes) *
Verweisende URL:
http://okonfo-rao-kawawa.de/formfrm.htm

*...wie das

Bin nicht gerade geübt in php, darum nachfolgend auch noch eine Zusammenfassung von dem ganzen Script:


Wer sich das antun mag, vielen Dank im voraus !!


<?php
// SPAMSCHUTZ:
if (! isset($_SESSION['spZ']) && isset($PHPSESSID))
{ exit(); echo "Spamschutz aktiv (1)"; }
else session_start();
$_SESSION['spZ']=time();

// Formular:
?>
<html>
<head><title>...</title></head><body>
<form method="post" action="mailer1.php?<?=SID?>">
.....Formular

<input type="submit" value="abschicken">
<input type="reset" value="neu">
<input type=button name="fenster" value="schließen"
onClick="JavaScript:self.close()">

</form></body></html>

.....AUSWERTUNG:

<?php
session_start() // SPAMSCHUTZ:

$spT = 5;//Mindestzeit (sec)
$spX = 5;//max. Anzahl (pro Browsersitzung)
$spD = time() - $_SESSION['spZ'];
if ($spD < $spT) {
echo "Spamschutz aktiv (2) !<br>"; exit(); }
if (! isset($_SESSION['spZ'])) {
echo "Spamschutz aktiv (3) !<br>"; exit(); }
$_SESSION['Ein']++;
if ($_SESSION['Ein'] > $spX ) {
echo "Spamschutz aktiv (4) !<br>"; exit(); }

//FORMULAR-FELDER:
.....(Variablenzuweisung)
//ZEICHENFILTER:
$text = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $text );
$text = trim($text);

//FEHLERMELDUNGEN:
$FEHLER = "";
if (empty($to)) $FEHLER .= "<li>Der Adressat fehlt</li>";
.....usw
// ADRESSAT auswerten:
switch ($to)
.....usw
// NACHRICHT:
if (empty($FEHLER))
.....usw
// MAIL:
mail($AN,$betr,$AUSG,$FROM);
$TITEL = "Nachricht abgeschickt !";
}
else $TITEL = "Nachricht nicht abgeschickt !";
// ANTWORT:
?>
<html><head><title><?=$TITEL?></title>
</head><body>

<?php
if (empty($FEHLER))
{
echo "<p>Ihre Nachricht konnte versandt werden:";
echo "<p>Ihre Nachricht konnte nicht versandt werden:";
usw...usw...usw
echo "<ul>$FEHLER</ul>";
echo "</p>"; }

?>
<a href="" onClick="JavaScript:self.close()">Schlie&szlig;en</a>

</body></html>

.....that's it....
 
Funktioniert es ohne diesen Spamschutz Könntest du den code nächstes mal in ein [ PHP] [ /PHP] setzen. Dann ließt sich das ganze schon viel besser. Schau an was das ganze weitergeleitet wird.

Und man sollte das ganze in die PHP Sektion verschieben.

hast du an dem code selbst gekürtzt (.....usw) das ist nicht wirklich hilfreich
 
Zuletzt bearbeitet:
hi franzspam !

Will meine Frage nochmal neu stellen, da jetzt wohl klar ist, woran es zumindest nicht liegt.
Also neu:
Habe einen Anti-Spam-Schutz in einen Formmailer eingebaut, der verhindern soll, daß während einer Sitzung das Script mehr als 5x aufgerufen wird und in kürzerer Zeit als 5 sec ausgefüllt wird.
Seit das Script beim Provider liegt, lässt es sich nur 1x aufrufen und danach nicht mehr. Das Session-Cookie kommt bei mir an (Lynx fragt nach, ob man es auch haben will).
Ohne den Timeout- Spamschutz funktioniert der Formmailer !

Gruß, Tom

FORMULAR:
PHP:
<?php

// SPAMSCHUTZ:
 if (! isset($_SESSION['spam']) && isset($PHPSESSID))
 { exit(); echo "Spamschutz aktiv (1)"; }

 else session_start();
 $_SESSION['spam']=time();
?>
Formular:

<html>
<head> <title>Nachrichtenformular</title> </head>
<body>
<form method="post" action="mailer1.php? <?=SID?> ">
<input name=....usw
</form>
</body></html>

........................................
AUSWERTUNG.php
PHP:
<?php
session_start();

// SPAMSCHUTZ:

$zeit = 5; // Mindestzeit (sec)
$anzahl = 5; // max. Anzahl (pro Browsersitzung)
$time = time() - $_SESSION['spam'];

if ($time < $zeit) {
echo "Spamschutz aktiv (2) !<br>";
exit(); }

if (! isset($_SESSION['spam'])) {
echo "Spamschutz aktiv (3) !<br>";
exit(); }

$_SESSION['Ein']++;

if ($_SESSION['Ein'] > $anzahl ) {
echo "Spamschutz aktiv (4) !<br>"; exit(); }

//FORMULAR-FELDER:
...hier werden die im Formular eingetragenen Werte erfasst...
usw
NACHRICHT:

 if (empty($FEHLER){
 mail($...);
 $TITEL = "Erfolg";
 }
 else $TITEL = "Fehler";
?>
ANTWORT:

<html>
<head> <title> <?=$TITEL?> </title>
</head><body>

<?php
if (empty($FEHLER))
echo "<p>Ihre Nachricht wurde versandt:" }
else
{ echo "Ihre Nachricht konnte nicht versandt werden:"; }
?>

</body></html>

...wie gesagt, das Formular und die Antwort sind so, wie sie hier jetzt stehen natürlich nicht schlüssig, aber das, was den Fehler zu enthalten scheint (Session) ist vollständig wiedergegeben. Insbesondere verstehe ich nicht, warum das bei mir (Linux / Apache) funktioniert aber eben nicht beim Provider.
 
Zuletzt bearbeitet:
Also -
habe mitterweile herausgefunden, daß (abgesehen von der falschen Reihenfolge bei
{ exit(); echo "Spamschutz aktiv (1)"; })
die Variable "$_SESSION['spam']" erst nach "session_start()" überhaupt zur Verfügung steht. Bei mir zu Hause fällt das nicht weiter auf, wegen einer Einstellung "session.auto_start". Ich gebe das hier so wieder, wie es mir erklährt wurde...
Möchte aber trotzdem nochmal aus dem Text zitieren, aus dem der Spamschutz abgeschrieben wurde:
"Bei einem ehrlicher Benutzer sind beim ersten Aufruf des Formulars weder Timestamp noch Session-ID vorhanden. Ruft er das Formular erneut auf, ist beides da. Ein manipulierter Aufruf ist also daran zu erkennen, dass zwar eine Session-ID vorhanden ist, aber kein Zeitstempel. Ein Spammer könnte dem Server nämlich eine gefälschte Session-ID unterschieben. Er kann dazu eine beliebige Fake-ID nur an den Link des Formulars anhängen:
Code:
http://server/php/formular.php?PHPSESSID=fake
Der Server legt dann für die gefälschte Session einen gültigen Zeitstempel an."
Soweit also dazu ...
Da ich das Ganze aber nur zu 80% (sigh!) verstanden habe, bin ich nach wie vor für jedes Statement dankbar!
Gruß, TomOsunSeyi
 
Zurück