2013-05-15 14 views
-2

我试图从数据库中获取数据并将其显示在一个可下载并通过电子邮件发送给某人的CSV文件中。我设法使可下载文件正常工作,并显示所有正确的数据。它还会将CSV文件发送给必要的人员,但该CSV文件是空的,并且不会显示任何数据。我的CSV附件是空的! PHP

这里是我的代码:

$myroot = "../../"; 
    include($myroot . "inc/functions.php"); 
     // output headers so that the file is downloaded rather than displayed 
     header('Content-Type: text/csv; charset=utf-8'); 
     header('Content-Disposition: attachment; filename=surveys.csv'); 
     $output = fopen('php://output', 'w'); 
// 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, ',', '"'); 
} 
fclose($output); 

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

// create the email and send it off 

$subject = "File you requested from RRWH.com"; 
$from = "*****@*****.com"; 
$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("*****@*****.com", $subject, $message, $headers, "-f$from"); 

我花了一天时间,并在此半,但我不能看到问题。有人能告诉我为什么附加的CSV文件是空的吗?

我得到那种绝望,并强调了:(请帮助我的人。

+0

如果可能,我会建议使用库来处理邮件,SwiftMailer会真的让这个任务更简单。 – gunnx

+0

我觉得我几乎在那里与我的代码我真的很想保留它而不是报废 – user2381872

回答

0

base64_encode()预计该参数是一个字符串,你给它一个(封闭的)资源。 尝试读取资源成一个字符串,或使用file_get_contents或建立您的字符串,而你写到资源

更新:

去替代

foreach($data as $row) 
{ 
    fputcsv($output, $row, ',', '"'); 
} 
fclose($output); 
$encoded = chunk_split(base64_encode($output)); 

通过

$myoutput = '"Name","Branch","Website","Company","Question1","Question2","Question3","Question4","Question5"'; 
foreach($data as $row) 
{ 
    $myoutput .= "\"".implode('","',$row)."\"\n"; 
    fputcsv($output, $row, ',', '"'); 
} 
fclose($output); 
$encoded = chunk_split(base64_encode($myoutput)); 

这样,你写到您的输出的一切,你也写入到一个新的变量($myoutput)。由于这是一个字符串,你可以使用base64_encode()

+0

对不起,我不明白。如何将资源读入字符串?或者我如何使用file_get_contents? – user2381872

+0

Thankyou !!!这个小小的变化已经修复了它,现在它工作:)这个废话48小时,你很容易解决它哈哈再次感谢 – user2381872

+0

请记住,我会认为这是一个“黑客”。这不是优雅的,但它在大多数时间起作用。 – Jens