CSS’de Değişken Kullanımı

Herkese merhaba, bu yazımda sizlere CSS’de native olarak değişkenlerin kullanımını anlatmak istiyorum. Değişkenlere başlamadan önce sizlere bir sözde sınıftan bahsetmek istiyorum.

:root

:root sözde sınıfı, en üst düzey ebeveyn öğesini temsil eder. Yani bir html sayfada bu html etiketi anlamına geliyor. Fakat css’in kullanım alanlarının artmasıyla örneğin svg ve xml’de kullanılırken, :root sözde sınıfı başka bir öğeyi temsil ediyor olabilir.

Örnek bir değişken tanımlaması

Genelde değişkenleri tanımlarken başına iki tane tire işareti koyulması gerektiği söyleniyor. Ancak ben tiresizde denediğimde çalışıyordu, yine de ayırt edici olması adına başına iki tire koyarak :root içerisinde global bir değişen tanımlayalım.

:root {
    --color: green;
}

Değişkenlerin kullanımı

Değişkenleri kullanırken var() fonksiyonunu kullanacağız. Örneğin yukarıdaki değişkeni bir etiketin rengi olarak belirlemek istersek;

h3 {
    color: var(--color);
}

Local olarak değişken tanımlamak

:root içerisinde biz global olarak değişkenimizi tanımladık. Yani orada tanımlanan değişken sayfanın tamamında kullanılabilirdi. Ancak local olarak belli bir scope’u kapsayacak şekilde oluşturmak istersek, html etiketini seçip değişkeni oluşturuyoruz.

.box {
    --color: blue;
}

Artık .box divinin içinde kullanılan değişken değer olarak maviyi alacak. Çünkü local tanımı bu şekilde yapmış olduk.

jQuery ile Değişkenlerin Değerini Değiştirmek

Genelde jQuery kullandığımız için bundan da bir örnek vermek istiyorum. Örneğin yukarıda oluşturduğumuz renk değişkenini jquery ile dinamik olarak ayarlamak istersek;

<input type="color" id="color">
<script src="jquery.min.js"></script>
<script>
$('#color').on('input', () => {
    $(':root').css('--color', $(this).val());
});
</script>

HTML5 Audio (Ses Özelliği)

HTML5 ile birlikte sesler üzerindeki hakimiyetimiz arttı. Ses dosyasının bir çok event (olay) ını kontrol edebiliyoruz buna göre işlem yaptırabiliyoruz. Ben size bu yazıda (video daha sonra eklenecek) html5 de seslerle çalışmayı göstereceğiz..

Öncelikle bir ses dosyasını <audio> etiketi ile kullanıyoruz.

<audio controls>
  <source src="ses.mp3" type="audio/mpeg">
  Tarayıcınız bu özelliği desteklemiyor.
</audio>

HTML5 Audio ile Hangi Ses Formatlarını Oynatabiliyoruz?

Sadece Mp3, Wav ve Ogg formatlarını oynatabilirsiniz. Bunların her birinin mime tipi farklıdır. Kısaca göstereyim;

<!-- mp3 -->
<source src="ses.mp3" type="audio/mpeg">

<!-- wav -->
<source src="ses.wav" type="audio/wav">

<!-- ogg -->
<source src="ses.ogg" type="audio/ogg">

Otomatik Başlatma (autoplay)

Sesin otomatik başlaması için audio etiketine autoplay niteliği eklenir.

<audio controls autoplay>

Sürekli Olarak Çalması (loop)

Sesin bittikten sonra tekrar başlaması ve buna sürekli devam etmesi için audio etiketine loop niteliği eklenir.

<audio controls autoplay loop>

Sessizde Çalması (muted)

Sesin sessizde çalması için audio etiketine muted niteliği eklenir.

<audio controls autoplay muted>

Ön yüklemeyi iptal etme (preload)

Sesin başlamadan önce ön yüklemesini iptal etmek için audio etiketine preload=”none” niteliği eklenir.

<audio controls autoplay preload="none">

Oynatma (play) ve Durdurma (pause) Özelliği

