使用PHP按钮生成CSV时,在CSV文件中附加两次内容
这是我生成csv文件的代码。当我点击php按钮生成csv文件时,它是根据数据库中的“类别”列填充的内容。但我这里的问题是,内容在csv文件中填充了两次,如下所示。请帮助我了解我必须修改代码的位置,以便我只能按预期获得一次填充的内容,如下图所示。提前感谢 createcsv.php使用PHP按钮生成CSV时,在CSV文件中附加两次内容,php,mysql,csv,Php,Mysql,Csv,这是我生成csv文件的代码。当我点击php按钮生成csv文件时,它是根据数据库中的“类别”列填充的内容。但我这里的问题是,内容在csv文件中填充了两次,如下所示。请帮助我了解我必须修改代码的位置,以便我只能按预期获得一次填充的内容,如下图所示。提前感谢 createcsv.php <?php $servername = "localhost"; $username = "user"; $password = ""; $dbname = "stats"; define("DB_SERVE
<?php
$servername = "localhost";
$username = "user";
$password = "";
$dbname = "stats";
define("DB_SERVER", "localhost");
define("DB_NAME", "stats");
define("DB_USER", "user");
define("DB_PASSWORD", '');
$dbconn = @mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD);
$conn = @mysql_select_db(DB_NAME,$dbconn);
// Create connection
//$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
echo "DB connection failed";
}
// Query DB to fetch hit count for each category and in turn create corresponding .csv file
function createCSVFile($type) {
$msql = "SELECT TRIM(TRAILING '.000000' from UNIX_TIMESTAMP(hitdate)*1000) as unixdate,count from h_stats where category='".$type."' order by unixdate asc";
$query = mysql_query($msql);
$type = str_replace(' ', '', $type);
$tmp_file = "data/tmp_".$type.".csv";
$fp = fopen("$tmp_file", "w");
// Write the query contents to temp file
while($row = mysql_fetch_array($query))
{
fputcsv($fp, $row);
}
fclose($fp);
// Modify the contents of the file as per the high chart input data format
$fp = fopen("$tmp_file", 'r+');
rewind($fp);
$file = "data/".$type.".csv";
$final = fopen("$file", 'w');
while($line = fgets($fp)){
trim($line);
$line = '['.$line.'],';
fputs($final,$line);
}
// Append var $type and remove the trailing ,
$final = file_get_contents($file);
$content = 'var '.$type .'= [' . rtrim($final, ","). ']';
file_put_contents("$file",$content);
}
// Query DB to fetch success/failure count for Hits and in turn create corresponding .csv file
function createHitOutcomeCSVFile($type,$category) {
$sql = "SELECT TRIM(TRAILING '.000000' from UNIX_TIMESTAMP(hitdate)*1000) as unixdate,".$type." from h_stats where category='".$category."' order by unixdate asc";
$query = mysql_query($sql);
$tmp_file = "data/tmp_".$type."_".$category.".csv";
$fp = fopen("$tmp_file", "w");
// Write the query contents to temp file
while($row = mysql_fetch_array($query)){
fputcsv($fp, $row);
}
fclose($fp);
// Modify the contents of the file as per the high chart input data format
$fp = fopen("$tmp_file", 'r+');
rewind($fp);
$category = str_replace(' ', '', $category);
$file = "data/".$type."_".$category.".csv";
$final = fopen("$file", 'w');
while($line = fgets($fp)){
trim($line);
$line = '['.$line.'],';
fputs($final,$line);
}
// Append var $type and remove the trailing ,
$final = file_get_contents($file);
$content = 'var '.$type.'_'.$category.'= [' . rtrim($final, ","). ']';
file_put_contents("$file",$content);
}
// Invoke function to create the Hits.csv file
createCSVFile('Hits');
// Invoke function to get Three Hits csv file
createHitOutcomeCSVFile('TCount','Hits');
// Invoke function to get O2 Hits csv file
createHitOutcomeCSVFile('BCount','Login');
echo "Generated successfully";
?>
符合highcharts格式的预期csv文件:
var Login_Hits= [[1427826600000,8763
]]
尝试调试它…这将比看到打字错误更容易…
tmp文件似乎已损坏…
尝试显示
$row
变量和$query
问题可能来自这里…在while循环中,我在两个函数中都使用了mysql\u fetch\u assoc而不是mysql\u fetch\u数组
while($row = mysql_fetch_assoc($query))
{
fputcsv($fp, $row);
}
内容在Csv文件中不会重复两次。这很有效,请尝试 @random是的,正如你所说,我已经重复了它。它只是从那里来的。但是为了调试起见,我已经将它重命名为$query1和$row1,但我没有得到它。你能告诉我们它们的内容吗?这会有帮助;)@Csv文件中的随机信息我得到的数据重复如下:var Login_Hits=[[142782660000014278266000087638763]]而不是var Login_Hits=[[1427826600008763]]并且我得到的是mysql_fetch_array()期望参数1是资源错误我想你的tmp文件中也有这个?但是你的
$row
和$query
的内容呢?@random我已经将函数改为mysql\u fetch\u assoc in while循环,现在它工作正常。感谢你的回答。它是如何连接到Highcharts库的?@Pawel Fus Csv文件格式是Highcharts的。因此我给了Highcharts标签。
while($row = mysql_fetch_assoc($query))
{
fputcsv($fp, $row);
}