[PHP] Problema con istruzione "use"

Discussione in 'PHP' iniziata da samurai.sette, 6 Aprile 2019.

  1. samurai.sette

    samurai.sette Utente Attivo

    Registrato:
    17 Dicembre 2015
    Messaggi:
    187
    Mi Piace Ricevuti:
    5
    Punteggio:
    18
    Ciao a tutti, apro questa discussione per chiedervi un aiuto in merito all'istruzione "use".
    Mi spiego.
    All'interno di un articolo Joomla ho inserito un piccolo codice per permettere ad un utente di esportare determinati dati in Excel.
    Ho testato il codice fuori da Joomla e funziona perfettamente ma all'interno di Joomla mi genera questo errore:"syntax error, unexpected 'use' (T_USE)".
    Secondo voi da cosa può dipendere?
    Questo è quello che ho scritto.
    PHP:
    <?php
        
    require 'vendor/autoload.php';
        use 
    PhpOffice\PhpSpreadsheet\Spreadsheet;
        use 
    PhpOffice\PhpSpreadsheet\Writer\Xlsx;
        
    $spreadsheet = new Spreadsheet();
        
    $sheet $spreadsheet->getActiveSheet();
        if (isset (
    $_POST['estrai_tutto']))
        {
    .
    .
    .
    .
    }
    ?>
    Ciao, grazie mille
     
  2. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    818
    Mi Piace Ricevuti:
    42
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Namespace joomla!
    PHP:
    use \PhpOffice\PhpSpreadsheet\Spreadsheet;
    use \
    PhpOffice\PhpSpreadsheet\Writer\Xlsx;
     
  3. samurai.sette

    samurai.sette Utente Attivo

    Registrato:
    17 Dicembre 2015
    Messaggi:
    187
    Mi Piace Ricevuti:
    5
    Punteggio:
    18
    Ciao Macus_adi.
    Scusa l'ignoranza, ma potresti darmi qualche informazione in più su come dovrei fare?
    Ciao, grazie mille
     
  4. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    818
    Mi Piace Ricevuti:
    42
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
     
  5. samurai.sette

    samurai.sette Utente Attivo

    Registrato:
    17 Dicembre 2015
    Messaggi:
    187
    Mi Piace Ricevuti:
    5
    Punteggio:
    18
    Ciao, ho provato quello che mi hai scritto ma mi genera sempre lo stesso errore:(
     
  6. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    818
    Mi Piace Ricevuti:
    42
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Prova così
    PHP:
    $spreadsheet=new \Spreadsheet()
     
  7. samurai.sette

    samurai.sette Utente Attivo

    Registrato:
    17 Dicembre 2015
    Messaggi:
    187
    Mi Piace Ricevuti:
    5
    Punteggio:
    18
    Niente da fare... sempre lo stesso errore :(
     
  8. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.471
    Mi Piace Ricevuti:
    122
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    é un errore di sintassi
    non dovrebbe funzionare ne fuori ne dentro Joomla
    all'interno di Joomla stai usando un codice diverso da quello che hai postato ….

    controlla che la riga che precede quella segnalata dall'errore, sia terminata con punto e virgola
     
  9. samurai.sette

    samurai.sette Utente Attivo

    Registrato:
    17 Dicembre 2015
    Messaggi:
    187
    Mi Piace Ricevuti:
    5
    Punteggio:
    18
    Ciao Marino51.
    Il codice che ho postato è quello che ho inserito all'interno di Joomla (ho fatto copia/incolla) e la riga precedente l'errore termina con ";".
    Francamente non riesco a capire perchè all'esterno di Joomla funziona perfettamente mentre al suo interno mi genera quell'errore.
    Comunque riporto di seguito il codice completo.
    PHP:
    <form method="post">
    <input type="submit" name="excel" value="clicca qui" />
    </form>
    <?php
        
    require 'vendor/autoload.php';

        use 
    PhpOffice\PhpSpreadsheet\Spreadsheet;
        use 
    PhpOffice\PhpSpreadsheet\Writer\Xlsx;

        
    $spreadsheet = new Spreadsheet();
        
    $sheet $spreadsheet->getActiveSheet();
           
        
    $con mysqli_connect("localhost","root","","database");

        if (isset (
    $_POST['excel']))
        {
            
    // individuo solo le colonne che mi interessano
            
    $query_col mysqli_query ($con"SELECT tabella FROM tabella1 ORDER BY id");
            while (
    $info_col mysqli_fetch_array ($query_col))
            {
                
    $nomi_colonne $info_col[0];
                
    $array_col[] = $nomi_colonne// array nomi colonne
            
    }
           
            
    // inserisco i nomi delle colonne nel file excel
            
    $num_colonne count ($array_col); // numero colonne tabella
            
    $ascii 65// lettera A in formato ascii
            
    for ($j=0$j<=$num_colonne 1$j++)
            {
                
    $cella chr($ascii $j) . 1;
                
    $sheet -> setCellValue($cella,$array_col[$j]);
            }
           
            
    // nomi colonne in stringa separati tra loro da una virgola
            
    $select_dati implode(',',$array_col);
           
            
    // estraggo i dati dalla tabella del monitoraggio
            
    $query_dati mysqli_query ($con"SELECT $select_dati FROM tabella2 ORDER BY id");
           
            
    $row 3;
           
            while (
    $dati mysqli_fetch_object($query_dati))
            {
                for (
    $k=0$k<=$num_colonne 1$k++)
                {
                    
    $colonna $array_col[$k];
                    
    $sheet -> setCellValue(chr($ascii $k).$row$dati->$colonna);
                }
                
    $row++;
            }

            
    $styleArray =
            [
                
    'font' => ['bold' => true,],
            ];
           
            
    $text_bold1 'A1:';
            
    $text_bold2 chr($ascii $num_colonne) . 1;
            
    $text_bold_totale $text_bold1 $text_bold2;
            
    $spreadsheet->getActiveSheet()->getStyle($text_bold_totale)->applyFromArray($styleArray);

            
    $writer = new Xlsx($spreadsheet);
            
    $writer->save('excel.xlsx');
       
            echo 
    "Esportazione avvenuta con successo";  
        }
    ?>
     
  10. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.471
    Mi Piace Ricevuti:
    122
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    PHP:
    <?php
        
    use PhpOffice\PhpSpreadsheet\Spreadsheet;
        use 
    PhpOffice\PhpSpreadsheet\Writer\Xlsx;

        require 
    'vendor/autoload.php';

        
    $spreadsheet = new Spreadsheet();
    scrivi in questo modo e nel caso persista l'errore, posta l'intero errore ed indica la riga dove si é verificato
     
  11. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    818
    Mi Piace Ricevuti:
    42
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Appena provato con joomla ultima versione, copiando dalla doc ufficiale....
    Nessun errore
    PHP:
    include_once 'vendor/autoload.php';
          
            use 
    PhpOffice\PhpSpreadsheet\Spreadsheet;
            use 
    PhpOffice\PhpSpreadsheet\Writer\Xlsx;
          
            
    $spreadsheet = new Spreadsheet();
            
    $sheet $spreadsheet->getActiveSheet();
            
    $sheet->setCellValue('A1''Hello World !');
            
    $writer = new Xlsx($spreadsheet);
            
    $writer->save('hello world.xlsx');
    NB: la sintassi tecnicamente corretta è questa:
    PHP:
    /***************BLOCK INCLUDE******************/
    include_once '........';
    require 
    '.............';
    require_once 
    '................';
    /******END BLOCK************/

    /*************BLOCK USE*************************/

    use Class\Generator\Class as Name;
    /*****END BLOCK************/
    Sicuro che vendor/autoload.php abbia i realpath corretti?
    prova a fare composer update,
    sostituisci il require con include_once
     
    Ultima modifica: 8 Aprile 2019
  12. samurai.sette

    samurai.sette Utente Attivo

    Registrato:
    17 Dicembre 2015
    Messaggi:
    187
    Mi Piace Ricevuti:
    5
    Punteggio:
    18
    Ciao Macus_adi.
    Ho fatto composer update e ho sostituito il require con include_once ma niente... :(
    Scusa l'ignoranza ma potresti spiegarmi il discorso dei realpath?
    Ciao, grazie mille.
    P.S.: Allego una immagine con l'errore che mi genera
     

    Files Allegati:

    • Errore.JPG
      Errore.JPG
      Dimensione del file:
      42,9 KB
      Visite:
      8
  13. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    818
    Mi Piace Ricevuti:
    42
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Se vedi la config del file autoload.php è questa:
    PHP:
    require_once __DIR__ '/composer/autoload_real.php';
    return 
    ComposerAutoloaderInit080b3b8961632bc4848cc3238fd9aab2::getLoader();
    Autoload_real trova tutti i file per il corretto funzionamento della path vendor...
    Il dubbio è questo...
    Hai per caso copiato ed incollato la cartella vendor da installazione locale a remota?
    Hai provato a cancellare la cartella vendor su joomla e installare direttamente da console?
    Questo potrebbe essere anche un sintomo di mismatch path, ossia qualcosa non installata correttamente...
    Il consiglio è questo:
    Crea in locale un VHost con joomla e installa Spreadsheet, semplicemente copiando ed incollando il codice dalla doc ufficiale (5 minuti al massimo), e vedi se nella home trovi il file generato....
    Se non da errore probabile che l'installazione composer (vendor/....) in remoto sia andata a farsi friggere, quindi cancella e reinstalla il tutto!
     
  14. samurai.sette

    samurai.sette Utente Attivo

    Registrato:
    17 Dicembre 2015
    Messaggi:
    187
    Mi Piace Ricevuti:
    5
    Punteggio:
    18
    Ciao Macus_adi, ho provato più di una volta a reinstallare composer ma niente, ho sempre quell'errore.
     
  15. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.471
    Mi Piace Ricevuti:
    122
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    non so se hai risolto,
    in ogni caso ho letto da qualche parte che la posizione di "use" dipende dalla versione di PHP,
    se apri un qualsiasi file di esempio, incluso nel pacchetto, vedi
    PHP:
    <?php
    use PhpOffice\PhpSpreadsheet\IOFactory;
    use 
    PhpOffice\PhpSpreadsheet\Settings;

    require 
    __DIR__ '/../Header.php';
    ci sarà ben un motivo ….

    quindi se tu provassi, mettendo "use" subito dopo il tag PHP,
    PHP:
    <?php
        
    use PhpOffice\PhpSpreadsheet\Spreadsheet;
        use 
    PhpOffice\PhpSpreadsheet\Writer\Xlsx;
    ?>
    <form method="post">
    <input type="submit" name="excel" value="clicca qui" />
    </form>
    <?php
        
    if (isset ($_POST['excel']))
        {
            require 
    'vendor/autoload.php';

            
    $spreadsheet = new Spreadsheet();
            
    $sheet $spreadsheet->getActiveSheet();
    potresti togliermi il dubbio
    grazie
     
  16. samurai.sette

    samurai.sette Utente Attivo

    Registrato:
    17 Dicembre 2015
    Messaggi:
    187
    Mi Piace Ricevuti:
    5
    Punteggio:
    18
    Ciao Marino51. Purtroppo non ho ancora risolto :(.
    Per caso ricordi dove hai letto il discorso riguardante la posizione di "use"? (la versione di PHP è la 7.2.7)
    Dove hai trovato i file di esempio?
    Puoi, per favore, inserirmi i link in modo che posso guardare di persona? Te ne sarei molto grato.
    Ciao, grazie mille.
     
  17. samurai.sette

    samurai.sette Utente Attivo

    Registrato:
    17 Dicembre 2015
    Messaggi:
    187
    Mi Piace Ricevuti:
    5
    Punteggio:
    18
    Ciao a tutti.
    Visto che non riesco a risolvere il problema ho deciso di scrivere uno script più semplice. Adesso riesco a estrapolare i dati in excel ma me li inserisce tutti dentro una sola cella.
    Questo è lo script che ho scritto.
    PHP:
    <?php
        
    // recupero i dati dal file monitoraggio.php
        
    $tabella $_SESSION['nome_monit'];
        
    $monitoraggio_elementi $tabella "_ok";

        
    $conn = new mysqli('localhost''root'''); 
        
    mysqli_select_db($conn'meco'); 

        
    $query_col mysqli_query ($conn"SELECT tabella FROM $monitoraggio_elementi where tabella != '' ORDER BY id");
        while (
    $info_col mysqli_fetch_array ($query_col))
        {
            
    $nomi_colonne $info_col[0];
            
    $array_col[] = $nomi_colonne// nomi colonne
        
    }
        
        
    $select_col implode(',',$array_col); // elenco colonne in formato stringa

        
    $columnHeader '';

        for (
    $i=0$i<= count($array_col) - 1$i++)
        {
            
    $columnHeader .= $array_col[$i] . "\t";
        }

        
    $setData '';

        
    $setSql "SELECT $select_col FROM $tabella ORDER BY id";
        
    $setRec mysqli_query($conn$setSql); 
     
        while (
    $rec mysqli_fetch_row($setRec))
        {
            
    $rowData ''
            foreach (
    $rec as $value)
            {
                
    $rowData .= $value "\t";
            }

            
    $setData .= trim($rowData) . "\n"
        }
        
        
    header("Content-type: application/octet-stream"); 
        
    header("Content-Disposition: attachment; filename=User_Detail_Reoprt.xls"); 
        
    header("Pragma: no-cache"); 
        
    header("Expires: 0");
        
        echo 
    ucwords($columnHeader) . "\n" $setData "\n";
    ?>
    Secondo voi dove può essere il problema?
    Ciao, grazie mille.
     
  18. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    818
    Mi Piace Ricevuti:
    42
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Dalla versione 5.3 in poi è tutto uguale...

    Ricordati la discussione qui :https://forum.mrwebmaster.it/thread...xcel-su-due-fogli-distinti.53241/#post-207103
    I dubbi sono certezze...
    ---------------------------------------------------------------------------------------------------------
    I file citati sono dei TEST, non adatti alla PRODUZIONE ... Ci sta un mondo di differenza...

    In produzione si include la vendor prima di ogni cosa, questo il motivo per il quale si fa prima "include/require" e poi "use" (cosa più logica)...
     
  19. samurai.sette

    samurai.sette Utente Attivo

    Registrato:
    17 Dicembre 2015
    Messaggi:
    187
    Mi Piace Ricevuti:
    5
    Punteggio:
    18
    Ciao Macus_adi.
    Giorni addietro mi hai scritto che hai provato phpspreadsheet su joomla (ultima versione) e ti funziona.
    Mi sorgono due domande:
    1) hai modificato qualche impostazione su joomla?
    2) il codice che hai provato lo hai inserito in un articolo?
    Se hai fatto come ho fatto io comincio a pensare che sia joomla (per chissà quale motivo) a impedirmi di utilizzare phpspreadsheet.
    Ciao, grazie
     
    Ultima modifica: 12 Aprile 2019
  20. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    818
    Mi Piace Ricevuti:
    42
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    no se vuoi ti mando il codice spaghetti code!
    Qui le img....
    index.png dir.png
    Joomla last, php 7.2.1
     
Sto caricando...
Discussioni simili - [PHP] Problema istruzione
  1. twogate
    Risposte:
    5
    Visite:
    181
  2. M35
    Risposte:
    3
    Visite:
    186
  3. ltatas
    Risposte:
    5
    Visite:
    215
  4. tripla_m
    Risposte:
    4
    Visite:
    216
  5. Cosina
    Risposte:
    9
    Visite:
    289

Condividi questa Pagina