Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    PHP 8: problemi di Warning fastidiosi

    Ho avuto necessità di passare alla nuova versione PHP 8 e su un mio vecchio script mi sono trovato invaso da Warnings!
    Il problema sembra essere che questa versione non considera più perfettamente lecite dichiarazioni del tipo
    codice:
    $strillo1_1 = $sol->blurb_html($strillo1[0]);
    ammesso che $sol sia una classe e blurb_html una function là dentro.
    Ma questo è un esempio che mi inetressa e potrei scriverne mille così: in pratica se l'array $strillo non fosse ancora stato dichiarato, nelle versioni precedenti PHP lo prendeva come un array vuoto e tutto andava come previsto dal programmatore.
    Ora invece il sistema mi dice:
    codice HTML:
    Warning: Undefined array key 0 in /web/htdocs/[...] copertina.php on line 132
    Ho provato a usare questa feature attiva fin dalla versione 7, ma sembra non funzionare:
    codice:
        $strillo1_1 = $sol->blurb_html($strillo1[0]) ?? "";
        $strillo1_2 = $sol->blurb_html($strillo1[1]) ?? "";
        $strillo1_3 = $sol->blurb_html($strillo1[2]) ?? "";
        $strillo1_4 = $sol->blurb_html($strillo1[3]) ?? "";
    Qualcuno sa dirmi perché?
    Grazie.
    Non ho sbagliato: ho invece scoperto mille modi per fare lampadine che non funzionano...
    (Thomas Alva Edison)

  2. #2
    Per usare una nuova funzione del linguaggio, prima devi capire come funziona:

    https://www.php.net/manual/en/migrat...ll-coalesce-op

    Codice PHP:
        $strillo1_1 $sol->blurb_html($strillo1[0] ?? '');    
        
    $strillo1_2 $sol->blurb_html($strillo1[1] ?? '');    
        
    $strillo1_3 $sol->blurb_html($strillo1[2] ?? '');    
        
    $strillo1_4 $sol->blurb_html($strillo1[3] ?? ''); 

  3. #3
    Ok, ma non è questo il problema: direi che usare il doppio apice (""), o il singolo apostrofo ('') sia esattamente la medesima cosa.
    Infatti non funziona proprio come prima.
    Grazie però. Anche se non è (credo) questa la soluzione.
    Non ho sbagliato: ho invece scoperto mille modi per fare lampadine che non funzionano...
    (Thomas Alva Edison)

  4. #4
    Guarda dove ho messo il ?? '' invece di sparare a zero....

  5. #5
    Non capisco.
    Pure io avevo messo il ??
    Dove non capisco?
    Ah, ho capito.
    Ma purtroppo il risultato è identico: non funziona.
    Non ho sbagliato: ho invece scoperto mille modi per fare lampadine che non funzionano...
    (Thomas Alva Edison)

  6. #6
    Tu hai scritto:

    Codice PHP:
    $strillo1_1 $sol->blurb_html($strillo1[0]) ?? ""
    Mentre io ho scritto:

    Codice PHP:
    $strillo1_1 $sol->blurb_html($strillo1[0] ?? ''); 
    Nota la tua parentesi di chisura e la mia.

    O più semplicemente, copia e incolla il mio codice e, dopo che hai scoperto che funziona correttamente, chiediti perchè...

  7. #7
    Codice PHP:
    $array = [];

    var_dump($array[0]); // Warning ...

    var_dump($array[0] ?? ''); // string(0) "" 

  8. #8
    Quote Originariamente inviata da filippo.toso Visualizza il messaggio
    Codice PHP:
    $array = [];

    var_dump($array[0]); // Warning ...

    var_dump($array[0] ?? ''); // string(0) "" 
    Hai ragione e capisco benissimo, tuttavia, per ragioni che francamente non rispondono alla situazione, la pagina non funziona.
    Questa è la situazione vera e completa:

    codice:
    <table border="0" cellspacing="0" cellpadding="0">  <tr>
        <td style="width:60px">Titolo</td>
        <td><input type="text" name="tit1_1" value="<? echo $sol->blurb_html($strillo1[0] ?? '');?>" style="width:200px"></td>
      </tr>
      <tr>
        <td>Titolino</td>
        <td><input type="text" name="tit1_2" value="<? echo $sol->blurb_html($strillo1[1] ?? '');?>" style="width:200px"></td>
      </tr>
      <tr>
        <td>pagina</td>
        <td><input type="text" name="tit1_3" value="<? echo $sol->blurb_html($strillo1[2] ?? '');?>" style="width:200px"></td>
      </tr>
      <tr>
        <td>URL</td>
        <td><input type="text" name="tit1_4" value="<? echo $sol->blurb_html($strillo1[3] ?? '');?>" style="width:200px"></td>
      </tr>
    </table>
    Come si vede si richiama questo blurb_html che nulla fa se non controllare che in una stringa ($strillo1[0], eccetera) i caratteri accentati siano trasformati in elementi HTML (&egrave;, &eacute;, eccetera.)
    Quindi se $strillo1[0] fosse una stringa vuota ('') in questo caso andrebbe bene: è accettabile e giusto che nelle condizioni iniziali non sia eseguito alcun display.

    I quattro echo risultano rispettivamente alla riga 128, 132, 136 e 140.
    Lanciata la pagina in PHP 8, ottengo:



    Warning: Undefined array key 0 in /web/htdocs/www.[...]/copertina.php on line 128
    Warning: Undefined array key 1 in /web/htdocs/www.[...]/copertina.php on line 132
    Warning: Undefined array key 2 in /web/htdocs/www.[...]/copertina.php on line 136
    Warning: Undefined array key 3 in /web/htdocs/www.[...]/copertina.php on line 140



    Il che (confesso) non so gestire.
    Che fare?
    Ultima modifica di jumborex; 17-12-2021 a 13:41
    Non ho sbagliato: ho invece scoperto mille modi per fare lampadine che non funzionano...
    (Thomas Alva Edison)

  9. #9
    Questo codice con PHP 7.4 e PHP 8.0 a me funziona.
    Codice PHP:
    class Sol
    {
        function blurb_html($string)
        {
            return $string;
        }
    }
     
    $sol = new Sol();
     
    ?>
    <table border="0" cellspacing="0" cellpadding="0">
        <tr>
            <td style="width:60px">Titolo</td>
            <td><input type="text" name="tit1_1" value="<? echo $sol->blurb_html($strillo1[0] ?? ''); ?>" style="width:200px"></td>
        </tr>
        <tr>
            <td>Titolino</td>
            <td><input type="text" name="tit1_2" value="<? echo $sol->blurb_html($strillo1[1] ?? ''); ?>" style="width:200px"></td>
        </tr>
        <tr>
            <td>pagina</td>
            <td><input type="text" name="tit1_3" value="<? echo $sol->blurb_html($strillo1[2] ?? ''); ?>" style="width:200px"></td>
        </tr>
        <tr>
            <td>URL</td>
            <td><input type="text" name="tit1_4" value="<? echo $sol->blurb_html($strillo1[3] ?? ''); ?>" style="width:200px"></td>
        </tr>
    </table>

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.