Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [PHP+SQL] [header]

  1. #1

    [PHP+SQL] [header]

    Codice PHP:
    <?php 
    $hostname 
    "localhost";
    $database "testing";
    $username "root";
    $password"Silenzio900";
    $connmysql_pconnect($hostname$username$password) or die(mysql_error());
    mysql_select_db($database$conn);
    $query "SELECT data_t1, msisdn, marcaggio FROM tabella";
    $tabella mysql_query($query$conn) or die(mysql_error());
    $row_tabella mysql_fetch_assoc($tabella);
    ?>

    <?php 
    do { 
    $righe.= "\"".$row_tabella['data_t1']."\"\t\"".$row_tabella['msisdn']."\"\t\"".$row_tabella['marcaggio']."\"\n";
    } while (
    $row_tabellamysql_fetch_assoc($tabella));  
    ?>

    <?php
    header
    ("Content-type: application/vnd.ms-excel");
    header("Content-disposition: nomefile.cvs"); 
    ?>



    <?php  
    print $righe;
    exit;
    ?>
    Oggetto: esportare dati da una query all' interno di una tabella in sql a un file excel.

    1° Controllatemi se il codice va bene
    2° Non fa quello che deve fare. Vengono visualizzati alcuni errori, non viene visualizzata la maschera di richiesta download del file excel ma (l'unica cosa che funziona) i dati della query vengono stampati nella pagina come da mia direttiva (print $righe).

    Ecco gli "errori":

    Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\excel.php:13) in C:\xampp\htdocs\excel.php on line 20

    Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\excel.php:13) in C:\xampp\htdocs\excel.php on line 21

  2. #2
    devi togliere ogni spazio presente tra i tag php. Anzi meglio ancora eliminare tutti i tag apertura/chiusura php all'interno dello script. Lascia solo il primo e l'ultimo.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Allora.....
    come prima cosa è sbagliato l'header importante: quello che ti fa apparire il prompt che ti manca.

    Codice PHP:
    // questo è l'header importante
    header("Content-Disposition: attachment; filename=\"nomefile.csv\" ");
    // io aggiungerei anche questi
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Pragma: public"); 
    Con questo dovresti risolvere il tuo primo problema.

    Per il secondo, beh..... se scrivi print($variabile), tu stamperai sempre a video quello che è contenuto in una variabile.
    Per scrivere in un file devi fare così:
    Codice PHP:
    $file "nomefile.csv";
    $apri_il_file_da_scrivere fopen($file"w");
    $scrivici_dentro fwrite($apri_il_file_da_scrivere$righe);
    $chiudi_ed_invia fclose($apri_il_file_da_scrivere); 
    .
    Avrai notato i nomi strambi delle variabili: era per evitare di mettermi a scrivere dei commenti.

    Ora un paio di segnalazioni.

    1) Nel tuo script hai scritto:
    header("Content-disposition: nomefile.cvs");
    Se intendi creare al volo un file COMMA SEPARATED VALUES, l'estensione è CSV.

    2) Ma perché un DO/WHILE? Non ti era più comodo un semplice ciclo WHILE?
    Codice PHP:

    while ($row_tabellamysql_fetch_assoc($tabella)) {
    $righe.= "\"".$row_tabella['data_t1']."\"\t\"".$row_tabella['msisdn']."\"\t\"".$row_tabella['marcaggio']."\"\n";

    Infine, l'errore che ti viene segnalato è classico di quando stampi a video prima di lanciare un header.
    Suppongo che l'header che lancia il prompt di download venisse lanciato proprio dopo che tu a video stampavi il contenuto della tabella, quindi con le correzioni che ti ho segnalato non dovresti più avere problemi.
    Ad ogni modo, ho scritto il codice al volo e potrebbe esserci qualche refuso.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  4. #4
    Codice PHP:
    <?php 
    $hostname 
    "localhost";
    $database "testing";
    $username "root";
    $password"Silenzio900";
    $connmysql_pconnect($hostname$username$password) or die(mysql_error());
    mysql_select_db($database$conn);
    $query "SELECT data_t1, msisdn, marcaggio FROM mpcaring";
    $mpcaring mysql_query($query$conn) or die(mysql_error());
    $row_mpcaring mysql_fetch_assoc($mpcaring);
    ?>

    <?php
    { while ($row_mpcaringmysql_fetch_assoc($mpcaring)) { 
    $righe.= "\"".$row_mpcaring['data_t1']."\"\t\"".$row_mpcaring['msisdn']."\"\t\"".$row_mpcaring['marcaggio']."\"\n"
    }  
    ?>

    <?php
    // questo è l'header importante 
    header("Content-Disposition: attachment; filename=\"nomefile.csv\" "); 
    // io aggiungerei anche questi 
    header("Expires: 0"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Pragma: public"); 
    ?>

    <?php
    $file 
    "nomefile.csv"
    $apri_il_file_da_scrivere fopen($file"w"); 
    $scrivici_dentro fwrite($apri_il_file_da_scrivere$righe); 
    $chiudi_ed_invia fclose($apri_il_file_da_scrivere);

    ?>
    Non funziona ... viene visualizzato questo messaggio: Parse error: syntax error, unexpected $end in C:\xampp\htdocs\excel.php on line 34

    ... dove sbaglio?

  5. #5
    che ci fa la graffa prima del while? e per quale ragione chiudi e riapri il tag php tra la query ed il while?

    In piu' lanci due volte il mysql_fetch_assoc() e ti *fumi* il primo record

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Ho risolto da me ... grazie lo stesso

  7. #7
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    ..sarebbe carino anche sapere COME...

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.