PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   Captcha neuladen (http://www.selfphp.de/forum/showthread.php?t=16986)

einsteigi 10.06.2007 01:14:01

Captcha neuladen
 
Hallo,
will das Captcha von http://selfphp.de/kochbuch/kochbuch.php?code=22 verwenden. Leider ist es aufgund des Farbverlaufs jedoch manchmal nicht möglich, die richtige BuchstabenZahlen-Folge eingegeben zu können. Deshalb möchte ich innerhalb der Skriptes über einen Link es ermöglichen, ein neues Captcha erzeugen zu können.
Hat jemand schon sowas programmiert, dann wäre ich über den Code dankbar. Wenn nicht, wie ist das zu programmieren? Es soll nur ein neues Bild geladen werden, keine neue Seite.

Das Skript erzeugt ja ein neues Captcha, wenn die Eingabe richtig ist wird der Dateiname zu dem Captchabild genommen und in captchadir die betreffende Datei gelöst. Nur was ist wenn der User einfach den Browser schließt, sprich er öffnet der Formular und dann geht er offline.

Cronjobs habe ich nicht zur Verfügung. Wie lösche ich Captcha die nicht eingeben wurden, habe gestern, captcha_demo.php ausprobiert, also Captchas eingegeben und heute hab ich in captchadir nachgesehen und musste feststellen, das sehr viele Bilder dort waren, habe diese dann gelöscht. Doch ich will bestimmt nicht wöchentlich einmal die Dateien in cptchadir löschen, wie erledigt das php für mich?

MatMel 10.06.2007 12:28:51

AW: Captcha neuladen
 
Zitat:

[...] Es soll nur ein neues Bild geladen werden, keine neue Seite.
Das wird nur mit php ohne weiteres nicht möglich sein. Denn php läuft ja nur auf dem Server und wenn du keine Seite neulädst kriegt der reichlich wenig davon mit was der User macht.

Was ich mir vorstellen könnte wäre, dass du das captcha in einen iframe reinmachst und dann nur den iframe neu lädst. Probleme dabei sind einmal, dass iframes ziemlich uncool sind und außerdem wird das prüfen, ob der User das captcha richtig eingegeben hat etwas schwerer, da ja das captcha und die Überprüfung auf zwei verschiedenen Seiten liegen.

Als andere Lösung könntest du Ajax benutzen. Da wird dann per javascript ein neuer Request an den Server gesandt, sodass man nicht neu laden muss. Kenn ich mich leider gar nicht mit aus ;)

Das mit dem Löschen würde ich direkt nach einer positiven Überprüfung der Usereingabe machen, denn dann brauchst du ja das Bild nicht mehr.
Allerdings kenne ich das Script leider nicht und weiß nicht genau wie man das in dem Fall jetzt einbauen muss.

Nachtrag: Ich hab mir das Script kurz angeschaut. Wie es aussieht löscht das Script automatisch bei jeden Checken alle Bilder, die älter als zehn Minuten sind. Du hattest es also wahrscheinlich einfach ziemlich oft ausprobiert innerhalb der zehn Minuten, was dann dazu geführt hat, dass der Ordner ziemlich voll war...

armybean 23.06.2007 10:31:36

AW: Captcha neuladen
 
Mich würde das auch interessieren, da wie "einsteigi" schon sagte, die Zeichen-Kombination manchmal schlecht zu lesen ist. Ich will aber nicht die komplette Seite neu laden. Mit Javascript würde es gehen, bloß kann ich damit ja keine MD5-Hash erstellen, da Javascript keine MD5-Funktion kennt, oder?

deedee 09.09.2007 13:40:07

AW: Captcha neuladen
 
@armybean - javascript kan auch md5 - http://pajhome.org.uk/crypt/md5/index.html

Arbeite selbst lieber mit session basierte captcha's die keine images files schreiben auf das server systeem - auch ein refresh is mit javascript so einfacher da die session captcha beim image refresh auch geandert wird

sysop 09.09.2007 13:53:00

AW: Captcha neuladen
 
mit unlink().
vor dem aufruf des captchas kannst du das ganze directory nach files durchsuchen, löschen und dann dein enues bild erstellen.

und warum stellst du keine anderen farbwerte für den farbverlauf ein ?

armybean 09.09.2007 15:19:29

AW: Captcha neuladen
 
Vielen Dank für die Infos. Kann einer von euch vielleicht mal den Code für so einen Reload erstellen und posten?

deedee 09.09.2007 18:53:26

AW: Captcha neuladen
 
Kanst es mal so versuchen, macht aber noch keines neues hash ins formular, when du das wilst kanst du mit dem javascript md5 mit date und time ein neues hash generieren in dein form und fur die GET werte fur das bild bei dem refresh durch javascript

<script language="javascript" type="text/javascript"><!--
function captchaNew() {
if (document.images['captchaimg']) {
document.images['captchaimg'].src = "captcha.php?codeCaptcha=" + document.forms['CaptchaForm'].codeCaptcha.value;
}
}
//--></script>
<form name="CaptchaForm" method="post" action="">
<!-- Captcha Begin -->
<?php $codeCaptcha = md5(microtime()); ?>
<a href="javascript:captchaNew();void(0);"><img src="captcha.php?codeCaptcha=<?php echo $codeCaptcha; ?>" name="captchaimg" border="0"></a>
<br>
<input type="hidden" name="codeCaptcha" value="<?php echo $codeCaptcha; ?>">
<input type="text" name="stringCaptcha">
<!-- Captcha End -->
<p><input type="submit" name="Submit" value="Wert prüfen"></p>
</form>

Edit: mit md5

<script language="javascript" type="text/javascript"><!--
function captchaNew() {
var d = new Date();
str = d.getTime();
// Mit dem md5.js from http://pajhome.org.uk/crypt/md5/md5src.html
hash = hex_md5("'" + str + "'");
document.forms['CaptchaForm'].codeCaptcha.value = hash;
if (document.images['captchaimg']) {
document.images['captchaimg'].src = "captcha.php?codeCaptcha=" + hash;
}
}
//--></script>

armybean 09.09.2007 21:46:51

AW: Captcha neuladen
 
danke schon mal. werde es in den nächsten tagen mal testen


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:57:11 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.