Artık biraz daha eğlenceli kısma geçelim. JavaScript ile (tabi biz jquery’i dahil ederek kullanacağız) oynatma ve durdurma işlemlerini yapalım. Öncelikle html yapımız şöyle olsun;

<audio controls>
  <source src="ses.mp3" type="audio/mpeg">
  Tarayıcınız bu özelliği desteklemiyor.
</audio>

<button id="play">Oynat</button> <button id="pause">Durdur</button>

Şimdi jquery’de click olaylarına ses dosyamızı durdurup oynatalım. Bunun için play() ve pause() metodlarını kullanacağız.

// html audio nesnesi
var audio = $('audio');

// oynatma olayı
$('#play').on('click', function(e){
    audio[0].play();
    e.preventDefault();
});

// durdurma olayı
$('#pause').on('click', function(e){
    audio[0].stop();
    e.preventDefault();
});

$(‘audio’) sonuna [0] yazarak html ses elemanına çevirdim. Aksi halde bir jquery nesnesi olacaktı. Ancak ses metodları sadece ses elemanlarında çalışacağı için bunu yapmak zorundayız.

Oynatma Olayı

Ses dosyası oynarken bunu yakalamak istersek timeupdate event’ını kullanacağız. Örnek vermek gerekirse;

var audio = $('audio');
audio.bind('timeupdate', function(){
   console.log('ses oynatılıyor..');
});

ancak tabi bu şekilde bir anlamı yok. Bir alttaki örnek ile daha anlamlı olacaktır.

Toplam Süreyi (duration) ve Geçen Süreyi (currentTime) Hesaplamak

Ses dosyasının toplam süresini ve oynatırken ki mevcut süresini hesaplatmak için duration ve currentTime kullanılır.
Mevcut süresi yukarıdaki oynatma olayını kullanarak alacağız.

// saniyeyi çeviren fonksiyon
function readableDuration(seconds) {
    sec = Math.floor( seconds );    
    min = Math.floor( sec / 60 );
    min = min >= 10 ? min : '0' + min;    
    sec = Math.floor( sec % 60 );
    sec = sec >= 10 ? sec : '0' + sec;    
    return min + ':' + sec;
}

// html audio nesnesi
var audio = $('#audio');

// oynatma olayı
$('#play').on('click', function(e){
    audio[0].play();
    e.preventDefault();
});

// durdurma olayı
$('#pause').on('click', function(e){
    audio[0].pause();
    e.preventDefault();
});

// hazır olduğunda toplam süreyi yazdır
audio.bind('canplay', function(){
    var duration = audio[0].duration;
    $('.duration').text( readableDuration(duration) );
});

// değişiklik olduğunda mevcut süreyi yazdır
audio.bind('timeupdate', function(){
    var current = audio[0].currentTime;
    $('.current').text( readableDuration(current) );
});

Saniyeyi düzgün gösterebilmek için şuradaki fonksiyonu kullandık.
canplay eventı da ses dosyası hazır olduğunda çalışmakta. Bu yüzden toplam süreyi bu event içinde aldık yoksa sıkıntı büyük.

Progress Bar

Kendimize özel bir progress bar yapmak istersek önce % değeri hesaplamalıyız. Sonra bu değeri progress bar’da göstermek çocuk oyuncağı 🙂
Bir değerin 100% ünü hesaplamak için formül şöyledir;

MEVCUT DEĞER / TOPLAM DEĞER * 100

Burada mevcut değer currentTime toplam değer duration olacağından bizim % dilimimizi bulduk bile 🙂 Hadi şimdi bunu kodlara dökelim.

// saniyeyi çeviren fonksiyon
function readableDuration(seconds) {
    sec = Math.floor( seconds );    
    min = Math.floor( sec / 60 );
    min = min >= 10 ? min : "0" + min;    
    sec = Math.floor( sec % 60 );
    sec = sec >= 10 ? sec : "0" + sec;    
    return min + ":" + sec;
}

// html audio nesnesi
var audio = $('#audio'),
    trackbar = $('.trackbar'),
    percent = $('.percent'),
    duration = 0;

// oynatma olayı
$('#play').on('click', function(e){
    audio[0].play();
    e.preventDefault();
});

