Tagphp Aydın Can Altun

PHP Tarih Değişimleri

Merhaba arkadaşlar bu yazımda sizlere PHP Tarih Değişimleri konusundan bahsedeceğim. Tarih Değişimlerinden kastım GG AA YY şekilde ve ya benzeri şekilde UNIX Tarihine çevirme ve ya UNİX Tarihi insanların anlayabileceği bir tarih formatına çevirme işlemleri.

Bu yazımda bahsedeceğim fonksiyon strtotime() fonksiyonu olacaktır. Bu fonksiyon girilen değer bir tarih formatında ise unix tarihine çevirir.

strtotime, fonksiyonunun 2 adet kullanım şekli vardır. Bunların ilki içine bir tarih olmayan ama belirli bir günü içeren bir zaman bilgisi verebiliriz.

Yani,

<?php 
echo strtotime('now');
echo strtotime('+1 day');
echo strtotime('+1 week');
echo strtotime('+1 week 2 days 4 hours 2 seconds');
echo strtotime('next Thursday');
echo strtotime('last Sunday');
?>

şeklinde kullanımları vardır ikinci kullanım ise

YYYY-MM-DD SS:DK:SN

şeklinde vereceğimiz bir tarih formatını strtotime fonksiyonuna parametre olarak gönderirsek bize o belirtilen tarihin UNIX Zamanını verir. Örnek olarak

<?php 
$tarih = '2019-01-10 20:10:55';
echo strtotime($tarih);
?>

şeklinde yazarsak 10 Ocak 2019 saat 20:10:55 tarihinin UNIX Zaman olarak karşılığını bize verir. strtotime() ile gelen tarihi date() fonksiyonu ile kullanırsak istediğimiz tarih formatında gelen tarihi yazabiliriz.

Özet,

Bu yazımda sizlere PHP Tarih Değişimleri konusundan bahsettim. Gelen bir tarihi UNIX zamanına ve UNIX tarihini normal bir tarih formatına nasıl çevirebileceğimizden bahsettim. Ayrıca strtotime fonksiyonu hakkında daha detaylı bilgi almak isterseniz buraya tıklayabilirsiniz.

Bir sonraki yazımda sizlere Yerel Zamanı Nasıl Ayarlayacağımızdan bahsedeceğim. O zamana kadar PHP hakkında yazmış olduğum diğer yazıları merak ediyorsanız buraya tıklayabilirsiniz.

SEF Link Oluşturma

Merhaba arkadaşlar bu yazımda sizlere nasıl SEF Link oluşturulacağından bahsedeceğim.

Bu yazımı şu başlıklar altında inceleyeceğim,

  • SEF Link Nedir ?
  • SefLink Oluşturma

SEF Link Nedir ?

SEF Link, Seo Friendly Link’in açılımıdır ve arama motorlarının hoşuna gidecek tarz linkler olmalıdır. Genel olarak bir kaç örneği vardır bu örnekler

  • siteadresi.com/blog-basligi
  • siteadresi.com/15/blog-basligi
  • siteadresi.com/blog-basligi/15

şeklinde olanlardır. Yani genel olarak bir çok internet sitesinde göreceğiniz link yapısıdır. Bu link yapısını PHP’nin String Fonksiyonlarını kullanarak çok kolay bir şekilde elde edebilirsiniz.

SEF Link Oluşturma

SEF Link oluşturmak için biraz php bilgisi ve .htaccess dosyamızı biraz düzenlememiz gerekir. .htaccess dosyasının ne olduğunu bilmiyorsanız bu konu hakkında yazmış olduğum yazıya gidebilirsiniz.

Şimdi öncelikle bir metin verelim ve onu nasıl bir yapıya çevireceğimizden bahsedeyim.

<?php
// Verilen Metin
  $verilen = 'SEF Link Oluşturma';
// SEF Link'e Çevirilecek Hali
  $sef = 'sef-link-olusturma';
?>

şeklinde olmalıdır. Burada ne yaptığımıza bakarsak öncelikle tüm karakterlerin boyutunu küçülttük daha sonra türkçe karakteri düzelttik ve boşluklar yerine “-” işaretini yerleştirdik. Bu işlemi bir çok yerde kullanacağımız için bunu bir fonksiyon olarak yazacağım.

