Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Italy
    Messaggi
    111

    Errore stampa variabili in Laravel

    Ciao a tutti,

    Sto realizzando mediante Laravel 5.5 un piccolo controller mediante cui leggo da un file .csv dei dati, che una volta salvati in una variabile di tipo array devo mostrare a video nella view e utilizzare successivamente con il sender delle mail di Laravel.

    La lettura del file .csv avviene senza alcun problema, ma quando poi provo a stampare nella vista il valore della variabile $data ottengo l'errore :
    codice:
    Trying to access array offset on value of type int (View: C:\xampp\htdocs\MailSender\resources\views\index\index.blade.php)
    Il codice del controller è:
    codice:
    public function getArrayFromCSV(Request $req,$delimiter=',')
        {
    // verifica sull'esistenza del file e se esso è leggibile
            if(!file_exists($req->sel_file) || !is_readable($req->sel_file))
            {
                return false;
            }
    
    //definisco un header nullo e l'array data conetenete i dati
            $header=null;
            $data= array();
    
    //lettura del file csv
            if(($handle=fopen($req->sel_file, 'r'))!== false)
            {
                while(($row = fgetcsv($handle, 1000, $delimiter))!== false)
                {
                    if(!$header)
                    {$header=$row;}
                    else
                    {$data[]=array_combine($header,$row);}
                }
                fclose($handle);
    
                return view('index.index')->with('data',$data);
                /*return $data;*/
            }
    
        }
    
    mentre quello della vista è:

    codice:
    <!DOCTYPEhtml>
    <htmllang="{{app()->getLocale()}}">
        <head>
            <title>Applicazione per invio mail</title>
            <h2align="center">Invio mail mediante lettura di un file .csv</h2>
        </head>
        <body>
            @if(count($errors)>0)
                <divclass="alert alert-danger">
                    Errore upload dati:<br/>
                        @foreach($errors->all() as $error)
                            {{ $error }}
                        @endforeach
                </div>
            @endif
            <divclass="container">
                <h4align="center">Form per la selezione del file</h4>
                <br/>
                <formmethod="POST"enctype="multipart/form-data"action="{{url('/import')}}">
                    {{csrf_field()}}
                    <divclass="form-group">
                        <label>Seleziona il file da utilizzare</label>
                        <inputtype="file"name="sel_file"/>
                        <inputtype="submit"name="upload"class="btn btn-primary"value="Seleziona">
                    </div>
                </form>
            </div>
    
            <divclass="container">
                <p>Hai importato dal tuo file .csv i seguenti record</p><br/>
                    @if (isset($data))
                       @foreach ($data as $d => $data)
                            <p>Denominazione del Destinatario: {{$d['denominazioneDestinatario']}}</p><br/>
                            
                        @endforeach 
                    @endif
            </div>
        </body>
    
    non riesco a capire quale sia il problema poiché se nel controller decommento $return data e commento la riga che ritorna la view, riesco a vedere correttamente il valore della variabile data.
    Grazie a tutti per l'aiuto e buone feste!!

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,103
    Invece di ritornare la view, metti un
    dd($data);

    verifica se contiene ciò che ti aspetti.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Italy
    Messaggi
    111
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Invece di ritornare la view, metti un
    dd($data);

    verifica se contiene ciò che ti aspetti.
    Ciao Alhazred,

    Grazie innanzitutto per la risposta, allora quando effettuo la stampa con dd($data) ritorno i dati corretti, anzi nel frattempo ho fatto altre prove e sono riuscito anche a mostrare il contenuto della variabile nella view, la variabile contiene correttamente:
    codice:
     Nome Cognome;mail@alice.it;Prova Mail Laravel;C:\Users\Ezio\Downloads\LF.jpeg1
    Adesso mi chiedevo, se era possibile scompattarla nella view in modo da visualizzare ogni campo su una riga, e una volta scompattata essere utilizzata con il meccanismo di invio mail automatico di Laravel.


  4. #4
    Nel foreach della view stai sovrascrivendo la variabile $data.

    codice:
    @foreach ($data as $d => $data)
    Probabilmente doveva essere:

    codice:
    @foreach ($data as $d)

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Italy
    Messaggi
    111
    Quote Originariamente inviata da filippo.toso Visualizza il messaggio
    Nel foreach della view stai sovrascrivendo la variabile $data.

    codice:
    @foreach ($data as $d => $data)
    Probabilmente doveva essere:

    codice:
    @foreach ($data as $d)
    Buongiorno Filippo, ho modificato come mi hai consigliato e funziona, adesso il mio problema è quello di andare a prendere e stampare uno alla volta i valori della variabile $data, nel senso che ora ottengo le quattro colonne del file csv come fosse una stringa unica, mentre a me servirebbe poter prendere singolarmente quei valori, quindi effettuare una stampa $data['denominazioneDestinatario'], $data['emailDestinatario'] e così via, è possibile fare ciò?

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 © 2021 vBulletin Solutions, Inc. All rights reserved.