Captcha refresh / back button / falscher Eingabe

Hallo Experten,

versuche gerade einen Code zu schreiben, der bei falscher Eingabe eine Code zu schreiben wobei der Capatcha Code neu ladet wenn man den Back Button drückt.
Weiters versuch ich bei falsche Eingabe den Captcha auch wieder neu zu laden und dabei eine Fehlermeldung auszugeben.
Hab mir jetzt schon einige scripts durchgelesen jedoch auch noch nichts brauchbares gefunden.

Wär dankbar wenn mir jemand dabei helfen könnte.

if($image == $_SESSION[‚string‘]){
echo " Great success! \n";
}else {
echo „Failure!\n“;
header( „document.getElementById(‚captcha_iamge‘).src = ‚image.php?‘+Math.random();“);
}}

Lg,
Chris

Moin moin,

Hallo Experten,

versuche gerade einen Code zu schreiben, der bei falscher
Eingabe eine Code zu schreiben wobei der Capatcha Code neu
ladet wenn man den Back Button drückt.

Du hast schon ein captcha generator ?

Weiters versuch ich bei falsche Eingabe den Captcha auch
wieder neu zu laden und dabei eine Fehlermeldung auszugeben.
Hab mir jetzt schon einige scripts durchgelesen jedoch auch
noch nichts brauchbares gefunden.

Du meinst ein fertiges captcha , leicht zu bedienen ?

Wär dankbar wenn mir jemand dabei helfen könnte.

Woher ist den der Code ?
was soll den $image sein und wie ergibt sich $_SESSION[‚string‘] ?

