2013-03-12 14 views
20

Sto ricevendo questo errore "Warning: Illegal stringa compensato 'tipo' in /home/mysite/public_html/wp-content/themes/evento/lib/php/extra.class.php on line 32"Come si corregge questo offset stringa non valido?

e Ho capito che questa sezione di codice nel file è sbagliata, tuttavia non sono ancora eccezionale in PHP e mi chiedo se qualcuno possa aiutarmi a riscrivere questa sezione per eliminare l'errore. Grazie! (L'errore inizia sulla linea 32 che è l'inizio del if sotto)

Ecco il codice:

/* 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

I tuoi $ input probabilmente non sono un array o non hanno l'offset "type". Prova a fare var_dump() o print_r() sull'argomento prima di usarlo con la funzione. Il codice sembra ok a prima vista Modifica: sul tuo array $ attach => 0, dopo "upload" => true dovresti eliminare quella virgola. – aleation

+0

@aleation Direi che potrebbe essere meglio aggiungere una virgola al secondo array piuttosto che rimuoverne uno dal primo, ma non si tratta di un errore in entrambi i casi. – Boann

risposta

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

Il codice è valido, ma si aspetta che il parametro della funzione $inputs di essere un array. L'avviso "Illegal stringa offset" quando si utilizza $inputs['type'] significa che la funzione viene passata una stringa anziché una matrice. (E poiché un offset di stringa è un numero, 'type' non è adatto.)

Quindi in teoria il problema si trova altrove, con il chiamante del codice che non fornisce un parametro corretto.

Tuttavia, questo messaggio di avviso è nuovo a PHP 5.4. Le vecchie versioni non avvisavano se ciò accadeva. Avrebbero silenziosamente convertito 'type' in 0, quindi provare a ottenere il carattere 0 (il primo carattere) della stringa. Quindi, se questo codice dovesse funzionare, è perché l'abuso di una stringa come questa non ha causato alcun reclamo su PHP 5.3 e versioni precedenti. (Un sacco di vecchio codice PHP ha riscontrato questo problema dopo l'aggiornamento.)

si potrebbe desiderare di eseguire il debug perché la funzione viene data una stringa esaminando il codice chiamante, e scoprire che cosa valore che ha facendo un var_dump($inputs); nella funzione. Ma se si desidera solo per chiudere l'avviso fino a farlo comportare come PHP 5.3, modificare la riga per:

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

Grazie mille! Sì - questo è legato all'aggiornamento a PHP 5.4 che finora è stato un enorme dolore. Sto cambiando temi nel prossimo futuro e non voglio occuparmi di riscriverlo correttamente o di scavare in quello che è stato, quindi grazie mille per avermi dato un facile lavoro. Questo è più di PHP che conosco al momento. Grazie! – gabearnold

+0

grazie mille! per chi viene dopo/i ricercatori: questo risolve il mio problema con il tema megusta: indovina il mio php con host aggiornato:/ – ptim

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

Le risposte di solo codice fanno ben poco per educare l'OP e i futuri lettori. Cerca sempre di spiegare, in una certa misura, cosa fa il tuo metodo e perché è una soluzione appropriata. – mickmackusa

-1

ottengo lo stesso errore nel WP quando uso php ver 7.1.6 - solo riporta la tua versione php alla 7.0.20 e l'errore sparirà.

+1

Perché il downgrade della versione php è sempre una soluzione scalabile –

Problemi correlati