CSS ile Kayan Label Yapımı vs jQuery Plugini

Bugün gezinirken şöyle bir jquery plugini gördüm;
https://www.jqueryscript.net/demo/jQuery-Floating-Placeholder-Text-Plugin-Placeholder-Label/

Amaç basit, input’un içine bir label yerleştiriyor, tıklayınca animasyonlu olarak onu yukarıya kaydırıyor. Eğer input’a yazı yazılırsa label yukarıda kalmaya devam ediyor ve label’ın texti değiştiriyor. Ve bunun için bir sürü kod yazması gerekmiş eklentiyi yazan arkadaşın.

Bende bu örneği sadece CSS ile nasıl yapacağımı göstermek istedim.

Kısaca şöyle bir HTML yapımız olsun;

<div class="field">
    <input type="text" required autocomplete="off" id="username" value="tayfunerbilen">
    <label for="username" title="Kullanıcı adınızı girin" data-title="Kullanıcı adı">
</div>

Ve CSS kodlarımız;

.field {
    position: relative;
    margin-bottom: 15px;
}

.field label::before {
    content: attr(title);
    position: absolute;
    top: 0;
    left: 15px;
    line-height: 40px;
    font-size: 14px;
    color: #777;
    transition: 300ms all;
}

.field input {
    width: 100%;
    line-height: 40px;
    padding: 0 15px;
    box-sizing: border-box;
    font-size: 14px;
    color: #222;
    border: 1px solid #ccc;
    border-radius: 3px;
}

.field input:focus {
    outline: 0;
    border-color: blue;
}

.field input:valid + label::before {
    line-height: 20px;
    font-size: 12px;
    top: -10px;
    background: #fff;
    padding: 0 6px;
    left: 9px;
    content: attr(data-title);
}

.field input:focus + label::before {
    line-height: 20px;
    font-size: 12px;
    top: -10px;
    background: #fff;
    color: blue;
    padding: 0 6px;
    left: 9px;
}

Daha fazla detay için dersi izlemeniz yeterli

Demo

Node.js, Vue.js, React ve Redux Eğitim Setleri

Merhaba dostlar, yıllar önce prototürk’ü ilk açtığımda eğitmenler arasında sevgili dostum Mehmet Seven’de vardı. O zaman sizlere jQuery dersleriyle eşlik ediyordu ve bir çok kişiye ileri seviye jquery bilgisi kazandırdı. Son yıllarda ise Mehmet, Javascript konusunda uzmanlaştı ve Javascript ile birlikte yeni teknolojileride bilgisine katarak yoluna devam etti.

Çoğu kişi benden Javascript ve framework’leri hakkında eğitim seti istiyor ancak benden çok daha iyi bilgisi olan Mehmet Seven, bu konuda 2 yararlı eğitim seti çıkardı. Bende ilk alanlardanım. Ve setleri javascript ve React, Redux, Node.js’i öğrenmek isteyenlere mutlaka tavsiye ederim.

Node.js’e meraklı olanlar mutlaka aşağıdaki linkten gözatsın;

SIFIRDAN HER YÖNÜYLE JAVASCRİPT & NODE.JS

React ve Redux’a ilgi duyanlar ise şu eğitime gözatsın;

SIFIRDAN HER YÖNÜYLE REACT VE REDUX

Ayrıca kablosuzkedi youtube kanalının sahibi, Codeigniter kitabının yazarı Gökhan Kandemir’in ise, vue.js ile ilgili harika bir eğitim serisi var. Bunuda şiddetle öneririm. Bu tür içeriklerin türkçe olarak kaynaklandırılması çok önemli, öğrenmek isteyenlerede çok büyük bir kolaylık.

SIFIRDAN İLERİ SEVİYE VUE.JS EĞİTİMİ VE UYGULAMA GELİŞTİRME

Hala ingilizceyi bahane mi ediyorsunuz?

İşimizin gereği mutlaka ingilizceyi öğrenmemiz gerekiyor. Eğer hala bir adım atmadıysanız, aşağıdaki eğitim setlerine de bir bakın.

