Php Dersleri

Php ile Excel Dosyasından Veri Çekmek ve Kayıt Etme

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.

Bir önceki yazım olan Php ile Seçili 2 Tarih Arasındaki Verileri Listeleme başlıklı makalemi de okumanızı öneririm.

İlgilizi Çekecek Konular

PDO ile MySQL Veri Silme İşlemi | Delete

ibrahim Çevrük

Php ile MySQL Veritabanı Bağlantısı Oluşturmak #1

ibrahim Çevrük

Php ile Basit Bot Yapımı (Uzaktan Veri Çekimi)

ibrahim Çevrük

1 Yorum

mustafa kilic 4 Ocak 2019 at 01:43

Ibrahim bey

Paylasiminiz icin coktesekkur ederim, son derece yararli ve emek dolu bir calisma. PHP ile il, ilce ve semt listelerini veritabanina yukledim ancak mahalle listesini ne butun olarak ne de parcalarina ayirarak yukleyemiyorum ve asagiya ekledigim hatalari aliyorum. Yardimci olabilirseniz sevinirim. Saygilar

( ! ) Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4096 bytes) in C:\wamp64\www\asyamm\Classes\PHPExcel\Worksheet.php on line 2407
Call Stack
# Time Memory Function Location
1 0.0014 399448 {main}( ) …\ilcekle.php:0
2 62.3829 150969816 PHPExcel_Worksheet->toArray( ) …\ilcekle.php:10
3 64.3150 150969856 PHPExcel_Worksheet->rangeToArray( ) …\Worksheet.php:2486

Cevap

Yorum Giriniz

Selam dostum. Aramızdaki samimiyeti ilerletmek adına Cookie dosyası bırakmamı ister misin? Kabul Et Daha Fazla Bilgi

Gizlilik ve Çerez Politikası