2013-03-12 10 views
20

Otrzymuję ten błąd "Warning: Illegal ciąg przesunięcie 'rodzaj' na /home/mysite/public_html/wp-content/themes/evento/lib/php/extra.class.php na linii 32"Jak poprawić ten niedozwolony offset?

i Zdałem sobie sprawę, że ta sekcja kodu w pliku jest błędna, jednak nie jestem jeszcze świetna w PHP i zastanawiam się, czy ktoś może mi pomóc ponownie napisać tę sekcję, aby wyeliminować błąd. Dzięki! (Błąd zaczyna się na linii 32, który jest początkiem if poniżej)

Oto kod:

/* new version */ 
    function get_attachment_struct($inputs){ 
     $attach = array(); 

    if($inputs['type'] == 'attach'){ 
      $name = $inputs['name']; 
      $attach = array(
       0 => array(
        'name' => $name, 
        'type' => 'text', 
        'label' => 'Attachment URL', 
        'lvisible' => false, 
        'upload' => true, 
       ), 
       1 => array(
        'name' => $name .'_id', 
        'type' => 'hidden', 
        'upload' => true 
       ), 
      ); 

      if(isset($inputs[ 'classes' ])){ 
       $attach[0]['classes'] = $inputs[ 'classes' ]; 
       $attach[1]['classes'] = $inputs[ 'classes' ] . '_id'; 
      } 
     } 
     return $attach; 
    } 

    /* new version */ 
+1

Twój $ wejść prawdopodobnie nie jest tablicą lub nie ma przesunięcia typu. Spróbuj użyć var_dump() lub print_r() na argumencie przed użyciem go z funkcją. Kod wydaje się w porządku na pierwszy rzut oka Edytuj: W tablicy $ attach => 0, po 'upload' => true powinieneś wyjąć ten przecinek. – aleation

+0

@ label Powiedziałbym, że lepiej byłoby dodać przecinek do drugiej tablicy niż usunąć jeden z pierwszego, ale nie jest to błąd w obu przypadkach. – Boann

Odpowiedz

39
if ($inputs['type'] == 'attach') { 

Kod jest ważny, ale oczekuje, że parametr funkcja $inputs być tablica. Ostrzeżenie "Niedozwolone przesunięcie łańcucha znaków" podczas korzystania z $inputs['type'] oznacza, że ​​funkcja jest przekazywana łańcuch zamiast tablicy. (A ponieważ przesunięcie łańcucha jest liczbą, 'type' nie jest odpowiednie.)

W teorii problem leży gdzie indziej, a wywołujący kod nie podaje poprawnego parametru.

Jednak ten komunikat ostrzegawczy jest nowy w PHP 5.4. Stare wersje nie ostrzegały, jeśli tak się stało. Będą one cicho konwertować 'type' do 0, a następnie spróbuj uzyskać znak 0 (pierwszy znak) ciągu. Więc jeśli ten kod miał działać, to dlatego, że nadużywanie takiego łańcucha nie powodowało żadnych skarg na PHP 5.3 i poniżej. (Wiele starych kodów PHP doświadczyło tego problemu po aktualizacji.)

Być może zechcesz debugować , dlaczego dana funkcja otrzymuje ciąg znaków, sprawdzając kod wywołujący i dowiedzieć się, jaką ma wartość, wykonując var_dump($inputs); w funkcji. Ale jeśli chcesz po prostu zamknąć ostrzeżenie, aby to zachowują się jak PHP 5.3, zmienić linię do:

if (is_array($inputs) && $inputs['type'] == 'attach') { 
+0

Dziękuję bardzo! Tak - jest to związane z przejściem na PHP 5.4, co do tej pory było ogromnym bólem. Zamieniam tematykę w niedalekiej przyszłości i nie chcę zajmować się ponownym jej pisaniem lub przekopaniem się w to, co to było, więc dziękuję bardzo za umożliwienie mi łatwej pracy. To więcej PHP niż wiem w tej chwili. Dziękuję Ci! – gabearnold

+0

wielkie dzięki! dla tych, którzy przychodzą po/searchers: to naprawiło mój problem z motywem megusta - zgadnij, że mój host uaktualnił php:/ – ptim

0
if(isset($rule["type"]) && ($rule["type"] == "radio") || ($rule["type"] == "checkbox")) 
{ 
    if(!isset($data[$field])) 
     $data[$field]=""; 
} 
+1

Odpowiedzi tylko na kod niewiele robią, aby uczyć OP i przyszłych czytelników. Zawsze staraj się w jakimś stopniu wyjaśnić, co robi twoja metoda i dlaczego jest to właściwe rozwiązanie. – mickmackusa

-1

uzyskać ten sam błąd w WP gdy używam php ver 7.1.6 - wystarczy zabierz wersję php z powrotem do wersji 7.0.20, a błąd zniknie.

+1

Ponieważ obniżanie wersji php jest zawsze skalowalnym rozwiązaniem –