Sıfırdan İleri Seviyeye İngilizce Eğitim Seti (50.5 Saat)

Özel Ders Formatında Sıfırdan Zirveye İngilizce Eğitim Seti (24 saat)

Baştan Sona İngilizce Eğitimi – Sıfırdan Başlayanlar İçin (20.5 Saat)

Udemy’de En Çok Satılan 5 Yabancı PHP Kursu

Merhaba arkadaşlar, bildiğiniz gibi ben Udemy’de eğitmenlik yapıyorum. Ancak aynı zamanda bir öğrenciyimde. Çok fazla eğitim seti satın alıp inceliyorum ve bilgilerimi taze tutmaya çalışıyorum.

Bu yazıda sizlere, benimde satın alıp bakma şansımın olduğu udemy’nin en çok satan 5 php kursunu tanıtmak istiyorum.

PHP FOR BEGİNNERS – BECOME A PHP MASTER – CMS PROJECT

Bu kurs sizlere sıfırdan başlayıp bir PHP ustası olmayı öğretmeyi hedefleyen bir eğitim serisi. Ve dünya çapında en çok satanlar listesinde yer alıyor. Toplamda 36 saat sürüyor.

KURSU İNCELEMEK İÇİN TIKLAYIN

PHP WİTH LARAVEL FOR BEGİNNERS – BECOME A MASTER İN LARAVEL

Bu kurs ile bir php framework’ü olan Laravel’in temellerini öğreneceksiniz. Hiç bilmeyenler için gerçekten açıklayıcı bir eğitim serisi. Ve dünya çapında en çok satanlar listesinde yer alıyor.  Toplamda 31.5 saat sürüyor.

KURSU İNCELEMEK İÇİN TIKLAYIN

PHP OOP: OBJECT ORİENTED PROGRAMMİNG FOR BEGİNNERS + PROJECT

Bu kurs OOP konusuna yeni başlamış kişileri hedefliyor. Eğer sizde ciddi anlamda OOP konusuna merak sarıpta bir şeyler yapmayı başaramadıysanız bu kursun faydasını göreceksiniz. Toplamda 18.5 saat sürüyor.

KURSU İNCELEMEK İÇİN TIKLAYIN

CREATE A SPOTİFY CLONE FROM SCRATCH – JAVASCRİPT, PHP, MYSQL

Bu kurs benim en sevdiğim kurslardan bir tanesi. Spotify’ı bilmeyen yoktur, müzik dinleme uygulaması. Bu kursta PHP, Javascript ve MySQL kullanılarak Spotify benzeri bir sistem geliştiriliyor. Yani proje yaparak PHP öğrenmiş oluyorsunuz. Aynı zamanda javascript ile de bir çok şeyin inceliklerini öğrenebilirsiniz.

KURSU İNCELEMEK İÇİN TIKLAYIN

CREATE A REAL SOCİAL NETWORK LİKE FACEBOOK İN PHP + MYSQL

Bir başka sevdiğim kurs ise, PHP ile Facebook benzeri bir sosyal ağ projesinin oluşturulduğu bu seri. Elbette bu seride sadece PHP değil, MySQL sorgularının derinliklerini, Javascript ipuçlarını da öğrenmiş olacaksınız.

KURSU İNCELEMEK İÇİN TIKLAYIN

ÖNEMLİ NOT!!

Arkadaşlar ingilizce anlatılan eğitim setlerini alıp incelemek ve bir şeyler öğrenmek için ingilizce’yi çok iyi bilmenize gerek yok. Başlangıç düzeyinde bile olsanız, sadece işiniz gereği belli terimlere bile hakim olsanız, yazılan kodlar ortak olduğu için mutlaka anlayıp ders çıkaracağınız konular olacaktır. Ben bu şekilde merak ettiğim konulara daha hızlı ulaşabiliyorum, o yüzden hala ingilizce bilmiyorum diye bahaneleriniz var ise onlar içinde birkaç udemy kursu önereyim, zira bu işi yapacaksınız ingilizce şart! Lütfen artık bahanelerin ardına sığınmayın ve kendiniz için bir şey yapmaya başlayın.

