تالار گفتمان nCIS.ir

نسخه‌ی کامل: مشکل در خروجی اطلاعات بانک با فرمت CSV (حل شد)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
این کدهای بنده هست :
<?php 
//require_once 'includes/student_mysqli.php';   
if(isset($_POST['sub_csv'])){
   $conn=mysql_connect("localhost","root","");
   mysql_select_db("school",$conn);
   
  $filename='uploads/'.strtotime("now").'.csv';
   
   $fp=fopen($filename,"w");
   
   $sql=mysql_query("SELECT * FROM student");
   $num_rows=mysql_num_rows($sql);
   if($num_rows >=1)
   {
   $row=mysql_fetch_assoc($sql);
   
   $seperator="";
   $comma="";
   
   foreach($row as $name => $value)
   {
       $seperator .= $comma . '' .str_replace('','""',$name);
       $comma=",";
   }
   $seperator .="n";
   fputs($fp,$seperator);
       fclose($fp);
   }
   
   else
   {
       echo 'No record in database';
   }
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Students Page</title>
</head>

<body>
<div align="center">
<form method="post"> 
<input type="submit" name="sub_csv" value="Download CSV Format">
</form>
</div>
</body>
</html>

مشکل اینجاست فقط نام فیلدهای جدول در خروجی چاپ می شود و مقادیر آنها وجود ندارد ، همگی نیز در یک سطر و ستون قرار می گیرند ، تصویر :

[عکس: joomlaforum.ir_14711074491.png]
خوب شما باید value$ رو چاپ کنید نه name$ رو. برای اینکه توی سطرهای مختلف باشن هم باید آخرش PHP_EOL اضافه کنید.
$seperator .= $comma . $value . PHP_EOL;
خروجی بدست آمده :
استاد کد دیگری پیدا کردم که مشکلات کد فوق رو نداره و تنها مشکلش بد نمایش دادن اطلاعات فارسی هست ، این کدها :
<?php
mysql_connect('localhost', 'root', '');
mysql_select_db('school');

// output headers so that the file is downloaded rather than displayed
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');


// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');


// output the column headings
fputcsv($output, array('Column 1', 'Column 2', 'Column 3'));


// fetch the data


$rows = mysql_query('SELECT * FROM student');


// loop over the rows, outputting them
while ($row = mysql_fetch_assoc($rows)) fputcsv($output, $row);


?>
عبارت های فارسی :
[عکس: joomlaforum.ir_14714340581.png]

اگر از کد :
mysql_query('set names "utf8"');
قبل از کوئری یا کد انتخاب بانک استفاده کنم ، نتیجه :
[عکس: joomlaforum.ir_14714340582.png]
در صفحه تگ متا utf-8 موجوده و کالکشن بانک و جدول هم بر همین اساس ایجاد شده است.
این دستورات رو بعد از mysql_select_db اجرا کنید:
mysql_query("SET NAMES 'utf8'');
mysql_set_charset('utf8');
تفاوتی نکرد استاد.
باید فایل اسکریپتتون هم با کدگذاری UTF-8 without BOM ذخیره شده باشه.
(30-05-1395، 08:17 ب.ظ)ADMIN نوشته: [ -> ]باید فایل اسکریپتتون هم با کدگذاری UTF-8 without BOM ذخیره شده باشه.

استاد با BOM ذخیره کردم درست شد Smile.


[عکس: joomlaforum.ir_14717278451.jpg]


خروجی :

[عکس: joomlaforum.ir_14717279881.jpg]
مایکروسافته دیگه. علاقه به BOM داره. توی همه‌جای دنیا به این نتیجه رسیدن که BOM رو حذف کنن ولی این ساز ناکوک همیشه باید صدای گوشخراشش در بیاد.