• User

    Inviare file Excel autocompilato via mail..si ma come?

    Ciao ragazzi dovrei creare un file xls tramite una query e infatti ci sono riuscito tramite questo script:

    
    
    <?php
    $manufacturers_id="6";
    
    //connessione DB
        
    $filename="export.xls";
    header ("Content-Type: application/vnd.ms-excel");
    header ("Content-Disposition: inline; filename=$filename");
    ?>
    <html><head><title>Export</title></head><body>
    <table border="1">
      <tr>
       <th>Quantità</th>
       <th>Codice Articolo</th>
       <th>Variabile 1</th>
       <th>Variabile 2</th>
      </tr>
    <?
    $risultato_query = mysql_query("SELECT * FROM tabella WHERE prodotto_id = '{$prodotto_id}'");
     
    while ($row=mysql_fetch_array($risultato_query))
    {
    ?>
     <tr>
      <td><? echo $row['quantita_ordine']; ?></td>
      <td><? echo $row['products_codice']; ?></td>
      <td><? echo $row['products_attributo1var']; ?></td>
      <td><? echo $row['products_attributo2var']; ?></td>
     </tr>
    <?
    }
    ?>
    </table> 
    </body></html>
    <?
    @mysql_close($connessione); 
    ?> 
    
    // START  parte di codice per l'invio della mail..
    
    / ASSEGNIAMO A VARIABILI PIU' LEGGIBILI, LE PROPRIETA' DELL'ALLEGATO
    $attach = $filename["tmp_name"];
    $file_name = $filename["name"];
    $file_type = $filename["type"];
    $file_size = $filename;
    
    // DELIMITATORE
    $boundary = md5(uniqid(microtime()));
    
    // APRIAMO L'ALLEGATO PER LEGGERLO E CODIFICARLO
    $file = @fopen($attach, "r");
    $contents = @fread($file, $file_size);
    $encoded_attach = chunk_split(base64_encode($contents));
    @fclose($file);
    
    // INTESTAZIONI DELLA MAIL
    $mail_headers .= "MIME-version: 1.0\n";
    $mail_headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";
    $mail_headers .= "X-attachments: $file_name\n";
    
    //Creo GLI altri campi per la mail $Destinatario, $Soggetto, $mail_body
    ..................................   
    .................................
    .................................
    
    // INVIO DELLA MAIL
    mail($Destinatario, $Soggetto, $mail_body, $mail_headers)
    
    
    

    Il problema è che mi chiedi di salvare manualmente il file xls che tra l'altro è stato compilato adhoc con i campi da me richiesti..

    Ma io invece vorrei far si che anzichè chiedermi di salvarlo, me lo alleggasse alla mail, quindi me lo "passasse" ($filename) alla parte di codice piu in basso che per l'appunto mi genera la mail e me la invia..

    Come posso fare?

    Grazie a tutti!


  • ModSenior

    Ciao ale1kids,

    Devi salvare quell'output in una variabile, e al posto di:
    [php]
    // APRIAMO L'ALLEGATO PER LEGGERLO E CODIFICARLO
    $file = @fopen($attach, "r");
    $contents = @fread($file, $file_size);
    $encoded_attach = chunk_split(base64_encode($contents));
    @fclose($file);
    [/php]
    Metti:
    [php]
    $encoded_attach = chunk_split(base64_encode($output));
    [/php]


  • User

    ok scusa ma $output a cosa è uguale?Come setto questa variabile?

    Grazie intanto..:smile5:


  • ModSenior

    In $output ci deve essere quello che attualmente mandi come output, il contenuto dell'allegato.


  • User

    Ok allora mi sa che non mi sono spiegato bene..:bho:

    Dunque, io eseguo una query su DB selezionando dei campi, che vorrei salvare su un xls e di seguto inviarli come allegato di una mail ad un destinatario..

    So come creare un xls e so come mandare una mail con allegato..ma qui non so come unire le due cose..

    Infatti l'xls me lo crea bene con i dati che gli spedisco dalla query ma anzichè allegarmelo mi chiedie il browser se lo voglio scaricare..
    Leggendo in giro mi hanno detto che il problema potrebbe risiedere in queste righe:

    
    $filename="export.xls";
    header ("Content-Type: application/vnd.ms-excel");
    header ("Content-Disposition: inline; filename=$filename");
    
    
    ```e che potrei risolvere qualcosa applicando queste modifiche:
    
    > 
    Elimina le varie chiamate ad header, utilizza ob_start() + ob_get_clean() per salvare in $contents i dati che stai mandando all'output buffer.
    Ma non so come utilizzare quelle variabili..non so come modificare il mio codice per fare andare il tutto..
    
    Questo è tutto..riesci magari a darmi qualche indicazioni in piu prendendo come campione ilmio codice?
    
    Grazie di cuore..:vai:

  • ModSenior

    [php]
    <?php
    $manufacturers_id="6";

    //connessione DB

    $output = '
    <html><head><title>Export</title></head><body>
    <table border="1">
    <tr>
    <th>Quantità</th>
    <th>Codice Articolo</th>
    <th>Variabile 1</th>
    <th>Variabile 2</th>
    </tr>';
    <?php
    $risultato_query = mysql_query("SELECT * FROM tabella WHERE prodotto_id = '{$prodotto_id}'");

    while ($row=mysql_fetch_array($risultato_query))
    {
    $output .= '
    <tr>
    <td>'.$row['quantita_ordine'].'</td>
    <td>'.$row['products_codice'].'</td>
    <td>'.$row['products_attributo1var'].'</td>
    <td>'.$row['products_attributo2var'].'</td>
    </tr>
    ';
    }
    $output .= '
    </table>
    </body></html>
    ';
    ?>

    // START parte di codice per l'invio della mail..

    // DELIMITATORE
    $boundary = md5(uniqid(microtime()));

    $encoded_attach = chunk_split(base64_encode($output));

    // INTESTAZIONI DELLA MAIL
    $mail_headers .= "MIME-version: 1.0\n";
    $mail_headers .= "Content-type: multipart/mixed; boundary="$boundary"";
    $mail_headers .= "X-attachments: $file_name\n";

    //Creo GLI altri campi per la mail $Destinatario, $Soggetto, $mail_body
    ..................................
    .................................
    .................................

    // INVIO DELLA MAIL
    mail($Destinatario, $Soggetto, $mail_body, $mail_headers)
    [/php]


  • User

    Facendo come mi hai detto tu mi allega alla mail un file "m" senza estenzione..se lo apro con un editor dentro mi ritrovo questo:

    rder="1">
    <tr>
    <th>Quantità</th>
    <th>Codice Articolo</th>
    <th>Variabile 1</th>
    <th>Variabile 2</th>
    </tr>
    <tr>
    <td>2</td>
    <td>LA.23456</td>
    <td>Blu</td>
    <td>L</td>
    </tr>

    <tr>
    <td>4</td>
    <td>LA.23456</td>
    <td>Verde</td>
    <td>M</td>
    </tr>

    <tr>
    <td>6</td>
    <td>LA.23456</td>
    <td>Verde</td>
    <td>L</td>
    </tr>

    <tr>
    <td>1</td>
    <td>LA.23456</td>
    <td>Blu</td>
    <td>M</td>
    </tr>

        </table> 
        </body></html>
    

    Vorrei avere un xls come allegato..come faccio?e sopratutto dove posso settare il nome del suddetto allegato?

    Grazie infinite davvero!Dai che vedo una piccola luce infondo al tunnell..


  • ModSenior

    Invece di:
    [php]
    $mail_headers .= "X-attachments: $file_name\n";
    [/php]
    metti:
    [php]
    $mail_headers .= "X-attachments: nome.xls\n";
    [/php]


  • User

    Ok il problema è che anche se metto così mi mette come allegato si è vero tipo "file.xls" ma quando lo apro con excel mi fa vedere il codice html per costruire una tabella e non me lo impagina lui automaticamente..

    help..:?