Captcha / Sicherheitsfrage Fehler
jaroni
- php
0 dedlfix
Hallo Wissende! Auf einer PHP Seite (Formular als Anfragemöglichkeit) wurde eine Sicherheitsfrage eingebaut. Die Seite baut auch bei jedem neuem Aufruf korrekterweise eine neue Grafik auf (einfach 4 Ziffern), die man dann in das Feld darunter eintippen muss. So weit so gut, nur, dass jedes Mal eine Fehlermeldung behauptet, die Sicherheitsabfrage wäre falsch beantwortet und somit lässt sich das Formular nicht abschicken. Woran könnte das liegen? Hat Jemand eine Idee? Die Seite baut auf 3 Elementen auf, index.php, anfrage.html + config.php. Die das Captcha betreffenden Zeilen in obiger Reihenfolge:
// Soll die Sicherheitsabfrage validiert werden
if(array_key_exists("securitybox",$pflichtfelder) && $key == 'securitybox')
{
if($_SESSION['securitybox'] != $_POST['securitybox'] || empty($_POST['securitybox'])){
$form->setFormularFehler('securitybox');
$errorMsg[$key] = $pflichtfelder['securitybox'];
}
}
<tr>
<td colspan="3" bgcolor="#F5F9FC" class="dick">Sicherheitsabfrage</td>
</tr>
<tr>
<td valign="middle" bgcolor="#F5F9FC" class="hilfstext">Keyword * </td>
<td width="206" valign="top" bgcolor="#F5F9FC" class="hilfstext"><img src="randomimage.php" alt="Captcha" /></td>
<td width="237" valign="top" bgcolor="#F5F9FC" class="hilfstext"> </td>
</tr>
<tr>
<td valign="top" bgcolor="#F5F9FC" class="hilfstext">Wiederholen * </td>
<td colspan="2" valign="top" bgcolor="#F5F9FC" class="hilfstext"><input class="{[class_securitybox]}" name="securitybox" type="text" id="securitybox" size="12" />
<div align="left"></div></td>
</tr>
/**
*Einstellungen der Captcha Zeichenlänge und Zeichen
*@var int CAPTCHA_LENGTH Captcha Länge in Zeichen
*/
define("CAPTCHA_LENGTH",4);
/**
*Captcha Modus - dieser bestimmt ob Zahlen,
*@var string CAPTCHA_MODUS MIXED , ALPHA , NUMERIC
*/
define("CAPTCHA_MODUS","NUMERIC");
?>
Hi!
So weit so gut, nur, dass jedes Mal eine Fehlermeldung behauptet, die Sicherheitsabfrage wäre falsch beantwortet und somit lässt sich das Formular nicht abschicken. Woran könnte das liegen? Hat Jemand eine Idee?
Wie üblich, wenn Wunsch und Wirklichkeit nicht übereinstimmen, muss man mit Debugging die Ursache ermitteln. Um die Stelle mit dem Fehler zu finden, lass dir alle relevanten Variableninhalte mit var_dump() anzeigen und prüfe, ob sie deinen Vorstellungen entsprechen. Ebenfalls hilfreich ist, das error_reporting auf E_ALL (und display_errors auf on) zu stellen, damit man Zugriffe auf nicht vorhandene Variablen zu sehen bekommt.
if(array_key_exists("securitybox",$pflichtfelder) && $key == 'securitybox')
Wie soll das ein Außenstehender nachvollziehen können, wenn du anscheinend mitten aus dem Code zitierst. Was ist (in) $pflichtfelder und $key?
if($_SESSION['securitybox'] != $_POST['securitybox'] || empty($_POST['securitybox'])){
Es wäre sinnfoll, zuerst empty($_POST['securitybox']) zu testen, denn wenn $_POST['securitybox'] nicht vorhanden ist, erzeugt der erste Vergleich bereits eine Notice-Meldung. empty() und isset() testen stillschweigend auch nicht vorhandene Variablen.
Lo!