<?php 
function SefLink($str)
{

  $str = str_replace(
    ['ı','ğ','ö','ç','ş','ü','İ','Ğ','Ü','Ş','Ç','Ö'],
    ['i','g','o','c','s','u','I','G','U','S','C','O'],
    $str);
    $str = strtolower($str);
    $str = preg_replace('/[^a-z0-9]/','-',$str);
    $str = preg_replace('/-+/','-',$str);
  return trim($str,'-');
}
?>

Bu fonksiyonda yapılan işlemlerden bahsetmek gerekirse

  • Türkçe karakterler, İngilizce karakter karşılıklarına çevrilir.
  • Tüm karakter küçük harfe dönüştürülür.
  • Tüm boşluklar ve özel karakterler yerine “-” işareti yerleştirilir.
  • Arka arkaya tekrar eden “-” işaretleri sadece bir adet “-” işaretini dönüştürülür.
  • En son olarak trim fonksiyonuna “-” karakterini 2. parametre olarak göndererek. Başlığımızın başında ve sonunda oluşan gereksiz “-” işaretleri silinir.

Bunu hallettikten sonrası ise tamamen işimiz htaccess dosyası ile oluyor.

htacces hakkında yazmış olduğum yazıyı incelediyseniz htaccess ile link yapılarını manipüle edebileceğimizi görmüşsünüzdür. Şimdi bu işlemi yapma zamana

RewriteEngine On

RewriteRule ^/([a-zA-Z0-9-_]+)$ blog.php?title=$1 [NC,QSA]

Burada yaptığımız işlemlerden detaylı olarak bahsetmek gerekirse

Öncelikle kodlamış olduğunuz linkin yapısı blog.php?title=blog-baslik şeklinde olacağını varsayıyorum ve eğer /([a-zA-Z0-9-_]+) şeklinde bir link yapısı ile karşılaşırsan blog.php?title= sayfasının çıktısını ekrana vermesini söylüyoruz.

Burada bilmeniz gereken önemli nokta linkleri manipüle ederken olmasını istediğimiz link yapısı “^” işareti başlar ve “$” işareti ile biter.

Özet,

Bu yazımda sizlere SEF Linklerin nasıl oluşturulduğundan bahsettim. SEF Link oluşturan bir PHP fonksiyonu yazdım ve bunun sırasıyla ne işlem yaptığından bahsettim daha sonra ise htaccess dosyasından faydalanarak linkimizi nasıl manipüle edebileceğimizden bahsettim.

PDO SELECT (Veri Seçme) İşlemi

Merhaba arkadaşlar bu yazımda sizlere PDO ile Select işlemlerinden bahsedeceğim. Bildiğiniz üzere bir önceki yazım da PDO ile CRUD işlemlerinden Create, Update ve Delete kısımlarını anlatmıştım ve Read kısmını bir sonraki yazımda anlatacağımdan bahsetmiştim. Read kısmı işte Select işlemine karşılık geliyor.

PDO ile SELECT işlemini anlatmadan önce eğer MySQL ile nasıl veri listeleneceğini bilmiyorsanız buraya tıklayınız. Şimdi PDO ile SELECT işlemlerinin nasıl yapılacağını anlatmaya başlayabilirim.

Öncelikle bu işlemi yapacağım örnek tablonun içeriğinden bahsetmek gerekirse

users isimli tablo

Şimdi öncelikle PDO bağlantımızı yaparak başlayalım.

$db = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "root");

şeklinde bir PDO bağlantısını başlattık. Şimdi users tablosundan veri çekmeye başlayalım.

fetchAll ile Veri Çekme

fetchAll ile birden fazla veri çekeriz.

<?php 

$query = $db->prepare('SELECT * FROM users');
$query->execute([]);
$list = $query->fetchAll(PDO::FETCH_ASSOC);


?>

Burada öncelikle bilmemiz gereken iki durum var öncelikle eğer tabloda birden fazla veri çekeceksek “fetchAll” komutunu kullanıyoruz eğer sadece 1 adet veri çekmek istersek “fetch” olarak da kullanabiliriz.

fetch ile Veri Çekme

fetch ile sadece 1 adet veri çekeriz yukarıdaki sorgunun aynısını yazarsak bize sadece en son eklenmiş olan verinin bilgilerini döndürecektir.

$query = $db->prepare('SELECT * FROM users');
$query->execute([]);
$arr = $query->fetch(PDO::FETCH_ASSOC);

 

Bu 2 kullanımında belirli özellikleri vardır. Eğer fetchAll ile çalıştırdığımız sorgudan herhangi bir veri dönmezse bize boş bir dizi döner. Fakat fetch ile sorgumuzu çalıştırdıktan sonra herhangi bir veri dönmezse bize boolean bir değer döndürür.

Bilmemiz gereken ikinci durum ise PDO::FETCH_ASSOC’un bir kaç adet alternatifi vardır bunlar

  • PDO::FETCH_ASSOC -> Dönen dizinin indisleri sütun adları ile aynıdır.
  • PDO::FETCH_BOTH -> Dönen dizinin indisleri 0’dan başlayarak ilerler.
  • PDO::FETCH_BOUND -> Sütun değerlerini PDOStatement::bindColumn() ile ilişkilendirilmiş PHP değişkenlerine atar ve TRUE döndürür.

gibi 3 adet bahsedeceğim ve 4 adette bahsetmediğim çeşitleri var bunlar benim en çok kullandıklarını gördüklerim. Ben genel olarak PDO::FETCH_ASSOC kullanarak projelerimi geliştiriyorum.

 

Şimdi çalıştırdığımız sorgudan bize veri dönüp dönmediğini anlamak için ne yapmamız gerekiyor diye sorarsanız.

fetchAll ile Dönen Veri Sayısını Hesaplama

fetchAll’da bize geri dönecek bir veri yoksa bile boş bir dizi olarak geri döner. Yani dizinin eleman sayısını hesaplamamızı sağlayan count() fonksiyonumuzu kullanmamız gerekiyor. Yani

if(count($list) > 0 ){
     print_r($list);
}else{
     echo "Sorgudan herhangi bir veri geri dönmedi";
}

şeklinde bir sistemimiz olabilir.

fetch ile Veri Gelip Gelmediğini Kontrol Etmek

fetch ile veri gelirse bize bir dizi döner eğer veri dönmezse boolean bir değer döner. O zaman sadece dizi olup olmadığını kontrol etmek bizim için yeterli olacaktır.

if(is_array($list)){
    // DÖNEN VERİ YAPILACAK İŞLEMLER
}else{
    echo "Sorgudan herhangi bir veri dönmedi";
}

şeklinde olacaktır.

Özet,

Bu yazımda sizlere PDO ile SELECT işlemlerinin nasıl yapılacağından bahsettim. SELECT işlemi ile çoklu veri çekme ve sadece 1 veri çekme işlemlerinden bahsettim. Bu iki işleme göre bize veri gelip gelmediğini nasıl kontrol edeceğimizden bahsettim. Ayrıca bize dönen dizilerin indislerinin farklılık göstermesinin nasıl olacağından bahsettim.

Bir sonraki yazımda sizlere PDO ile GROUP BY ve GROUP_CONCAT() kullanımından bahsedeceğim. O zamana kadar PHP hakkında yazmış olduğum diğer yazıları görmek için buraya tıklamanızı ve bu yazı boyunca kullandığım SQL sorgularını anlamadıysanız MySQL ile alakalı yazdığım yazılarımı incelemenizi tavsiye ederim.

PDO CRUD

Merhaba arkadaşlar bir önceki yazımla birlikte PDO’ya genel olarak bir giriş yapmıştık şimdi ise PDO ile CRUD işlemleri nasıl yapılır bunlardan bahsedeceğim. Bütün yazı boyunca sorgularımı prepare ederek kullanacağım bu bahsettiklerimden bir şey anlamıyorsanız öncelikle bir önceki yazımı okumanızı tavsiye ederim.

Bu yazıma öncelikle CRUD’un ne olduğundan bahsederek başlayacağım daha sonra ise PDO kullanarak bu işlemlerin nasıl gerçekleştireceğinden bahsedeceğim.

