Avatar billede jdjensen Juniormester
24. november 2011 - 14:06 Der er 5 kommentarer og
1 løsning

Udtræk tabel, gem som excelfil og vedhæft i en mail

Hej,

Jeg brug for hjælp til at færdiggøre min mail.php fil.
Det jeg kort og godt ønsker det skal gøre er følgende:

Step1: Mail.php køres automatisk kl. 23.59 hver aften (eller hvis mail.php tilgås manuelt)
Step2: Gem alt data fra den pågældende dag i $tbl_name som en excel-fil
Step3: Vedhæft excel-filen i en mail og send den

Håber der er en venlig sjæl der vil hjælpe da min php kendskab er begrænset. Her er hvad jeg har so far i mail.php filen:

(div)

<!-- DATABASE -->

<?php
$host = "-"; // Host name
$username = "-"; // Mysql username
$password = "-"; // Mysql password
$db_name = "-"; // Database name
$tbl_name = "-"; // Table name

// Connect to server and select database
mysql_connect("$host", "$username", "$password")or die("Cannot connect");
mysql_select_db("$db_name")or die("Cannot select DB");

// Save $tbl_name as an attachment (excel) and include it in Mail later

    $sql = 'SELECT * FROM '.$tbl_name.' WHERE `date`=CURDATE()';

?>

<!-- MAIL IT WITH THE ATTACHMENT -->

<?php
// multiple recipients
$to  = 'name@example.dk';

// subject
$subject = 'Dagens udtræk';

// message
$message = '
<html>
<head>
  <title>Dagens udtræk</title>
</head>
<body>
  <p>Vedhæftet er tabellen for dagens tilmeldinger!</p>
</body>
</html>
';

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'From: Kalender <noreply@example.dk>' . "\r\n";
$headers .= "Reply-To: myplace2@here.com\r\n";
$headers .= "Return-Path: myplace@here.com\r\n";
$headers .= 'Cc: jd@example.dk' . "\r\n";
$headers .= 'Bcc: jd@example.dk' . "\r\n";

// Mail it
mail($to, $subject, $message, $headers);
?>

(/div)
Avatar billede mcardle Nybegynder
27. november 2011 - 17:59 #1
Her er en lille tut til dit excel-problem, så kan du starte med den :)

http://net.tutsplus.com/tutorials/php/how-to-generate-a-complete-excel-spreadsheet-from-mysql/

//mcardle
Avatar billede olsensweb.dk Ekspert
27. november 2011 - 20:51 #2
hvorfor gemme i excel ??
hvis det bare er rå data, hvorfor ikke bare gemme som en csv fil, og åbne den i excel.
http://php.net/manual/en/function.fputcsv.php
Avatar billede jdjensen Juniormester
28. november 2011 - 10:39 #3
En CSV-fil er helt perfekt. Men vil så gerne have at min mail.php vedhæfter filen i en mail og sender den. Har ikke rigtig nogen idé om hvordan jeg gør det.

Mine kolonner i tabellen er:

id, firstname, lastname, emailaddress, answer, newsletter, date

Datatyper (samme rækkefølge):

int(11) + AUTO_INCREMENT, text, text, text, text, int(1), date
Avatar billede olsensweb.dk Ekspert
28. november 2011 - 18:10 #4
step 1 kan gøres via cronjob
http://www.cronjob.de/
http://www.onlinecronjobs.com/

step 2
løst lavet som csv

step3
du har selvføgelig læst http://php.net/manual/en/function.mail.php ikk
http://phpartikler.dk/artikler/mail.php
http://www.geekology.co.za/blog/2009/06/sending-emails-with-attachments-using-php-mail-function/
du kunne google "php email attach csv file" http://www.google.dk/search?q=php+email+attach+csv+file

dette virkede for mig:
hver gang jeg besøger siden sender den mig en mail med alle brugere

index.php
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title></title>
    <style type="text/css">
    </style>
    <script type="text/javascript">
    </script>
</head>
<body>
<?php
    // lav liste af brugere
    require_once("db_conn.php");
    $sql = 'SELECT * FROM users';
    $rs = mysql_query($sql, $conn);       
    while($row = mysql_fetch_assoc($rs)){
            $info[]=array($row['id'], $row['firstname'], $row['lastname'], $row['emailaddress']);
    }
       
    $filename ="file.csv";
    // gem listem som en csv file
    // http://php.net/manual/en/function.fputcsv.php Example #1 fputcsv() example
    $fp = fopen($filename, 'w');
    foreach ($info as $fields) {
        fputcsv($fp, $fields);
    }
    fclose($fp);
   
    // send mailen med csv filen som attachment
    $file =     file_get_contents($filename);

    $to = "test@invalid.mailaddresse.dk";

    $subject =     'PHP Mail Attachment Test';

    $bound_text =     "ronny olsen";

    $bound =     "--".$bound_text."\r\n";
    $bound_last =     "--".$bound_text."--\r\n";

    $headers =     "From: xxx@example.com\r\n";
    $headers .= "MIME-Version: 1.0\r\n"    ."Content-Type: multipart/mixed; boundary=\"$bound_text\"";

    $message .=     "If you can see this MIME than your client doesn't accept MIME types!\r\n".$bound;
    $message .=     "Content-Type: text/html; charset=\"UTF-8\"\r\n"."Content-Transfer-Encoding: 7bit\r\n\r\n"."user list\r\n".$value.$bound;    
    $message .=     "Content-Type: application/csv; name=\"test.csv\"\r\n"
      ."Content-Transfer-Encoding: base64\r\n"
      ."Content-disposition: attachment; file=\"test.csv\"\r\n"
      ."\r\n"
      .chunk_split(base64_encode($file))
      .$bound_last;
   
    if(mail($to, $subject, $message, $headers)){
        echo 'MAIL SENT SUCCESSFULLY';
    } else {
        echo 'MAIL SENDING FAILED';
    }   
?>
</body>
</html>


du skal selvføgelig lave sql sætningen om til at passe din db, og vælge de felter du vil have med, samt "to" i mail sectionen
coden er lagt fra optimeret, men burde give dig en ide til hvordan du kan gøre


et alternativ til mail er:
http://swiftmailer.org/
http://phpmailer.worxware.com/
Avatar billede jdjensen Juniormester
12. januar 2012 - 21:44 #5
Tak for hjælpen. Vil du smide et svar ronols?
Avatar billede olsensweb.dk Ekspert
12. januar 2012 - 22:57 #6
får du her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester