Errore undefined offset[RISOLTO]

di il
10 risposte

Errore undefined offset[RISOLTO]

Salve a tutti, sono alle prime armi con lo studio di php, mi sto esercitando facendo un'applicazione per il calcolo del codice fiscale.
Ho un problema quando devo analizzare il file di testo che contiene i codici relativi al comune di nascita.
Il file di testo è organizzato nella seguente maniera:

A001;ABANO TERME;PD
A002;ABBADIA SOPRA ADDA;CO
A003;ABBADIA ALPINA;TO

ecc ecc

Ho fatto una classe (comune.php) il cui compito è ricevere come input il comune e la provincia, dopodichè deve trovare nel file di testo il relativo codice:

class Comune
{
   private $comune;
   private $provincia;
   private $codice;


   function __construct($com,$pro)
       {
            $this->comune = strtoupper($com);
            $this->provincia = strtoupper($pro);
       }



        function getCodice()
        {


        $handle = fopen ("codici_comuni_italiani.txt", "r");



        while ( !feof( $handle ) )
        {

        	$buffer = fgets($handle);   // legge una riga intera da file
        	$buffer = rtrim($buffer);   // rimuove carattere di return a fine riga

        	$array[]  = explode (";", $buffer);  // divide la stringa in tre rispetto al separatore ; usato nel file

          if($array[1]==$this->comune and $array[2] == $this->provincia)

                          $this->codice = $array[0];

         }
         fclose ($handle);  // The file pointed to by handle is closed.

         return $this->codice;

        }

}


Ma ottengo come errore : Undefined offset: 1 on line 34.



Ho provato anche in questo modo:

function getCodice()
        {


        $handle = fopen ("codici_comuni_italiani.txt", "r");

       while ( !feof( $handle ) )
        {

         	$buffer = fgets($handle);   // legge una riga intera da file
         	$buffer = rtrim($buffer);   // rimuove carattere di return a fine riga

         	list($codice, $comune, $provincia) = explode (";", $buffer);  // divide la stringa in tre rispetto al separatore ; usato nel file

         	if ( $provincia == $this->provincia and $comune==$this->comune )
         	{

         		$this->codice = $codice;

         	}

        }

            fclose ($handle);  // The file pointed to by handle is closed.
            return $this->codice;




In questo caso mi da il seguente errore:
Undefined offset: 1 on line 30

Notice: Undefined offset: 2 on line 30

Notice: Undefined offset: 1 on line 30

Notice: Undefined offset: 2 on line 30
G482
Però mi trova il codice cercato.

Ho visto che questo tipo di errore generalmente indica che si vuole accedere a un campo dell'array che in realtà risulta vuoto(se non sbaglio...).

Dov'è che sbaglio?

10 Risposte

  • Re: Errore undefined offset[RISOLTO]

    Non vuoto ma inesistente, cambia la codifica in ISO-8859-1 cancella l'apertura php e riscrivi <?php proprio per evitare il BOM UTF-8 che notepadd++ potrebbe inserire. Ovviamente parlo sia per file con estensione php che txt o altro.
  • Re: Errore undefined offset[RISOLTO]

    Ciao, grazie per la risposta.

    Sto tentando di cambiare la codifica...
    Ho inserito:

    header(‘Content-type:text/html; charset=ISO-8859-1’);

    dop il tag di apertura <?php , però mi da errore. E' giusta la procedura? Ma lo devo inserire nel file contenente la classe?
  • Re: Errore undefined offset[RISOLTO]

    Devi usare un IDE come eclipse butta ogni software Windows, i file hanno una codifica oltre al fatto del header (intestazione http).
    Prova a leggere solamente il file txt e ti accorgi che array sarà diverso inizialmente con valore 0 perché inizia con il BOM. (La parte inerente al fopen).
  • Re: Errore undefined offset[RISOLTO]

    Ho provato tramite Eclipse e ho lo stesso risultato che ottengo accedendo al file tramite browser e localhost, ho lo stesso errore offset usando il file originario, se aggiungo la stringa per la conversione mi scrive:

    syntax error, unexpected ':', expecting ')'

    l'ho interpretato mettendo ) al posto di : ma niente .
  • Re: Errore undefined offset[RISOLTO]

    L'errore è più semplice di quel che pensavo explode crea un array e la variabile dovrebbe essere senza parentesi.
  • Re: Errore undefined offset[RISOLTO]

    Ciao,
    Scusa non ho capito bene cosa dovrei fare, come devo correggere il codice?
  • Re: Errore undefined offset[RISOLTO]

    Modifica in $array invece di $array[]
  • Re: Errore undefined offset[RISOLTO]

    Fatto, ottengo sempre l'errore:

    Undefined offset: 1 on line 34

    Ho aggiunto :

    echo $array[1] . " " . $array[2] . " " . $array[0];

    dentro l'if per verificare se gli elementi vengono salvati nell'array, e effettivamente vengono salvati tutti e tre e li stampa.
    Il programma funziona ricava il codice cercato, ma comunque mi esce quell'errore.
  • Re: Errore undefined offset[RISOLTO]

    Lo sto provando con php 7.3 e non ho notice o warning su questo codice.

    codici_comuni_italiani.txt
    A001;ABANO TERME;PD
    A002;ABBADIA SOPRA ADDA;CO
    A003;ABBADIA ALPINA;TO
    comune.php
    
    <?php
    error_reporting( -1 );
    class Comune
    {
       private $comune;
       private $provincia;
       private $codice;
    
    
       function __construct($com,$pro)
           {
                $this->comune = strtoupper($com);
                $this->provincia = strtoupper($pro);
           }
    
    
    
            function getCodice()
            {
    
    
            $handle = fopen ("codici_comuni_italiani.txt", "r");
    
    
    
            while ( !feof( $handle ) )
            {
    
            	$buffer = fgets($handle);   // legge una riga intera da file
            	$buffer = rtrim($buffer);   // rimuove carattere di return a fine riga
    
            	$array  = explode (";", $buffer);  // divide la stringa in tre rispetto al separatore ; usato nel file
    
              if($array[1]==$this->comune and $array[2] == $this->provincia)
    
                              $this->codice = $array[0];
    
             }
             fclose ($handle);  // The file pointed to by handle is closed.
    
             return $this->codice;
    
            }
    
    }
    start.php
    <?php
    require "comune.php";
    $h = new Comune( "ABANO TERME","PD" );
    echo $h->getCodice();
    Ho anche esteso la visualizzazione degli errori con error_reporting. Usa la modalità incognito di Chrome, Ciao
  • Re: Errore undefined offset[RISOLTO]

    Ho capito, ora provo,
    grazie per l'aiuto!
Devi accedere o registrarti per scrivere nel forum
10 risposte