[PHP] Fehlermeldung die mir nix sagt

VIPbanner_de

www.VIPbanner.de
ID: 72674
L
1 Mai 2006
2.598
150
Fatal error: Cannot redeclare account_add() (previously declared in /srv/www/htdocs/web9/html/prepend.inc.php:146) in /srv/www/htdocs/web9/html/prepend.inc.php on line 146

Diese Fehlermeldung hatte eben ein User der sich versucht hatte auf www.Bettertraffic.de anzumelden. Ich hatte dann versucht mich anzumelden testweise.. und hatte keine Probleme... Woran könnte das liegen.. diese Fehlermeldung sagt mir auch nix...

Prepend.inc.php die besagte function:

PHP:
function account_add($name, $prename, $password, $email, $showup, $points, $sid, $referer="", $refererb="", $refererc="", $refererd="", $referere="", $refererf="", $refererg="", $refererh="", $refereri="", $refererj="", $savepoints="")
{
        global $geld_ref, $geld_view;
	$query="SELECT count(*) FROM V4_accounts WHERE email='$email';";
	$result=mysql_query($query);

$a = date( "d.m.Y" );
$register_ip = $REMOTE_ADDR;
	if(mysql_result($result, 0)==0)
	{
		$query="INSERT INTO V4_accounts (name, prename, password, email, showup, points, sessionid, refererid, angemeldet, register_ip, referb, referc, referd, refere, referf, referg, referh, referi, referj, geld_ref, view_ref, savepoints) VALUES ('$name', '$prename', '$password', '$email', '$showup', '$points', '$sid', '$referer', '$a', '$ip', '$refererb', '$refererc', '$refererd', '$referere', '$refererf', '$refererg', '$refererh', '$refereri', '$refererj', '$geld_ref', '$geld_view', '1');";
		mysql_query($query);
		return true;
	}
	return false;
}
 
Ist kein mySQL-Fehler:
"Cannot redeclare account_add()"

Du versuchst scheinbar die Funktion account_add ein zweites mal zu deklarieren (function acount_add ...).
 
Versuche es mal mit dieser Query ;-)

Dann zerbröstelt deine DB wenigstens nicht, wenn ich mit Hochkomma im Referer zu dir komme :-D

PHP:
function account_add($name, $prename, $password, $email, $showup, $points, $sid, $referer="", $refererb="", $refererc="", $refererd="", $referere="", $refererf="", $refererg="", $refererh="", $refereri="", $refererj="", $savepoints="") {
    global $geld_ref, $geld_view;
    $query="SELECT count(*) FROM V4_accounts WHERE email='" . addslashes($email) . "';";
    $result=mysql_query($query);
    $a = date( "d.m.Y" );
    $register_ip = $REMOTE_ADDR;
    if(mysql_result($result, 0)==0) {
        $query="INSERT INTO V4_accounts (name, prename, password, email, showup, points, sessionid, refererid, angemeldet, register_ip, referb, referc, referd, refere, referf, referg, referh, referi, referj, geld_ref, view_ref, savepoints) VALUES ('" . addslashes($name) . "', '" . addslashes($prename) . "', '" . addslashes($password) . "', '" . addslashes($email) . "', '" . addslashes($showup) . "', '" . addslashes($points) . "', '" . addslashes($sid) . "', '" . addslashes($referer) . "', '" . addslashes($a) . "', '" . addslashes($ip) . "', '" . addslashes($refererb) . "', '" . addslashes($refererc) . "', '" . addslashes($refererd) . "', '" . addslashes($referere) . "', '" . addslashes($refererf) . "', '" . addslashes($refererg) . "', '" . addslashes($refererh) . "', '" . addslashes($refereri) . "', '" . addslashes($refererj) . "', '" . addslashes($geld_ref) . "', '" . addslashes($geld_view) . "', '1');";
        mysql_query($query);
        return true;
    }
    return false;
}
 
Da die Redeklaration in derselben Zeile ist, heißt das, dass du doppelt inkludierst.
Abhilfe: require_once statt require, include_once statt include ;)

Zusätzlich solltest du aber trotzdem mal genau nachgucken, was da schief läuft, weil meinst ist das ein größerer struktureller Fehler im Script.
 
Da die Redeklaration in derselben Zeile ist, heißt das, dass du doppelt inkludierst.
Abhilfe: require_once statt require, include_once statt include ;)

Zusätzlich solltest du aber trotzdem mal genau nachgucken, was da schief läuft, weil meinst ist das ein größerer struktureller Fehler im Script.


hä nochmal ganz langsam.. wie meinste das ich inkludiere doppelt?.. die function wird doch nur einmal ausgeführt... also ich sehe jetzt nicht wo der Fehler sein sollte....
 
In diesem Fall geht es nicht darum, wie oft die Funktion ausgeführt wird, sondern darum, dass die Funktion mehrmals deklariert wird, also mehrmals im Quell-Text steht, was bei einem Funktionsaufruf mit diesem Namen ausgeführt werden soll.

Dieser Fehler tritt häufig auf, wenn Programmteile über include() oder require() eingebunden werden.
 
hä nochmal ganz langsam..
Ok, teste mal folgendes Script:
PHP:
function foo() // 1
{
  echo "1";
}

function foo() // 6
{
  echo "2";
}

foo();
Die Fehlermeldung lautet dann:
Code:
Fatal error: Cannot redeclare foo() (previously declared in /weißderteufel.php:1) in /weißderteufel.php on line 6
wie meinste das ich inkludiere doppelt?..
Damit die Zeilennummern identisch werden, musst du das mit Inkludieren lösen, also
PHP:
function foo() // 1
{
  echo "1";
}
PHP:
require("/weißderteufel.php");
require("/weißderteufel.php");
foo();
führt zu
Code:
Fatal error: Cannot redeclare foo() (previously declared in /weißderteufel.php:1) in /weißderteufel.php on line 1
 
danke für die hilfe... und sorry das das danke so spät kommt.. hatt vorher keine zeit zum testen. habe es mal geändert, kanns aber noch nicht erkennen obs geht oder nicht, da es anscheinend nur bei älteren Browsern als fehler ausgegeben wird.. und beim neuen modzilla und IE 7 wirds nicht als fehler ausgegeben.. und die beiden hab ich :)