رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در خروجی اطلاعات بانک با فرمت CSV (حل شد)
#1
این کدهای بنده هست :
<?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]
پاسخ
تشکر شده توسط:
#2
خوب شما باید value$ رو چاپ کنید نه name$ رو. برای اینکه توی سطرهای مختلف باشن هم باید آخرش PHP_EOL اضافه کنید.
$seperator .= $comma . $value . PHP_EOL;
پاسخ
تشکر شده توسط: پیام حیاتی
#3
خروجی بدست آمده :


فایل‌های پیوست تصاویر بندانگشتی
   
پاسخ
تشکر شده توسط:
#4
استاد کد دیگری پیدا کردم که مشکلات کد فوق رو نداره و تنها مشکلش بد نمایش دادن اطلاعات فارسی هست ، این کدها :
<?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 موجوده و کالکشن بانک و جدول هم بر همین اساس ایجاد شده است.


فایل‌های پیوست تصاویر بندانگشتی
   
پاسخ
تشکر شده توسط:
#5
این دستورات رو بعد از mysql_select_db اجرا کنید:
mysql_query("SET NAMES \'utf8\'');
mysql_set_charset('utf8');
پاسخ
تشکر شده توسط: پیام حیاتی
#6
تفاوتی نکرد استاد.
پاسخ
تشکر شده توسط:
#7
باید فایل اسکریپتتون هم با کدگذاری UTF-8 without BOM ذخیره شده باشه.
پاسخ
تشکر شده توسط:
#8
(30-05-1395، 08:17 ب.ظ)ADMIN نوشته: باید فایل اسکریپتتون هم با کدگذاری UTF-8 without BOM ذخیره شده باشه.

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


[عکس: joomlaforum.ir_14717278451.jpg]


خروجی :

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




کاربران در حال بازدید این موضوع: 1 مهمان