Sıfırdan İleri Seviyeye İngilizce Eğitim Seti (50.5 Saat)

Özel Ders Formatında Sıfırdan Zirveye İngilizce Eğitim Seti (24 saat)

Baştan Sona İngilizce Eğitimi – Sıfırdan Başlayanlar İçin (20.5 Saat)

MySQL’de SOUNDS LIKE ve SOUNDEX

Merhaba arkadaşlar, bu yazımda ve videomda sizlere LIKE dışında kullanabileceğiniz 2 alternatifi göstermek istiyorum. Öncelikle neden ne için kullanmamız gerek onu bir açıklayayım.

Örnek vermek gerekirse sizin bir e-ticaret siteniz olsun. Ve kullanıcı ürün aramak için arama input’une iphone yazıp arattı. Ama oda ne? Bir başka kullanıcı iphone yazmayı beceremedi ve “iphon” ya da “iphom” gibi kelimeler yazdı. Bu durumda sizin şu basit mysql sorgunuz ne döndürecektir sizce?

SELECT * FROM products
WHERE brand LIKE '%iphom%'

Ben söyleyeyim, hiçbir veri bulunamayacak. Eğer kullanıcı “ipho” yazıp bıraksaydı bulunabilirdi ama “iphom” yazınca “iphone” kelimesinden bağımsız bir hal aldı. Ama baktığınızda kulağa hala iphone gibi geliyor değil mi? İşte bu kulağa gelene göre arama yapmak istersek SOUNDS LIKE ve SOUNDEX kullanmamız gerekecek. Şimdi gelelim bu arkadaşlara..

SOUNDS LIKE

Bunu türkçede “.. gibi geliyor” olarak çevirebiliriz. Örnek bir sorgu yapalım.

SELECT * FROM products
WHERE brand SOUNDS LIKE 'iphome'

Bu sorgunun sonucunda iphone markası altında bir ürün var ise gelecektir. Ancak SOUNDS LIKE’ın bir dezavantajı var, eğer kullanıcı “ipho” yazıp aratırsa SOUNDS LIKE çalışmaz çünkü tam olarak kelime kadar yazıp kelimeleri yanlış yazarsanız çalışıyor. Yani mevcut kelimeyi bir şeye benzetemediği için bulamıyor. Bu bağlamda SOUNDS LIKE bize arifeyi gösterdi, ama bayramı göstermedi..

Ama durun! daha bitmedi. Sizin sorununuzu çözecek arkadaş, birkaç yardımcı fonksiyon kullanımıyla SOUNDEX olacak. Ama önce gelin bu SOUNDEX nedir bir anlayalım..

SOUNDEX

SOUNDEX sesin İngilizce telaffuzundan sonra isimleri endekslemek için kullanılan fonetik bir algoritmadır. Yani kelimeleri belli bir algoritmada aramamızı sağlıyor. Şimdi örnek vermek gerekirse;

SELECT SOUNDEX('iphone'), SOUNDEX('iph');

Bu sorguyu çalıştırdığımızda bize I150 ve I100 değerlerin verecek. O zaman “iphone” ifadesinin SOUNDEXdeğeri I150 imiş. Şimdi “iph” kelimesinin ise I100’müş. Aslında burada 0’ları kaldırdığımızda I1 kalıyor. Yani “iphone” kelimesinin I150 SOUNDEX değeriyle başlangıç değerleri aynı. Yani iki ifade birbiriyle uyuşuyor demek oluyor. O zaman sorguyu yazmadan önce mysql’de TRIM fonksiyonunu kullanarak 0 değerini kaldırmayı öğrenelim.

SELECT TRIM(TRAILING '0' FROM 'I100')

