Fehlermeldung: call to a member function...

Necro_nomicon

Erfahrenes Mitglied
Hallo!

Ich habe versucht bei meinem Formular ein opensource captcha hinzuzufuegen.
Die Zahlen werden auch korrekt dargestellt, jedoch bekomme ich nach dem ausfuellen des Formulars folgende Fehlermeldung:

Call to a member function check() on a non-object in line....

Im Kontakt.php habe ich nun am Anfang der Datei folgenden Code:
HTML:
<?php







				require_once $_SERVER['DOCUMENT_ROOT'] . "/captcha/securimage.php";

				$securimage = new Securimage();

			





// include die Formularvalidierungsdatei



include ("form_validation.php");







if ($_POST['gesendet']){



    $vorname = $_POST['vorname'];



    $nachname = $_POST['nachname'];



    $email = $_POST['email'];



    $nachricht = $_POST['nachricht'];


und weiter unten:
HTML:
// CAPTCHA

	$gueltig = verifiziereCaptcha ($captcha);

	if (!$gueltig) {

		$fehler_nachricht[]="Bitte Captcha neu eingeben";

	}

Muesste ich hier statt $captcha vielleicht das $securiamge reingeben?



Und noch weiter unten in der Kontakt.php beim HTML....

HTML:
<!-- CAPTCHA -->

						<img id="captcha" src="captcha/securimage_show.php" alt="CAPTCHA Image">

						<input type="text" name="captcha_code_sub" size="4" maxlength="4"><?php echo $captcha ?>




In der form_validation.php steht es wie folgt:

HTML:
function verifiziereCaptcha ($testString) {

			

			// if ($securimage ($testString)) == false) {

			if ($securimage->check($_POST['captcha_code_sub']) == false) {

				// the code was incorrect

				return 1;

				}

			else {

				return 0;

			}

		}
 
Bei der Fehlermeldung steht auch eine Zeilenummer

Call to a member function check() on a non-object in line....

Was steht in dieser Zeile? Und in den 5 Zeilen davor und danach?
 
Die Fehlermeldung ist:
in form_validation.php Zeile 81

HTML:
function verifizierteTelefon ($testString) {



    if (eregi('^([[:digit:]]| |-)+$', $testString)) {



        return 1;



        }



    else {



        return 0;



        }



    }



// captcha

function verifiziereCaptcha ($testString) {

			

			// if ($securimage ($testString)) == false) {

			if ($securimage->check($_POST['captcha_code_sub']) == false) {

				// the code was incorrect

				return 1;

				}

			else {

				return 0;

			}

		}

?>

Zeile 81 ist davon:
HTML:
if ($securimage->check($_POST['captcha_code_sub']) == false) {
 
$securimage ist wahrscheinlich in der funktion nicht bekannt (Gültigkeitsbereich).
Häng mal vor die Zeile 81 die folgende Zeile
PHP:
global $securimage;


Nachtrag:
Natürlich ist global grundsätzlich unschön und man sollte das anders machen. Wenns aber mit dem global geht, dann mach dich mal über Güötigkeitsbereiche innerhalb Funktionen und Klassen schlau um herauszufinden wie das Objekt $securimage am besten in die Funktion kriegst.
 
Zuletzt bearbeitet:
Ist die Klasse initialisiert Sehe da nirgendswo, bitte mehr Code :)

// edit: Da war wohl wer schneller :)
 
Zuletzt bearbeitet:
Habe nun das global $securimage; vor die Zeile 81 gesetzt.

Die Fehlermeldung ist nun weg. Ich bekommen nun nur mehr den teilweise gewuesnchten Text, dass man das captcha neu eingeben soll.
Allerdings passiert das nun auch, wenn ich die richtigen Zahlen eingebe.

Woran kann das liegen? Habe ich da in der Abfrage was falsch, oder diese vielleicht an die falsche Stelle gegeben?

poste gleich mal den ganzen Code...
 
Und wie wäre das?

PHP:
require_once($_SERVER['DOCUMENT_ROOT'] . "/captcha/securimage.php"); // ggf. DOC_ROOT mit basename benutzen.....

static $securimage = new Securimage();
 
Und wie wäre das?

PHP:
require_once($_SERVER['DOCUMENT_ROOT'] . "/captcha/securimage.php"); // ggf. DOC_ROOT mit basename benutzen.....

static $securimage = new Securimage();


Da gibt es dann nur eine Fehlermeldung fuer die Zeile 6.
Zeile 6 ist static $securimage=.....

Wenn man jedoch das File davor neu rauflaedt und refresh macht, dann leitet er weiter zum Seite, die sagt, dass ein Email verschickt worden ist. Das hat er bis jetzt bei den anderen Aenderungen nicht gemacht.
Ich weiss aber nicht, ob das ueberhaupt relevant ist.
 
ok, das Problem duerfte an falschen Pfaden wo liegen, weil ich es in einem Unterordner teste.
Zumindest hat er mir die Eingabe einer Zahlengruppe jetzt genommen. Leider nimmt er es auch, wenn es leer ist. Werde es also definieren muessen, dass das Feld auch nicht leer bleiben darf.

Bezueglich Gueltigkeitsbereich habe ich viele verschiedene Sachen im Netz gefunden und weiss jetzt nicht so recht, wo ich recht ansetzen muss, um das "global" zu ersetzen.

Bin fuer jeden (newbie)-Hinweis dankbar!
 
Zurück