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

Mindestzeit für Formular

tofix

Neues Mitglied
Hallo,
ich bin PHP-Anfänger und habe gerade erfolgreich mein erstes Formular erstellt. Nun möchte ich eine Zeitabfrage einbauen, d.h. wenn jemand weniger als 5 Sek. zum Ausfüllen benötigt, soll die Datei beendet werden. Das funktioniert leider nicht, alle Formulare werden verschickt. Wo ist der Fehler? Oder ist der Ansatz falsch? Das Formularfeld "email" ist übrigens auch eine Spamfalle. Und bitte nicht lästern, bin Anfänger.

Im Formular habe ich Folgendes eingebaut:
HTML:
<input type="hidden" name="uhrzeit" value="<?php echo time(); ?>">

Die PHP-Seite sieht so aus:
PHP:
<?php
if($_POST['email'] != ""){  
die("Das Formular konnte nicht verschickt werden");  
}
elseif($_POST['uhrzeit'] >= (time() - 5)){  
die("Das Formular konnte nicht verschickt werden");  
}  
else {  
$anrede = $_POST["anrede"];
$vorname = $_POST["vorname"];
$name = $_POST["name"];
$firma = $_POST["firma"];
$str = $_POST["str"];
$ort = $_POST["ort"];
$tel = $_POST["tel"];
$from = $_POST["emi"];
$anliegen = $_POST["anliegen"];
$empfaenger = "[email protected]";
$betreff = "Nachricht von $name";
$text = "Anrede: " .$anrede. 
    "
    Vorname: " .$vorname. 
    "
    Name: " .$name.
    "
    Firma: " .$firma. 
    "
    Str: " .$str. 
    "
    Ort: " .$ort. 
    "
    Tel: " .$tel. 
    "
    Mail: " .$from. 
    "
    Mein Anliegen: " .$anliegen;
mail($empfaenger, $betreff, $text, $from); 
echo "<p class=\"dank\">Vielen Dank, <br/>$anrede $name,<br/>ich werde mich bald bei Ihnen melden.<br/><br/>
</p>";
} 
?>

Vielen Dank für Eure Hilfe!
 
PHP:
elseif($_POST['uhrzeit'] >= (time() - 5)){


wird zu


PHP:
elseif((time() - (int)$_POST['uhrzeit']) <= 5)

Bekommst du sonst irgendwelche Meldungen?
 
Danke! Ich habe die Zeile getauscht, aber immer noch kommt alles an. Meldungen bekomme ich keine. Noch eine Idee?
 
Mir ist vorher eingefallen dass die beiden Sachen eh zum gleichen Ziel führen :D
Wollte das noch reineditieren habs dann wohl aber vergessen.

Lass dir mal den Wert aus dem Formular und den aktuellen Wert von time() im Auswertungsskript ausgeben und sag bescheid was dabei rauskommt.
 
Die Formularzeit wird nicht angezeigt, time dagegen schon. Habe ich das richtig gemacht?.
PHP:
 echo $_POST['uhrzeit'];
Woran kann es liegen, dass die Zeit nicht ankommt? Und muß es nicht "uhrzeit" statt 'uhrzeit' heißen (geht aber auch nicht)? Danke für die Mühe!
 
Hallo, ich habe die entsprechenden Zeilen neu eingetippt, jetzt geht alles. Schon komisch, einen Unterschied kann ich nicht erkennen. Vielen Dank für die Antworten und sorry, dass ich eure Zeit für einen Tippfehler verschwendet habe!
 
Nur nochmal eben als Anregung.

if($_POST['email'] != ""){
die(
"Das Formular konnte nicht verschickt werden");
}


Das macht für mich keinen Sinn. Du möchtest ja checken, ob die E-Mail Adresse nicht leer ist. So brichst du immer ab, wenn die E-Mail Adresse eben nicht leer ist, was genau den falschen Effekt haben dürfte.
 
In seinem Fall ist email nur ein Feld für Spambots. Das ist durchaus üblich. Die eigentliche Emailadresse landet in einem anderen input feld.

MfG
 
Die Methode wird auch Honeypot genannt. Ich glaube warum dürfte klar sein ;) Allerdings finde ich "email" als ungünstiges Wort dafür. Ich habe eine Firefox-Erweiterung mit der ich schnell Formulare per Klick ausfülle. Dabei hilft es wenn die Formularfelder eindeutige oder zumindest inhaltlich passende Namen haben. email für E-Mail z.B. Wenn man dann email für den Honeypot nutzt stört es ggfs. auch die Eingabe eines Menschen. Ich verwende in Formularen oft message für Nachrichten und comments für den Honeypot - stört auch die Firefox-Erweiterung nicht weiter. Aber ok, hat nicht jeder Nutzer so etwas ;)
 
Zurück
Oben