1 min read

PHP ile MySQL verilerini Excele Aktarma

MySQL de tuttuğumuz bilgileri bazen Excele aktarmamız gerekebiliyor. Php ile bunu yapmak oldukça basit. Fakat kodlamaya başlamadan önce gidiş haritamızı çizelim. MySQL verilerini aktarırken oluşacak Türkçe karakter sorunlarını çözelim.

  1. Veritabanı bağlantısı oluştur.
  2. Dosya adını belirle.
  3. Hangi tabloyu bastıracağımız belirt.
  4. Döngüye  alarak satırları ve sütunları doldur.
  5. Satır ve sütunlarda oluşacak Türkçe Karakter sıkıntılarını çöz.
  6. Dosyayı serverımıza kaydet.
  7. Yazdırdığımız dosyayı indir.

MySQL veritabanımızı Excele aktarırken öncelikle 2 sayfa oluşturacağız ve bunlar olustur.php ile indir.php  adında olacaklar. Ardından aşağıdaki kodları kullanabiliriz.

 
<?
// Veritabanı Bağlantısı
$host="alperenozlu.com";
$db="alperenozludatabaseadi";
$user="alperenozlu_kullaniciadi";
$pass="alperenozlu_sifree";
$conn=@mysql_connect($host,$user,$pass) or die("Mysql Baglanamadi");
mysql_select_db($db,$conn) or die("Veritabanina Baglanilamadi");
mysql_set_charset('utf8',$conn);
mysql_query("SET COLLATION_CONNECTION = 'latin5_turkish_ci' ");
if(isset($_POST["excelolustur"])){ // FORM SONUC
$dosya = "olusturalacakdosya.xls"; // EXCEL TABLOSU ADI
$yaz = @fopen($dosya,'w+'); 
$tablo_adi = "tabloadi"; // Tablo Adi
$tablo_sorgu = mysql_query("select * from $tabloadi");

fwrite($yaz,"Adt Soyadt Bolumt Emailt Telefont n");
// Bu kod aşağıdaki şemayı çıkarmaktadır.
// A  | B  |   C   |  D  |   E   
// -----------------------------
// ID | Ad | Soyad | Yaş | Email
// -----------------------------

while ($tablo_sonuc = mysql_fetch_row($tablo_sorgu)) {
// Türkçe karakterini çözmek için;
// mb_convert_encoding($tablo_sonuc[sayi], "iso-8859-9", "UTF-8"); kullanılır.
$sutun0 = $tablo_sonuc[0]; // Id olduğu için karakter düzeltmedik. 
$sutun1 = mb_convert_encoding($tablo_sonuc[1], "iso-8859-9", "UTF-8");
$sutun2 = mb_convert_encoding($tablo_sonuc[2], "iso-8859-9", "UTF-8");
$sutun3 = $tablo_sonuc[3]; // Yaş olduğu için karakter düzeltmedik. 
$sutun4 = $tablo_sonuc[4]; // E-posta olduğu için karakter düzeltmedik. 

fwrite($yaz,"$sutun0t $sutun1t $sutun2t $sutun3t $sutun4tn"); 

//Gelen verileri satırlara yazdırdık.
}

mysql_free_result($tablo_sorgu); 
fclose($yaz);
echo "İşlem Tamamlandı"; 
exit;
}
?>
<FORM ACTION="?page=olustur" method="post">
<INPUT TYPE="submit" value="Verileri Aktar" name="excelolustur"> 
</FORM>

İndirme sayfası için ise şöyle bir kod yazabiliriz. (Bazı excel sürümlerinde otomatik indirmeyebilir, eğer bir hata olursa yorum kısmına yazınız)

<?php
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="indirelecekdosyaaadi.xls"'); // <-- düzenleyin
header ('Content-Transfer-Encoding: binary');
header('Cache-Control: max-age=0');
$dosyayolu = "uploads/excel.xls"; // <-- düzenleyin
readfile($dosyayolu);

?>