if($image == $_SESSION[‚string‘]){
echo " Great success! \n";
}else {
echo „Failure!\n“;

Woher kommt die head(‚docuement…‘) zeile ? Dein einfall ?

header( "document.getElementById(‚captcha_iamge‘).src =

Was macht image.php ?`oder ist das gar dieselbe datei ?

‚image.php?‘+Math.random();");
}}

Also im schnelldurchlauf

<?php /* test.html datei , beispiel einbinden captcha */
?\><?php include 'captcha.php'; ?> This is the Protected Stuff <?php /* captcha.php */
/\* simple captcha by Thomas Punkt. \*/ /\* session starten \*/ session\_start(); $content = false; if (isset($\_POST['captcha'])) { if (isset($\_SESSION['captcha'])) { if ($\_POST['captcha'] == $\_SESSION['captcha']) { $content = true; } else { $fehler = "Captcha wurde nicht gelöst"; } } else { $fehler = "Es gibt noch kein Captcha"; } } else { $fehler = "Bitte Lösen sie das Captcha"; } $\_SESSION['captcha'] = substr(md5(time()),5,4); if (!$content) { /\* wird ausgeführt wenn captcha noch nicht gelöst \*/ ?\> <?php echo $fehler; ?>

neu laden ->
captcha :

<?php exit;
} else { /\* hier kann man sachen ausführen die bei gelösten captcha gemacht werden sollen \*/ } ?\><?php /* captcha-img.php */
session\_start(); /\* daten gesetzt von captcha.php \*/ if (!isset($\_SESSION['captcha'])) {exit;} /\* make image with session captcha string \*/ // Erzeugt ein neues Bild $im = imagecreatetruecolor(50, 50); // Den Hintergrund weiß machen imagefilledrectangle($im, 0, 0, 50, 50, 0x339966); // Einen Text im Bild ausgeben imagestring($im, 3, 10, 20, $\_SESSION['captcha'] , 0xFFBA00); // Das Bild an den Browser ausgeben header('Content-type: image/gif'); imagegif($im); imagedestroy($im); ?\> irgendwelche fragen ?

Hallo Thomas,

danke, ja funktioniert prima.
War leicht zum verstehen und sehr hilfreich.

Jetzt ist nur noch die Frage wie man das Formular automatisch absenden kann.
JS bietet die Lsg an: document.Form.submit();
aber ist die sicher?
Da diese ja nicht Serverseitig, also nicht durch php durchgeführt wird.
Oder gibt es dafür auch eine php Lsg?

AW zu deinen Fragen:
Du hast schon ein captcha generator ?
Ja hab ich gehabt.

$image war der captcha code und
php head wollte ich verwenden um den Code mit Bild nochmals neu zu laden.

Lg,
Chris

Moin moin,

Jetzt ist nur noch die Frage wie man das Formular automatisch
absenden kann.
JS bietet die Lsg an: document.Form.submit();
aber ist die sicher?

Was soll automatisch abgesendet werden ?
Wenn 5 zeichen benötigt dann nach dem 5 zeichen senden ?
Was soll das den werden ?

aber da es auf dem Client passiert ist das was für JavaScript , sprich anderes Forum Brett.

Hallo Thomas,

ich möchte anschließend nach dem der Captcha korrekt ausgefüllt ist ein Formular absenden.
Bis jetzt hab ich zum Abschicken nur einen JavaScript code gefunden.

Allerdings würde ich das Formular lieber in php abschicken, nachdem der Captcha richtig eingegeben wurde.

Gibt es zum Abschicken nachdem Captcha eine Möglichkeit in php?

Lg,
Chris

Sorry , aber was willst du eigentlich machen.

Was soll das ganze werden ? ein captcha for ein externes mail formular ?

Wofür das Captcha wenn danach ein formular im Client gesendet wird.
Ich meine , wenn einer bastelt, kann er ja selber sein unsin senden und brauch kein captcha mehr . Er brauch nur einmla das Formular.

z.b. mit einem
http://www.jonasjohn.de/snippets/php/post-request.htm

könntest du via php deine zeug an ein php schicken und die antwort abfangen.

das zeug kommt dann in den else zweig also

bei

} else {
 /\* hier kann man sachen ausführen die bei gelösten captcha gemacht werden sollen \*/
}

Hallo Thomas,

danke für deine Antwort.
Also ich hab drei unterschiedliche Formulare auf einer Seite, welche ich anschließend individuell an eine andere Seite schicken möchte.
In der zweiten Seite steht dann der SQL Code welcher die Daten einfügt.
Pro Formular gibt es ein Captcha.

Der Captcha und eine weitere Sicherheitsfrage sollen das System sicher machen.
Allerdings weiß ich nicht ob das gscheit ist, dass man die Werte von einer Seite zur nächsten leitet und diese dann dort einfügt?

oder muss man hier:
} else {
/* hier kann man sachen ausführen die bei gelösten captcha gemacht werden sollen */
}
die SQL Befehle auführen?

Lg,
Chris

hmm , was soll der sin der 3 formulare sein ?
warum soll zwischen jedes formular ein captcha ?

ist ein captcha gelöst durch ein hack dann helfen auch keine 1000 captcha :smile:

Warum 3 Formulare ? sind die von anderen gemachte ?

Oder willst du eine Eingabe machen , die dann aus 3 Formlarblättern sich zusammensetz.

Also z.b. Profildaten, Adressdaten , Bestelldaten .

Ein captcha soll ja nur das einmalige prüfen ob ein mensch vorhanden ist kontrollieren.

Wenn du deine Daten zwischen speichern willst bis zum ende ,dann machst du das mit

start_session()

und dann schreibst du in
$_SESSION[‚deinevariablenname‘] = deinevariablenstruktur ;

immer wenn der gleiche user die seite aufruft wo start_session() drinne ist, dann kannst du mit $_SESSION[‚deinevariablenname‘] wieder auf den inhalt zugreifen.

Also nehmen wir folgende situation an

profildaten.php (stell dir das formular dazu einfach mal vor)

start\_session() 
if (isset($\_POST['profil'])) {
 $\_SESSION['profileingabe'] = $\_POST['profil'];
}

Bestelldaten.php (stell dir das formular dazu einfach mal vor)

start\_session()
if (isset($\_POST['artikel'])) {
 $\_SESSION['artikel'] = array('name'=\> $\_POST['artikelname'],
 'anzahl' =\> $\_POST['artikelanzahl']);
}

Lieferdaten.php

start\_session()
if (isset($\_POST['lieferadresse'])) {
 $\_SESSION['lieferung'] = array('strasse'=\> $\_POST['strasse'],
 'ort' =\> $\_POST['ort']);
 $\_SESSION['datensenden'] = true;
}

und dann entweder so …

captcha.php

start\_session()
..
..
..
} else {
 /\* hier kann man sachen ausführen die bei gelösten captcha gemacht werden sollen \*/
 // z.b. das entgültige in die datenbank schreiben
 // werte wie oben gesetzt aus session verwenden
 // $\_SESSION['artikel']['name'] 
 // $\_SESSION['artikel']['anzahl']
} 

oder so / oder beides

bestellung.php

<?php /* html datei , beispiel einbinden captcha */
?\><?php include 'captcha.php';
// will man hier auf $\_SESSION zugreifen, braucht es sein start\_session(); // aber dann kannst du hier auch dein SQL und oder eine Ausgabe machen . ?\> Danke Für Ihre Eingaben . Besuchen sie und doch nie wieder :smile:

und dann entweder so …

captcha.php

start_session()



} else {
/* hier kann man sachen ausführen die bei gelösten captcha
gemacht werden sollen */

if (isset($_SESSION[‚datensenden‘])) {
if ($_SESSION[‚datensenden‘]) {

// z.b. das entgültige in die datenbank schreiben
// werte wie oben gesetzt aus session verwenden
// $_SESSION[‚artikel‘][‚name‘]
// $_SESSION[‚artikel‘][‚anzahl‘]

}
}

}

oder so / oder beides

bestellung.php

<?php :/* html datei , beispiel einbinden captcha */
?\> <?php include 'captcha.php';
// will man hier auf $\_SESSION zugreifen, braucht es sein start\_session(); // aber dann kannst du hier auch dein SQL und oder eine Ausgabe machen .

if (isset($_SESSION[‚datensenden‘])) {
if ($_SESSION[‚datensenden‘]) {

?>
Danke Für Ihre Eingaben . Besuchen sie und doch nie wieder

-)

<?php } else {
?\> Daten können nicht gesendet werden <?php }
} > ein bissel korrikiert

Guten Morgen,

danke jetzt hab ich´s verstanden. Session oder SQL.
Dann werde ich es so machen. :wink:

Danke.

Es sind drei Formulare, da diese unterschiedliche Zusammenhänge haben und ich nicht für jedes Formular einen neue Seite erstellen wollte.

Lg,
Chris

Hallo Thomas,

eine Frage noch.
Ich würde gerne eine Zeitbeschränkung in das Captcha einbauen, da ich gehört habe, dass Robots ein Formular innerhalb von Millisekunden ausfüllen kann.

Daher würde ich gern eine Funktion einbinden:
z.B.: wenn das Formular ausfüllen unter 3 Sekunden dauert, wird es nicht abgesendet.

Wie bzw. wo kann ich das einfügen?

Lg,
Chris

Wenn du drei formulare auf der selben seite hast ,

brauchst du eine variable für den zustand der einzelnen formen.
Ich weiss ja nicht ob die unabhängig voneinenader sind oder aufbauend .

<?php $_SESSION['formstatus'] (
1=\>array("edit"=\>true,"komplett"=\>false ), 2=\>array("edit"=\>true,"komplett"=\>false ), 3=\>array("edit"=\>true,"komplett"=\>false ) ); if ($\_GET['formnr']) { if ( checkformulareingaben($\_GET['formnr']) ) { $\_SESSION['formstatus'][$\_POST['formnr']]['edit'] = false; $\_SESSION['formstatus'][$\_POST['formnr']]['komplett'] = treu; } } $\_SESSION['formsfertig'] = true; foreach ( $\_SESSION['formstatus'] as $aform) { if (!$aform['komplett']) {$\_SESSION['formsfertig'] = false ;} } ?\> . . . <?php if ( $_SESSION['formsfertig'] ) {
// hier z.b. das captcha include('chaptcha.php'); } else { // hier die FORMULARE beispiel ?\> Beispiel <?php echo $errors[1]['beispiel'];?>

Einspiel <?php echo $errors[2]['einspiel'];?>

<?php }
} alles nur beispiele . im captcha kannst du auch den exit befehl entfernen , wenn du hier die ausgabe entsprechend der gestzen $\_SESSION variable überprüfst etc.

ups schreibfehler

treu; soll true; sein :smile:

Time Prinzip :

wir speichern bei aufruf des captchas in einer session die aktuelle zeit + random 1…3 secunden.

beim lösen prüft man ob die aktuelle zeit grösser als die zeit in der session ist , wenn ja , ok , wenn nein , setzt man die session variable wieder 1 bis 3 sekunden in die zukunft, weil ist ja fehler somit neueingabe :smile:

wenn du lustig bist kannst du noch javascript basteln was die verzögerung anzeigt . also einfach ein countdown im submit button .

<?php :blush:_SESSION['formstatus'] (
1=\>array("edit"=\>true,"komplett"=\>false ), 2=\>array("edit"=\>true,"komplett"=\>false ), 3=\>array("edit"=\>true,"komplett"=\>false ) );

das obere darf natürlich nur einmal initalisert werden , oder man macht immer eine komplett prüfung aller daten .

somit is auch checkformulareingaben($_GET[‚formnr‘]) ein funktion die du basteln musst, die dann die werte für form[1…3] und errors[1…3] setzt.

if ($_GET[‚formnr‘]) {
if ( checkformulareingaben($_GET[‚formnr‘]) ) {
$_SESSION[‚formstatus‘][$_POST[‚formnr‘]][‚edit‘] = false;
$_SESSION[‚formstatus‘][$_POST[‚formnr‘]][‚komplett‘] = treu;
}
}

Und ein kleiner syntax fehler

<?php ::blush:_SESSION['formstatus'] = array(

aber ist eh alles ungetestet …

Hallo Thomas,

danke für die ganzen Erklärungen.
Die haben ganz gut geholfen.
Hab jetzt auch schon die Sicherung mit der Zeitverzögerung eingefügt und sie funktioniert.

Jedoch ist die Zeitverzögerung, da ich sie beim image eingebaut habe immer nur davon abhängig wie lange es dauert den Captcha einzugeben.
Ist das ausreichend zum Unterscheiden zwischen Robot und Mensch, oder is es besser die Zeitverzögung für das ganze Formular zu machen?
Ist das möglich?

Lg,
Chris