
İçerikler
Daha önce, Php ile Excel Dosyasına Veri Yazdırma işleminin nasıl yapıldığını işlemiştik. Dersimizde, veri tabanında yer alan verileri excel’e aktarmıştık. Bu dersimizde ise bu işlemin tam tersini yapacağız. Excel de yer alan verileri önceli listeleyeceğiz sonrasındaysa MySQL veri tabanına kayıt edeceğiz.
Veri tabanından excel’e veri aktarma sırasında herhangi bir kütüphane kullanmaya gerek duymamıştık. Fakat bu dersimizde, excel de yer alan verileri okutmak için PhpExcel kütüphanesini kullanacağız. Bu kütüphaneyi buradan indirebilirsiniz.
Hazırlanan Excel Dosyasından Bilgilerin Php ile Listelenmesi
İlk olarak Excel de bir yapı oluşturalım. Başlık, içerik ve tarih değerlerinin yer aldığı bir excel dosyasından, verileri alarak MySQL veri tabanına kayıt edelim. Bu ders için hazırlayacağımız örnek excel dosyası yapısı da aşağıdaki gibi olsun.
Uygulamada kullanmak üzere excel dosyasını da hazırladıktan sonra php kodlamasına geçelim. Burada ilk önce kütüphaneyi dâhil edeceğiz. Sonrasında kütüphanede yer alan parametrelere göre işlemleri gerçekleştireceğiz.
include 'Classes/PHPExcel.php'; // Kütüphanenin Yolu Belirtiyoruz. $ExcelDosyasi = 'deneme.xlsx'; // Okutacağımız Excel Dosyasını Seçiyoruz. (Desteklenen Formatlar: xls, xlsx) $ExcelOku = PHPExcel_IOFactory::load($ExcelDosyasi); $ExcelVeriler = $ExcelOku->getActiveSheet()->toArray(null, true, true, true); // Aktif Sütunları Seçiyoruz.
Öncelikle kütüphaneyi dâhil ettik. Sonrasında işlem yapacağımız excel dosyasını tanımladık. $ExcelOku değişkeniyle, kütüphaneyi kullandığımızı ve işlem yapacağımız dosyanın tanımlı olan değişkeni seçiyoruz. Sonrasında da kütüphanede ki düzenlemelerden yararlanarak, sadece aktif olan sütunları okuması gerektiğini belirtiyoruz.
$ExcelVeriler değişkeninde, belirtmiş olduğumuz excel dosyasında yer alan bütün verileri barındırmaktadır. Bu değişkeni print_r($ExcelVeriler); şeklinde yazdırdığımızda bütün verilerin çıktısını verecektir. Derlenmiş olarak çıktısı da aşağıdaki gibi olacaktır.
[1] => Array ( [A] => Sıra [B] => Başlık [C] => İçerik [D] => Tarih ) [2] => Array ( [A] => 1 [B] => PDO ile Site İçi Arama İşlemi | PDO Like [C] => Bu dersimizde, PDO ile veri tabanında arama işleminin nasıl yapıldığını göreceğiz. PDO prepare, Like ve execute ilişkisini inceleyerek [D] => 07-30-15 ) [3] => Array ( [A] => 2 [B] => Gri Site Teması Düzenlemesi ve 13 Yenilik [C] => Gri tema hakkında genel bilgilerin ve yeniliklerin yer aldığı makaledir. Sade ve kullanışlı bir görünüme sahip olan temada yeni [D] => 07-31-15 )
Yukarıdaki yer alan çıktıyı $ExcelVeriler değişkeniyle almış oluyoruz. Şimdide bu almış olduğumuz verileri MySQL veri tabanına kayıt edelim. Array çıktı sayısı 6 olduğundan dolayı, fazla yer kaplamaması için ilk 3 veriyi örnek olarak gösterdim.
Excelden Alınan Verilerin MySQL Veri Tabanına Kayıt Edilmesi
Hazırlamış olduğumuz bu örneğe uygun olarak bir veri tabanı oluşturalım. Daha sonra da elde etmiş olduğumuz bu verileri kayıt edelim. Verileri kayıt edeceğimiz veri tabanı yapısı da aşağıdaki gibidir.
Söz konusu veri tabanına yapılacak olan bir kayıt olduğundan dolayı ilk olarak, veri tabanına bağlanma işlemini yapıyoruz. Veri tabanına bağlanma konusunda eksiğiniz varsa PDO İle MySQL Bağlantısı Kurma konusuna göz atabilirsiniz.
Veri tabanı bağlantısının yapılışını geçerek, gelen bütün değerleri foreach ile parçalayıp, veri tabanındaki ilgili alanlara kaydını gerçekleştiriyoruz.
Foreach($ExcelVeriler as $ExcelAl){ $Kayit = $db->prepare("INSERT INTO makale SET baslik=?, icerik=?, tarih=?"); $Kayit->execute(array( $ExcelAl["B"], $ExcelAl["C"], $ExcelAl["D"] )); echo "#".$db->lastInsertId()."Nolu Kayıt Başarıyla Eklendi"; }
Yukarıdaki kod bloğuyla, almak istediğimiz verileri gerekli alanlara yazarak kayıt işlemini gerçekleştiriyoruz. Burada dikkat edilmesi gerekilen tek husus; Arrayden gelen ilk değerin, excelde yer alan başlıklar olmasıdır. Bundan dolayı ilk anahtarı kayıt etmek istemeyiz. Bunun için ya ilk anahtarı atla ya da küçük bir sorguyla bunu yok say deriz.
Atlanacak olan satır içinde şu şekilde çözüm bulabiliriz;
Foreach($ExcelVeriler as $ExcelAl){ İf($ExcelAl["B"] != "Başlık" and $ExcelAl["C"] != "İçerik" and $ExcelAl["D"] != "Tarih"){ $Kayit = $db->prepare("INSERT INTO makale SET baslik=?, icerik=?, tarih=?"); $Kayit->execute(array( $ExcelAl["B"], $ExcelAl["C"], $ExcelAl["D"] )); echo "#".$db->lastInsertId()."Nolu Kayıt Başarıyla Eklendi"; } }
Bu düzenlemeyle, başlıklar atlanarak gerekli verilerin kayıt edilmesi sağlanacaktır.
Değişkenden gelen değerler Türkçe karakteri desteklediğinden dolayı, kayıt işleminde Türkçe karakter tanımlamasını yapmalıyız. Bunu ilk olarak veri tabanı bağlantısında tanımlamalı sonrasındaysa kayıt edilecek tablodaki sütunlarda utf8_general_ci seçmeliyiz. Veri tabanı bağlantısında Türkçe karakterlerin tanıtılması için gerekli olan dokümana PDO İle MySQL Bağlantısı Kurma adlı dersten ulaşabilirsiniz.