Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Błąd z eval()
Forum PHP.pl > Forum > PHP
Babcia@Stefa
Witam, PHP wywala mi błąd kiedy używam eval'a

Cytat
Fatal error: Cannot use string offset as an array in *\Registry.class.php(82) : eval()'d code on line 1

Warning: Unknown: Node no longer exists in Unknown on line 0


  1. <?php
  2. private function BuildNodes($Nodes, $Eval)
  3.    {
  4.        eval('$NodeTest = ' .$Eval. ';');
  5.        if($NodeTest == NuLL)
  6.        {
  7.            $EvalCode = '$ENodeTest = $this->Data';
  8.            foreach ($Nodes as $Key => $Value)
  9.            {
  10.                $EvalCode .= '[' .$Value. ']';
  11.                if($EvalCode == NuLL AND !is_array($EvalCode))
  12.                {
  13.                    eval($EvalCode. ';');
  14.                    if($ENodeTest == NuLL)
  15.                    {
  16.                        eval($EvalCode. ' = array();');
  17.                    }
  18.                }
  19.            }
  20.        }
  21.    }
  22. ?>


  1. <?php
  2. $ValueString = $this->Data['Applications Data']['Notepad']['Recent'];
  3. ?>


Błąd występuje dokładnie w linii eval('$NodeTest = ' .$Eval. ';');

Oraz błąd w funkcji:

  1. <?php
  2. public function Get($_Key)
  3.    {
  4.        $EXP = explode('', $_Key);
  5.        $this->LoadTree($EXP);
  6.        $OPData = '$ValueString = $this->Data';
  7.        
  8.        foreach ($EXP as $Key => $Value)
  9.        {
  10.            $OPData .= '[&#092;'' .$Value. '']';
  11.        }
  12.        
  13.        $OPData .= ';';
  14.        eval($OPData);
  15.        
  16.        // returns correct value from registry
  17.        return $ValueString;
  18.    }
  19. ?>


W linii:

  1. <?php
  2. eval($OPData);
  3. ?>


Cytat
Fatal error: Cannot use string offset as an array in *\Registry.class.php(120) : eval()'d code on line 1


Najpierw ten drugi błąd poprawiłem, ale potem przetrzymałem ctrl+z i wszystko cofnełem, ale z tym pierwszym nie umiem sobię poradzić. ( w drugim wykrywam typ danych i konwertuje na niego)

Pozdrawiam, WebNuLL
Darti
w (tutejszej) linii 11 spróbuj tak:
  1. <?php
  2. $EvalCode .= '["' .$Value. '"]';
  3. ?>
Babcia@Stefa
Darti, dzięki spróbuję tego, ale jednak myślę że to się nie tyczy problemu, bo jak komunikat głosi:

Cytat
Błąd krytyczny: Nie można używać typu string jako tablicy w *\Registry.class.php ($LINE) linia 1 w kodzie eval()


Po próbuję i po kombinuje jeszcze - nigdy się nie poddaje winksmiley.jpg

Proszę o propozycję rozwiązania problemu smile.gif

Pozdrawiam, WebNuLL
bim2
Dobrze podpowiada. smile.gif Błąd oznacza, że kod który evaluujesz jest błędny.
Babcia@Stefa
Udało mi się rozwiązać błąd, lecz rozwiązanie go trochę trwało.

A polegał on na tym że...

Mam tablicę np. $Tablica['Owoce'] = 'Brak owoców';

I chcę uzysać dostęp do $Tablica['Owoce']['Tropikalne']['Ananas'] , i przy próbie do nie istniejącego elementu ['Tropikalne'] dostaję błąd że nie można używać typu string (ciagu znaków) jako tablicy, ponieważ ['Owoce'] zawiera wartość string a nie array.

Rozwiązaniem jest funkcja is_array()" title="Zobacz w manualu PHP" target="_manual, którą sprawdzamy wszystkie elementy (w moim przypadku oprócz ostatniego można - ponieważ ostatni może zawierać dowolną wartość dowolnego typu np. int, double, boolean, string, object, array ...).

UWAGA:
Nie tylko kod w eval'u generuje błąd, bez użycia funkcji eval()" title="Zobacz w manualu PHP" target="_manual też parser wygeneruje błąd.

@bim2
$Tablica[klucz] też działa tongue.gif ale rozumiem, zapomniałem dodać ' lu ", dzięki Darti jeszcze raz (przynajmniej chciało Ci się przeczytać kod) biggrin.gif

Pozdrawiam, WebNuLL
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.