// durdurma olayı
$('#pause').on('click', function(e){
    audio[0].pause();
    e.preventDefault();
});

// hazır olduğunda toplam süreyi yazdır
audio.bind('canplay', function(){
    duration = audio[0].duration;
    $('.duration').text( readableDuration(duration) );
});

// değişiklik olduğunda mevcut süreyi yazdır
audio.bind('timeupdate', function(){
    
    var current = audio[0].currentTime;
    $('.current').text( readableDuration(current) );
    
    // yüzdeyi hesapla
    var currentPercent = Math.ceil( (current / duration) * 100 );
    trackbar.width( currentPercent + '%' );

});

Ancak bu şekilde çok kullanışlı değil.. Progress bar a tıkladığımızda da tıklanan yerden çalmaya devam etmeli.. Bu yüzden kodlarımızda ufak değişiklikler yapalım ve bu sorunu da çözelim.

// saniyeyi çeviren fonksiyon
function readableDuration(seconds) {
    sec = Math.floor( seconds );    
    min = Math.floor( sec / 60 );
    min = min >= 10 ? min : '0' + min;    
    sec = Math.floor( sec % 60 );
    sec = sec >= 10 ? sec : '0' + sec;    
    return min + ':' + sec;
}

// html audio nesnesi
var audio = $('#audio'),
    progress = $('.progress'),
    trackbar = $('.trackbar'),
    percent = $('.percent'),
    duration = 0;

// oynatma olayı
$('#play').on('click', function(e){
    audio[0].play();
    e.preventDefault();
});

// durdurma olayı
$('#pause').on('click', function(e){
    audio[0].pause();
    e.preventDefault();
});

// hazır olduğunda toplam süreyi yazdır
audio.bind('canplay', function(){
    duration = audio[0].duration;
    $('.duration').text( readableDuration(duration) );
});

// değişiklik olduğunda mevcut süreyi yazdır
audio.bind('timeupdate', function(){
    
    var current = audio[0].currentTime;
    $('.current').text( readableDuration(current) );
    
    // yüzdeyi hesapla
    var currentPercent = Math.ceil( (current / duration) * 100 );
    trackbar.width( currentPercent + '%' );

});

progress.on('click', function(e){
    
    // farenin  x konumu
    var posX = $(this).offset().left;
    
    // progress barın toplam genişliği
    var totalWidth = $(this).width(),
    
        // farenin tıklanan nesneden x ekseninda uzaklığı (genişliği)
        currentWidth = e.pageX - posX;
    
    // tıklanan yere göre % değeri
    var clicked = (currentWidth / totalWidth) * 100;

    // bilinen % değerine göre zaman hesabı
    var resultSecond = duration * clicked / 100;

    trackbar.width(clicked + '%');
    audio[0].currentTime = resultSecond;
    
    audio[0].play();
    
});

Yükleneni Progressda Gösterme (buffered)

Bunun için progress eventını kullanacağız. Ve bu event içinde oynatmadan önce yüklenmiş ya da yüklenmekte olan değeri alacağız.

// saniyeyi çeviren fonksiyon
function readableDuration(seconds) {
    sec = Math.floor( seconds );    
    min = Math.floor( sec / 60 );
    min = min >= 10 ? min : '0' + min;    
    sec = Math.floor( sec % 60 );
    sec = sec >= 10 ? sec : '0' + sec;    
    return min + ':' + sec;
}

// html audio nesnesi
var audio = $('#audio'),
    progress = $('.progress'),
    trackbar = $('.trackbar'),
    percent = $('.percent'),
    buffered = $('.buffered'),
    duration = 0;

// oynatma olayı
$('#play').on('click', function(e){
    audio[0].play();
    e.preventDefault();
});

// durdurma olayı
$('#pause').on('click', function(e){
    audio[0].pause();
    e.preventDefault();
});

// hazır olduğunda toplam süreyi yazdır
audio.bind('canplay', function(){
    duration = audio[0].duration;
    $('.duration').text( readableDuration(duration) );
});

// değişiklik olduğunda mevcut süreyi yazdır
audio.bind('timeupdate', function(){
    
    var current = audio[0].currentTime;
    $('.current').text( readableDuration(current) );
    
    // yüzdeyi hesapla
    var currentPercent = Math.ceil( (current / duration) * 100 );
    trackbar.width( currentPercent + '%' );

});

progress.on('click', function(e){
    
    // farenin  x konumu
    var posX = $(this).offset().left;
    
    // progress barın toplam genişliği
    var totalWidth = $(this).width(),
    
        // farenin tıklanan nesneden x ekseninda uzaklığı (genişliği)
        currentWidth = e.pageX - posX;
    
    // tıklanan yere göre % değeri
    var clicked = (currentWidth / totalWidth) * 100;

    // bilinen % değerine göre zaman hesabı
    var resultSecond = duration * clicked / 100;

    trackbar.width(clicked + '%');
    audio[0].currentTime = resultSecond;
    
    audio[0].play();
    
});

audio.bind('progress', function(){
    try {
        var currentBuffered = audio[0].buffered.end(audio[0].buffered.length - 1) / duration * 100;
        buffered.width(currentBuffered + '%');
    } catch ( err ){
        // err
    }
});

Sesin Bittiğini Anlamak (ended)

Ses bittiğinde bunu yakalamak için ended eventını kullanıyoruz.

audio[0].addEventListener("ended", function() {
    alert("ses bitti!");
});

Diğer Bazı İşe Yarar Şeyler

var audio = $('#audio')[0];

// sesi kapatma
audio.muted = true;

// sesin ayarını oynama
audio.voluma = 0.2;

// sesin mevcut zamanını alma
audio.currentTime;

// sesion toplam zamanını alma
audio.duration;

// sesion zamanını ayarlama
audio.currentTime = 15; // 15. sn

// sesi otomatik oynatma
audio.autoplay = true;
audio.load();

// sesin kontrollerini açmak ya da gizlemek için
audio.controls = true;
audio.controls = false;

// sesion kaynak adresini almak için
audio.currentSrc;

// sesin durup durmadığını anlamak için
audio.paused;

// sesin oynayıp oynamadığını anlamak için
audio.played;

// ön yüklemeyi kapatma
audio.preload = "none";

PDO Kullanımı

Bildiğiniz gibi artık PHP veritabanı işlemleri için doğrudan mysql_ li fonksiyonların kullanımını tavsiye etmiyor. Bunun yerine şuan için önerdiği 2 farklı veritabanı eklentisi mevcut. Bunlardan bir tanesi mysqli, bir diğeri ise PDO.

Ben bu yazımda sizlere PDO’yu mysql_ fonksiyonlarına eş değer olacak şekilde anlatmaya çalışacağım. Eminim daha iyi anlayacaksınız.. Hazırsanız başlayalım?

Veritabanı Bağlantısı

mysql_ li fonksiyonlara veritabanına bağlantısı;

<?php
$baglanti = mysql_connect("localhost","root","123456") or die ();
mysql_select_db("test", $baglanti) or die ( mysql_error() );
?>

PDO da veritabanı bağlantısı;

<?php
try {
     $db = new PDO("mysql:host=localhost;dbname=test", "root", "123456");
} catch ( PDOException $e ){
     print $e->getMessage();
}
?>

Elbette PDO ile bağlanırken try ~ catch yapısını kullanmak zorunda değildik ancak böyle bir kullanım çok daha kullanışlıdır. Çünkü PDO’nun hatalar için bir exception’ı var ve daha mantıklı hata mesajları üretiyor.

Not: PDO sadece mysql’i değil bir çok veritabanı yapısını destekler. Ancak ben bu makalede sadece mysql ile ilgili anlatım yapacağım.

Karakter Setini Ayarlama

Her zaman bir charset belirlemek iyidir. Bunuda mysql_ li fonksiyonlarda ve PDO da nasıl yaptığımızı örneklerle öğrenelim;

mysql_ li fonksiyonlarda karakter setini ayarlama;

mysql_set_charset("utf8");

ya da

mysql_query("SET CHARACTER SET utf8");

PDO da karakter setini ayarlama;

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

ya da;

$db->query("SET CHARACTER SET utf8");

SELECT İşlemi (Toplu)

mysql_ li fonksiyonlarda select işlemi;