Bu sorgu bize sonuç olarak I1 değerini döndürecek. TRAILING ifadesi “sondaki” demektir. Yani sondaki “0” değerlerini kaldırmış olduk. Şimdi bunları toplayıp sorgumuzu yazalım.

SELECT * FROM products
WHERE SOUNDEX(brand) LIKE CONCAT(TRIM(TRAILING '0' FROM SOUNDEX('iphome')), '%');

Not: CONCAT() fonksiyonu 2 ifadeyi birleştirip tek ifade haline getirmek için kullanılıyor.

Sonuç olarak kullanıcınız “iphome” yazdığında iphone markasına ait ürünleri listeleyecek bu sorgumuz. Kullanıcı “iphone”,”ivhone”, “iphane”, “iphano” gibi ifadelerle arama yapsada yine de inatla “iphone” markasına ait ürünler listelenecektir.

MySQL’de JSON Verileriyle Çalışmak

Bu yazımda sizlere mysql’de json olarak depoladığımız veriler üzerinde listelemearamadüzenleme gibi işlemler nasıl yapılır bunlardan bahsetmek istiyorum. Eğer JSON ile uğraşıyorken aklınıza NoSQL veritabanları geliyorsa haklısınız, ancak mysql’de de bir takım işlemler yapabildiğimizi unutmamak lazım ????

Öncelikle neden JSON olarak veri depolarız? Ben kendi adıma konuşacak olursam, örneğin seo bilgilerini json formatında tutuyorum. Yani title, description, keywords ama yarın öbürgün ekstra bir bilgi daha ekleyebilirim örneğin noindex, canonical vb. Bunun için sürekli gidip kolon oluşturmak tamamen saçmalık olurdu. Bu yüzden tüm bu değerleri tek bir kolon altında json formatında tutuyorum. Ve yeri geldiğinde bunları filtrelemek, bunlar içinde arama yapmak gerekirse değiştirmek, listelerken ayrı ayrı göstermek isteyebilirim.

İşte bu noktada mysql’de bazı fonksiyonlar bize yardım edecek. Alışılmışın dışında bir sorgu yazıyormuşuz gibi görünsede, aslında ne kadar kolay olduklarını birazdan anlayacaksınız ????

JSON Veri Eklemek

Biz aslında PHP tarafında json_encode() fonksiyonu ile dizileri ya da objeleri json haline getirerek ekleyebiliyoruz. Örnek vermek gerekirse;

<?php

$arr = [
    'title' => 'Erbilen.net',
    'description' => 'Tayfun Erbilen\'in Bloğu'
];

echo json_encode($arr);
// Çıktı: {"title": "Erbilen.net", "description": "Tayfun Erbilen'in Bloğu"}

PHP’de json ile ilgili işlemlerin daha fazlası için şu yazıma gözatabilirsiniz. MySQL tarafında elle json veri eklemek istersek;

INSERT INTO tablo_adi
SET kolon_adi = '{"title": "Erbilen.net", "description": "Tayfun Erbilen\'in Bloğu"}'

Gördüğünüz gibi çok ekstra bir şeyi yok. JSON ekleme aynı zamanda şu fonksiyonlar ile de olabilir;

JSON_ARRAY

Bu fonksiyon geriye array döndürecektir. Kullanımı ise;

INSERT INTO tablo_adi
SET kolon_adi = JSON_ARRAY('tayfun','erbilen');
#    ['tayfun','erbilen']

JSON_OBJECT

Bu fonksiyon geriye obje döndürecektir. Kullanımı ise;

INSERT INTO tablo_adi
SET kolon_adi = JSON_OBJECT('ad','erbilen','soyad','erbilen');
#    {"ad": "erbilen", "soyad": "erbilen"}<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1">​</span>

JSON_MERGE

Bu fonksiyon array ve objeleri birleştirecektir. Kullanımı ise;

INSERT INTO tablo_adi
SET kolon_adi = JSON_MERGE('{"ad":"tayfun"}','{"soyad":"erbilen"}', '[1,2,3]');
#   [{"ad": "tayfun", "soyad": "erbilen"}, 1, 2, 3]

