2013-05-14 5 views
1

J'ai extrait des données de ma base de données et les ai affichées sur une page Web au format tableau. J'ai fourni un lien sur cette page qui permet à l'utilisateur de télécharger ces données sous forme de fichier CSV. Cela fonctionne correctement jusqu'à présent et lorsque l'utilisateur suit le lien sous les données affichées, il leur permet de le sauvegarder.Envoyer un fichier CSV par courrier électronique avec PHP

Il envoie également un e-mail avec le fichier CSV en pièce jointe. Cependant, le CSV dans la pièce jointe est vide et je ne sais pas pourquoi. Tout ce que je veux, c'est pour les données de la base de données qui est placé dans un fichier CSV téléchargeable pour aller aussi dans le CSV ci-joint et je ne peux pas le faire.

Quelqu'un pourrait-il m'aider?

Voici le code que j'ai jusqu'à présent:

// Create CSV file 
fputcsv($output, array('Name', 'Branch', 'Website','Company', 'Question1', 'Question2', 'Question3', 'Question4', 'Question5')); 

$mysql_connection = db_connect_enhanced('*******','******','******','******'); 
$query='SELECT * FROM ****.****'; 
$surveys = db_query_into_array_enhanced($mysql_connection, $query); 
$count = count($surveys); 
$data = array(); 
    for($i=0; $i<=$count; $i++){ 
    $data[] = array($surveys[$i]['FeedbackName'], $surveys[$i]['BranchName'], $surveys[$i]['FeedbackWebsite'], $surveys[$i]['FeedbackCompany'], $surveys[$i]['Question1'], $surveys[$i]['Question2'], $surveys[$i]['Question3'], $surveys[$i]['Question4'], $surveys[$i]['Question5']); 
} 

foreach($data as $row) 
{ 
    fputcsv($output, $row, ',', '"'); 
} 

$encoded = chunk_split(base64_encode($data)); 

// create the email and send it off 

$subject = "File you requested from RRWH.com"; 
$from = "***************"; 
$headers = 'MIME-Version: 1.0' . "\n"; 
$headers .= 'Content-Type: multipart/mixed; 
    boundary="----=_NextPart_001_0011_1234ABCD.4321FDAC"' . "\n"; 

$message = ' 

This is a multi-part message in MIME format. 

------=_NextPart_001_0011_1234ABCD.4321FDAC 
Content-Type: text/plain; 
     charset="us-ascii" 
Content-Transfer-Encoding: 7bit 

Hello 

We have attached for you the PHP script that you requested from http://rrwh.com/scripts.php 
as a zip file. 

Regards 

------=_NextPart_001_0011_1234ABCD.4321FDAC 
Content-Type: application/octet-stream; name="'; 

$message .= "surveys.csv"; 
$message .= '" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment; filename="'; 
$message .= "surveys.csv"; 
$message .= '" 

'; 
$message .= "$encoded"; 
$message .= ' 

------=_NextPart_001_0011_1234ABCD.4321FDAC-- 

'; 
mail("*************", $subject, $message, $headers, "-f$from"); 
fclose($output); 

Il se sent comme je suis si proche, mais je ne peux pas voir la réponse :(

+0

Vous générez le fichier '$ output', mais je ne vois pas où vous l'attachez au courriel. – andrewsi

+0

bien l'email envoie avec une pièce jointe au format CSV. c'est juste que cette pièce jointe est vide ... Excel ouvre avec une page blanche – user2381872

+0

question de chemin, doit être. –

Répondre

1

Modifier cette ligne:

$message .= "$encoded"; 

Avec celui-ci:

$message .= $encoded; 
+0

J'ai changé ça ...mais il n'a pas fait de différence – user2381872

0

Ceci est seulement un « SUGGESTIVE » réponse:

Voici ce que j'utilise pour joindre des fichiers et il fonctionne pour moi et il peut vous aider à « BASE »-vous avec le problème que vous rencontrez.

$file_path = "/path_to_your/$file_name"; 
$file_path_name = "$file_name"; // this file name will be used at receiver end 

$file = fopen($file_path,'rb'); 
$data = fread($file,filesize($file_path)); 
fclose($file); 

$rand = md5(time()); 
$mime_boundary = "==Multipart_Boundary_x{$rand}x"; 

$headers .= "\nMIME-Version: 1.0\n" . 
"Content-Type: multipart/mixed;\n" . 
" boundary=\"{$mime_boundary}\""; 

$message .= "This is a multi-part message in MIME format.\n\n" . 
"--{$mime_boundary}\n" . 
"Content-Type:text/html; charset=\"iso-8859-1\"\n" . 
"Content-Transfer-Encoding: 7bit\n\n" . 
$message .= "\n\n"; 

$data = chunk_split(base64_encode($data)); 

$message .= "--{$mime_boundary}\n" . 
"Content-Type: {$file_path_type};\n" . 
" name=\"{$file_path_name}\"\n" . 
"Content-Disposition: attachment;\n" . 
" filename=\"{$file_path_name}\"\n" . 
"Content-Transfer-Encoding: base64\n\n" . 
$data .= "\n\n" . 
"--{$mime_boundary}--\n"; 
+0

je peux obtenir la pièce jointe pour aller avec l'email ... mon problème est le fichier CSV qui est envoyé est vide ... qui me laisse juste penser qu'il y a un problème quelque part le long de la ligne pour obtenir les données – user2381872

+0

@ user2381872 Je suis assez sûr que vous devez d'abord définir le chemin du fichier comme indiqué dans mon exemple. Avez-vous aussi utilisé la suggestion de Robert Rozas? Je pense que ce qui se passe, c'est que puisqu'il n'y a pas de contenu écrit, il crée quand même le fichier et l'envoie. –

Questions connexes