mmofacts.com

Illegal Offset type

gepostet vor 15 Jahre, 1 Monat von BlackScorp

 Hi leute,

seit einigen Tagen habe ich ein Problem mit meinem Script. Ständig kommt eine meldung

Warning: Illegal offset type in ...

ich weis nicht woran es liegen könnte. Der Fehler tritt bei auf wenn ich versuche Meldungen des Logins anzuzeigen.

Mein Script funktioniert in etwa so:

Ich rufe eine login.php auf, welche eine Instanz meiner Klasse Account erstellt und der Methode LoginAccount, Benutzername, Passwort und Logindaten speichern übergibt.

Die LoginAccount methode Prüft und setzt irgendwas(zb ob die eingabefelder leer sind) und übergibt einen Textnamen an die Klasse Messages. Diese texte werden als Array abgespeichert.

Mit einem Foreach hole ich mir die Texte aus der lang.php und gebe die aus.

Ein paar ausschnitte um es besser nachzuvollziehen:

Die eigentliche Login.class.php:

PHP:

class Login {
    public function __toString() {
        $account = new Account();
        $account->loginAccount($_POST['username'],$_POST['password'],$_POST['logedin']);
        foreach(Messages::getMessages() as $message){
            $message .= $message.'
';
        }
        return $messages.'asd';
    }
}
Stream::in(new Login());

 

Hier die loginAccount methode:

PHP:

 public function loginAccount($userName,$userPass,$logedIn) 
{
 $this->userName = $userName;
 $this->userPass = $userPass;
 $this->logedIn = $logedIn;
     if($this->checkEmptyFields()) {
                if($this->checkLoginData()) {
                    $this->setUserRights(self::$userId);
                    $this->setSessionId(session_id(),self::$userId);
                    setcookie("lid".$this->cfg->getConfig('general','projectId'),session_id(),(time()+2592000));
                    if($this->logedIn == 'on') {  
                       $this->setLoginId($_COOKIE["lid".$this->cfg->getConfig('general','projectId')], self::$userId);
                    }
                    Messages::addMessage('loginSuccess');
                    return true;
                }else {
                    Messages::addMessage('wrongLoginData');
                    return false;
                }
            }else {
                Messages::addMessage('emptyFields');
                return false;
            }
}

 Also ich prüfe da etwas und setze dann eine Meldung

So sieht die Messages klasse aus:

PHP:

class Messages {
    private static $message = array();
    public static function addMessage($name) {
        self::$message[] = $name;
    }
    public static function getMessages() {
        $text = new Language();
        $message = self::$message;
        self::$message = array();
        return $text->getText($message);
    }
}

 Und zu letzt die Language klasse:

PHP:

class Language {
    private $text;
    private $languages;
    public function __construct() {
        $cfg = new Config();
        $this->languages = $cfg->getConfig('general','avaliableLangs');
        if(is_file('lang/lang_'.$this->languages[$_SESSION['lang']].'.php')) {
            include 'lang/lang_'.$this->languages[$_SESSION['lang']].'.php';
        }else {
            include 'lang/lang_'.$this->languages[$cfg->getConfig('general', 'defaultLang')].'.php';
        }
        $this->text = $text;
      
    }
    public function getText($textName) {
        return $this->text[$textName];
    }
}

 eigentlich greife ich in den Codes nie direkt auf eine Private Variable zu, jedoch verstehe ich nicht wieso diese fehlermeldung kommt.

Hoffe jemand hier sieht mein Fehler

MFG

gepostet vor 15 Jahre, 1 Monat von buhrmi

Du rufst $text->getText($message) mit einem Array als Parameter auf, und verwendest diesen in der Funktion als Index.

Davon abgesehen:

 foreach(Messages::getMessages() as $message){
            $message .= $message.'
';
        }
        return $messages.'asd';

Das solltest du dir vll nochma angucken wenn du nüchtern bist :P

gepostet vor 15 Jahre, 1 Monat von BlackScorp

mensch bruhmi.. 2 minuten früher und du wärst schneller als ich:D habe das gerade auch gefunden:D aber trotzdem vielen dank.

wegen $message .= $message.... da ist ein tippfehler. und das mit .'asd' habe nur drangehängt um kurzfristig den fehler auszublenden mit __toString  muss ein string zurückliefern.

Ist halt alles komisch. Da sitzt man Tagelang an einem Problem und denkt man sich irgendwann. so das reicht jetzt, ich poste es vllt kann mir jemand helfen. paar minuten später klärt sich das problem. komisches phänomen

MFG

gepostet vor 15 Jahre, 1 Monat von TheUndeadable

> ich poste es vllt kann mir jemand helfen. paar minuten später klärt sich das problem. komisches phänomen

Spätestens wenn man es postet, denkt man zum ersten mal drüber nach!

gepostet vor 15 Jahre, 1 Monat von BlackScorp

ja ich denke das nächste mal wenn ich nicht weiterkomme, schreibe ich mir die problemstellung in eine txt datei auf. ich denke wenn das problem "vor den augen" liegt, ist es dann transparenter:D

Auf diese Diskussion antworten