0

私は 2 つのスクリプトを持っています。1 つは .csv ファイルを書き込む関数を含み、もう 1 つは関数を呼び出します。

ファイル書き込み機能。

<?php
include("config.php");

function exportMysqlToCsv($subid){
$sql = "SELECT * FROM campaigns"; 
$results = mysql_query($sql);
$getpub = mysql_query("SELECT * FROM `publishers` WHERE `username` = '".$_SESSION['username']."'");
$pinfo = mysql_fetch_array($getpub);

// Pick a filename and destination directory for the file 
// Remember that the folder where you want to write the file has to be writable 
$filename = "campaigns_export_pub".$pinfo['id'].".csv"; 

// Actually create the file 
// The w+ parameter will wipe out and overwrite any existing file with the same name 
$handle = fopen($filename, 'w+'); 

// Write the spreadsheet column titles / labels 
fputcsv($handle, array('Campaign ID','Campaign Name','Promoting URL','Category','Rate','Countries','Description','Requirements')); 

// Write all the user records to the spreadsheet 
while($row = mysql_fetch_array($results)) 
{ 
$url = "http://www.rageleads.com/click.php?aid=".$pinfo['id']."&cid=".$row['id']."&sid=".$subid."";
    fputcsv($handle, array($row['id'], $row['name'], $url, $row['category'], $row['rate'], $row['countries'], $row['description'], $row['requirements'])); 
} 

// Finish writing the file 
fclose($handle); 

header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename='.$filename");
readfile($filename);
unlink($filename);
exit();
}
?>

関数呼び出し。

<?php
include("config.php");
include("header.php");
include("functions.php");
include("export.php");

$subid = cleanQuery($_POST['subid']);

if($_POST['submit']){
exportMysqlToCsv($subid);
}

print"
<div id='center'>
<table class='balances'>
<form method='POST' action=''>
<tr>
<td>Sub ID Placeholder:</td>
<td><input type='text' name='subid' /></td>
</tr>
<tr>
<td></td>
<td><input type='submit' name='submit' value='Export' /></td>
</tr>
</form>
</table>
</div>";

include("footer.php");
?>

私が抱えている問題は、関数で定義されている方法で .csv ファイルを記述する代わりに、関数呼び出しがオンになっているページの実際の html コードを記述してから、関数で定義されている情報を追加することです。ファイル書き込み関数を書いたのはこれが初めてなので、どこかで何かを台無しにしたと確信していますが、何が間違っていたのかはよくわかりません。

関数ではないものとして export.php を設定し、ページに移動するだけで、それが定義されている正しい形式で csv ファイルを書き込んでダウンロードします。

助言がありますか?

編集:以前にそれをしなかった理由はわかりませんが、サーバー上に作成されたcsvファイルを確認すると、すべてが正しいため、ヘッダーの何かがこの追加情報を送信していますが、どれがわかりません1つ、またはその理由。

4

1 に答える 1

1

代わりにこれを試してください。CSV データを送信する場合は、それが唯一のものであることを確認してください。それ以外の場合は、HTML ファイルを送信します。HTML と CSV の両方を明示的に送信していました。

$subid = cleanQuery($_POST['subid']);
if($_POST['submit']) {
    exportMysqlToCsv($subid);
} else {
    include("config.php");
    include("header.php");
    include("functions.php");
    include("export.php");

    print"
    <div id='center'>
    <table class='balances'>
    <form method='POST' action=''>
    <tr>
    <td>Sub ID Placeholder:</td>
    <td><input type='text' name='subid' /></td>
    </tr>
    <tr>
    <td></td>
    <td><input type='submit' name='submit' value='Export' /></td>
    </tr>
    </form>
    </table>
    </div>";

    include("footer.php");
}
于 2012-11-02T16:23:22.483 に答える