CRUD Nedir ?

CRUD, Create Read Update Delete kavramlarının baş harflerini almış bir kısaltmadır yani türkçesi Oluştur, Oku, Güncelle ve Silme işlemlerine biz genel olarak CRUD adını veriyoruz. Şimdi bu CRUD işlemlerini PDO ile nasıl yapabiliriz diye sorarsanız bu yazımda sadece Create, Update ve Delete kısmından bahsedeceğim. READ kısmından ise detaylı bir şekilde bir sonraki yazımda bahsedeceğim.

PDO Create (INSERT) İşlemi

PDO ile veri eklemek yani INSERT işlemini yapmak aslında çok basittir. Tek yapmamız gereken bir PDO bağlantısı oluşturmak ve önce sorgumuzu prepare edip daha sonra execute ederek işlemimizi tamamlamak şimdi bu işlemi koda dökmeye başlayalım.

$db = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "root");

şeklinde bir veri tabanı bağlantımı sağlamış oldum şimdi veri eklemesi yapacağım tablodan bahsetmek gerekirse tablomuz şu şekildedir.

explain users komutunun görüntüsü

şeklindedir şimdi biz bu users tablosuna yeni bir kullanıcı ekleyelim.

$query = $db->prepare('INSERT INTO users SET username = ?, user_pass = ?, mail = ?');
$add = $query->execute(['aydncn','test','aydncn@test.com']);

şeklinde sorgumuzu çalıştırabiliriz. Şimdi biz bu sorguyu çalıştırdık ama gerçekten veri ekledimi bunu nasıl kontrol edebiliriz diye sorabilirsiniz bunu da if-else ile kontrol edeceğiz.

if($add){
    echo 'Ekleme başarılı';
}else{
    echo 'Ekleme başarısız';
}

bu işlemler sonunda ekrana çıkan yazıya göre işleminizin başarılı olup olmadığını anlayabilirsiniz.

PDO Update(Güncelleme) İşlemi

PDO ile veri güncellemek hemen hemen veri ekleme(insert) ile aynı şekilde olduğunu söyleyebiliriz. Hemen ne demek istediğimi kodla anlatmaya başlarsak.

$query = $db->prepare('UPDATE users SET user_pass = ? WHERE id = ?');
$update = $query->execute(['test1',1]);

burada id’si 1 olan kullanıcının şifresini test1 olarak değiştirdik. Bu işlemin gerçekleşip gerçekleşmediğini kontrol etmek için de hine yukarıda yaptığımız gibi bir if-else kontrolü yapmamız gerekiyor.

if($update){
    echo "Güncelleme başarılı";
}else{
    echo "Güncelleme başarısız";
}

PDO Delete (Silme) İşlemi

PDO’da silme işlemi aslında en kolay olanıdır execute edeceğimiz değer genellikle 1 tanedir. Hemen bu işlemi de koda dökerek anlatmaya başlamak gerekirse

$query = $db->prepare('DELETE FROM users WHERE id = ?');
$delete = $query->execute([1]);

şeklinde kodlarımızı yazıp çalıştırdığımız da users adlı tablodaki id değeri 1’e eşit olan kullanıcımızı tablodan silmiş oluyoruz.

Hine bu kodların çalışıp çalışmadığını anlamak için

if($delete){
    echo "Silme işlemi başarılı!";
}else{
    echo "Silme işlemi başarısız!";
}

şeklinde bir kontrol yapmanız gerekiyor.

Özet,

Bu yazımda PDO ile CRUD işlemlerinden Create(Veri Ekleme), Update(Veri Güncelleme), Delete(Veri Silme) işlemlerinden bahsettim. Bu işlemleri yaparken prepare edilip daha sonra execute edilerek nasıl kullanılacağını gösterdim.

Bir sonraki yazımda PDO CRUD da Read(Veri Okuma) kısmından bahsedeceğim. O zamana kadar PHP hakkında yazdığım yazıları merak ediyorsanız buraya tıklayınız Ayrıca burada yazılmış olan SQL sorguları size karmaşık geliyorsa MySQL hakkında yazmış olduğum yazılarıda incelemelisiniz.