JSON_TYPE ve JSON_VALID

Bu iki fonksiyon json formatının doğruluğunu kontrol eder. JSON_TYPE’da geriye ARRAY, OBJECT ya da hata mesajı döner. JSON_VALID’de ise format doğru ise 1 değil ise 0 döner. Kullanımı ise;

-- dönen değer ARRAY:
SELECT JSON_TYPE('[5, 7, "erbilen.net"]');

-- dönen değer OBJECT:
SELECT JSON_TYPE('{"ad": "tayfun", "soyad": "erbilen"}');

-- dönen değer hata mesajı:
SELECT JSON_TYPE('{"ad": "tayfun", "soyad": "erbilen"');

-- dönen değer 1:
SELECT JSON_VALID('[5, 7, "erbilen.net"]');

-- dönen değer 1:
SELECT JSON_VALID('{"ad": "tayfun", "soyad": "erbilen"}');

-- dönen değer 0:
SELECT JSON_VALID('{"ad": "tayfun", "soyad": "erbilen"');

JSON içinde Arama

JSON verileri depoladıktan sonra önemli olan onlar içerisinde belli bir düzende arama yapıp onları listelemektir. Bunun için birkaç yararlı fonksiyonu inceleyeceğiz;

JSON_CONTAINS()

Bu fonksiyon ile JSON içerisinde istediğimiz şeyin olup olmadığını kontrol ediyoruz. Örneğin array’de bir değer ya da obje’de bir key value gibi. Hemen örneklendirelim;

# kolon_adi = {"ad":"tayfun","soyad":"erbilen"}
SELECT * FROM tablo_adi
WHERE JSON_CONTAINS(kolon_adi, '{"soyad": "erbilen"}');

Yukarıdaki örnekte kolon_adi kolonunda depolanan json değerler içerisinde soyad objesi olup değeri erbilen’e eşit olanlar listelenecektir.

SELECT * FROM tablo_adi
WHERE JSON_CONTAINS(kolon_adi, '[2]');

Yukarıdaki örnekte ise kolon_adi kolonunda depolanan array içerisinde 2 değeri olanlar listelenecektir.

JSON_SEARCH()

Bu fonksiyon ile JSON olarak depoladığımız değerlerin path’leri bulmanızı sağlıyor. İlk parametresi JSON değeri, ikinci parametresi ise all ya da one olarak belirlenmeli. all derseniz eğer aradığınız değer birden fazla ise hepsini döndürür one derseniz sadece ilkini döndürür. 3. parametre ise aradığınız değer olarak belirlenmeli. Örneğin;

SELECT JSON_SEARCH(kolon_adi, 'all', 'soyad') FROM tablo_adi
# Örnek çıktı:   ["$[0]", "$[1].deneme"]

JSON_EXTRACT()

Bu fonksiyon ile json pathlerini belirleyerek işlem yapabiliyoruz. Örneğin json veri içerisinde soyad’a sahip olanları listelemek istersek;

SELECT * FROM test_tablo
WHERE JSON_EXTRACT(test_kolon, '$.soyad')

Bu örnekte test_kolon içerisinde aşağıdaki gibi bir json saklandığını farz ediyoruz.

{"ad": "tyfn", "soyad": "erbilen"}

Kısaca aşağıdaki JSON verisini baz alırsak;

{
  "a": 1,
  "b": 2,
  "c": [3, 4],
  "d": {
    "e": 5,
    "f": 6
  }
}

O halde JSON_EXTRACT() içerisinde path’leri şu mantıkta kullanabiliriz;

$.a – 1 döndürür
$.c – [3,4] döndürür
$.c[0] – 3 döndürür
$.d.e – 5 döndürür
$**.e – 5 döndürür

Sorgularda JSON Yollarını Almak