$query = mysql_query("SELECT * FROM uyeler");
if ( mysql_affected_rows() ){
     while ( $row = mysql_fetch_assoc($query) ){
           print $row['kullanici_adi']."<br>";
     }
}

PDO da select işlemi;

$query = $db->query("SELECT * FROM uyeler", PDO::FETCH_ASSOC);
if ( $query->rowCount() ){
     foreach( $query as $row ){
          print $row['kulanici_adi']."<br>";
     }
}

SELECT İşlemi (Tek)

Sadece bir veriyi çekmek için nasıl bir işlem yapacağımızı görelim;

mysql_ li fonksiyonlarda tekil select işlemi;

$id = $_GET['id'];
$query = mysql_query("SELECT * FROM uyeler WHERE uye_id = '{$id}'");
if ( mysql_affected_rows() ){
    $row = mysql_fetch_assoc($query);
    print_r($row);
}

PDO da tekil select işlemi;

$id = $_GET['id']; 
$query = $db->query("SELECT * FROM uyeler WHERE uye_id = '{$id}'")->fetch(PDO::FETCH_ASSOC);
if ( $query ){
    print_r($query);
}

Her iki şekilde de güvenli bir select işlemi olmadı. Çünkü SQL Injectiondediğimiz bir olay var ve şuan her iki işlem içinde kolayca uygulanabilir durumda. Bunun hakkında makale sonlarında güvenlik bölümünde sizlere bahsedeceğim.

INSERT İşlemi

Veritabanına veri kayıt etmek için mysql_ li fonksiyonlarla PDO arasındaki farkı görelim;

mysql_ li fonksiyonlarda insert işlemi;

