1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Illegal string offset 'name'

Dieses Thema im Forum "PHP" wurde erstellt von Chaya_, 25. Juli 2018.

  1. Chaya_

    Chaya_ Member

    Registriert seit:
    5. Juli 2017
    Beiträge:
    34
    Zustimmungen:
    7
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    Germany
    Homepage:
    Betroffene Zeile :

    PHP:
    if($cache2 !== false)
            {
                $itemName = $cache2['name'];
            }
    Kompletter Code :

    PHP:
     <?php

    class Item extends MX_Controller
    {
        private $realm;

        public function Index($realm = false, $id = false)
        {
            clientLang("loading", "item");

            // Make sure item and realm are set
            if(!$id || !$realm)
            {
                die(lang("no_item", "item"));
            }

            $this->realm = $realm;

            $cache = $this->cache->get("items/tooltip_".$realm."_".$id."_".getLang());
            $cache2 = $this->cache->get("items/item_".$realm."_".$id);

            if($cache2 !== false)
            {
                $itemName = $cache2['name'];
            }
            else
            {
                $itemName = lang("view_item", "item");
            }

            $this->template->setTitle($itemName);

            $icon = $this->getIcon($id);

            if($cache !== false)
            {
                $item = $cache;
            }
            else
            {
                $item = $this->template->loadPage("ajax.tpl", array('module' => 'item', 'id' => $id, 'realm' => $realm, 'icon' => $icon));
            }

            $content = $this->template->loadPage("item.tpl", array('module' => 'item', 'item' => $item, 'icon' => $icon));

            $data3 = array(
                    "module" => "default",
                    "headline" => "<span style='cursor:pointer;' onClick='window.location=\"".$this->template->page_url."armory\"'>".lang("armory", "item")."</span> &rarr; ".$itemName,
                    "content" => $content
                );

            $page = $this->template->loadPage("page.tpl", $data3);

            $this->template->view($page, "modules/item/css/item.css");
        }

        private function getIcon($id)
        {
            $cache = $this->cache->get("items/item_".$this->realm."_".$id);

            if($cache !== false)
            {
                $cache2 = $this->cache->get("items/display_".$cache['displayid']);

                if($cache2 != false)
                {
                    return "<div class='item'><a></a><img src='https://wow.zamimg.com/images/wow/icons/large/".$cache2.".jpg' /></div>";
                }
                else
                {
                    return "<div class='item'><a></a><img src='https://wow.zamimg.com/images/wow/icons/large/inv_misc_questionmark.jpg' /></div>";
                }
            }
            else
            {
                return $this->template->loadPage("icon_ajax.tpl", array('id' => $id, 'realm' => $this->realm, 'url' => $this->template->page_url));
            }
        }
    }

    Wie es mit einem Array zu lösen wäre, habe ich scohon herausgefunden, aber das da ...
     
  2. SilverHazard

    SilverHazard Moderator Mitarbeiter Moderator

    Registriert seit:
    2. Juli 2017
    Beiträge:
    68
    Zustimmungen:
    51
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Die Fehlermeldung klingt für mich danach, als ob $cache2 ein String wäre. Strings lassen sich zwar indizieren, um einzelne Charts zu kriegen, allerdings müssen die Indizes dann Zahlen sein. Der Index "name" ergibt in diesem Zusammenhang keinen Sinn und produziert deshalb einen Fehler.
     
  3. Chaya_

    Chaya_ Member

    Registriert seit:
    5. Juli 2017
    Beiträge:
    34
    Zustimmungen:
    7
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    Germany
    Homepage:
    Funktioniert trotzdem nicht, wie sieht es aus wie es aussehen soll? Damals hatte es mal funktioniert.

    A PHP Error was encountered
    Severity: Warning

    Message: Illegal string offset 'name'

    Filename: controllers/item.php

    Line Number: 18

    A PHP Error was encountered
    Severity: Warning

    Message: Illegal string offset 'displayid'

    Filename: controllers/item.php

    Line Number: 48
     
  4. SilverHazard

    SilverHazard Moderator Mitarbeiter Moderator

    Registriert seit:
    2. Juli 2017
    Beiträge:
    68
    Zustimmungen:
    51
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Wie ich schon sagte, du kannst keinen String als Index für einen String verwenden. Mit dem Indizieren von Strings kriegst du nur die einzelnen Zeichen an der jeweiligen Stelle:
    Code (PHP):

    $string = "Hello world!"
    $a = $string[0] //  a = 'H'
    $b = $string[4] //  b = 'o'
    $c = $string[11] // c = '!'
    $d = $string[20] // Fehler! Index muss kleiner sein als die Länge des Strings
    $e = $string["name"] // Fehler! Index muss eine Zahl sein! Außerdem ergibt es für mich keinen Sinn, was da zurückgegeben werden sollte
    $f = $string["world"] // Fehler! Index muss eine Zahl sein! Auch wenn der "world" in $string vorkommt, funktioniert es trotzdem nicht!
     
    Lass dir mal $cache und $cache2 ausgeben, ich meine, ich kann hier ja nur raten, was das denn sein soll.
    Wenn du dir sicher bist, dass beides kein String ist, ist es vielleicht eine Map? Worum handelt es sich denn?


    Wie es aussehen soll, kann ich dir schlecht sagen, solange du mir nicht die Infos gibst, was du hier erreichen willst und worum es sich bei den ganzen Variablen handelt.

    Warum es damals funktioniert hatte, kann ich dir leider nicht sagen, Zeitreisen in die Vergangenheit sind höchstwahrscheinlich physikalisch unmöglich. Was hast du denn seit "Damals" verändert?
     
    krusty gefällt das.

Diese Seite empfehlen

Die Seite wird geladen...