JSON Path’leri herhangi bir fonksiyon yardımı olmadan da sorgularda kullanabiliriz. Bunun için tablo_adi->’$.path’ şeklinde bir kullanım söz konusu. Yukarıdaki kullanım şekillerini baz alabilirsiniz.

SELECT kolon_adi->'$.ad' as ad FROM tablo_adi;
# ya da
SELECT * FROM tabo_adi
WHERE kolon_adi->'$.ad' = 'tayfun';

JSON Verilerini Düzenleme

Bu işlem için birkaç fonksiyon var.

JSON_REPLACE()

İlk parametresi json verisi, 2. parametresi path yani yolu, 3. parametresi ise yeni değeri. Daha sonrasında path, value, path, value şeklinde devam ederek kullanılabilir.

UPDATE tablo_adi
SET kolon_adi = JSON_REPLACE(kolon_adi, '$.uye.ad', 'Tayfun')

JSON_SET()

JSON_REPLACE ile aynıdır. Kullanımlarıda aynı şekildedir.

JSON_INSERT()

JSON verisine yeni değerler eklemek için kullanılıyor. Örneğin;

UPDATE tablo_adi
SET kolon_adi = JSON_INSERT(kolon_adi, '$.adsoyad', 'Tayfun Erbilen')
WHERE id = 2

JSON_REMOVE()

JSON verisinden değer silmek için kullanılıyor. Örneğin;

UPDATE tablo_adi
SET kolon_adi = JSON_REMOVE(kolon_adi, '$.adsoyad')
WHERE id = 2

Bu makalemizde buraya kadardı ????

Eğer daha fazla merak ettiyseniz mysql’in kendi döküman sayfasından devamını inceleyebilirsiniz.

Bkz: https://dev.mysql.com/doc/refman/en/json-functions.html

JavaScript localeCompare()

Merhaba, bu yazıda sizlere JavaScript’te bulunan localeCompare() metotundan bahsedeceğim. Öncelikle neden ihtiyaç duyup kullandım;

Bir objemi isme göre sıralamak istedim. Bu obje içerisinde türkçe karakterlerde vardı ve sıralama düzgün şekilde gerçekleşmiyordu. Hemen bir örnek verelim;

var data = [
  {
    'id': 1,
    'name': 'İstanbul'
  },
  {
    'id': 2,
    'name': 'Çanakkale'
  },
  {
    'id': 4,
    'name': 'Ümraniye'
  },
  {
    'id': 3,
    'name': 'Ankara'
  },
  {
    'id': 5,
    'name': 'Van'
  }
];

data = data.sort(function(a,b){
  if(a.name < b.name) return -1;
  if(a.name > b.name) return 1;
  return 0;
});

data.forEach(function(key){
  var node = document.createElement("LI"),
      textnode = document.createTextNode(key.name);
  node.appendChild(textnode);
  document.getElementById('test').appendChild(node);
});

Bu kodların çıktısı şu şekilde oluyordu;

Yukarıdaki kodlarımda, sort fonksiyonu içerisindeki kodumu şu şekilde değiştirirsem;

return a.name.localeCompare(b.name);

O zaman sorunumuz çözülüyor ve aşağıdaki gibi başarılı bir sıralama oluşuyor ????

Artık birgün bir yerde işinize yararsa ne ala, benim bugün ihtiyacım oldu yarında sizin olabilir ????

PHP ile Excel Dosyalarını Okumak

Şu yazımda php ile nasıl excel dosyası oluşturulacağını göstermiştim. Bu yazımda ise, daha elzem bir konuya değineceğiz. Geçenlerde bir excel dosyasının içinden verileri almam gerekti, araştırırken baktım ki çok kalabalık kodlar var, benim amacım alt tarafı satır satır okuyup verileri almak o kadar. Sonra bir repo’ya denk geldim, Sergey Shuchkin abimiz bir sınıf yazmış bu işlemler için. Basit, kullanışlı, amaca hitap ediyor.

Öncelikle dosyaları şuradan temin edin;
https://github.com/shuchkin/simplexlsx (not: adama star atmayı unutmayın :D)