$insert = mysql_query("INSERT INTO uyeler SET
uye_kadi  = 'Ebubekir Güneş',
uye_sifre = '123456',
uye_eposta = 'ebugns@gmail.com'");
if ( $insert ){
     $last_id = mysql_insert_id();
     print "insert işlemi başarılı!";
}

PDO da insert işlemi;

$query = $db->prepare("INSERT INTO uyeler SET
uye_kadi = ?,
uye_sifre = ?,
uye_eposta = ?");
$insert = $query->execute(array(
     "Ebubekir Güneş", "123456", "ebugns@gmail.com"
));
if ( $insert ){
    $last_id = $db->lastInsertId();
    print "insert işlemi başarılı!";
}

Her iki şekilde de veritabanına yeni bir veri kaydı yapılır. PDO kodları biraz uzun gibi görünsede daha güvenilirdir. Çünkü bu 2 kod parçacığında mysql_ li fonksiyonlu örnekte SQL Injection açığı mevcuttur. Unutmamak gerek ki insert işlemlerinin %99’u kullanıcıdan aldığımız veriler doğrultusunda olmakta. Buda alınan verilerin kontrol edilmesi anlamına gelir. Bunu siz yapmaktansa kullandığınız veritabanı sınıfının yapması çok daha kullanışlı olacaktır. PDO’da bunu sizin için yapıyor ve kullanıcıdan aldığınız bilgileri bu kullanım ile daha güvenilir hale getiriyor. Böylece SQL Injection açıklarından korunmuş oluyoruz.

Ayrıca PDO örneğinde ? yerine key (anahtar) isimler belirtipte ona göre dizide değer gönderebilirdik.. Yani şu şekilde bir örnekte yapabilirdik;

$query = $db->prepare("INSERT INTO uyeler SET
uye_kadi = :kadi,
uye_sifre = :sifre,
uye_eposta = :eposta");
$insert = $query->execute(array(
      "sifre" => "123456",
      "eposta" => "ebugns@gmail.com",
      "kadi" => "Ebubekir Güneş",
));
if ( $insert ){
    $last_id = $db->lastInsertId();
    print "insert işlemi başarılı!";
}

Peki bunun ne farkı var?
diye soracak olursanız bu şekilde execute metodunda belirttiğimiz dizideki sıranın bir önemi kalmaz. İstediğiniz key değerini istediğiniz sırada yazabilirsiniz. Ayrıca key değerlerini mantıklı şekilde belirtirseniz anlama kolaylığıda sağlar.

UPDATE İşlemi

Update (güncelleme) işleminin insert’ten bir farkı yoktur aslında. Sadece insert into yerine update yazmalı ve bir where koşulu koymamız gerekiyor o kadar 🙂 Yinede biz ikisininde bir örneğini yapalım..

mysql_ li fonksiyonlarda update işlemi;

$update = mysql_query("UPDATE uyeler SET
uye_kadi = 'demo'
WHERE uye_kadi = 'Ebubekir Güneş'");
if ( $update ){
     print "güncelleme başarılı!";
}

PDO‘a update işlemi;

$query = $db->prepare("UPDATE uyeler SET
uye_kadi = :yeni_kadi
WHERE uye_kadi = :eski_kadi");
$update = $query->execute(array(
     "yeni_kadi" => "demo",
     "eski_kadi" => "Ebubekir Güneş"
));
if ( $update ){
     print "güncelleme başarılı!";
}

INSERT işleminde olduğu gibi burada da PDO güvenlik konusunda gerekeni yapmış oldu.

DELETE İşlemi (Toplu)

Toplu silme işlemlerinde mysql_li fonksiyonlar ve pdo ile birer örnek yapalım;

mysql_ li fonksiyonlarla silme işlemi;

$delete = mysql_query("DELETE FROM uyeler");

PDO da silme işlemi;

$delete = $db->exec("DELETE FROM uyeler");
print 'Toplam '.$delete.' üye silindi!';

DELETE İşlemi (Tek)

Sadece bir veriyi silmek için mysql_ li ve pdo’lu örneği yapalım. Elbette işin içine yine kullanıcıdan veri almak girince pdo daha güvenli bir işlem haline geliyor.

mysql_ li fonksiyonlarda tek veriyi silme işlemi;

$delete = mysql_query("DELETE FROM uyeler WHERE uye_id = {$_GET['id']}");

PDO da tek veriyi silme işlemi;

$query = $db->prepare("DELETE FROM uyeler WHERE uy_id = :id");
$delete = $query->execute(array(
   'id' => $_GET['id']
));

Veritabanı Bağlantısını Sonlandırma

İşimiz bitince mevcut bağlantıyı sonlandırmamız gerekir. Bunuda mysql_ li fonksiyonlarda ve pdo da nasıl yapabiliriz hemen görelim;

mysql_ li fonksiyonlarda bağlantı sonlandırma işlemi;

mysql_close($baglanti);

PDO da bağlantı sonlandırma işlemi;

$db = null;

Object Mapping Olayı

Bunun mysql_ li fonksiyonlarda olmadığına eminim. Varsa bile ben hiç denk gelmedim ama yok yok tamam 😀 PDO ‘da ise böyle bir güzellik var.. Peki bu object mapping tam olarak nedir? ne işe yarar? Bunu bir örnek ile anlatsam daha mantıklı sanırım..

uye_ad . ' ' . $this->uye_soyad;
   }

   public function rutbe(){
      if ( $this->uye_rutbe == 1 )
         return 'Yönetici';
      else
         return 'Üye';
   }

}

$query = $db->query("SELECT * FROM uyeler");
$query->setFetchMode(PDO::FETCH_CLASS, 'Uye');

foreach ( $query as $row ){
   print $row->adsoyad() . ': ' . $row->rutbe() . '
';
}

Evet gördüğünüz gibi üyeler tablosundan tüm üyeleri çektim. Ve Uye adında tanımlamış olduğum sınıfta bu bilgilere ulaşıp istediğim gibi kontroller yapabiliyorum. Daha sonra mevcut üyeleri foreach ile listelerken bu Uye sınıfındaki metodlara erişip istediklerimi kolayca kullanabiliyorum. Harika değil mi? Bence de öyle 🙂

Güvenlik

Veritabanı işlemlerinde SQL Injection diye illet bir şey var.. Yani SQL sorgularına müdahale etmek. Ve bu müdahale sonuçları çok kötü olabilir. Ancak korkmayın, PDO bu gibi kötü durumlar için koruyor..

Örneğin şöyle bir link yapımız olsun;
http://www.siteadi.com/delete.php?id=4

burada id parametresini kullanıcıdan alıyoruz.. Dolayısı ile bu değeri istediği gibi değiştirebilir. Şimdi bu id değerini alıp bir silme işlemi yapalım pdo ile.

$query = $db->prepare("DELETE FROM uyeler WHERE uye_id = :id");
$delete = $query->execute(array(
     "id" => $_GET['id']
));

Evet şuan silme işlemi yapıyor. Örneğin sql sorgusuna müdahale etmeyi deneyelim.. Mesela tüm üyeleri silmeye çalışalım;
http://www.siteadi.com/delete.php?id=’; DELETE FROM videolar; /*

Eğer bu şekilde bir işlem yapılsaydı ve pdo yerine mysql_ li fonksiyonlar kullanılmış olsaydık çoktan sql injection yemiş ve bütün üyelerimizi kaybetmiş olacaktır. Ancak pdo yukarıdaki kodlarda bunun kontrolünü yaptığı için hiçbir şey olmadı ve hala mutluyuz

PHP Türkçe Tarih Yazdırma Fonksiyonu

PHP’de date fonksiyonunun kullanımı normalde ingilizcedir. setlocale gibi bir sürü detayla uğraşmak istemiyorsanız ve ayrıca onlarla uğraşıp da sunucu kaynaklı sorunlarla boğuşmak zorunda kalmamak için ben basit bir fonksiyon kullanıyorum. Çalışması date fonksiyonuna çok benzer, fakat türkçe çıktı verir. Fonksiyon biri zorunlu iki değişken alıyor. İlk değişkenimiz date() fonksiyonunda olduğu gibi format değişkeni. İkincisi ise zaman bildiren bir metin değişkeni. Bu noktada date fonksiyonundan farklı olarak ikinci değişkenin tamsayı bir zaman değişkeni olmasına gerek olmuyor, fonksiyon onu zaman değişkenine çeviriyor. Eğer kullanılmazsa zamanı şimdi (sunucu bazlı) olarak kabul ediyor.

function date_tr($f, $zt = 'now'){
	$z = date("$f", strtotime($zt));
	$donustur = array(
		'Monday'	=> 'Pazartesi',
		'Tuesday'	=> 'Salı',
		'Wednesday'	=> 'Çarşamba',
		'Thursday'	=> 'Perşembe',
		'Friday'	=> 'Cuma',
		'Saturday'	=> 'Cumartesi',
		'Sunday'	=> 'Pazar',
		'January'	=> 'Ocak',
		'February'	=> 'Şubat',
		'March'		=> 'Mart',
		'April'		=> 'Nisan',
		'May'		=> 'Mayıs',
		'June'		=> 'Haziran',
		'July'		=> 'Temmuz',
		'August'	=> 'Ağustos',
		'September'	=> 'Eylül',
		'October'	=> 'Ekim',
		'November'	=> 'Kasım',
		'December'	=> 'Aralık',
		'Mon'		=> 'Pts',
		'Tue'		=> 'Sal',
		'Wed'		=> 'Çar',
		'Thu'		=> 'Per',
		'Fri'		=> 'Cum',
		'Sat'		=> 'Cts',
		'Sun'		=> 'Paz',
		'Jan'		=> 'Oca',
		'Feb'		=> 'Şub',
		'Mar'		=> 'Mar',
		'Apr'		=> 'Nis',
		'Jun'		=> 'Haz',
		'Jul'		=> 'Tem',
		'Aug'		=> 'Ağu',
		'Sep'		=> 'Eyl',
		'Oct'		=> 'Eki',
		'Nov'		=> 'Kas',
		'Dec'		=> 'Ara',
	);
	foreach($donustur as $en => $tr){
		$z = str_replace($en, $tr, $z);
	}
	if(strpos($z, 'Mayıs') !== false && strpos($f, 'F') === false) $z = str_replace('Mayıs', 'May', $z);
	return $z;
}

Eğer aşağıdaki gibi bir kod kullanırsanız

<?php echo date_tr('j F Y, l', '2011-04-19'); ?>

Çıktısı

19 Nisan 2011, Salı

şeklinde olacaktır.