Kullanımı ise çok basit;

if ( $xlsx = SimpleXLSX::parse('test.xlsx') ) {
    print_r( $xlsx->rows() );
} else {
    echo SimpleXLSX::parse_error();
}

excel’deki satırları dizi halinde size verecek, seçip istediğinizi kullanabilirsiniz.

Kolay gelsin.

PHP’de Transaction Kullanımı

En çok bankacılık sistemlerinde kullanılan bir olay bu. Örneğin bir hesaptan diğerine para aktarımında aslında 2 sorgumuz var. Önce mevcut hesaptan bakiye düşüyoruz, daha sonra diğer hesabın bakiyesine ekliyoruz. Ancak ya mevcut hesaptan bakiyeyi düştükten sonra diğer hesaba bakiye eklerken anlık bir sorun olursa ne olur? O zaman mevcut hesaptan para çıkar ama diğer hesaba para gelmez, işler karışır.

İşte bunu önlemek için sorguları transaction ile yaparsak, yani bir işlem bloğu içerisinde yaparsak sorun kalmayacaktır.

Transaction’ı PDO’da başlatmak için beginTransaction() metodu kullanılır;

$db->beginTransaction();

Daha sonra 2 sorguyu çalıştırırız;

$sorgu1 = $db->prepare('UPDATE accounts SET balance = balance - :amount WHERE account_id = :id');
$sonuc1 = $sorgu1->execute([
   'amount' => 250,
   'id' => 1
]);

$sorgu2 = $db->prepare('UPDATE accounts SET balance = balance + :amount WHERE account_id = :id');
$sonuc2 = $sorgu1->execute([
   'amount' => 250,
   'id' => 2
]);

Şimdi transaction içerisinde bu işlemleri yaptığımızda, eğer her 2 sorguda başarı ile sonuçlandıysa, o zaman commit() metodunu kullanarak işlemi tamamlayacağız. Eğer bir sorun olur ise rollBack() metodu ile yaptığımız işlemleri geri alabileceğiz.

if ($sonuc1 && $sonuc2){
   $db->commit(); // işlemi tamamla
} else {
   $db->rollBack(); // işlemi geri al
}

Siz transaction içindeki sorgularınız commit etmediğiniz sürece, sadece mevcut bağlantınızda veritabanı değişikliğini görürsünüz. Örneğin commite etmeden önce veritabanınızı kontrol ettiğinizde, sorguları çalıştırmış olmanıza rağmen değişikliği göremeyeceksiniz. Ne zaman ki commit metodunu çalıştırıp işlemi tamamlarsınız, o zaman bütün bağlantılarda bu işlem geçerli olacaktır.

Böylece olası durumlarda, kayıpları önlemek için harika bir yolu keşfetmiş oluyoruz.

Not: Eğer bu işlemi PDO’nun metodları ile değilde, mysql ile yapmak isterseniz. O zaman bir şeye dikkat çekmem gerek. Aynı işlemi PDO’nun transaction metodlarını kullanmadan yapalım.

$db->query('BEGIN TRANSACTION');

$sorgu1 = $db->prepare('UPDATE accounts SET balance = balance - :amount WHERE account_id = :id');
$sonuc1 = $sorgu1->execute([
   'amount' => 250,
   'id' => 1
]);

$sorgu2 = $db->prepare('UPDATE accounts SET balance = balance + :amount WHERE account_id = :id');
$sonuc2 = $sorgu1->execute([
   'amount' => 250,
   'id' => 2
]);

if ($sonuc1 && $sonuc2){
   $db->query('COMMIT'); // işlemi tamamla
} else {
   $db->query('ROLLBACK'); // işlemi geri al
}

Burada 2 işlemden birisi başarısız olsa bile otomatik commit ettiği için diğer tüm bağlantılarda da görünecek. Bunun önüne geçmek için, AUTOCOMMIT değerini 0 yapmamız gerekiyor. Yani kodların en başına bir de şunu eklediğimizde;

$db->query('SET AUTOCOMMIT = 0');

Artık işlem sorunsuz şekilde çalışacaktır. Ancak bunun yerine PDO’nun metodlarını kullanmak tabi ki daha yararlı ????

Başka bir anlatımda görüşmek üzere, detaylı anlatım için videoma gözatabilirsiniz.

Benim için 2017 nasıl geçti?

Her sene gibi bu seneyide anlatacağım ancak ne çok uzun, ne çok kısa olacak. 4. ayında Malta’dan Türkiye’ye döndüm. Bir süre sorunlar ve sıkıntılarla uğraştım, arkadaşlarımla olan problemlerim, yakınlarımla olan problemlerim derken, herkesin bana sırt çevirdiğini gördüm. Bu süreçte ise en çok Mert abim ve Babam bana destek oldular. O yüzden buradan onlara teşekkür ediyorum.

Aslında uzun uzuna yazdım, saydım sövdüm ancak bana yakışmayacağına karar vererek konuyu tekrar düzenledim. 2017’de aramıza katılanlar, aramızdan gidenler oldu. Öncelikle değerli dostlara sahip oldum. Ve şeker adında bir evlat sahiplendim.

2 ay kalabildi bizimle şeker, gençlik hastalığı nedeniyle aramızdan erken ayrıldı ama 2 ay benim için çok özeldi umarım şeker’e en güzel 2 ayını yaşatabilmişimdir yaşadığı süre boyunca. Şeker’in ölümünden sonra babamda da bende de bir boşluk oluştu ve ares adında 2. bir evlat edindik ????

Umarım aynı kaderi sende paylaşmazsın güzel kızım, her şey çok daha güzel olur bu yıl.

Onun dışında, evimde yeni ortam yaptım kendime. Biraz daha karanlık, metal ve ahşap havası var çalışma odamda artık.

2017’nin tek bir iyi yanı vardı, oda sonunda istediğim adam gibi bir eğitim setini udemy üzerinden satışa sundum. Set detaylarına şuradan gözatabilirsiniz;
https://erbilen.net/php-egitim-setim-cikti/

2017’de hiç proje yapmasam da, harika projeler düşündüm. Bu yüzden 2018’den umutluyum, ayrıca uzman cevap ve prototürk’ü birleştirerek yeni bir konsept çıkartıyoruz bu sene. Harika bir topluluk oluşturmayı planlıyorum, hep birlikte ????

2018’den tek isteğim, güzel bir yıl olsun. Kimse kimseyi üzmesin, ölümler olmasın, yanlış anlaşılmalar olmasın, paşa paşa yaşayalım şu önümüzdeki yılı.

Her sene olduğu gibi bu sende yeni yıl şarkımla yazımı bitiriyorum, sevgiyle kalın.

Ayrıca bkz:
Benim için 2016 nasıl geçti?
Benim için 2015 nasıl geçti?
Benim için 2014 nasıl geçti?
Benim için 2013 nasıl geçti?
Benim için 2012 nasıl geçti?

PHP Eğitim Setim Çıktı!

Bir süre önce büyük bir özenle hazırlamaya başladığım eğitim setimi ön sipariş olarak yayına almaya karar verdim. Bu sayede hem sete başlamak isteyen arkadaşlar kursa katılıp başlayabilecek, hemde erken alanlar için indirimli olacak.

Normalde 100₺ olarak düşündüğüm kurs fiyatını, 10 Ocak 2018‘e kadar alan arkadaşlar için 50₺ yaptım. Verdiğim indirim kupon kodu ile %50 indirimli alabilirsiniz.

Bunu yapmamın en büyük sebebi, hem sizin için hem de kendim için ????

Umuyorum beraber güzel zaman geçiririz kursta.

Kurs henüz tamamlanmadığı için yeni kupon koduyla indirimli olarak alabilirsiniz.

Kurs Linki: https://www.udemy.com/php-egitim-seti/?couponCode=ERBILEN
Kupon Kodu: ERBILEN