<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>YAZILIM EKİP - Son Yazılar</title>
        <link>https://www.yazilimekip.com</link>
        <atom:link href="https://www.yazilimekip.com/feed.xml" rel="self" type="application/rss+xml" />
        <description>En güncel blog yazıları</description>
        <language>tr</language>
        <lastBuildDate>Mon, 02 Nov 2026 12:34:52 +0300</lastBuildDate>
        <item>
            <title>GITHUBA YÜKLENEN BIR PROJENIN COMPOSER DOSYASINI OLUŞTURMA  VE PACKAGELIST SITESINE YÜKLEMEK</title>
            <link>https://www.yazilimekip.com/githuba-yuklenen-bir-projenin-composer-dosyasini-olusturma-ve-packagelist-sitesine-yuklemek</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/githuba-yuklenen-bir-projenin-composer-dosyasini-olusturma-ve-packagelist-sitesine-yuklemek</guid>
            <pubDate>Sun, 12 Apr 2020 22:49:19 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Daha önceki yazımda composer ile kütüphane indirmeyi anlatmıştım. Bu yazımda ise kendi kodlarımızı başkaları da composer ile kullanabilsin diye paylaşıyoruz.]]></description>
            <content:encoded><![CDATA[<p>daha önceki yazımda sizlere composer nedir ve composer kullanarak bir kütüphane nasıl indirilir anlatmıştım. bu yazımda ise sizlere oluşturmuş olduğunuz projenin (kütüphane-kodlar bütünü) composer ile kullanılmasının nasıl sağlanacağını anlatmaya çalışacağım.</p>
<p>konu anlatımını bir üzerinden göstereceğim bunun için örnek kodlarımı içeren php dosyasının içeriğini hemen altta paylaşıyorum.</p>
<p>dosya adi: <code>token_uret.php.</code></p>
<pre><code class="language-plaintext">&lt;?php
/**
* [tokenUret her çalıştırıldığından benzersiz karakterlerden oluşan bir değer üretir.]
* @param  [string|int] $tuz [fazladan değer karıştırıcı boş bırakılabilir]
* @return [string]           [token]
*/
function tokenUret($tuz=""){
return md5(sha1(uniqid().$tuz));
}</code></pre>
<p>dosyanın çalıştırılması:</p>
<pre><code class="language-plaintext">echo tokenUret("karışık-kelime");</code></pre>
<p>dosyanın çıktısı:</p>
<pre><code class="language-plaintext">19e1bb0dc153202db022255bf87387df</code></pre>
<p>şimdi yukarıdaki dosyayı biz projelerimizde kullanabiliriz.(şuan nerede nasıl kullanırız konumuz değil)</p>
<p>fakat biz bu kodlarımızın başka insanlar tarafından da kullanılmasını istersek kodlarımızı paylaşıma açmalıyız. bu paylaşıma açma işini github gibi sistemler üzerinden yaparız.</p>
<p>projeyi githuba attığımı kabul edelim. herhangi bir kullanıcı githubdan kodlarımızı alır ve sistemine entegre ederse sorun yok fakat güncellemeleri otomatik olarak alamaz demiştik daha önceki yazımızda.</p>
<p>işte bu nedenle ben öncelikle githuba atacağım kodlarımın composerin kullanımı için <code>composer.json</code> dosyasını oluşturacağım.</p>
<p>daha sonra githuba yükleyeceğim</p>
<p>bunları yaptığımda insanlar benim kodlarımı projelerine composer vasıtası ile entegre edebilirler.</p>
<p>bunun yanında php kütüphanelerinin bulunduğu <a href="https://packagist.org/">https://packagist.org/</a> adresine de yükleyeceğim.</p>
<p>başlıyorum.</p>
<p>öncelikle githubda bir repo oluşturdum.</p>
<p>oluşturduğum repoyu local bilgisayarıma çektim.</p>
<p>(bu kısımlara bu yazımda fazladan uzamaması için yer vermiyorum bir başka yazıda değineceğim)</p>
<p>ekran görüntüsü</p>
<figure class="wp-block-image"><img src="https://www.yazilimekip.com/uploads/media/2020/04/composer1.png" alt="Composer1"></figure>
<p>şimdi bu dizin içinde <code>composer.json</code> dosyası oluşturacağım.</p>
<p><code>composer.json</code> içeriği:</p>
<pre><code class="language-plaintext">{
"name":"mustafayilmazist/composer_olusturmak",
"type":"project",
"description":"Token Üretici",
"keywords":["Token","üretici"],
"homepage":"https://github.com/mustafayilmazist/composer_olusturmak",
"license":"MIT",
"authors":[
{
"name":"Mustafa Yılmaz",
"email":"iletisim@yazilimekip.com"
}
],
"require":{
"mustafayilmazist/composer_olusturmak":"~1.0"
}
}</code></pre>
<p>buradaki seçeneklerin hepsi yazılmak zorunda değil. bu konuda detaylı bilgiyi <a href="https://getcomposer.org/doc/04-schema.md#json-schema">https://getcomposer.org/doc/04-schema.md#json-schema</a> adresinden alabilirsiniz.</p>
<p><code>composer.json</code> dosyasını oluşturduktan sonra bu dosyayıda githuba atmamız gerekli.</p>
<p>ben bu işlemi yaptım.(burada değinmiyorum)</p>
<p>projenin githubdaki son halinin görseli:</p>
<figure class="wp-block-image"><img src="https://www.yazilimekip.com/uploads/media/2020/04/composer3.png" alt="Composer3"></figure>
<p>şimdi burada bulunan projeyi herhangi bir kullanıcı projesine dahil etmek isterse:</p>
<pre><code class="language-plaintext">git clone https://github.com/mustafayilmazist/kodlari_composera_eklemek.git</code></pre>
<p>ama daha önce de bahsettiğim gibi güncellemeleri otomatik alabilmesi ve kodlarımızın daha fazla kişiye ulaşabilmesi için şimdi <a href="https://packagist.org/">https://packagist.org/</a> adresine de yüklemesini yapalım.</p>
<p>bunun için githubda projemizi açtıktan sonra adres satırını olduğu gibi kopyalayalım</p>
<p>örnek:<br>https://github.com/mustafayilmazist/kodlari_composera_eklemek</p>
<p>daha sonra <a href="https://packagist.org/">https://packagist.org/</a> adresine girelim (burada bir üyelik açtığınızı ve giriş yaptığınızı kabul ediyorum)</p>
<p>bu adreste aşağıdaki görselde bulunan sağ ikinci sıradaki submit linkine tıklıyoruz.</p>
<figure class="wp-block-image"><img src="https://www.yazilimekip.com/uploads/media/2020/04/composer4-1024x126.png" alt="Composer4"></figure>
<p>karşımıza gelen ekrandaki kutuya github adresini yapıştırıyoruz.</p>
<figure class="wp-block-image"><img src="https://www.yazilimekip.com/uploads/media/2020/04/composer5-1024x416.png" alt="Composer5"></figure>
<p>ve check butonuna tıklıyoruz.</p>
<p>karşımıza gelen ekran aşağıdaki gibi:</p>
<figure class="wp-block-image"><img src="https://www.yazilimekip.com/uploads/media/2020/04/composer6.png" alt="Composer6"></figure>
<p>son olarak submit i tıklıyoruz ve aşağıdaki gibi bir ekranla karşılaştıysak işlem tamamdır.</p>
<figure class="wp-block-image"><img src="https://www.yazilimekip.com/uploads/media/2020/04/composer7.png" alt="Composer7"></figure>
<p>üstteki ekran bize işlemin tamam olduğunu söylerken bu paketin otomatik github ile senkronize olmasını ayarlamamız gerektiğini de söylüyor.</p>
<p>artık işlem tamam.</p>
<p>herhangi bir kullanıcı komut satırından</p>
<pre><code class="language-plaintext">composer create-project mustafayilmazist/kodlari_composera_eklemek</code></pre>
<p>son olarak önemli bir uyarı yapayım,</p>
<p>projelerinizi bitirmeden yani henüz proje aşamasında olan kodlarınızı <a href="https://packagist.org/">https://packagist.org/</a> adresine atmanız önerilmez, bu nedenle ben attığım projeyi <a href="https://packagist.org/">https://packagist.org/</a> adresinden kaldırdım.</p>
]]></content:encoded>
        </item>
        <item>
            <title>sublimetext  ve eklentilerinin kurulumu</title>
            <link>https://www.yazilimekip.com/sublimetext-ve-eklentilerinin-kurulumu</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/sublimetext-ve-eklentilerinin-kurulumu</guid>
            <pubDate>Sat, 11 Apr 2020 15:22:44 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Daha önce videosunu çektiğim sublime text kurulumunu bu sefer yazı olarak anlatıyorum. Videodan sonra değişen ayarlar yüzünden takılanlar için.]]></description>
            <content:encoded><![CDATA[<p><span style="font-weight: 400;">bu yazımda sizlere daha önce videosunu çektiğim sublime text kurulumu ve eklentilerinin ayarlanmasını anlatacağım.</span></p>
<p><span style="font-weight: 400;">videoyu çektikten sonra sublimetext programında ayarlar bakımından çok küçük bir değişiklik olmuştu. aslında bu değişiklik çok önemli olmasada bazı arkadaşlarımızın o kısmı çözemediklerini geri dönüşlerden öğrendim.</span></p>
<p><span style="font-weight: 400;">şimdi başlayalım.</span></p>
<p><span style="font-weight: 400;">öncelikle <a href="http://www.sublimetext.com">sublimetext.com</a> adresine giriyoruz ve açılan pencerede download linkine tıklıyoruz.</span></p>
<p><span style="font-weight: 400;">ekran görseli:</span></p>
<p><img class="alignnone size-full wp-image-787" src="https://www.yazilimekip.com/uploads/media/2020/04/sublime1.png" alt="" width="1151" height="327" /></p>
<p><span style="font-weight: 400;">karşımıza gelen pencereden windows 64 bit yada karşısındaki portable versionu tıklıyoruz. ben portable tarcih ettim.</span></p>
<p><span style="font-weight: 400;">ekran görseli:</span></p>
<p><img class="alignnone size-full wp-image-788" src="https://www.yazilimekip.com/uploads/media/2020/04/sublime2.png" alt="" width="1092" height="437" /></p>
<p><span style="font-weight: 400;">inen zip dosyasını açıp içine açtığımızda sublime_text.exe isimli dosyayı çift tıklayarak açıyoruz.</span></p>
<p><span style="font-weight: 400;">ekran görseli:</span></p>
<p><img class="alignnone size-full wp-image-789" src="https://www.yazilimekip.com/uploads/media/2020/04/sublime3.png" alt="" width="781" height="474" /></p>
<p><span style="font-weight: 400;">karşımıza sublime text programı açılıyor. burada doğrudan hiçbirşey yapmadan CTRL+SHİFT+P tuşlarına basın karşımıza aşağıdaki gibi bir seçenek listesi açılacak</span></p>
<p><span style="font-weight: 400;">ekran görseli:</span></p>
<p><img class="alignnone size-full wp-image-790" src="https://www.yazilimekip.com/uploads/media/2020/04/sublime4.png" alt="" width="1147" height="633" /></p>
<p><span style="font-weight: 400;">burada en üstteki kutuya install yazdığımızda (devamını yazmaya gerek yok) en üstte çıkan install package control seçeneğine tıklıyoruz.</span></p>
<p><span style="font-weight: 400;">ekran görseli:</span></p>
<p><img class="alignnone size-full wp-image-791" src="https://www.yazilimekip.com/uploads/media/2020/04/sublime5.png" alt="" width="1149" height="451" /></p>
<p><span style="font-weight: 400;">burayı tıkladığımızda biraz bekledikten sonra kurulum gerçekleşecektir. kurulumun bittiğini karşımıza bir uyarı balonu çıktığında anlayabiliriz.</span></p>
<p><span style="font-weight: 400;">ekran görseli:</span></p>
<p><img class="alignnone size-full wp-image-792" src="https://www.yazilimekip.com/uploads/media/2020/04/sublime6.png" alt="" width="776" height="424" /></p>
<p><span style="font-weight: 400;">şimdi bundan sonra eklentilerimizi kuralım.</span></p>
<p><span style="font-weight: 400;">emmet eklentisi:</span></p>
<p><span style="font-weight: 400;">bu eklenti kodlarımızı yazarken bize tamamlama noktasında birçok kolaylıklar sağlar. eğer eklentilerin nasıl faydalar sağladığını görmek isterseniz  </span><a href="https://www.youtube.com/watch?v=4EUKcWJnT4k"><span style="font-weight: 400;">https://www.youtube.com/watch?v=4EUKcWJnT4k</span></a><span style="font-weight: 400;"> adresindeki videoyu muhakkak inceleyin.</span></p>
<p><span style="font-weight: 400;">emmet eklentisini kurmak için</span></p>
<p><span style="font-weight: 400;">CTRL+SHİFT+P ile açılan pencereye install yazdığımızda açılan seçeneklerden en üstteki insall package seçeneğine tıklayın. </span></p>
<p><span style="font-weight: 400;">ekran görseli:</span></p>
<p><img class="alignnone size-full wp-image-793" src="https://www.yazilimekip.com/uploads/media/2020/04/sublime7.png" alt="" width="1151" height="244" /></p>
<p><span style="font-weight: 400;">karşımıza tekrar başka bir seçenek kutusu gelecek bu gelen kutuya emmet yazdığımızda alttaki seçeneklerden en üstte bulunana tıklayalım.</span></p>
<p><span style="font-weight: 400;">ekran görseli:</span></p>
<p><img class="alignnone size-full wp-image-794" src="https://www.yazilimekip.com/uploads/media/2020/04/sublime8.png" alt="" width="1153" height="482" /></p>
<p><span style="font-weight: 400;">eklentinin kurulum bilgisi yeni bir sayfada açılacaktır. bu arada her eklenti kurulduğunda böyle bir dosya açılmayabilir.</span></p>
<p><span style="font-weight: 400;">ekran görseli:</span></p>
<p><img class="alignnone size-full wp-image-795" src="https://www.yazilimekip.com/uploads/media/2020/04/subllime9.png" alt="" width="1148" height="817" /></p>
<p><span style="font-weight: 400;">autofilename eklentisi:</span></p>
<p><span style="font-weight: 400;">dosya adlarını otomatik tamamlamaya yarayan bir eklenti.</span></p>
<p><span style="font-weight: 400;">CTRL+SHİFT+P ile açılan pencereye install package yazarak çıkan seçeneklerden install package seçeneğine tıklayın (burası bütün eklenti kurulumlarında sabit olarak ilk yapılacak işlemdir)</span></p>
<p><span style="font-weight: 400;">daha sonra açılan kutuya autofile yazın ve ilk seçeneği tıklayın. </span></p>
<p><span style="font-weight: 400;">ekran görseli:</span></p>
<p><img class="alignnone size-full wp-image-796" src="https://www.yazilimekip.com/uploads/media/2020/04/sublime10.png" alt="" width="1139" height="418" /></p>
<p><span style="font-weight: 400;">BracketHighlighter eklentisi:</span></p>
<p><span style="font-weight: 400;">parantezleri vurgulamaya yarayan bir eklenti.</span></p>
<p><span style="font-weight: 400;">CTRL+SHİFT+P ile açılan pencereye install package yazarak çıkan seçeneklerden install package seçeneğine tıklayın</span></p>
<p><span style="font-weight: 400;">daha sonra açılan kutuya  bracketh yazın ve ilk seçeneği tıklayın.</span></p>
<p><span style="font-weight: 400;">ekran görseli:</span></p>
<p><img class="alignnone size-full wp-image-797" src="https://www.yazilimekip.com/uploads/media/2020/04/sublime11.png" alt="" width="1150" height="416" /></p>
<p><span style="font-weight: 400;">kurulumun bittiğini sublime text penceresinin sol altında bulunan durum çubuğundan öğrenebilirsiniz.</span></p>
<p><span style="font-weight: 400;">ekran görseli:</span></p>
<p><img class="alignnone size-full wp-image-798" src="https://www.yazilimekip.com/uploads/media/2020/04/sublime12.png" alt="" width="1127" height="205" /></p>
<p><span style="font-weight: 400;">colorpicker eklentisi:</span></p>
<p><span style="font-weight: 400;">css için renk paletini aktif etmeye yarayan bir eklenti.</span></p>
<p><span style="font-weight: 400;">CTRL+SHİFT+P ile açılan pencereye install package yazarak çıkan seçeneklerden install package seçeneğine tıklayın</span></p>
<p><span style="font-weight: 400;">daha sonra açılan kutuya  colorpicker yazın ve ilk seçeneği tıklayın.</span></p>
<p><span style="font-weight: 400;">ekran görseli:</span></p>
<p><img class="alignnone size-full wp-image-799" src="https://www.yazilimekip.com/uploads/media/2020/04/sublime13.png" alt="" width="1150" height="271" /></p>
<p><span style="font-weight: 400;">html nest comments eklentisi:</span></p>
<p><span style="font-weight: 400;">tagları açıklama satırı içine alırken daha önce açıklama satırları var ise onları pasifize etmeye yarıyor.</span></p>
<p><span style="font-weight: 400;">CTRL+SHİFT+P ile açılan pencereye install package yazarak çıkan seçeneklerden install package seçeneğine tıklayın</span></p>
<p><span style="font-weight: 400;">daha sonra açılan kutuya  htmlnest yazın ve ilk seçeneği tıklayın.</span></p>
<p><span style="font-weight: 400;">ekran görseli:</span></p>
<p><img class="alignnone size-full wp-image-800" src="https://www.yazilimekip.com/uploads/media/2020/04/sublime14.png" alt="" width="1148" height="508" /></p>
<p><span style="font-weight: 400;">htmlbeautify eklentisi:</span></p>
<p><span style="font-weight: 400;">bu eklenti ise html kodlarını hizalamaya yarıyor.</span></p>
<p><span style="font-weight: 400;">CTRL+SHİFT+P ile açılan pencereye install package yazarak çıkan seçeneklerden install package seçeneğine tıklayın</span></p>
<p><span style="font-weight: 400;">daha sonra açılan kutuya  htmlb yazın ve ilk seçeneği tıklayın.</span></p>
<p><span style="font-weight: 400;">ekran görseli:</span></p>
<p><img class="alignnone size-full wp-image-801" src="https://www.yazilimekip.com/uploads/media/2020/04/sublime15.png" alt="" width="1147" height="472" /></p>
<p><span style="font-weight: 400;">buraya kadar eklenti kurulumlarını tamamladık.</span></p>
<p><span style="font-weight: 400;">şimdi ise eklentilere ait kısayol oluşturma işini reindent üzerinden anlatayım.</span></p>
<p><span style="font-weight: 400;">şöyleki,</span></p>
<p><span style="font-weight: 400;">normalde reindent yapmak için edit-line-reindent menü seçeneklerini tıklamak zorundasınız. ama ekleyeceğiniz kısayol ile bunu sadece f12 tuşuna bağlayabilirsiniz. siz dilerseniz f12 ye değilde ctrl+alt+shit+f12 yede bağlayabilirsiniz.</span></p>
<p><span style="font-weight: 400;">üst menülerden preferences-keybindings seçeneğine tıklayın ve açılan pencerede sağ bölüme aşağıdaki kodları yazın ve kaydedip çıkın.</span></p>
<pre><code class="language-json">[

 { "keys": ["f12"], "command": "reindent"}

]</code></pre>
<p><span style="font-weight: 400;">ekran görseli:</span></p>
<p><img class="alignnone size-full wp-image-802" src="https://www.yazilimekip.com/uploads/media/2020/04/sublime16.png" alt="" width="1150" height="755" /></p>
<p><span style="font-weight: 400;">artık f12 ile reindent yapabilirsiniz.</span></p>
<p><span style="font-weight: 400;">bu yazımda sizlere işin tekniğini gösterirken bazı eklentileride kurmuş oldum siz artık ihtiyacınız olan eklentileri araştırıp gerektiğinde kurabilirsiniz.</span></p>
]]></content:encoded>
        </item>
        <item>
            <title>windows xampp port değiştirme</title>
            <link>https://www.yazilimekip.com/windows-xampp-port-degistirme</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/windows-xampp-port-degistirme</guid>
            <pubDate>Fri, 10 Apr 2020 00:12:42 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Bu yazımda sizlere windows 10 üzerinde kurulu olan xampp programının apache portunu değiştirmeyi anlatacağım. Lafı uzatmadan konuya giriyoruz.]]></description>
            <content:encoded><![CDATA[<p><span style="font-weight: 400;">Bu yazımda sizlere windows 10 işletim sistemi üzerinde kurulu olan xampp programının apache portunu değiştirmeyi anlatmaya çalışacağım. </span></p>
<p><span style="font-weight: 400;">xampp nedir ne işe yarar ve nasıl kurulu gibi konulara değinmeden doğrudan başlıktakı konuyu anlatacağım.</span></p>
<p><span style="font-weight: 400;">bu işleme başlamadan önce çalışan xampp programı var ise  tüm servisleri durdurup kapatmanızı öneririm.</span></p>
<p><span style="font-weight: 400;">xampp port değişimi için görseldeki gibi görev çubuğunda  bulunan simge üzerinde sağ tıkladıktan sonra</span></p>
<p><img class="alignnone size-full wp-image-775" src="https://www.yazilimekip.com/uploads/media/2020/04/1.png" alt="" width="415" height="163" /></p>
<p><span style="font-weight: 400;">açılan seçeneklerden start xampp üzerinde de sağ tıklayalım</span></p>
<p><img class="alignnone size-full wp-image-776" src="https://www.yazilimekip.com/uploads/media/2020/04/2.png" alt="" width="471" height="289" /></p>
<p><b>burada hemen bir konuyu açayım bu kadar sağ tıklamamızın nedeni xamppı yönetici olarak çalıştırmak içindir.</b></p>
<p><span style="font-weight: 400;">üstteki görseldeki seçeneklerden Yönetici olarak çalıştır seçeneğini tıklayalım.</span></p>
<p><span style="font-weight: 400;">karşımıza aşağıdaki gibi bir uyarı penceresi gelecek. buna evet diyerek geçelim</span></p>
<p><img class="alignnone size-full wp-image-777" src="https://www.yazilimekip.com/uploads/media/2020/04/3.png" alt="" width="456" height="342" /></p>
<p><span style="font-weight: 400;">bu pencereden sonra esas değişiklikleri yapacağımız xampp control panel karşımıza gelecek ve görüntüsü aşağıdaki gibidir.</span></p>
<p><img class="alignnone size-full wp-image-778" src="https://www.yazilimekip.com/uploads/media/2020/04/4.jpg" alt="" width="674" height="453" /></p>
<p><span style="font-weight: 400;">burada Apache Modülüne ait olan Config butonuna tıklayalım ve aşağıdaki gibi bir seçenekle karşılaşalım.</span></p>
<p><img class="alignnone size-full wp-image-779" src="https://www.yazilimekip.com/uploads/media/2020/04/5.jpg" alt="" width="679" height="456" /></p>
<p><span style="font-weight: 400;">burada kırmızı kutu ile işaretlenmiş olan yerdeki Apache (httpd.conf) seçeneğine tıklayalım.</span></p>
<p><span style="font-weight: 400;">karşımıza aşağıdaki gibi bir döküman açılacak.</span></p>
<p><img class="alignnone size-full wp-image-780" src="https://www.yazilimekip.com/uploads/media/2020/04/6.jpg" alt="" width="674" height="395" /></p>
<p><span style="font-weight: 400;">burada kırmızı ile işaretlenmiş iki satırdan alttaki satırda normalde Listen 80 yazar. siz buraya yani 80 in yanına bir 80 daha yazın. sonuç olarak Listen 8080 görüntüsü olacak.</span></p>
<p><span style="font-weight: 400;">şimdi dosya menüsünden kaydedip çıkın.</span></p>
<p><span style="font-weight: 400;">bundan sonra xampp control paneli tekrardan açarak apache modülünü aktif edebilirsiniz.</span></p>
<p><strong>tabi unutmamanız gereken önemli bir husus da şu  artık sanal sunucumuza girerken sadece</strong></p>
<pre><code class="language-plaintext">localhost</code></pre>
<p><strong>yazıp girmeyeceğiz.</strong></p>
<pre><code class="language-plaintext">localhost:80</code></pre>
<p><strong>yazarak gireceğiz.</strong></p>
]]></content:encoded>
        </item>
        <item>
            <title>windows path içine python Yolunu eklemek</title>
            <link>https://www.yazilimekip.com/windows-path-icine-python-eklemek</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/windows-path-icine-python-eklemek</guid>
            <pubDate>Thu, 26 Mar 2020 17:44:32 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Windows konsolunda python yazınca "python bulunamadı" gibi bir hata mı alıyorsunuz? Bu yazımda bu hatanın çözümünü anlatmaya çalışacağım.]]></description>
            <content:encoded><![CDATA[<p><span style="font-weight: 400;">pythona yeni başlayan ve windows işletim sistemi kullanan birçok kullanıcı  windows konsol ekranında pythonu çalıştırma istediğinde python bulunamadı gibi bir hata ile karşılaşıyorlar. bu yazımda sizlere bu hatanın çözümünü anlatmaya çalışacağım.</span></p>
<p><span style="font-weight: 400;">öncelikle windows komut isteminde python yazdığınızda eğer komut istemi pythona giriş yapıyorsa bu anlatacağım işlemleri yapmanıza gerek yok ki zaten bunun standart olarak kurulumlarda böyle olması gerekli. ama olaki olmadı ya bizde neler yapmamız gerekli ise onu yazalım.</span></p>
<p><span style="font-weight: 400;">yapmamız gereken ilk işlem pythonun kurulu olduğu dizi öğrenmek,</span></p>
<p><span style="font-weight: 400;">bunun için aşağıdaki gibi windows başlata python yazalım.</span></p>
<p><span style="font-weight: 400;">uygulamalar arasında çıkan python üzerinde sağ tıklayınca açılan seçeneklerden dosya konumunu gösteri seçelim.</span></p>
<p><img class="alignnone size-full wp-image-759" src="https://www.yazilimekip.com/uploads/media/2020/03/a.png" alt="" width="754" height="676" /></p>
<p><span style="font-weight: 400;">karşımıza aşağıdaki gibi bir pencere gelecektir. burada ilgili python dosyası üzerinde sağ tıkladıktan sonra dosya konumunu açı seçelim.</span></p>
<p><img class="alignnone size-full wp-image-760" src="https://www.yazilimekip.com/uploads/media/2020/03/b.png" alt="" width="780" height="588" /></p>
<p><span style="font-weight: 400;">şimdi burada yani alttaki görseldeki gibi adres çubuğundaki url yi seçip kopyalıyoruz.</span></p>
<p><img class="alignnone size-full wp-image-761" src="https://www.yazilimekip.com/uploads/media/2020/03/c.png" alt="" width="782" height="590" /></p>
<p><span style="font-weight: 400;">daha sonra sistem penceresini açıyoruz. bunun için masaüstünde bulunan bilgisayar yazılı simge üzerinde sağ tık - özellikler diyoruz.</span></p>
<p><span style="font-weight: 400;">ve karşımıza alttaki pencere geliyor.</span></p>
<p><span style="font-weight: 400;">bu pencerede gelişmiş sistem ayarları yazan linke tıklıyoruz.</span></p>
<p><img class="alignnone size-full wp-image-762" src="https://www.yazilimekip.com/uploads/media/2020/03/d.png" alt="" width="779" height="583" /></p>
<p><span style="font-weight: 400;">şimdi ise karşımıza aşağıdaki gibi  bir pencere geliyor</span></p>
<p><span style="font-weight: 400;">burada da ortam değişkenleri butonuna tıklıyoruz.</span></p>
<p><img class="alignnone size-full wp-image-763" src="https://www.yazilimekip.com/uploads/media/2020/03/e.png" alt="" width="404" height="463" /></p>
<p><span style="font-weight: 400;">son olarak karşımıza aşağıdaki gibi bir pencere geliyor.</span></p>
<p><span style="font-weight: 400;">aslında bizim işimiz burada.</span></p>
<p><span style="font-weight: 400;">burada şuan hangi kullanıcı ise üstte o yazar( bende toshiba)</span></p>
<p><span style="font-weight: 400;">benim ekran görüntümde path kısmında python görünüyor zaten. şimdi biz bunu size de ekleyeceğiz.</span></p>
<p><span style="font-weight: 400;">alttaki ekranda (üstteki beyaz alan içindeki ) path yazan yeri seçip düzenleye basın.</span></p>
<p><img class="alignnone size-full wp-image-764" src="https://www.yazilimekip.com/uploads/media/2020/03/f.png" alt="" width="607" height="575" /></p>
<p><span style="font-weight: 400;">şimdi ise altta pencere açıldı.</span></p>
<p><span style="font-weight: 400;">burada yeni butonuna basıp soldaki açılan satıra önceden kopyalamış olduğumuz url yi buraya yapıştıralım. ve daha sonra bütün pencereleri tamam diyerek kapatalım.</span></p>
<p><img class="alignnone size-full wp-image-765" src="https://www.yazilimekip.com/uploads/media/2020/03/g.png" alt="" width="523" height="491" /></p>
<p><span style="font-weight: 400;">artık işlem bitti. sizde windows komut satırına python yazdığınızda  python konsolu aktif olacaktır.</span></p>
<p><span style="font-weight: 400;">sadece unutmamanız gereken şey bu işlemlerden sonra pc yi yeniden başlatmanız.</span></p>
]]></content:encoded>
        </item>
        <item>
            <title>python programlarını exe haline getirme</title>
            <link>https://www.yazilimekip.com/python-programlarini-exe-haline-getirme</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/python-programlarini-exe-haline-getirme</guid>
            <pubDate>Wed, 25 Mar 2020 23:16:50 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Python ile yazdığımız programı python olmayan bilgisayarlarda çalıştırmak istediğimiz zamanlar olmuştur. Pyinstaller ile exe yapmayı anlatacağım.]]></description>
            <content:encoded><![CDATA[<p><span style="font-weight: 400;">Bu yazımda size python ile yaptığınız herhangi bir programı exe haline yani windows için tek paket haline getirmeyi anlatacağım. </span></p>
<p><span style="font-weight: 400;">python ile yazdığımız programları python olmayan bilgisayarlarda çalıştırmak yada tek tıkla programı çalıştırmak istediğimiz zamanlar olmuştur. işte bu isteğe cevaben bu yazımız size yardımcı olacaktır.</span></p>
<p><span style="font-weight: 400;">pythonda windows çalıştırılabilir dosyası oluşturma için birden fazla paket bize yardımcı olabiliyor. benim bu yazımda size anlatacağım paketin adı pyinstaller.</span></p>
<p><span style="font-weight: 400;">tabi öncelikle pyinstaller nedir birkez daha açıklayayım.</span></p>
<p><span style="font-weight: 400;">pyinstaller dediğmiz paket  .py uzantılı python kodlarını içeren dosyalarımızdan bize .exe uzantılı dosyalar verebilen bir programdır diyebiliriz.</span></p>
<p><span style="font-weight: 400;">pyinstaller kurulumu için pip paket yöneticisinden faydalanacağız.</span></p>
<p><span style="font-weight: 400;">windows komut satırını açtıktan sonra ( bunun için başlat menüsü üzerinde sağ tık - daha sonra windows power shell yada komut istemcisini başlatın)</span></p>
<p><span style="font-weight: 400;">pip install pyinstaller</span></p>
<p><span style="font-weight: 400;">komutunu yazıp onaylayalım</span></p>
<p><span style="font-weight: 400;">kurulum bittiğinde</span></p>
<p><span style="font-weight: 400;">aşağıdaki gibi bir ekranın bizi karşılaması gerekiyor.</span></p>
<p><img class="alignnone size-full wp-image-754" src="https://www.yazilimekip.com/uploads/media/2020/03/2.png" alt="" width="1089" height="572" /></p>
<p><span style="font-weight: 400;">exe haline getireceğim dosyanın adı gui1.py</span></p>
<p><span style="font-weight: 400;">dosya ise gui klasörü içinde.</span></p>
<p><span style="font-weight: 400;">yapacağımız işlem yine yukarıda olduğu gibi gui klasörü içinde komut istemini açmak. bunu  için shift tuşu basılı iken sağ tıklayın ve açılan seçeneklerden power shelli seçin.</span></p>
<p><span style="font-weight: 400;">ekran görüntüsü</span></p>
<p><img class="alignnone size-full wp-image-755" src="https://www.yazilimekip.com/uploads/media/2020/03/3.png" alt="" width="797" height="600" /></p>
<p><span style="font-weight: 400;">şimdi burada sonra</span></p>
<p><span style="font-weight: 400;">pyinstaller.exe gui1.py </span></p>
<p><span style="font-weight: 400;">komutunu yazıp çalıştırırsanız bulunduğumuz klasöre aşağıdaki gibi görüntü gelecektir.</span></p>
<p><img class="alignnone size-full wp-image-756" src="https://www.yazilimekip.com/uploads/media/2020/03/4.png" alt="" width="780" height="585" /></p>
<p><span style="font-weight: 400;">bu yukarıdaki resimdede görüldüğü üzere build/gui1 içinde exe dosyası mevcuttur. ama burada gördüğünüz üzere tek parça olarak vermedi bize çıktıyı. yanında fazladan bir sürü dosya verdi.</span></p>
<p><span style="font-weight: 400;">aşağıdaki parametreleri kullanarak daha farklı seçenekleri aktif edebilirsiniz.</span></p>
<p><span style="font-weight: 400;">eğer exe dosyasının tek bir paket olması istenirse </span></p>
<p><span style="font-weight: 400;">--onefile</span></p>
<p><span style="font-weight: 400;">console ekranının çıkmaması istenirse</span></p>
<p><span style="font-weight: 400;">--noconsole</span></p>
<p><span style="font-weight: 400;">icon belirtlilmek istenirse</span></p>
<p><span style="font-weight: 400;">--icon ikonadı.ico</span></p>
<p><span style="font-weight: 400;">komutları kullanılır.</span></p>
<p><span style="font-weight: 400;">sonuç olarak</span></p>
<p><span style="font-weight: 400;">pyintaller.exe --onefile --noconsole --ico bayrak.ico hesap.py</span></p>
<p><span style="font-weight: 400;">komutu ile hepsi birlikte gerçekleştirilebilir.</span></p>
]]></content:encoded>
        </item>
        <item>
            <title>data table eklentisi, kurulum ve kullanımı</title>
            <link>https://www.yazilimekip.com/data-table-eklentisi-kurulum-ve-kullanimi</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/data-table-eklentisi-kurulum-ve-kullanimi</guid>
            <pubDate>Fri, 21 Feb 2020 17:40:14 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Admin panelde 10 ürün varsa sorun yok ama 1000 olursa ne yapacaksınız? İşte bu durumda datatable eklentisi size cansuyu olur.]]></description>
            <content:encoded><![CDATA[<p><span style="font-weight: 400;">Bu yazımda sizlere web sitelerinde özellikle admin panel kısmında içeriklerin listelenmesi için kullanılan datatable eklentisinden bahsedeceğim.</span></p>
<p><span style="font-weight: 400;">öncelikle datatable eklentisinin  ne olduğu sorusuna açıklık getirmeye çalışayım, senaryo gereği bir eticaret siteniz olsun ve admin panelde eklediğiniz ürünlerin listesini görmek istiyorsunuz. bu işlemi html css ve php gibi bir dil yardımı ile veritabanından çektiğiniz verileri bir tabloya yazdırarak yaptınız. fakat çektiğiniz veri adedi atıyorum 10 ise problem yok çünkü mause yi az bir kaydırmanız durumunda 10. ürünü kolaylıkla görebilirsiniz. ama kayıt sayısı 1000 olursa ne yapacaksınız. sayfanın sonuna gidene kadar mausu kaydırın yada klavye kısayolları ile sona doğru gidin. bu bir uğraş durumu ortaya çıkardı. bunun önüne geçmek için sayfalama yapmak zorundasınız ki buda veritabanına sürekli sorgu gerçekleştireceğinizden senaryo gereği sunucuyu yorar.  birde arama yapmak istiyorsunuz bu durumda yazacağınız kodlar biraz daha artar.</span></p>
<p><span style="font-weight: 400;">işte bu durumda db den çektiğiniz tüm veriler üzerinden  arama ,sayfalama vb. işlemleri sunan datatable eklentisi size cansuyu olur.</span></p>
<p><span style="font-weight: 400;">buraya kadar yazdıklarımı anladığınızı düşünerek şimdi anlatmaya başlayalım bu eklentiyi.</span></p>
<p><span style="font-weight: 400;">öncelikle</span></p>
<p><span style="font-weight: 400;">bir sayfamız olsun ki bu sayfayı datatable.html olarak kaydediyoruz.</span></p>
<p><span style="font-weight: 400;">örnek olması açısından tabloya 11 adet veriyi manuel bir şekilde girdim. 11 adet veri girmemin sebebi her sayfada 10 kayıt göstereceğinden 2.sayfanın da oluşması içindi.</span></p>
<p><span style="font-weight: 400;">(siz projelerinizde bu tbody kısmını veritabanından çekeceksiniz) </span></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;title&gt;datatable kullanımı&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;table class="table"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;No&lt;/th&gt;
&lt;th&gt;Başlık&lt;/th&gt;
&lt;th&gt;Kod&lt;/th&gt;
&lt;th&gt;Fiyat&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;toshiba laptop 1&lt;/td&gt;
&lt;td&gt;t1&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;toshiba laptop 2&lt;/td&gt;
&lt;td&gt;t2&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;toshiba laptop 3&lt;/td&gt;
&lt;td&gt;t3&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;toshiba laptop 4&lt;/td&gt;
&lt;td&gt;t4&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;toshiba laptop 5&lt;/td&gt;
&lt;td&gt;t5&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;toshiba laptop 6&lt;/td&gt;
&lt;td&gt;t6&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;toshiba laptop 7&lt;/td&gt;
&lt;td&gt;t7&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;toshiba laptop 8&lt;/td&gt;
&lt;td&gt;t8&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;toshiba laptop 9&lt;/td&gt;
&lt;td&gt;t9&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;toshiba laptop 10&lt;/td&gt;
&lt;td&gt;t10&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;toshiba laptop 11&lt;/td&gt;
&lt;td&gt;t11&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tfoot&gt;
&lt;tr&gt;
&lt;th&gt;No&lt;/th&gt;
&lt;th&gt;Başlık&lt;/th&gt;
&lt;th&gt;Kod&lt;/th&gt;
&lt;th&gt;Fiyat&lt;/th&gt;
&lt;/tr&gt;
&lt;/tfoot&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><img class="alignnone size-full wp-image-712" src="https://www.yazilimekip.com/uploads/media/2020/02/1-1.png" alt="" width="1436" height="752" /></p>
<p><span style="font-weight: 400;">yukarıdaki kodlarımıza ek olarak üst ve alt kısma bootstrap ve jquery kütüphanelerimizin eklenmiş halini ise aşağıda paylaşıyorum.</span></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8″&gt;
&lt;title&gt;datatable kullanımı&lt;/title&gt;
&lt;link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" &gt;
&lt;/head&gt;
&lt;body&gt;</code></pre>
<p>ve alt kısımdaki kodlarımız</p>
<pre><code class="language-html">&lt;img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%E2%80%9Dhttps%3A%2F%2Fcode.jquery.com%2Fjquery-3.4.1.slim.min.js%E2%80%9D%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" /&gt;
&lt;img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%E2%80%9Dhttps%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2Fpopper.js%401.16.0%2Fdist%2Fumd%2Fpopper.min.js%E2%80%9D%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" /&gt;
&lt;img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%E2%80%9Dhttps%3A%2F%2Fstackpath.bootstrapcdn.com%2Fbootstrap%2F4.4.1%2Fjs%2Fbootstrap.min.js%E2%80%9D%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" /&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><span style="font-weight: 400;">üstteki kodları dahil ettikten sonra ki ekran görüntümüz.</span></p>
<p><img class="alignnone size-full wp-image-713" src="https://www.yazilimekip.com/uploads/media/2020/02/2-1.png" alt="" width="512" height="268" /></p>
<p><span style="font-weight: 400;">şimdi ise esas meselemiz olan data table eklentisini dahil edelim.</span></p>
<p><span style="font-weight: 400;">bunun  için ilk yapmamız gereken işlem  </span><a href="https://datatables.net/"><span style="font-weight: 400;">https://datatables.net/</span></a><span style="font-weight: 400;"> adresine girmek olacak.</span></p>
<p><span style="font-weight: 400;">ben bu örneği dosyaları indirmeden doğrudan cdn üzerinden dosyaları online ekleyerek yapacağım.</span></p>
<p><span style="font-weight: 400;">bu sayfaya girdiğinizde bize gereken kodlar doğrudan anasayfada paylaşılmış.</span></p>
<p><span style="font-weight: 400;">ben bu yazıyı yazıdığımdaki ekran görüntüsü aşağıdaki gibi idi</span></p>
<p><img class="alignnone size-full wp-image-714" src="https://www.yazilimekip.com/uploads/media/2020/02/3-1.png" alt="" width="1389" height="840" /></p>
<p><span style="font-weight: 400;">bu sayfada solda bulunan 1 ve 2 nolu başlıkları gerekli yere koyduğumuzda datatable eklentisini sisteme dahil etmiş olucaz.</span></p>
<p><span style="font-weight: 400;">başlayalım o zaman.</span></p>
<p><span style="font-weight: 400;">css içindeki kodu alıp</span></p>
<p><img class="alignnone size-full wp-image-715" src="https://www.yazilimekip.com/uploads/media/2020/02/4-1.png" alt="" width="366" height="47" /></p>
<p><span style="font-weight: 400;">aşağıdaki gibi üst kısma dahil edelim</span></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;title&gt;datatable kullanımı&lt;/title&gt;
&lt;link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" &gt;
&lt;link rel="stylesheet" href="//cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css"&gt;
&lt;/head&gt;
&lt;body&gt;</code></pre>
<p><span style="font-weight: 400;">daha sonra  js içindeki kodu alıp</span></p>
<p><img class="alignnone size-full wp-image-716" src="https://www.yazilimekip.com/uploads/media/2020/02/5-1.png" alt="" width="380" height="49" /></p>
<p><span style="font-weight: 400;">aşağıdaki gibi dahil edelim.</span></p>
<pre><code class="language-html">&lt;script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"&gt;&lt;/script&gt;
&lt;script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"&gt;&lt;/script&gt;
&lt;script src="//cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><span style="font-weight: 400;">bu işlemleri yaptıktan sonra 2. olarak</span></p>
<p><img class="alignnone size-full wp-image-717" src="https://www.yazilimekip.com/uploads/media/2020/02/6-1.png" alt="" width="371" height="98" /></p>
<p><span style="font-weight: 400;">kodunu alıp aşağıdaki gibi alt  kısma ekleyelim</span></p>
<pre><code class="language-html">&lt;script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"&gt;&lt;/script&gt;
&lt;script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"&gt;&lt;/script&gt;
&lt;script src="//cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"&gt;&lt;/script&gt;
&lt;script&gt;
$(document).ready( function () {
$('#myTable').DataTable();
} );
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><span style="font-weight: 400;">burada #myTable yazan ifade aslında bizim tablomuzdaki id ile eşleşmeli bunun için tablomuzun id değerini ise myTable yapalım aşağıdaki gibi.</span></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;title&gt;datatable kullanımı&lt;/title&gt;
&lt;link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" &gt;
&lt;link rel="stylesheet" href="//cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css"&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;table class="table" id="myTable"&gt;</code></pre>
<p><span style="font-weight: 400;">bu işlemlerden sonra  sayfayı çalıştırdığımızda ekran görüntümüz aşağıdaki gibidir.</span></p>
<p><img class="alignnone size-full wp-image-718" src="https://www.yazilimekip.com/uploads/media/2020/02/7-1.png" alt="" width="1434" height="743" /></p>
<p><span style="font-weight: 400;">buraya kadar yaptığımız işlemler ile datatable eklentisini kurduk ve çalışır hale getirdik.</span></p>
<p><span style="font-weight: 400;">şimdi eğer isterseniz aşağıdaki verdiğim kodu alt kısımda günceller iseniz data table görüntünüzdeki değişikliği fark edebilirsiniz.</span></p>
<pre><code class="language-html">&lt;script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"&gt;&lt;/script&gt;
&lt;script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"&gt;&lt;/script&gt;
&lt;script src="//cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"&gt;&lt;/script&gt;
&lt;script&gt;
$(document).ready(function() {
$('#myTable').DataTable( {
"language": {
"lengthMenu": "Sayfa Başına _MENU_ Kayıt Göster",
"zeroRecords": "Gösterilecek Kayıt Bulunamadı",
"info": "_PAGE_ / _PAGES_",
"infoEmpty": "Kayıt Bulunamadı",
"infoFiltered": "(Toplam Bulunan _MAX_ Kayıt)",
"search": "Ara:",
"oPaginate": {
"sFirst":    "İlk",
"sLast":    "Son",
"sNext":    "Sonraki",
"sPrevious": "Önceki"
},
}
} );
} );
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><span style="font-weight: 400;">ekran görüntüsü</span></p>
<p><img class="alignnone size-full wp-image-719" src="https://www.yazilimekip.com/uploads/media/2020/02/8-1.png" alt="" width="1435" height="750" /></p>
<p><span style="font-weight: 400;">bundan sonra</span></p>
<p><span style="font-weight: 400;">ekranın altındaki sağda bulunan sonraki ve önceki butonlarına tıklayıp deneyiniz.</span></p>
<p><img class="alignnone size-full wp-image-720" src="https://www.yazilimekip.com/uploads/media/2020/02/9-1.png" alt="" width="512" height="268" /></p>
<p><span style="font-weight: 400;">ara yazan yerdeki kutucuğa başlık yada kod yazıp deneyiniz.</span></p>
<p><img class="alignnone size-full wp-image-721" src="https://www.yazilimekip.com/uploads/media/2020/02/10-1.png" alt="" width="512" height="269" /></p>
<p><span style="font-weight: 400;">sayfa başına 10 kayıt göster yazan yerdeki seçnekleri değiştirip deneyip oluşan sonuçları kendiniz gözlemleyin.</span></p>
<p><img class="alignnone size-full wp-image-722" src="https://www.yazilimekip.com/uploads/media/2020/02/11-1.png" alt="" width="512" height="269" /></p>
<p><span style="font-weight: 400;">uygulamanın tüm kodları ise</span></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;title&gt;datatable kullanımı&lt;/title&gt;
&lt;link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" &gt;
&lt;link rel="stylesheet" href="//cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css"&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;table class="table" id="myTable"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;No&lt;/th&gt;
&lt;th&gt;Başlık&lt;/th&gt;
&lt;th&gt;Kod&lt;/th&gt;
&lt;th&gt;Fiyat&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;toshiba laptop 1&lt;/td&gt;
&lt;td&gt;t1&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;toshiba laptop 2&lt;/td&gt;
&lt;td&gt;t2&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;toshiba laptop 3&lt;/td&gt;
&lt;td&gt;t3&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;toshiba laptop 4&lt;/td&gt;
&lt;td&gt;t4&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;toshiba laptop 5&lt;/td&gt;
&lt;td&gt;t5&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;toshiba laptop 6&lt;/td&gt;
&lt;td&gt;t6&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;toshiba laptop 7&lt;/td&gt;
&lt;td&gt;t7&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;toshiba laptop 8&lt;/td&gt;
&lt;td&gt;t8&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;toshiba laptop 9&lt;/td&gt;
&lt;td&gt;t9&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;toshiba laptop 10&lt;/td&gt;
&lt;td&gt;t10&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;toshiba laptop 11&lt;/td&gt;
&lt;td&gt;t11&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tfoot&gt;
&lt;tr&gt;
&lt;th&gt;No&lt;/th&gt;
&lt;th&gt;Başlık&lt;/th&gt;
&lt;th&gt;Kod&lt;/th&gt;
&lt;th&gt;Fiyat&lt;/th&gt;
&lt;/tr&gt;
&lt;/tfoot&gt;
&lt;/table&gt;
&lt;script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"&gt;&lt;/script&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"&gt;&lt;/script&gt;
&lt;script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"&gt;&lt;/script&gt;
&lt;script src="//cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"&gt;&lt;/script&gt;
&lt;script&gt;
$(document).ready(function() {
$('#myTable').DataTable( {
"language": {
"lengthMenu": "Sayfa Başına _MENU_ Kayıt Göster",
"zeroRecords": "Gösterilecek Kayıt Bulunamadı",
"info": "_PAGE_ / _PAGES_",
"infoEmpty": "Kayıt Bulunamadı",
"infoFiltered": "(Toplam Bulunan _MAX_ Kayıt)",
"search": "Ara:",
"oPaginate": {
"sFirst":    "İlk",
"sLast":    "Son",
"sNext":    "Sonraki",
"sPrevious": "Önceki"
},
}
} );
} );
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
]]></content:encoded>
        </item>
        <item>
            <title>composer nedir ve kurulumu nasıl yapılır?</title>
            <link>https://www.yazilimekip.com/composer-nedir-ve-kurulumu-nasil-yapilir</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/composer-nedir-ve-kurulumu-nasil-yapilir</guid>
            <pubDate>Sun, 16 Feb 2020 23:53:29 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[İnternetten bir kütüphane indirdiniz, projeye attınız ve eksik paket uyarısı aldınız. Bu yazımda composer nedir ve bu dertten nasıl kurtuluruz anlatacağım.]]></description>
            <content:encoded><![CDATA[<p><span style="font-weight: 400;">Bu yazımda sizlere composer nedir ve ne işe yarar sorularını cevaplayacağim</span></p>
<p><span style="font-weight: 400;">Daha önce </span><a href="/pip-nedir-ve-python-icin-pip-kurulumu"><span style="font-weight: 400;">burada pip nedir ve Python ile pip kullanımını</span></a><span style="font-weight: 400;"> anlatmaya çalışmıştım.</span></p>
<p><span style="font-weight: 400;">Pip in bir paket yöneticisi olduğunu ilgili yazımı okudu iseniz bilirsiniz. Bilmeyen arkadaşlar için şimdi bir kez daha paket yöneticisinin ne olduğunu açıklayalım.</span></p>
<p><span style="font-weight: 400;">Paket yöneticisi konusunu anlattıktan sonra composer in kullanımına geçelim.</span></p>
<p><span style="font-weight: 400;">Şimdi bir senaryo kurgulayalım. ve bu senaryo üzerinde anlatımımıza geçelim Aslında senaryo dediğim bildiğiniz proje geliştirme aşamasından ibaret ama olsun biz genede senaryo diyelim.</span></p>
<p><span style="font-weight: 400;">Simdi bir proje geliştiriyorsunuz  ve proje gelistirirken sistemde email göndermeniz gerekli ve siz bunun için internet üzerinden bu işi daha kullanışlı  hale getiren bir kutuphane buldunuz. Bu bulduğunuz kütüphaneyi zip olarak indirdiniz daha sonra zipli dosyayı açtınız ve  içini uygun olan projeye ait klasöre kopyaladınız. Ama bu kütüphaneyi ekleyip çalıştırmak istediğinizde bazı eksik paketler var uyarısı aldınız.  Burada bir sorun var ve siz eğer bu kütüphaneyi indirme işlemini paket yöneticisi olan composer ile yapsa idiniz kütüphane ihtiyaç duyduğu tüm paketler ile birlikte inecekti (muhtemelen) sizde bu sıkıntıyı yaşamayacaktınız.</span></p>
<p><span style="font-weight: 400;">Birinci faydasını dedik aynı zamanda ikinci faydayı da buraya kadar yazdıklarımız üzerinden söyleyelim. </span></p>
<p><span style="font-weight: 400;">Nedir bu ikinci fayda? </span></p>
<p><span style="font-weight: 400;">Composer ile bir paketi yüklerken adrese git indir zipli dosyayı aç ve kopyala derdi yok. Tek bir komut ile bu paketi ilgili dizine kurabilirsiniz.</span></p>
<p><span style="font-weight: 400;">Geçelim üçüncü faydaya yine senaryo gereği birden fazla paketi manuel olarak sisteme entegre ettiniz tamam buraya kadarda sıkıntı yok fakat indirdiğiniz paketleri güncellemek gerektiğinde bu yaptığınız işlemleri aynen tekrarlamak zorundasınız. İşte paket yöneticimiz bu işlemi yine bir veya birkaç komutla hızlıca yapmanızı sağlar. bu işlemi yaparken de github gibi bazı paket depolarını kontrol eder.</span></p>
<p><span style="font-weight: 400;">Buraya kadar anladı iseniz,</span></p>
<p><span style="font-weight: 400;">Öncelikle composer in sisteme kurulumunu anlatalım.</span></p>
<p><span style="font-weight: 400;">Bu işlem için getcomposer.org adresine girin. </span></p>
<p><img class="alignnone size-full wp-image-691" src="https://www.yazilimekip.com/uploads/media/2020/02/1.png" alt="" width="1020" height="799" /></p>
<p><span style="font-weight: 400;">Windows kurulumu basit ilgili dosyayı indir ve aç deyip ileri ileriden ibaret. İşlem basamaklarını anlatmak gerekirse</span></p>
<p><span style="font-weight: 400;">-ilgili sayfada download butonuna tıkla.</span></p>
<p><img class="alignnone size-full wp-image-692" src="https://www.yazilimekip.com/uploads/media/2020/02/2.png" alt="" width="1018" height="380" /></p>
<p><span style="font-weight: 400;">açılan sayfanın en başında windows için bir kurulum dosyasından bahseder ki adı Composer-Setup.exe bunu indirin</span></p>
<p><span style="font-weight: 400;">inen dosyaya çift tıkladıktan sonra.</span></p>
<p><span style="font-weight: 400;">kurulum Aşamalarımız</span></p>
<p><span style="font-weight: 400;">üstteki seçeneği seçerek tüm kullanıcılar için kurulum yapalım.</span></p>
<p><img class="alignnone size-full wp-image-693" src="https://www.yazilimekip.com/uploads/media/2020/02/3.png" alt="" width="362" height="263" /></p>
<p><span style="font-weight: 400;">burada ileri deyip geçiniz.</span></p>
<p><img class="alignnone size-full wp-image-694" src="https://www.yazilimekip.com/uploads/media/2020/02/4.png" alt="" width="636" height="472" /></p>
<p><span style="font-weight: 400;">kurulumda önemli kısım burası ki burada php.exe yi kurulu olduğu dizinden otomatik olarak seçmiş olmalıdır. eğer seçili değilse Browse düğmesine tıklayarak php nin kurulu olduğu yolu belirtmeniz gerekir.</span></p>
<p><img class="alignnone size-full wp-image-695" src="https://www.yazilimekip.com/uploads/media/2020/02/5.png" alt="" width="636" height="471" /></p>
<p><span style="font-weight: 400;">artık buradan sonra next diyerek kurulumu gerçekleştirebilir ve pencereyi kapatabilirsiniz.</span></p>
<p><span style="font-weight: 400;">Gördüğünüz gibi kurulumda tek dikkat etmeniz gereken kurulum esnasında composer in PHP yolunu otomatik bulması eğer bulmazsa bu işlemi sizin el ile yapmanız gerekir.</span></p>
<p><span style="font-weight: 400;">Kurulum bittiğine göre artık kullanım kısmına geçebiliriz.</span></p>
<p><span style="font-weight: 400;">Şimdi Bir paketin önce composer kullanmadan kurulumunu sonra ise composer ile kurulumu anlatayım farkı beraber görelim.</span></p>
<p><a href="https://github.com/PHPMailer/PHPMailer"><span style="font-weight: 400;">github.com/PHPMailer/PHPMailer</span></a><span style="font-weight: 400;"> adresine girelim eğer git kullanmıyor isek clone or download yazan yere tıklayalım ilgili dosyayı indirdikten sonra içeriğini arşiv yöneticisi ile açalım ve su dosyaları projede ilgili klasöre alalım. </span></p>
<p><img class="alignnone size-full wp-image-696" src="https://www.yazilimekip.com/uploads/media/2020/02/6.png" alt="" width="1024" height="799" /></p>
<p><span style="font-weight: 400;">Şimdi burada bu dosyayı kullanmadan önce şu uyarıyı vereyim bu sınıf composer olmadan tam olarak inmiyor.</span></p>
<p><span style="font-weight: 400;">indirilen dosya içeriği</span></p>
<p><img class="alignnone size-full wp-image-697" src="https://www.yazilimekip.com/uploads/media/2020/02/7.png" alt="" width="785" height="594" /></p>
<p><span style="font-weight: 400;">Şimdi ise bu işlemi birde composer ile yapalım.</span></p>
<p><span style="font-weight: 400;">Aynı adrese girince hemen aşağıda bu sınıfın composer ile kurulumunun Nasıl olacağını bize anlatmış sınıfı yazanlar. </span></p>
<p><img class="alignnone size-full wp-image-698" src="https://www.yazilimekip.com/uploads/media/2020/02/8.png" alt="" width="1014" height="801" /></p>
<p><span style="font-weight: 400;">Diyor ki composer i  aç ve su kodu çalıştır tabi bu işlemi yüklemek istediğiniz klasörün içinde composer i başlatarak yapacağız.</span></p>
<p><img class="alignnone size-full wp-image-699" src="https://www.yazilimekip.com/uploads/media/2020/02/9.png" alt="" width="1127" height="799" /></p>
<p><span style="font-weight: 400;">Bu komutu composer ile çalıştırınca kurulum gerçekleşmiş olacak.</span></p>
<p><span style="font-weight: 400;">Şimdi ilk kurulum ile compser ile kurulan dosya arasındaki farkı görebilirsiniz</span></p>
<p><img class="alignnone size-full wp-image-700" src="https://www.yazilimekip.com/uploads/media/2020/02/10.png" alt="" width="789" height="588" /></p>
<p><span style="font-weight: 400;">burada dikkat ederseniz kütüphane içinde güncellemeler de vs. kullanacağımız composer.json dosyası ve altta ise klasörü mevcut.</span></p>
<p><img class="alignnone size-full wp-image-701" src="https://www.yazilimekip.com/uploads/media/2020/02/11.png" alt="" width="512" height="386" /></p>
<p><span style="font-weight: 400;">Artık bundan sonra ilgili dosyayı projeye dahil edip kullanmak kaldı.</span></p>
<p>&nbsp;</p>
]]></content:encoded>
        </item>
        <item>
            <title>jquery ile anlık şifre ve şifre tekrar uyum kontrolü</title>
            <link>https://www.yazilimekip.com/jquery-ile-anlik-sifre-ve-sifre-tekrar-uyum-kontrolu</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/jquery-ile-anlik-sifre-ve-sifre-tekrar-uyum-kontrolu</guid>
            <pubDate>Sat, 08 Feb 2020 22:28:45 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Bu yazımda sizlere kayıt formlarında sıklıkla rastladığımız şifre ve şifre tekrarı alanlarında anında kontrol yapmayı jquery ile anlatacağım.]]></description>
            <content:encoded><![CDATA[<div data-pm-slice="1 1 []" data-en-clipboard="true">Bu yazımda sizlere javascript/jquery kullanarakı kullanıcı kayıt formlarında sıklıkla rastladığımız sifre ve sifre tekrarında anında kontrol yapmayı anlatacağım.</div>
<div data-pm-slice="1 1 []" data-en-clipboard="true">öncelikle boş html şablonunu oluşturalım</div>
<div data-pm-slice="1 1 []" data-en-clipboard="true">öncelikle boş html şablonunu oluşturalım</div>
<div></div>
<pre><code class="language-html">&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;/body&gt;
&lt;/html&gt;</code></pre>
<div></div>
<div>daha sonra bu şablona jquery kütüphanesini ekleyelim</div>
<div></div>
<pre><code class="language-html">&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;&lt;/title&gt;
  &lt;script src="https://code.jquery.com/jquery-3.4.1.min.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;/body&gt;
&lt;/html&gt;</code></pre>
<div></div>
<div>daha sonra bir adet form oluşturalım.</div>
<div></div>
<pre><code class="language-html">&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;&lt;/title&gt;
  &lt;script src="https://code.jquery.com/jquery-3.4.1.min.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;form&gt;
    &lt;div&gt;
      &lt;input type="text" id="sifre"&gt;
      &lt;label&gt;&lt;/label&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;input type="text" id="sifre_tekrar"&gt;
      &lt;label&gt;&lt;/label&gt;
    &lt;/div&gt;
  &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<div></div>
<div></div>
<div>şimdi ise gerekli kodlamalara geçelim.</div>
<div>sayfamızın en altına  bir adet script tagı açalım ve arasına aşağıdaki kodlarımızı yazalım.</div>
<div></div>
<pre><code class="language-html">&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;&lt;/title&gt;
  &lt;script src="https://code.jquery.com/jquery-3.4.1.min.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;form&gt;
    &lt;div&gt;
      &lt;input type="text" id="sifre"&gt;
      &lt;label class="sifre_sonuc"&gt;&lt;/label&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;input type="text" id="sifre_tekrar"&gt;
      &lt;label class="sifre_sonuc"&gt;&lt;/label&gt;
    &lt;/div&gt;
  &lt;/form&gt;
  &lt;script&gt;
    /*öncelikle sayfa tamamen yüklendi ise diye bir seçenek koyalım*/
    $(document).ready(function(){
      /*sayfada bulunan inputlardan bir tanesine odaklanma kaybolur ise (yani kullanici inputun dışına çıkarsa ) bir fonksiyon çalıştırıyoruz.*/
      $("input").focusout(function(){
        /*sifre inputunun değerini okuyoruz*/
        sifre = $("input#sifre").val();
        /*sifre_tekrar inputunun değerini okuyoruz.*/
        sifre_tekrar = $("input#sifre_tekrar").val();
        /*eğer şifreler eşit değil ise*/
        if(sifre!=sifre_tekrar){
          /*iki inputun altında bulunan labellere şifreler uyumsuz yazdırıyoruz.*/
          $(".sifre_sonuc").html("Şifreler Uyumsuz..");
        }else{
          /*iki inputun altında bulunan labellere şifreler uyumlu yazdırıyoruz.*/
          $(".sifre_sonuc").html("Şifreler Uyumlu..");
        }
      });
    });
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<div>yazdığımız kodlara ait açıklaması kod bloğu arasında /**/ ifadeleri arasına yazdığımızdan burada fazladan bir açıklama yapmıyorum.</div>
<div></div>
<div>kodların tam hali ise</div>
<div></div>
<div>index.html dosyasında</div>
<div></div>
<pre><code class="language-html">&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;&lt;/title&gt;
        &lt;script src="https://code.jquery.com/jquery-3.4.1.min.js"&gt;&lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;form&gt;
            &lt;div&gt;
                &lt;input type="text" id="sifre"&gt;
                &lt;label class="sifre_sonuc"&gt;&lt;/label&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;input type="text" id="sifre_tekrar"&gt;
                &lt;label class="sifre_sonuc"&gt;&lt;/label&gt;
            &lt;/div&gt;
        &lt;/form&gt;
        &lt;script&gt;
        /*öncelikle sayfa tamamen yüklendi ise diye bir seçenek koyalım*/
        $(document).ready(function(){
            /*sayfada bulunan inputlardan bir tanesine odaklanma kaybolur ise (yani kullanici inputun dışına çıkarsa ) bir fonksiyon çalıştırıyoruz.*/
            $("input").focusout(function(){
                /*sifre inputunun değerini okuyoruz*/
                sifre = $("input#sifre").val();
                /*sifre_tekrar inputunun değerini okuyoruz.*/
                sifre_tekrar = $("input#sifre_tekrar").val();
                /*eğer şifreler eşit değil ise*/
                if(sifre!=sifre_tekrar){
                    /*iki inputun altında bulunan labellere şifreler uyumsuz yazdırıyoruz.*/
                    $(".sifre_sonuc").html("Şifreler Uyumsuz..");
                }else{
                    /*iki inputun altında bulunan labellere şifreler uyumlu yazdırıyoruz.*/
                    $(".sifre_sonuc").html("Şifreler Uyumlu..");
                }
            });
        });
        &lt;/script&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
]]></content:encoded>
        </item>
        <item>
            <title>Ubuntu kullanirken karşılaşılan mysql group by hatasının çözümü</title>
            <link>https://www.yazilimekip.com/ubuntu-kullanirken-karsilasilan-mysql-group-by-hatasinin-cozumu</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/ubuntu-kullanirken-karsilasilan-mysql-group-by-hatasinin-cozumu</guid>
            <pubDate>Sat, 08 Feb 2020 20:21:37 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Ubuntu'da lamp kurup sorunsuz çalışıyordum, ta ki bir uygulamamda group by kullanana kadar. Karşılaştığım hatayı ve kalıcı çözümünü paylaşıyorum.]]></description>
            <content:encoded><![CDATA[<p><span style="font-weight: 400;">Ubuntu üzerine lamp kurduktan sonra sorunsuz bir bir şekilde php ve mysql ile birlikte uygulamalar geliştiriyordum. ta ki bir uygulamam da group by kullanana kadar.</span></p>
<p><span style="font-weight: 400;">group by kullandığımda bana aşağıdakine benzer bir hata döndürmüş idi</span></p>
<pre><code class="language-sql">Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'returntr_prod.tbl_customer_pod_uploads.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by</code></pre>
<p><span style="font-weight: 400;">hemen bu sorunu nette aradım. karşıma birkaç çözüm önerisi gelsede aslında 3 çözüm vardı. </span></p>
<p><span style="font-weight: 400;">bunlardan birincisi</span></p>
<pre><code class="language-sql">SELECT @@sql_mode;

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'</code></pre>
<p><span style="font-weight: 400;">veya </span></p>
<pre><code class="language-sql">SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));</code></pre>
<p><span style="font-weight: 400;">bu sql kodlarını phpmyadmin de sql kodu olarak çalıştırmak.</span></p>
<p><span style="font-weight: 400;">ikincisi ise</span></p>
<p><span style="font-weight: 400;">phpmyadmin üzerinde aşağıdaki ayarların değiştirilmesi idi</span></p>
<p><img class="alignnone size-full wp-image-660" src="https://www.yazilimekip.com/uploads/media/2020/02/ubuntu-mysql-group-by-hatas%C4%B1.png" alt="" width="1338" height="585" /></p>
<p><span style="font-weight: 400;">variables(değişkenler) seçeneği altında bulunan sql mod(sql mode) bölümünü edit (Düzenle) diyerek açılan kutuda <strong>ONLY_FULL_GROUP_BY</strong> ifadesini kaldırın.</span></p>
<p><span style="font-weight: 400;">Buraya kadar uyguladıklarım sorunu geçici olarak hep çözdü. fakat bilgisayarı yeniden başlattıktan sonra hep aynı işlemleri tekrardan uygulamak zorunda kalıyorsunuz.</span></p>
<p><span style="font-weight: 400;">Kalıcı çözüm olarak ise</span></p>
<p><span style="font-weight: 400;"><strong>CTRL+ALT+T</strong> ile terminali açtıktan sonra</span></p>
<pre><code class="language-bash">sudo gedit /etc/mysql/my.cnf</code></pre>
<p><span style="font-weight: 400;">komutunu vermeniz ve onaylamanız. </span></p>
<p><span style="font-weight: 400;">bu onaydan sonra sistem sizden root şifrenizi isteyecektir. root şifrenizi yazdıktan sonra açılan belgenin en altına</span></p>
<pre><code class="language-bash">[mysqld]

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION</code></pre>
<p><span style="font-weight: 400;">kodlarını ekleyip belgeyi kaydedip çıkın. </span></p>
<p><span style="font-weight: 400;">ve daha sonra </span></p>
<pre><code class="language-bash">sudo service mysql restart</code></pre>
<p><span style="font-weight: 400;">komutunu kullanarak mysql’ i  yeniden başlatın.</span></p>
<p><span style="font-weight: 400;">artık bundan sonra bilgisayarı kapatsanız dahi group by hatası ile karşılaşmayacaksınız.</span></p>
<p><span style="font-weight: 400;">kaynak </span><a href="https://stackoverflow.com/"><span style="font-weight: 400;">https://stackoverflow.com/</span></a></p>
<p>&nbsp;</p>
]]></content:encoded>
        </item>
        <item>
            <title>JSON (JavaScript Object Notation) nedir? ve ne için kullanılır?</title>
            <link>https://www.yazilimekip.com/json-javascript-object-notation-nedir-ve-ne-icin-kullanilir</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/json-javascript-object-notation-nedir-ve-ne-icin-kullanilir</guid>
            <pubDate>Thu, 12 Sep 2019 17:11:54 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Json bir veri değişim formatı. Programlama dillerinden bağımsız ama hepsinin kolayca okuyup yazabildiği bir yapı. Bir senaryo üzerinden bakalım.]]></description>
            <content:encoded><![CDATA[<p><b>Json bir veri değişim formatıdır.</b></p>
<p>Programlama dillerinden bağımsız fakat herhangi bir programlama dilinin kolayca oluşturabileceği ve kolayca anlayabileceği veri taşıma yapısıdır.</p>
<p><b>Json yapısı</b></p>
<p>json yapısı genel olarak 2 şekildedir.</p>
<p>Bunlardan birincisi bir anahtar ve karşısında bir değer barındıran yapıdır ki yapısı süslü parantezler arasında tanımlanır.</p>
<p>Yapısını açıklamak gerekirse</p>
<pre><code class="language-php">{ "anahtar":"değer" }</code></pre>
<p>üstteki yapıyı örneklendirmek ister isek</p>
<pre><code class="language-php">{ "ad" : "mustafa" , "soyad" : "yılmaz" }</code></pre>
<p>buradaki mustafa değerini okumak için ad anahtarına arişmek bizim için yeterlidir.</p>
<p>Bu yapı aynı zamanda diğer programlama dillerinde objeler olarak da isimlendirilebilirler.</p>
<p>İkinci yapı ise doğrudan değerlerin saklandığı yapıdır ki bunun yapısı ise köşeli parantezler arasında tanımlanır.</p>
<p>Yapısını açıklamak gerekirse</p>
<pre><code class="language-php">[ "değer","değer" ]</code></pre>
<p>üstteki yapıyı örneklendirmek istersek</p>
<pre><code class="language-php">[ "mustafa" , "yılmaz" ]</code></pre>
<p>buradaki mustafa değerini okumak istersek doğrudan değerin sıra numarasını belirtmemiz gerekir.</p>
<p>Bu yapı aynı zamanda diğer programlama dillerinde array yani dizi olarak ta isimlendirilebilir.</p>
<p><b>Şimdi Gelin isterseniz Json yapısının nasıl kullanıldığına bir bakalım.</b></p>
<p>Öncelikle bir senarya yazalım;</p>
<p>bir web sitesi yapalım bazı ürünlerin listelendiği, biz bunu php ile yazalım.</p>
<p>Ürünler sitede aşağıdaki gibi listelensin</p>
<p>üstteki sitenin kodları na bakacak olursak</p>
<pre><code class="language-html">&lt;div class="row"&gt;
&lt;div class="col-md-4 col-sm-6 col-xs-12"&gt;
&lt;div class="single-events single-product margin-bottom-30"&gt;
&lt;div class="single-event-thumb" style="text-align: center;"&gt;
    &lt;img src="http://www.hidrozen.com/public/upload/urun/urun_48.jpg" alt="" style="height:150px!important;"/&gt;
&lt;/div&gt;
&lt;div class="event-content"&gt;
    &lt;h5 style="height: 106px!important;overflow:hidden;background-color:none;"&gt;&lt;a href="http://www.hidrozen.com/urun/hidrolik-pompa-piston-56"&gt;HİDROLİK POMPA PİSTON&lt;/a&gt;&lt;/h5&gt;
    &lt;div class="event-meta shop-meta"&gt;
        &lt;ul&gt;
            &lt;li class="price" style="height:24px!important;overflow:hidden;"&gt;
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;div class="addto-cart"&gt;
            &lt;a href="http://www.hidrozen.com/urun/hidrolik-pompa-piston-56"&gt;Ürün Detay&lt;/a&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="col-md-4 col-sm-6 col-xs-12"&gt;
&lt;div class="single-events single-product margin-bottom-30"&gt;
&lt;div class="single-event-thumb" style="text-align: center;"&gt;
    &lt;img src="http://www.hidrozen.com/public/upload/urun/urun_47.jpg" alt="" style="height:150px!important;"/&gt;
&lt;/div&gt;
&lt;div class="event-content"&gt;
    &lt;h5 style="height: 106px!important;overflow:hidden;background-color:none;"&gt;&lt;a href="http://www.hidrozen.com/urun/hidrolik-piston-55"&gt;HİDROLİK PİSTON&lt;/a&gt;&lt;/h5&gt;
    &lt;div class="event-meta shop-meta"&gt;
        &lt;ul&gt;
            &lt;li class="price" style="height:24px!important;overflow:hidden;"&gt;
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;div class="addto-cart"&gt;
            &lt;a href="http://www.hidrozen.com/urun/hidrolik-piston-55"&gt;Ürün Detay&lt;/a&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="col-md-4 col-sm-6 col-xs-12"&gt;
&lt;div class="single-events single-product margin-bottom-30"&gt;
&lt;div class="single-event-thumb" style="text-align: center;"&gt;
    &lt;img src="http://www.hidrozen.com/public/upload/urun/urun_46.jpg" alt="" style="height:150px!important;"/&gt;
&lt;/div&gt;
&lt;div class="event-content"&gt;
    &lt;h5 style="height: 106px!important;overflow:hidden;background-color:none;"&gt;&lt;a href="http://www.hidrozen.com/urun/hidrolik-silindir-54"&gt;HİDROLİK SİLİNDİR&lt;/a&gt;&lt;/h5&gt;
    &lt;div class="event-meta shop-meta"&gt;
        &lt;ul&gt;
            &lt;li class="price" style="height:24px!important;overflow:hidden;"&gt;
            &lt;/li&gt;
        &lt;/ul&gt;
        &lt;div class="addto-cart"&gt;
            &lt;a href="http://www.hidrozen.com/urun/hidrolik-silindir-54"&gt;Ürün Detay&lt;/a&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</code></pre>
<p>peki buraya kadar tamam. Yani site görünüyor herhangi bir problem yok. Ve buraya kadar olan kodları biz html + css ve ana dil olarak php kullanarak yazdık.</p>
<p>Şimdi bu siteyi birde android uygulama olarak yazmak istesek ne olacak.</p>
<p>Site php ile yazılmış veriler php ile çekilmiş dolayısı ile android yazmak istediğimizda andorid  in dili java yada kotlin olsun. Bizim phpde kullandığımız veri taşıma formatlarını java tanımaz. Bu durumda sitenin komple yeniden android için düzenlenmesi lazım. İşte bunu yapmamak için (yada bazı durumlarda bu hiç yapılamadığı için) biz jsondan faydalanarak php de kullandığımız veriyi java içinde kullanılabilir hale getirebiliriz.</p>
<p><b>Peki nasıl yaparız.</b></p>
<p>Hemen kısaca açıklayayım.</p>
<p>Üstteki görselin oluşması için elimizdeki veri aslında alttaki gibidir.</p>
<pre><code class="language-php">[
"1"=&gt;[
"resim"=&gt;"http://www.hidrozen.com/public/upload/urun/urun_48.jpg",
"baslik"=&gt;"HİDROLİK POMPA PİSTON",
"link"=&gt;"http://www.hidrozen.com/urun/hidrolik-pompa-piston-56"
]
"2"=&gt;[
"resim"=&gt;"http://www.hidrozen.com/public/upload/urun/urun_47.jpg",
"baslik"=&gt;"HİDROLİK PİSTON",
"link"=&gt;"http://www.hidrozen.com/urun/hidrolik-piston-55"
]
"3"=&gt;[
"resim"=&gt;"http://www.hidrozen.com/public/upload/urun/urun_46.jpg",
"baslik"=&gt;"HİDROLİK SİLİNDİR",
"link"=&gt;"http://www.hidrozen.com/urun/hidrolik-silindir-54"
]
]</code></pre>
<p>biz bu veriyi php ile html çıktısına yazdırdık.</p>
<p>Ama aynı kodu javanında kullanması için verdiğimizde java bunu tanımaz ve dolayısı ile bir işe yaramaz verimiz.</p>
<p>Bunun için php de json_encode() fonksiyonu ile bu veriyi json verisine dönüştürürüz ki bu json verisini alan java kendi içindeki fonksiyon yardımı ile yine kendi dizi tipine dönüştürüp veriyi işlesin.</p>
<p>Aslında json için işaret dili gibi bir kavram kullanabiliriz. Nasılmı? Dünyanın neresine giderseniz gidin acıktığınızı insanlara işaret dili ile anlatabilirsiniz hiçbir dil bilmeden. Ama ben dünyanın neresine gidersem gideyim ben php programlama dilinde iş arıyorum gibi bir şekilde kendinizi ifade edemezsiniz. Buradan çıkarmamız gereken üstte belirttiğim gibi json her programlama dilinin kolayca anlayıp işleme alacağı bir veri taşıma formatıdır.</p>
<p><b>Son olarak</b></p>
<p>elimizde aşağıdaki gibi bulunan php ürünler verisini</p>
<pre><code class="language-php">[
"1"=&gt;[
"resim"=&gt;"http://www.hidrozen.com/public/upload/urun/urun_48.jpg",
"baslik"=&gt;"HİDROLİK POMPA PİSTON",
"link"=&gt;"http://www.hidrozen.com/urun/hidrolik-pompa-piston-56"
]
"2"=&gt;[
"resim"=&gt;"http://www.hidrozen.com/public/upload/urun/urun_47.jpg",
"baslik"=&gt;"HİDROLİK PİSTON",
"link"=&gt;"http://www.hidrozen.com/urun/hidrolik-piston-55"
]
"3"=&gt;[
"resim"=&gt;"http://www.hidrozen.com/public/upload/urun/urun_46.jpg",
"baslik"=&gt;"HİDROLİK SİLİNDİR",
"link"=&gt;"http://www.hidrozen.com/urun/hidrolik-silindir-54"
]
]</code></pre>
<p>json formatına dönüştürdüğümüzde</p>
<pre><code class="language-php">{
1:{
"resim":"http://www.hidrozen.com/public/upload/urun/urun_48.jpg",
"baslik":"HİDROLİK POMPA PİSTON",
"link":"http://www.hidrozen.com/urun/hidrolik-pompa-piston-56"
}
2:{
"resim":"http://www.hidrozen.com/public/upload/urun/urun_47.jpg",
"baslik":"HİDROLİK PİSTON",
"link":"http://www.hidrozen.com/urun/hidrolik-piston-55"
}
3:{
"resim":"http://www.hidrozen.com/public/upload/urun/urun_46.jpg",
"baslik":"HİDROLİK SİLİNDİR",
"link":"http://www.hidrozen.com/urun/hidrolik-silindir-54"
}
}</code></pre>
<p>gibi bir çıktı alırız.</p>
<p>&nbsp;</p>
]]></content:encoded>
        </item>
        <item>
            <title>pip nedir ve python için pip kurulumu</title>
            <link>https://www.yazilimekip.com/pip-nedir-ve-python-icin-pip-kurulumu</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/pip-nedir-ve-python-icin-pip-kurulumu</guid>
            <pubDate>Sun, 11 Nov 2018 22:18:59 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Python ile neredeyse her işi yapabilirsiniz, yeter ki doğru yerde doğru modülü kullanmayı bilin. Modülleri zahmetsizce kurmanın yolu ise pip.]]></description>
            <content:encoded><![CDATA[<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">Günümüz programlama dilleri arasında popülaritesi hızla yükselen bir dil olan Python da hemen hemen her türlü yazılım işini yapmak mümkün. Tabi işletim sistemi hariç.</span></div>
<p>&nbsp;</p>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">Her türlü işlemi yapmaktan bahsettik ya evet aynen dediğimiz gibi her türlü iş. </span></div>
<p>&nbsp;</p>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">Peki nasıl yapılır bu her türlü iş diye sordugunuzda cevap olarak modüller karşımıza gelir. Siz yeterki doğru yerde doğru modülü kullanmayi bilin.</span></div>
<p>&nbsp;</p>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">Hal böyle olunca internette modül araştırması yapmak ve modülün nasıl kurulduğunu araştırmak gerekiyor.</span></div>
<p>&nbsp;</p>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">Bazı modüller için bu durum geçerli olsa da Python kütüphanelerinde yada depolarında bulunan modülleri yüklemek için çok zahmetsiz olan bir yol varki işte buna pip deniyor.</span></div>
<h2><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">Pip nedir?</span></h2>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">Pip Python da modül yükleme işlemlerinde kullanılan modül yöneticisinin adıdır.</span></div>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">Örneğin data analizi yapmak istiyorsunuz kurmanız gereken modülllerden bir tanesi pandas modülü.</span></div>
<p>&nbsp;</p>
<div><strong><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">Pandas modülünü pip ile kurmak için</span></strong></div>
<p>&nbsp;</p>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">Pip install pandas komutunu kullandığınız işletim sisteminin konsoluna yazıp tamam dememiz yeterli.</span></div>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">Pip sizin yerinize bu modülü ve eğer bu modülle ilgili bağımlı paketler var ise onları otomatik olarak indirip Python sistemine entegre edecektir.</span></div>
<p>&nbsp;</p>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">Ha bu arada unutmadan bu işlemleri yapmadan önce sisteminize önce pip kurmanız gerekmektedir.</span></div>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">Linux de kurulum konut satırından yapılır iken Windows kurulumu biraz daha farklılık gösterir.</span></div>
<h2><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">linüx (ubuntu) pip kurulumu</span></h2>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">kullandığınız python versiyonuna göre komut satırına (ctrl+t)</span></div>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">versiyon 2 ise</span><br clear="none" /><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">sudo apt install python-pip</span><br clear="none" /><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">komutu</span><br clear="none" /><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">versiyon 3 ise</span><br clear="none" /><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">sudo apt install python3-pip</span><br clear="none" /><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">komutunu girip onaylamanız yeterlidir. bu işlemden sonra python sisteminize pip entegre edilecektir.<br clear="none" /></span></div>
<h2><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">windows için pip kurulumu
<p></span></h2></p>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">kuruluma başlamadan önce birinci basamak olarak</span></div>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;"><a href="https://pip.pypa.io" target="_blank" rel="noopener" shape="rect">https://pip.pypa.io</a> adresine girin</span></div>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;"> <img class="alignnone size-full wp-image-618" src="https://www.yazilimekip.com/uploads/media/2018/11/pip1.png" alt="" width="1769" height="901" /></span></div>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">burada bulunan get-pip.py dosyasını sağ tıklayarak farklı kaydedin. (yani indirin.) daha sonra indirdiğiniz yerde shift ile birlikte sağ tıklayıp komut penceresini burada aç seçeneğini seçin. konsol ekranı burada açılacaktır.</span></div>
<div><img class="alignnone size-full wp-image-619" src="https://www.yazilimekip.com/uploads/media/2018/11/pip2.png" alt="" width="1192" height="666" /></div>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">buradan sonra komut satırına python get-pip.py komutunu girip enter tuşuna basın.</span></div>
<div><img class="alignnone size-full wp-image-620" src="https://www.yazilimekip.com/uploads/media/2018/11/pip3.png" alt="" width="676" height="339" /></div>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">bu komutu verdikten sonra python için pip sisteme entegre olarak kurulacaktır.</span></div>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">son olarak kurulumun doğruluğunu kontrol edelim.</span></div>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">komut satırına  pip --version yazarak ekranda aşağıdaki çıktıya benzer bir çıktı aldık ise kurulum işlemi tamamdır.</span></div>
<div><img class="alignnone size-full wp-image-621" src="https://www.yazilimekip.com/uploads/media/2018/11/pip4.png" alt="" width="676" height="340" /></div>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">şimdi kurulum bittiğine göre herhangi bir paket kurmak isterseniz pip install paket -adi komutunu vermeniz yeterlidir.</span></div>
<div><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">örnek olarak pip install pandas</span></div>
<div><strong><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">Unutmadan mac içinde kurulumu var.</span></strong></div>
<h2><strong><span style="font-family: verdana, helvetica, sans-serif; font-size: 14px;">mac için pip kurulumu</span></strong></h2>
<p>bunun için komut satırına<br>
sudo easy_install pip<br>
komutunu vermeniz yeterlidir.</p>
]]></content:encoded>
        </item>
        <item>
            <title>MVC ile programlama nedir?</title>
            <link>https://www.yazilimekip.com/mvc-ile-programlama-nedir</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/mvc-ile-programlama-nedir</guid>
            <pubDate>Fri, 09 Nov 2018 13:08:44 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[MVC dünyanın en çok kullanılan tasarım şablonu. Peki tasarım şablonu ne demek, model view ve controller ne iş yapar? Web projesi üzerinden anlatıyorum.]]></description>
            <content:encoded><![CDATA[<h2>MVC nedir?</h2>
<p>Dünyanın en çok kullanılan tasarım şablonu dur. (Design pattern)</p>
<h2>tasarım şablonu nedir?</h2>
<p>Tasarım şablonu yazdığımız çizdiğimiz kodların belli bir çatı altında toplanması yani kodlarımızın belirli bölümler dahilinde bu bölümlere has standartlara uygun olarak yapılmasıdır.</p>
<div></div>
<p>Dilerseniz buraya kadar anlattığımız şeyleri birde sekil1 üzerinden açıklamaya çalışalım.</p>
<div>
<figure class="wp-caption"><img class="wp-image-603 size-full" src="https://www.yazilimekip.com/uploads/media/2018/11/images-e1541800937137.png" alt="" width="670" height="319" /><figcaption>şekil1 - MVC nedir ve nasıl kullanılır.</figcaption></figure>
</div>
<p>Şimdi bir web projesi düşünelim. Ben MVC yi web deki kullanımı üzerinden anlatacağım.</p>
<p>Web projelerini parçalara ayırmak istersek genel olarak 3 bölüme ayırırız. Bunlar tamamen kullanıcının gördüğü HTML CSS ve JavaScript kodları,</p>
<p>Veritabanı işlemleri var ise SQL kodları ki kullanıcı bu bölümdeki kodları görmez.</p>
<p>Son olarak tüm bölümler ve tüm sitenin iskeletini birbirine bağlayan verileri işleme tabi tutan PHP veya ASP gibi dillerin kodları ki bu kodlarına kullanıcı görmez.</p>
<p><strong>Açıklamalarimiza şekil üzerinden devam edelim.</strong></p>
<p>Şekilde görülen client kullanıcıyı temsil eder. Bu bölümün kodlama ile ilgisi yoktur.</p>
<p><strong>Controller katmani</strong> kullanıcıdan gelen isteği alarak isteğin türüne göre işlemlere tabi tutar. Bu işlemlere örnek olarak kullanıcı adres çubuğuna <a href="https://www.yazilimekip.com/">www.yazilimekip.com</a> yazıp girise bastığında bu istek İndex dosyası vasıtası ile ilk önce buradaki sekilde bulunmayan router adı verilen bir yönlendirici dosyaya gider bu dosya istek yapılan URL yi parcalayarak ilgili controller dosyasına yönlendirir.</p>
<p>Bu yönlendirmede sonra controller gelen isteğe uygun olarak veritabanından veri çekilmesi gerekiyor ise önce model dosyasına gider ve veritabanından alınması gereken verileri ister.</p>
<p><strong>Model katmani</strong> ise kendine gelen isteğe uygun olan verileri database e giderek alır ve sonucunu tekrar controller dosyasına gönderir.</p>
<p>Controller dosyasına veritabanından gelen veriler üzerinde fazladan işlem yapması gerekiyor ise yapar.</p>
<p>Bunun yanında başka hesaplamalar yada ayarlamalar var ise onlarida yaparak oluşan sonucu kullanıcıya göstermek üzere view katmanına yollar.</p>
<p><strong>View katmanı</strong> ise controller dan kendisine gelen bir dizi veriyi tasarıma uygun bir şekilde kullanıcıya gösterir.</p>
<p>Bundan sonra kullanıcı bir istekte bulunmak istediğinde view katmanı üzerinden bu işlemi gerçekleştirir.</p>
<h2>bu tasarım şablonunu kullanmaya ne gerek var? neden kullanılır?</h2>
<p>Sorusuna da açıklık getirelim.</p>
<p>Yukarıda anlattığımız gibi bu düzende birbiri ile farklı olan kodlar farklı bölümlere yada klasörlere ayrılmıştır. Bu ayrılmanın bize en büyük faydası yazdığımız kodlar ayrı ayrı bölümlerde olduğundan programda meydana gelecek herhangi bir aksaklık yada hata durumunda müdahale edilmesi gereken bölüm daha kolay bir şekilde ortaya çıkar. Ve yine müdahale esnasında sadece hataya sebep olan kod türüne müdahale edilebilir.</p>
<p>Diğer bir faydasi belirli bir standart içerdiğinden farklı farklı yazılımcıların ortak çalışması bu sistemde daha kolaydır. En azından spagetti kodlamaya nazaran.</p>
<p>Son olarak ise dünyada en çok kullanılan PHP frameworkleri bu MVC çatısını kullanarak yazılmislardir.</p>
]]></content:encoded>
        </item>
        <item>
            <title>HTML kodları nasıl ve hangi program ile yazılır?</title>
            <link>https://www.yazilimekip.com/html-kodlari-nasil-ve-hangi-program-ile-yazilir</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/html-kodlari-nasil-ve-hangi-program-ile-yazilir</guid>
            <pubDate>Sat, 20 Oct 2018 01:00:09 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Html kodu yazmak için özel bir programa gerek yok, not defteri yeter. Ama bir süre sonra işkenceye döner, o yüzden editörlere de bakalım.]]></description>
            <content:encoded><![CDATA[<p>HTML kodlarını yazmak için özel bir program yada editöre ihtiyaç yoktur. doğrudan not defteri açılarak yazılabilir.</p>
<p><em>aşağıda not defterine yazılmış bir html kodunun nasıl kaydedileceği de görünüyor.</em></p>
<p><img class="alignnone size-full wp-image-558" src="https://www.yazilimekip.com/uploads/media/2018/06/ders2g2.png" alt="" width="1102" height="696" /></p>
<p>burada dikkat etilmesi gerek en önemli hususların başında,</p>
<p>dosya isminde kesinlikle  türkçe karakter, boşluk ve özel karakterlerin olmaz.</p>
<p>kodlama türü UTF-8 olarak şeçilmelidir.</p>
<p>yazılan kodu tarayıcıda açmak için kaydettiğimiz dosya üzerinde çift tıklamamız yeterlidir. eğer varsayılan tarayınız seçili ise çift tıkladığınızda dosya o tarayıcıda doğrudan açılacaktır.</p>
<p><em>kodun tarayıcı çıktısı</em></p>
<p><img class="alignnone size-full wp-image-559" src="https://www.yazilimekip.com/uploads/media/2018/06/ders2g3.png" alt="" width="1225" height="496" /></p>
<p>&nbsp;</p>
<p>buraya kadar söylediklerim fazladan hiçbir program kurmadan windows işletim sistemi üzerinde rahatlı çalışabilir.</p>
<p>fakat aynen bu şekilde html kodları yazmak bir süre sonra bile olmadan hemen başlangıçta sizin için işkenceye dönecektir. bu işkence sebebleri,</p>
<ul>
<li>yazılan kodun renksiz olması</li>
<li>etiket açmadaki ve kapatmadaki zorluklar</li>
<li>girintilemenin olmaması</li>
<li>bazı kodlardaki hataları göstermemesi</li>
</ul>
<p>yukarıdaki sebeplere birçok sebep daha eklenebilir.</p>
<p>ama ben fazla uzatmadan HTML kodlarını daha kolay ve eğlenceli nasıl yazılır onu size anlatayım.</p>
<p>WİNDOWS TA KULLANILAN ÜCRETSİZ BİR EDİTÖR NOTEPAD++</p>
<p>html kodlamaya yeni başlayan herkesin büyük bir olasılıkla kullandığı ücretsiz bir metin editörüdür notepad++.</p>
<p>indirmek isteseniz <a href="https://notepad-plus-plus.org/" target="_blank" rel="noopener">notepad++  </a>bağlantısını kullanabilirsiniz.</p>
<p>resimde benzer kodu notepadd++ ile yazdık.</p>
<p><img class="alignnone size-full wp-image-560" src="https://www.yazilimekip.com/uploads/media/2018/06/ders2g4.png" alt="" width="1296" height="877" /></p>
<p>yukarıdaki notepad ile yazılmış kod ile buradaki notepad++ ile yazılmış kodu kıyasladığınızda notepad++ daki kodun görsel açıdan daha güzel olduğunu sanırım sizde fark etmişsinizdir.</p>
<p>bu konuda söylenecek çok söz incelenecek çok editör mevcut, bunlardan biriside sublime text, daha önce bu konuda bir eğitim videosu hazırlamıştım isterseniz inceleyebilirsiniz.</p>
<iframe src="https://www.youtube.com/embed/4EUKcWJnT4k?rel=0&amp;showinfo=0" frameborder="0" allowfullscreen="allowfullscreen"></iframe>
<p>video linki = <a href="https://www.youtube.com/watch?v=4EUKcWJnT4k&amp;t=15s">sublime text eklenti kurulumu</a></p>
]]></content:encoded>
        </item>
        <item>
            <title>Html Dili ve Yapısı</title>
            <link>https://www.yazilimekip.com/yeni-html-dili-ve-yapisi</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/yeni-html-dili-ve-yapisi</guid>
            <pubDate>Thu, 18 Oct 2018 02:05:26 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Html bir programlama dili değil, bir metin işaretleme dilidir. Bu yazımda html dosyasının nasıl kaydedildiğini ve temel iskelet kodlarını anlatacağım.]]></description>
            <content:encoded><![CDATA[<p><strong><br>
HTML,</strong> web siteleri oluşturmak için kullanılan bir metin işaretleme dilidir.</p>
<p>( İngilizce olarak Hypertext Markup Language  kelimelerinden oluşur.)</p>
<p>Html bir Programlama dili değil özelikkle web siteleri oluşturmak için kullanılan bir metin işaretleme dilidir.  Web sitelerinde kullanılan yazı, resim, video vb. materyalleri bir standart dahilinde eklemek ve biçimlendirmek için kullanılır.</p>
<p><img class="alignleft wp-image-33 size-medium" src="https://www.yazilimekip.com/uploads/media/2016/10/HTML-300x226.jpg" alt="html" width="300" height="226" /></p>
<p><!--more--></p>
<p><strong>HTML5</strong> ise html işaretleme dilinin En son çıkan sürümüdür.</p>
<p><em><strong>html dili genel yapısı</strong></em></p>
<p>html işaretleme dilini kullanarak bir web sayfası oluşturmak için html ifadeleri yazılı belge html yada htm (web_sayfasi.html, web_sayfasi.htm) uzantısı ile  kaydedilmelidir.<br>
bu yazılan web_sayfasi.html adlı dosya bir internet tarayıcısında (chrome, safari, mozilla firefox, vb..) açıldığında kodların yorumlanmış çıktısı karşımıza gelecektir.</p>
<p>alttaki kod bloğunda standart bir web sayfasında olması gereken temel html iskelet kodlarını görüyorsunuz.</p>
<pre><code class="language-html">&lt;!DOCTYPE HTML&gt;
&lt;html lang="en-US"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;title&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;başlık olarak işaretlenmiş bir yazı örneği&lt;/h1&gt;
&lt;p&gt;paragraf olarak işaretlenmiş bir yazı örneği&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<pre>dosya adı : ders1.html</pre>
<p>dosyayı kaydettikten sonra bir tarayıcıda açarak sonucu inceleyiniz.</p>
<p>bu yapının genel resmi</p>
<p><img class="alignnone size-full wp-image-553" src="https://www.yazilimekip.com/uploads/media/2018/06/html_yap%C4%B1s%C4%B1.png" alt="" width="909" height="535" /></p>
<p><strong>kodların genel anlamları</strong></p>
<ul>
<li>&lt;!DOCTYPE html&gt;bu sayfanın html5 standartlarına uygun yazıldığını belirtir.</li>
<li>&lt;html&gt;bu sayfanın temel unsurlarındandır.</li>
<li>&lt;head&gt;bu sayfanın meta bilgileri burada yazılır.</li>
<li>&lt;title&gt;sayfa için başlık burada belirtilir.</li>
<li>&lt;body&gt;sayfanın tüm içeriği burada oluşturulur.</li>
<li>&lt;h1&gt;en büyük kısımdan bir başlık stili tanımlar.</li>
<li>&lt;p&gt;bir paragraf stili tanımlar.</li>
</ul>
<p>ÖNEMLİ HATIRLATMA:</p>
<p>html etiketleri yazıldıklarında genel olarak</p>
<p>küçük ve büyük işaretleri arasına yazılan bir çift isimden oluşur.  aynı zaman yine aynı işaretler arasında da / işareti ile kapatma bu açılan etiketin kapatma işlemi yapılır.</p>
<pre><code class="language-html">&lt;etiket_adi&gt;&lt;/etiket_adi&gt;&lt;</code></pre>
<pre><code class="language-html">&lt;html&gt; &lt;/html&gt;</code></pre>
<blockquote>bu ilk etikete aynı zamanda Açılış etiketi, ikinci olan etikete ise Kapanma etiketi adıda verilir.</blockquote>
<p><strong>Html dilinin genel özellikleri</strong></p>
<ul>
<li>HTML, Metin İşaretleme dilidir.</li>
<li>HTML, Biçimlendirme kullanarak Web sayfalarının yapılarını oluşturur.</li>
<li>Her bir HTML öğesi Web Sitesilerinin Yapısını oluşturur.</li>
<li>HTML öğeleri Etiket olarakda adlandırılırlar.</li>
<li>HTML öğeleri, "başlıklar-h","paragraflar-p","tablolar-table","listeler-ul-ol","kutular-div"şeklinde çok fazla olmayan parçalardan meydana gelir.</li>
<li>HTML olarak kaydedilen sayfaların sonucunu görmek için tarayıcılar kullanılır. tarayıcılar html etiketlerini görüntülemeden sadece çıktılarını gösterir.</li>
</ul>
<p><strong>html dilinin sürümleri</strong></p>
<table class="w3-table-all notranslate" style="height: 208px;" width="424">
<tbody>
<tr>
<th>Sürüm</th>
<th>Yıl</th>
</tr>
<tr>
<td>HTML</td>
<td>1991</td>
</tr>
<tr>
<td>HTML 2.0</td>
<td>1995</td>
</tr>
<tr>
<td>HTML 3.2</td>
<td>1997</td>
</tr>
<tr>
<td>HTML 4.01</td>
<td>1999</td>
</tr>
<tr>
<td>XHTML</td>
<td>2000</td>
</tr>
<tr>
<td>HTML5</td>
<td>2014</td>
</tr>
</tbody>
</table>
]]></content:encoded>
        </item>
        <item>
            <title>Ubuntuda Masaüstünü Gösterme</title>
            <link>https://www.yazilimekip.com/ubuntuda-masaustunu-gosterme</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/ubuntuda-masaustunu-gosterme</guid>
            <pubDate>Fri, 31 Aug 2018 14:41:35 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Ubuntu'da açık pencereler arasında kaybolduysanız CTRL+ALT+D ile hepsini gizleyip masaüstüne dönebilirsiniz. Aynı kısayol pencereleri geri de getiriyor.]]></description>
            <content:encoded><![CDATA[<p>ubuntu işletim sisteminde masaüstünü göstermek için açık olan pencereleri tek tek küçültmenize gerek yok. bu işlemi bir klavye kısayolu ile yapabilirsiniz.</p>
<p>şöyle düşünün, bir tarafta tarayıcı açık diğer tarafta kod yazdığınız program var. bir de dosya yöneticisini açmışsınız. masaüstüne kaydettiğiniz bir dosyayı almak istediğinizde önce bu pencereleri küçültüp dosyayı buluyor sonra tekrar çalıştığınız yere dönüyorsunuz. pencere sayısı arttıkça bu işlem de uzuyor.</p>
<p>masaüstünü göster kısayolu burada işimizi görüyor. tuşlara bastığımızda açık olan pencereler gizleniyor ve masaüstü karşımıza geliyor. aynı kısayola tekrar bastığımızda da pencereler geri geliyor. (burada programları kapatmıyoruz, sadece pencereleri gizliyoruz.)</p>
<h3>hangi tuşlara basacağız?</h3>
<p>burada kullandığınız ubuntu sürümüne ve masaüstü ortamına göre bir farklılık olabilir. bazı kurulumlarda <strong>CTRL+ALT+D</strong> kullanılırken bazılarında <strong>CTRL+SUPER+D</strong> ile bu işlem yapılır. bu yüzden birinde çalıştı diye diğerinde de aynı tuşlarla çalışacak diye düşünmeyin. kendi sisteminizde hangi tuşların tanımlı olduğunu klavye ayarlarından görebilirsiniz.</p>
<p>bu arada SUPER tuşu dediğimiz, çoğu klavyede üzerinde windows logosu bulunan tuş. yani CTRL+SUPER+D yazdığımızda CTRL ile windows tuşunu basılı tutup D tuşuna basacağız.</p>
<h3>kısayol çalışmıyor ise</h3>
<p>şimdi gelelim tuşlara bastığı halde masaüstünü göremeyen arkadaşlara. önce bu işleme bir kısayol atanmış mı ona bakalım. ubuntu'nun GNOME masaüstünü kullanan sürümlerinde bu ayarı şu şekilde bulabilirsiniz.</p>
<ol>
<li>Ayarlar (Settings) uygulamasını açın.</li>
<li>Klavye (Keyboard) bölümüne girin. burada varsa Kısayolları Görüntüle ve Özelleştir (View and Customize Shortcuts) seçeneğini açın.</li>
<li>Gezinme (Navigation) başlığı altında Tüm normal pencereleri gizle (Hide all normal windows) satırını bulun.</li>
<li>bu satırda yazan tuşları kontrol edin. devre dışı (Disabled) yazıyor ise henüz bir kısayol atanmamış demektir.</li>
<li>satıra tıklayıp kullanmak istediğiniz tuşlara birlikte basın ve ekrandaki onay düğmesi ile kaydedin.</li>
</ol>
<p>örnek olarak CTRL+SUPER+D atayabilirsiniz. seçtiğiniz tuşlar başka bir işlemde kullanılıyor ise sistem sizi uyarabilir. böyle bir durumda uyarıyı okuyup karar verin, çünkü mevcut kısayolu değiştirirseniz daha önce yaptığı işlemi artık o tuşlarla yapamazsınız.</p>
<p>ayar penceresini kapattıktan sonra birkaç pencere açıkken kısayolu deneyin. önce masaüstünün geldiğini, tekrar bastığınızda ise pencerelerin geri döndüğünü kontrol edin. bundan sonra masaüstündeki dosyaya ulaşmak için pencereleri sırayla küçültmenize gerek kalmaz.</p>
<p>klavye yerine fare kullanmak isterseniz, rıhtım (Dock) adı verilen uygulama çubuğunda masaüstünü göster düğmesi var ise ona da tıklayabilirsiniz. fakat bu düğme her kurulumda hazır gelmiyor. sizde görünmüyor ise önce yukarıdaki kısayolu ayarlayıp deneyin, sadece bu işlem için ayrıca bir eklenti kurmanız gerekmez.</p>]]></content:encoded>
        </item>
        <item>
            <title>Html Etiketlerini Görelim &lt;a&gt;  link etiketi</title>
            <link>https://www.yazilimekip.com/html-etiketlerini-gorelim-link-etiketi</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/html-etiketlerini-gorelim-link-etiketi</guid>
            <pubDate>Sun, 24 Jun 2018 21:19:26 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Kullanıcının tıklayıp başka bir sayfaya gidebileceği alanları a etiketi ile oluşturuyoruz. href dışında title ve target gibi özelliklerine de baktık.]]></description>
            <content:encoded><![CDATA[<p><strong>BAĞLANTILAR (LİNKLER)</strong></p>
<p>kullanıcıların tıklama yapabileceği ve bu tıklama sonucu başka bir sayfaya gidebileceği alanlar oluşturmak için <strong>&lt;a&gt;</strong> etiketi kullanılır. bir menüde gördüğünüz yazılar, başka bir yazıya yönlendiren bağlantılar yada bir resme tıkladığınızda açılan sayfalar bu kullanımın örnekleridir.</p>
<p>şimdi en basit hali ile bir bağlantı oluşturalım.</p>
<pre><code class="language-html">&lt;a href="https://github.com/"&gt;Buraya Tıkla&lt;/a&gt;</code></pre>
<p>burada tıklama sonucu gidilecek hedef <strong>href</strong> özelliği içinde belirtilir. açılış ve kapanış etiketleri arasında kalan Buraya Tıkla yazısı ise kullanıcının ekranda göreceği kısımdır. yani adres ile görünen yazının aynı olması gerekmez.</p>
<p>örnekte Buraya Tıkla dedik ama bir sitede bu şekilde çok sayıda bağlantı olursa hangisinin nereye gittiğini anlamak zorlaşır. bunun yerine GitHub sayfasına git gibi bir yazı yazarsanız kullanıcı bağlantıyı açmadan önce ne ile karşılaşacağını bilir.</p>
<h3>href içine ne yazacağız?</h3>
<p>başka bir siteye bağlantı vereceksek yukarıdaki gibi https:// ile başlayan adresini yazabiliriz. kendi sitemizdeki bir yazıya bağlantı vereceksek de site kökünden başlayan bir yol kullanabiliriz. mesela paragraf etiketini anlattığımız yazıya bir bağlantı verelim.</p>
<pre><code class="language-html">&lt;a href="/html-etiketlerini-gorelim-baslik-paragraf-etiketi"&gt;Paragraf etiketi yazısını oku&lt;/a&gt;</code></pre>
<p>adresin başındaki / işareti burada önemlidir. tarayıcı bu yolu bulunduğunuz sayfanın altından değil sitenin kökünden itibaren arar. örneği başka bir sitede deniyorsanız aynı adreste bir sayfanız olmadığında bağlantı çalışmaz. (etiketin doğru yazılması ile hedef sayfanın var olması ayrı şeylerdir.)</p>
<h3>target ve title özellikleri</h3>
<p><strong>target</strong>, bağlantının nerede açılacağını belirtir. <strong>_self</strong> yazarsak bulunduğumuz sekmede açılır. target özelliğini hiç yazmadığımız normal bir bağlantı da aynı şekilde davranır. <strong>_blank</strong> ise genellikle yeni bir sekmede açar, tarayıcı ayarına göre yeni pencere de olabilir. buradaki alt çizgilere dikkat edin, self ile _self aynı değer değildir.</p>
<p><strong>title</strong> ise bağlantıya ek bilgi yazmak için kullanılır. fare ile üzerine gelip biraz beklediğinizde çoğu masaüstü tarayıcısı bu yazıyı bir bilgi balonu olarak gösterir. fakat bağlantının nereye gittiğini anlatan asıl yazıyı yine etiketlerin arasına yazalım, sadece title içine yazmakla yetinmeyelim.</p>
<p>bir de sık karıştırılan <strong>alt</strong> konusu var. alt, &lt;a&gt; etiketinin bir özelliği değildir. bir resmi bağlantı yaptığınızda alt açıklamasını resme ait &lt;img&gt; etiketine yazarsınız. linke açıklama eklemek için a etiketinin içine alt yazmamız doğru olmaz.</p>
<p><strong>örnek kodlarımız</strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="tr"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Link etiketi örneği&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;a href="https://www.youtube.com/vikuba"
       target="_blank"
       rel="noopener"
       title="youtubede bulunan kanalım"&gt;Ücretsiz Video Eğitimler&lt;/a&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>bu kodları bir html dosyasına kaydedip tarayıcıda açtığınızda Ücretsiz Video Eğitimler yazısını göreceksiniz. üzerine tıklayınca hedef adres yeni sekmede açılacaktır. buradaki <strong>rel="noopener"</strong> yeni açılan sayfanın bağlantıyı açan pencereye window.opener üzerinden ulaşmasını engeller.</p>
<p><em>kodlarımızın tarayıcı çıktısı</em></p>
<p><img class="alignnone size-full wp-image-573" src="https://www.yazilimekip.com/uploads/media/2018/06/a2.png" alt="Ücretsiz Video Eğitimler bağlantısının tarayıcıdaki görünümü" width="1221" height="491" /></p>
<p>son olarak bağlantı açılmıyor ise önce href içine yazdığınız adresi kontrol edin. tırnakları kapatmayı unuttuysanız yada adresin bir harfini eksik yazdıysanız istediğiniz sayfaya gidemezsiniz. aynı adresi tarayıcının adres çubuğuna doğrudan yazarak da kontrol edebilirsiniz.</p>]]></content:encoded>
        </item>
        <item>
            <title>Html Etiketlerini Görelim başlık &lt;p&gt; paragraf etiketi</title>
            <link>https://www.yazilimekip.com/html-etiketlerini-gorelim-baslik-paragraf-etiketi</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/html-etiketlerini-gorelim-baslik-paragraf-etiketi</guid>
            <pubDate>Sun, 24 Jun 2018 18:23:38 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Bu etiket paragraf oluşturmak için kullanılır. h etiketinde olduğu gibi bulunduğu satırı bütün olarak kaplar. Örnek kodlar ve tarayıcı çıktısı yazıda.]]></description>
            <content:encoded><![CDATA[<p><strong>PARAGRAFLAR</strong></p>
<p>bu etiket paragraf oluşturmak için kullanılır. bir yazıyı nasıl paragraflara ayırarak yazıyor isek html sayfasında da aynı işi <strong>&lt;p&gt;</strong> etiketi ile yaparız.</p>
<pre><code class="language-html">&lt;p&gt;paragrafın içine yazılacak yazılar&lt;/p&gt;</code></pre>
<p>şeklinde kullanılır. açılış etiketi paragrafın başladığı yeri, kapanış etiketi de bittiği yeri belirtir. ikinci bir paragraf yazmak istediğimizde yeni bir p etiketi açarız.</p>
<p>şimdi burada ilk defa html yazan arkadaşların karşısına çıkan bir durum var. kod yazdığınız programda enter tuşuna basıp alt satıra geçtiğinizde, tarayıcıda da yazının alt satıra geçmesini bekleyebilirsiniz. fakat normal html metninde işler bu şekilde yürümüyor. tarayıcı kaynak koddaki bu satır sonlarını genellikle bir boşluk gibi değerlendirir.</p>
<pre><code class="language-html">birinci satırdaki yazı
ikinci satırdaki yazı

&lt;p&gt;birinci paragraftaki yazı&lt;/p&gt;
&lt;p&gt;ikinci paragraftaki yazı&lt;/p&gt;</code></pre>
<p>üstteki iki satırın tarayıcıda yan yana geldiğini, p etiketleri içine yazılanların ise ayrı paragraflar olduğunu göreceksiniz. yani kodlarımızı okunaklı olsun diye satırlara ayırmamız ile sayfada paragraf oluşturmamız aynı işlem değildir.</p>
<h3>p etiketi satırı nasıl kullanır?</h3>
<p>başlık etiketlerinde olduğu gibi p etiketi de varsayılan olarak blok halinde gösterilir. CSS ile bu davranışı değiştirmediysek yeni satırdan başlar ve içinde bulunduğu alanın kullanılabilir genişliğini kaplar. yazı kısa olsa bile arkasından gelen normal metin aynı satırda devam etmez.</p>
<p>burada bütün ekranı kaplar diye düşünmeyin. paragrafı dar bir kutunun içine koyduysanız kaplayacağı genişlik de o kutuya göre olur. paragrafların üstünde ve altında gördüğünüz boşluklar da tarayıcının varsayılan stillerinden gelir, bunları CSS ile değiştirebilirsiniz.</p>
<p><strong>açıklama kodlarımız</strong></p>
<pre><code class="language-html">&lt;!DOCTYPE HTML&gt;
&lt;html lang="tr"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;title&gt;Paragraf etiketi örneği&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
paragraf dışı bir yazı
&lt;p&gt;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, &lt;/p&gt;
&lt;p&gt;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate &lt;/p&gt;
paragraf dışı bir yazı
paragraf dışı bir yazı
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><em>kodlarımızın tarayıcı çıktısı</em></p>
<p><img class="alignnone size-full wp-image-569" src="https://www.yazilimekip.com/uploads/media/2018/06/p1.png" alt="Paragrafların ve paragraf dışındaki yazıların tarayıcıdaki görünümü" width="1230" height="498" /></p>
<p>örnekte uzun metinleri özellikle iki ayrı p etiketi içine aldık. en altta ise iki satırlık yazıyı paragraf etiketi kullanmadan yazdık. tarayıcıda bu son iki satırın birleştiğine dikkat edin. üstte anlattığımız enter tuşu meselesini burada da görebilirsiniz.</p>
<h3>paragraf ile satır sonu arasındaki fark</h3>
<p>bir paragrafın içinde alt satıra geçmek istersek <strong>&lt;br&gt;</strong> kullanabiliriz. mesela bir adresin sokak ve ilçe bilgisini ayrı satırlara yazacağız ama ikisi de aynı paragrafın içinde kalacak.</p>
<pre><code class="language-html">&lt;p&gt;Örnek sokak, No: 10&lt;br&gt;Merkez / Ankara&lt;/p&gt;</code></pre>
<p>br burada yeni bir paragraf oluşturmaz, sadece satırı böler. ayrı bir konuya yada yeni bir düşünceye geçtiğimizde ise yeni p etiketi açmamız daha uygundur. sırf arada boşluk oluşsun diye peş peşe br yazmak yerine boşlukları CSS ile ayarlayabiliriz.</p>
<p>bir de p etiketinin içine başka bir p, div, başlık yada liste etiketi koymayın. tarayıcı böyle bir durumda paragrafı beklediğiniz yerden önce kapatabilir. paragraf içinde bir kelimeyi vurgulamak için strong, başka bir sayfaya bağlantı vermek için a etiketi kullanabilirsiniz. bağlantının nasıl yazıldığını da <a href="/html-etiketlerini-gorelim-link-etiketi">link etiketi yazımda</a> anlattım.</p>
<p>örneği denedikten sonra iki paragraftan birinin kapanış etiketini kontrol edin, sonra metinlerin yerlerini değiştirip tekrar açın. hangi yazının hangi paragrafın içinde kaldığını kod ile ekran görüntüsünü karşılaştırarak daha rahat görebilirsiniz.</p>]]></content:encoded>
        </item>
        <item>
            <title>Html Etiketlerini Görelim &lt;h&gt; başlık etiketi</title>
            <link>https://www.yazilimekip.com/html-etiketlerini-gorelim-baslik-etiketi</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/html-etiketlerini-gorelim-baslik-etiketi</guid>
            <pubDate>Sun, 24 Jun 2018 18:11:02 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Html sayfasının genel yapısını kısaca tekrar ettikten sonra etiketlerimizi tanımaya başlıyoruz. İlk sırada h1'den h6'ya kadar başlık etiketleri var.]]></description>
            <content:encoded><![CDATA[<p>Tüm HTML sayfalarında eğer html5 standartları üzerinden kodlama yapacaksak,</p>
<p>belge türü bildirimi  <span style="color: #ff0000;">&lt;!DOCTYPE html&gt;</span> ile başlamalıdır.</p>
<p>daha önceki açıklamalarımızda da belirttiğimiz gibi sayfada herşey &lt;html&gt; ile başlayıp &lt;/html&gt; biten etiketler arasına yazılır.</p>
<p>sitenin yada sayfanın tüm açıklayıcı bilgileri ise<span style="color: #ff0000;"> &lt;head&gt;&lt;/head&gt;</span> etiketleri arasına yazılır.</p>
<p>sitenin başlık bilgileri ise <span style="color: #ff0000;">&lt;title&gt;&lt;/title&gt;</span> arasına yazılır.</p>
<p>sayfanın içeriği ise <span style="color: #ff0000;">&lt;body&gt; &lt;/body&gt;</span> etiketi arasına yazılmalıdır.</p>
<p>alttaki kod bloğu bu açıklamalarımın kod halidir.</p>
<pre><code class="language-html">&lt;!DOCTYPE HTML&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>üstteki yapının yanında birde alttaki fazladan eklenmiş ifadeler vardır ki</p>
<pre><code class="language-html">&lt;!DOCTYPE HTML&gt;
&lt;html lang="en-US"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;title&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>bunlar,</p>
<p><span style="color: #ff0000;">&lt;html lang="en-US"&gt;</span> bu sayfanın içeriğinin ingilizce olduğunu</p>
<p><span style="color: #ff0000;">&lt;meta charset="UTF-8"&gt;</span> bu sayfanın karakter desteğinin utf8 (yani bütün alfabelerin bu sayfada rahatça kullanılabileceğini) olduğunu belirtir.</p>
<p>buraya kadar genel bir tekrar yaptıktan sonra artık etiketlerimizi tanımaya başlayabiliriz.</p>
<blockquote><strong>ÖNEMLİ BİR BİLGİ:</strong>
sayfalar oluşturulur iken şimdi altta yazacağımız etiketler kullanılmadan oluşturulur sa ne olur gibi bir soru soralım ve hemen ardından cevabını yine kendimiz verelim.
eğer etiketler kullanılmadan sayfalar oluşturulur ise,
<ul>
<li>hangi yazının paragraf başı</li>
<li>hangisinin başlık</li>
<li>hangisi diğerinden daha büyük</li>
<li>kutu kutu hücreler oluşturma,</li>
<li>resim ekleme</li>
<li>video gösterme</li>
<li>ve daha nice işlemler</li>
</ul>
oluşturulamaz yada kesinlikle çok biçimsiz bir sayfa ortaya çıkar. birde aynı zamanda arama motorları sitemizi tararken hangi yazı başlık, hangisi içerik  gibi sorulara cevap veremez bu nedenle sitemiz arama motorlarında çıkma konusunda büyük bir ihtimal olumsuz olur.</blockquote>
<p><strong>BAŞLIKLAR</strong></p>
<p>başlıklar adından da anlaşılacağı üzere sayfada başlık oluşturmak için kullanılır.</p>
<p><span style="color: #ff0000;">&lt;h1&gt;&lt;/h1&gt;</span></p>
<p>ile</p>
<p><span style="color: #ff0000;">&lt;h6&gt;&lt;/h6&gt;</span></p>
<p>aralığında altı adet mevcuttur.</p>
<p><strong>açıklama kodlarımız</strong></p>
<pre><code class="language-html">&lt;!DOCTYPE HTML&gt;
&lt;html lang="en-US"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;title&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Başlık1&lt;/h1&gt;
&lt;h2&gt;Başlık1&lt;/h2&gt;
&lt;h3&gt;Başlık1&lt;/h3&gt;
&lt;h4&gt;Başlık1&lt;/h4&gt;
&lt;h5&gt;Başlık1&lt;/h5&gt;
&lt;h6&gt;Başlık1&lt;/h6&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>kodlarımızın tarayıcı çıktısı</p>
<p><img class="alignnone size-full wp-image-566" src="https://www.yazilimekip.com/uploads/media/2018/06/ders4.png" alt="" width="1238" height="501" /></p>
<blockquote><strong>ÖNEMLİ BİR BİLGİ:</strong>
başlık etiketleri kullanıldığında yazı tipi, yazı büyüklüğü ,yazı kalınlığı ve tipi varsayılan olarak belirli özelliklerde gelmektedir. ama biz bunları istersek css kullanarak (daha sonra değineceğiz) istediğimiz özelliklere büründürebiliriz.</blockquote>
<p>&nbsp;</p>
<p>son bir hatırlatma olarak başlık etiketleri kullanıldığında tüm satırı kaplar eğer yanına herhangi bir ifade yazacak olursanız bir alt satırdan başlayacaktır.</p>
]]></content:encoded>
        </item>
        <item>
            <title>Php ile MySQL&#039; de bir tabloda bulunan en son kaydın id değerini almak.</title>
            <link>https://www.yazilimekip.com/php-ile-mysql-de-bir-tabloda-bulunan-en-son-kaydin-id-degerini-almak</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/php-ile-mysql-de-bir-tabloda-bulunan-en-son-kaydin-id-degerini-almak</guid>
            <pubDate>Mon, 14 Aug 2017 01:54:10 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Bir sipariş kaydettiniz, hemen ardından ürünleri başka tabloya yazmanız lazım ve bunun için siparişin id değeri gerekiyor. Son kaydın id'sini nasıl alırız?]]></description>
            <content:encoded><![CDATA[<p>Bu yazımda sizlere MySQL' de bulunan bir tablodaki en son kaydın id değerini almak için yöntemlerden bir tanesini anlatacağım.</p>
<p>Peki bu bize ne zaman lazım olur? Mesela bir sipariş kaydettiniz ve hemen ardından bu siparişe ait ürünleri başka bir tabloya kaydetmeniz gerekiyor. Ürünleri kaydederken siparişin id değerine ihtiyacınız var. İşte bu gibi durumlarda son kaydın id değerini almamız gerekir.</p>
<p>öncelikle tablo yapımız ve veriler.</p>
<p><img class="size-medium wp-image-472" src="https://www.yazilimekip.com/uploads/media/2017/08/mysql_son_kayit_id-300x143.png" alt="" width="300" height="143" /></p>
<p>üstteki gibi bir tablo yapısında</p>
<pre><code class="language-php">$sorgu = mysql_query("select icerik_id from icerik ORDER BY icerik_id DESC LIMIT 1");
if($sorgu)
{
$sorgu_sonuc = mysql_fetch_assoc($sorgu);
echo "Son Kaydın İd Değeri :: ". $sorgu_sonuc["icerik_id"];
}</code></pre>
<p>kodların açıklamasını yapacak olursak,</p>
<pre><code class="language-sql">select icerik_id from icerik ORDER BY icerik_id DESC LIMIT 1</code></pre>
<p>ifadesi icerik tablosundaki tüm kayıtları icerik_id alanına göre tersten sıralar,<br>
limit ifadesi ile bu sıralamadan sadece ilk kaydı alır.<br>
select icerik_id ile de bu kaydın icerik_id alanını bize verir.</p>
<p>Yani DESC ile büyükten küçüğe sıraladığımız için en büyük id en üste geliyor, LIMIT 1 ile de sadece o kaydı alıyoruz. id alanı otomatik artan (auto increment) olduğu için en büyük id aynı zamanda en son eklenen kayıt oluyor.</p>
<p>Aynı işlemi MAX() fonksiyonu ile de yapabilirsiniz.</p>
<pre><code class="language-sql">select MAX(icerik_id) as son_id from icerik</code></pre>
<h3>PDO ile kullanımı</h3>
<p>Burada bir uyarı yapayım, yukarıdaki örnekte kullandığımız mysql_query ve mysql_fetch_assoc fonksiyonları php 7 ile birlikte kaldırıldı. Güncel php sürümlerinde bu kodlar çalışmaz. Bunun yerine <a href="/php-ile-pdo-sinifi-kullanarak-sunucu-ve-veritabani-baglantisi-yapmak">PDO</a> kullanmanızı tavsiye ederim. Aynı sorgunun PDO ile yazılmış hali aşağıdaki gibidir.</p>
<pre><code class="language-php">$sorgu = $pdo-&gt;query("select icerik_id from icerik ORDER BY icerik_id DESC LIMIT 1");
$sonuc = $sorgu-&gt;fetch(PDO::FETCH_ASSOC);
echo "Son Kaydın İd Değeri :: ". $sonuc["icerik_id"];</code></pre>
<p>Eğer kaydı yeni eklediyseniz ve hemen o kaydın id değerini almak istiyorsanız PDO nun lastInsertId() metodu daha doğru bir yöntemdir.</p>
<pre><code class="language-php">$pdo-&gt;exec("insert into icerik (baslik) values ('yeni içerik')");
echo "Eklenen Kaydın İd Değeri :: ". $pdo-&gt;lastInsertId();</code></pre>
<p>Neden daha doğru? Çünkü aynı anda birden fazla kullanıcı kayıt ekliyorsa ORDER BY ile aldığınız son id başka bir kullanıcının eklediği kayda ait olabilir. lastInsertId() ise sadece sizin bağlantınız üzerinden eklenen kaydın id değerini verir.</p>
]]></content:encoded>
        </item>
        <item>
            <title>Php sınıflarda erişim belirleyicileri</title>
            <link>https://www.yazilimekip.com/php-siniflarda-erisim-belirleyicileri</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/php-siniflarda-erisim-belirleyicileri</guid>
            <pubDate>Wed, 07 Jun 2017 11:29:47 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Evin bahçesine herkes girebilir, salonuna ev halkı ve misafirler, kasaya ise sadece ev sahibi. Erişim belirleyicileri de sınıftaki bu kapıları belirler.]]></description>
            <content:encoded><![CDATA[<p><strong>sınıflarda erişim belirleyicileri</strong></p>
<p>sınıfları oluşturduğumuzda tek başlarına bir anlam ifade etmezler.</p>
<p>herhangi bir sınıfın içerisinde mutlaka metod yada özellikler olmaktadır. (sınıf ve metod tanımlamayı bilmiyorsanız önce <a href="/class-sinif-method-metod-tanimlama-ve-cagirma">buradaki yazıma</a> göz atabilirsiniz.)</p>
<p>fonksiyonel programlamada herhangi bir fonksiyona erişmek istediğimizde fonksiyon adını ve gerekli parametreleri yazmak yeterli iken sınıf içindeki metodlara (yani fonksiyonlara) doğrudan erişim yoktur. Önce sınıftan bir nesne türetmemiz, sonra bu nesne üzerinden metoda ulaşmamız gerekir.</p>
<p>erişim belirleyicileri yazılımcıların sınıflar içindeki metod ve özelliklere erişme biçimini belirler. Yani bir metoda yada özelliğe kimin ulaşabileceğine, kimin ulaşamayacağına biz karar veriyoruz.</p>
<p>Şimdi bunu bir ev üzerinden düşünelim. Evin bahçesine herkes girebilir, salonuna sadece ev halkı ve misafirler girebilir, kasaya ise sadece ev sahibi ulaşabilir. Erişim belirleyicileri de sınıf içindeki her şey için bu kapıların kime açık olacağını belirler.</p>
<p>bu erişim belirleyicileri</p>
<p><a href="/siniflarda-erisim-belirleyicileri-public-erisim-belirleyici-ozelligi" target="_blank" rel="noopener noreferrer">PUBLİC ( AÇIK)</a></p>
<p><a href="/siniflarda-erisim-belirleyicileri-private-erisim-belirleyici-ozelligi" target="_blank" rel="noopener noreferrer">PRİVATE (GİZLİ)</a></p>
<p><a href="/protected-erisim-belirleyici-ozel" target="_blank" rel="noopener noreferrer">PROTECTED ( ÖZEL)</a></p>
<p>olmak üzere 3 adettir.</p>
<p><img class="alignnone wp-image-450 size-medium" src="https://www.yazilimekip.com/uploads/media/2017/06/metotlara-erisim-300x150.jpg" alt="public erişim belirleyicisi, private erişim belirleyicisi, protected erişim belirleyicisi" width="300" height="150" /></p>
<p>kısaca özetleyecek olursak,</p>
<ul>
<li><strong>public :</strong> sınıf içinden, sınıf dışından ve türetilen sınıflardan erişilebilir.</li>
<li><strong>private :</strong> sadece sınıf içinden erişilebilir.</li>
<li><strong>protected :</strong> sınıf içinden ve türetilen sınıflardan erişilebilir, sınıf dışından erişilemez.</li>
</ul>
<p>Üçünü bir arada görmek için küçük bir örnek yapalım.</p>
<pre><code class="language-php">class Kase{
public $ad = "Mustafa";        // heryerden erişilir
protected $soyad = "YILMAZ";   // sınıf içi ve türetilen sınıflar
private $sifre = "12345";      // sadece sınıf içi
}

$ornek = new Kase();
echo $ornek-&gt;ad;        // çalışır
// echo $ornek-&gt;soyad;  // hata verir
// echo $ornek-&gt;sifre;  // hata verir</code></pre>
<p>Burada bir konuya daha değinelim. Sınıf içindeki özellikleri tanımlarken erişim belirleyicisini yazmak zorundayız. Metodlarda ise yazmazsak php bunu varsayılan olarak public kabul eder. Ama okunabilirlik açısından metodlarda da yazmanızı tavsiye ederim.</p>
<p>Her bir erişim belirleyicisini örnekleri ile ayrı ayrı yazılarda anlattım, yukarıdaki linklerden ilgili yazıya ulaşabilirsiniz. Türetilen sınıf kavramını bilmiyorsanız <a href="/siniflarda-miras-alma-extends">miras alma (extends)</a> yazıma da göz atmanızı tavsiye ederim.</p>
]]></content:encoded>
        </item>
        <item>
            <title>MySQL Tablo Birleştirme Sorguları (Join)</title>
            <link>https://www.yazilimekip.com/mysql-tablo-birlestirme-sorgulari-join</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/mysql-tablo-birlestirme-sorgulari-join</guid>
            <pubDate>Sun, 04 Jun 2017 00:08:26 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Php kursuna 100 kişi kayıtlı ve her kullanıcının kursunu ayrı sorgu ile çekiyorsunuz. Toplam 101 sorgu. Peki bunu tek sorguda yapamaz mıyız?]]></description>
            <content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-402" src="https://www.yazilimekip.com/uploads/media/2017/05/img_innerjoin.gif" alt="" width="200" height="145" /> <img class="alignnone size-full wp-image-403" src="https://www.yazilimekip.com/uploads/media/2017/05/img_leftjoin.gif" alt="" width="200" height="145" /> <img class="alignnone size-full wp-image-404" src="https://www.yazilimekip.com/uploads/media/2017/05/img_rightjoin.gif" alt="" width="200" height="145" /></p>
<p>veritabanı ile işlemler yaparken çoğu zaman herhangi bir kaydın bilgisi 2 yada daha fazla tabloda tutulur.</p>
<p>buna örnek olarak;</p>
<p>kişi bilgileri bir tabloda, kişinin kayıtlı olduğu kurslar başka bir tabloda tutulabilir. bu durumda öncelikle kişinin bilgilerini çekmek için kullanici tablosu üzerinde select sorgusu, daha sonra bu kişinin kurs bilgisini almak için ise kullanici tablosundan listelenen veriye göre kurs tablosunda yeni bir select sorgusu yapılır.</p>
<p>Peki neden bilgileri tek tabloda tutmuyoruz? Diyelim ki php kursuna 100 kişi kayıtlı. Kurs adını her kullanıcının yanına ayrı ayrı yazarsak hem gereksiz yer kaplar hem de kursun adını değiştirmek istediğimizde 100 kaydı tek tek güncellememiz gerekir. Bunun yerine kursları ayrı bir tabloda tutup kullanıcı tablosunda sadece kursun id değerini (kurs_id) tutuyoruz.</p>
<p>bu durumda genel olarak çift sorgu olur ve aynı zamanda başka sorunları da beraberinde getirir. Mesela 100 kullanıcınız varsa 1 sorgu kullanıcılar için, 100 sorgu da her kullanıcının kursu için olmak üzere toplam 101 sorgu çalışır. Bu da sayfanızın yavaşlaması demek.</p>
<p>bu yazdığımızı örneklendirecek olursak,</p>
<p>kullanıcı tablosu</p>
<p><img class="size-full wp-image-358" src="https://www.yazilimekip.com/uploads/media/2017/05/kullan%C4%B1c%C4%B1-tablosu.png" alt="" width="227" height="172" /></p>
<p>Kurs Tablosu</p>
<p><img class="size-full wp-image-359" src="https://www.yazilimekip.com/uploads/media/2017/05/kurs-tablosu.png" alt="" width="137" height="166" /></p>
<pre><code class="language-php">&lt;?php
$sorgu = $pdo-&gt;query("select * from kullanici");
$kullanicilar = $sorgu-&gt;fetchAll(PDO::FETCH_OBJ);
foreach ($kullanicilar as $kullanici) {
echo "Kullanıcı Adı :: ". $kullanici-&gt;ad ."&lt;br&gt;";
$sorgu2 = $pdo-&gt;query("select * from kurs where id = '$kullanici-&gt;kurs_id' ");
$kurs = $sorgu2-&gt;fetch(PDO::FETCH_LAZY);
echo "Kurs Adı :: ". $kurs-&gt;kurs_ad ."&lt;br&gt;";
}
/*
çıktısı
Kullanıcı Adı :: Mustafa Yılmaz
Kurs Adı :: php
...
...
...
*/</code></pre>
<p>üstteki yazmış olduğumuz iki adet sql sorgusu yerine tabloları birleştiren join ifadesini kullanmamız daha kolay olacaktır. Aynı işi join ile tek sorguda şu şekilde yapabiliriz.</p>
<pre><code class="language-sql">select * from kullanici join kurs on kullanici.kurs_id=kurs.id</code></pre>
<p>Burada on ifadesinden sonra yazdığımız kısım iki tablonun hangi alanlar üzerinden birbirine bağlanacağını belirtir. Bizim örneğimizde kullanici tablosundaki kurs_id alanı ile kurs tablosundaki id alanı eşleşiyor.</p>
<p>Join türleri temelde 3 tanedir. Yazının başındaki şekillerde de gördüğünüz gibi her biri iki tablodan farklı kayıtları getirir.</p>
<ul>
<li><strong>inner join :</strong> sadece iki tabloda da eşleşen kayıtları getirir.</li>
<li><strong>left join :</strong> soldaki tablonun tüm kayıtlarını, sağdaki tablonun ise eşleşen kayıtlarını getirir.</li>
<li><strong>right join :</strong> sağdaki tablonun tüm kayıtlarını, soldaki tablonun ise eşleşen kayıtlarını getirir.</li>
</ul>
<p>Join Türleri İçin</p>
<ul>
<li><a href="/mysql-sql-tablo-birlestirme-join-sorgulari-inner-join" target="_blank" rel="noopener noreferrer">inner join Kullanımı</a></li>
<li><a href="/mysql-tablo-birlestirme-sorgulari-left-join" target="_blank" rel="noopener noreferrer">left join Kullanımı</a></li>
<li><a href="/mysql-tablo-birlestirme-sorgulari-right-join" target="_blank" rel="noopener noreferrer">right join Kullanımı</a></li>
</ul>
]]></content:encoded>
        </item>
        <item>
            <title>MySQL Tablo Birleştirme Sorguları. ( Right Join )</title>
            <link>https://www.yazilimekip.com/mysql-tablo-birlestirme-sorgulari-right-join</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/mysql-tablo-birlestirme-sorgulari-right-join</guid>
            <pubDate>Wed, 31 May 2017 15:13:31 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Left join de soldaki tablonun tüm kayıtları geliyordu, right join ise bunun tam tersi. Sitedeki tüm kursları kimse kayıtlı olmasa bile listeleyelim.]]></description>
            <content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-404" src="https://www.yazilimekip.com/uploads/media/2017/05/img_rightjoin.gif" alt="" width="200" height="145" /></p>
<p>iki tablodan ikinci tablonun tüm kayıtlarını, ilk tablonun ise sadece ikinci tablodaki kayıtlar ile eşleşen ( ortak olan ) kayıtlarını listelemek istediğimizde right join sorgusu kullanılır.</p>
<p>Daha önce <a href="/mysql-tablo-birlestirme-sorgulari-left-join">left join</a> yazımda soldaki tablonun tüm kayıtlarının geldiğini söylemiştik. right join ise bunun tam tersidir. Burada join den sonra yazdığımız yani sağdaki tablo ana tablo oluyor ve bu tablodaki kayıtların hepsi eşleşme olsun olmasın listeye geliyor. Soldaki tabloda eşleşmesi olmayan kayıtların kolonları ise NULL (boş) olarak gelir.</p>
<p>tüm kursları, kullanıcılar tablosunda eşleşmesede listeleyen right join sorgusu ( tüm kolonları seçme)</p>
<p>kullanıcılar tablosu</p>
<figure class="wp-caption"><img class="wp-image-358 size-full" src="https://www.yazilimekip.com/uploads/media/2017/05/kullanıcı-tablosu.png" alt="" width="227" height="172" /><figcaption>tüm kullanıcıları içeren tablomuz</figcaption></figure>
<figure class="wp-caption"><img class="size-full wp-image-359" src="https://www.yazilimekip.com/uploads/media/2017/05/kurs-tablosu.png" alt="" width="137" height="166" /><figcaption>tüm kursları içeren tablomuz</figcaption></figure>
<pre><code class="language-sql">select * from kullanici
right join
kurs
on
kullanici.kurs_id=kurs.id</code></pre>
<p>sorgumuzu okuyacak olursak; kurs tablosundaki tüm kayıtları getir, bu kurslara kayıtlı olan kullanıcılar varsa onların bilgilerini de yanına ekle demiş oluyoruz.</p>
<figure class="wp-caption"><img class="size-medium wp-image-377" src="https://www.yazilimekip.com/uploads/media/2017/05/right-join-all-300x157.png" alt="" width="300" height="157" /><figcaption>right join ile listelenen kayıtlarımız</figcaption></figure>
<p>Burada dikkat ederseniz tüm kurslar listeye geldi. Hiç kullanıcısı olmayan kursların kullanıcı kolonları ise NULL olarak görünüyor.</p>
<p>eğer sorgumuzu</p>
<pre><code class="language-sql">select
kullanici.id,kullanici.ad,kullanici.kurs_id,kurs.kurs_ad
from kullanici
right join
kurs
on
kullanici.kurs_id=kurs.id</code></pre>
<p>kodları ile değiştirirsek.<br>
sadece seçtiğimiz kolonları getirir.</p>
<figure class="wp-caption"><img class="size-medium wp-image-378" src="https://www.yazilimekip.com/uploads/media/2017/05/right-join-select-300x184.png" alt="" width="300" height="184" /><figcaption>right join ile listelenen kayıtlar (sadece seçtiğimiz kolonlar)</figcaption></figure>
<h3>right join nerede işimize yarar?</h3>
<p>Şimdi bir senaryo düşünelim. Sitenizdeki tüm kursları listelemek ve her kursa kimlerin kayıtlı olduğunu göstermek istiyorsunuz. Henüz kimsenin kayıt olmadığı kurslar da listede görünsün istiyorsunuz. İşte bu durumda right join kullanabiliriz.</p>
<p>Hatta bu sorguya where şartı ekleyerek hiç kullanıcısı olmayan kursları da kolayca bulabiliriz.</p>
<pre><code class="language-sql">select kurs.kurs_ad from kullanici
right join kurs on kullanici.kurs_id=kurs.id
where kullanici.id is null</code></pre>
<p>Son olarak şunu da söyleyeyim; right join ile yaptığınız her sorguyu tabloların yerini değiştirerek left join ile de yazabilirsiniz. Yani from kurs left join kullanici yazarsanız aynı sonucu alırsınız. Hangisini kullanacağınız tamamen size kalmış.</p>
]]></content:encoded>
        </item>
        <item>
            <title>MySQL Tablo Birleştirme Sorguları. ( Left Join )</title>
            <link>https://www.yazilimekip.com/mysql-tablo-birlestirme-sorgulari-left-join</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/mysql-tablo-birlestirme-sorgulari-left-join</guid>
            <pubDate>Wed, 31 May 2017 15:10:20 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Inner join sadece iki tabloda da eşleşen kayıtları getiriyordu. Left join de durum biraz farklı, soldaki tablonun tüm kayıtları listeye geliyor.]]></description>
            <content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-403" src="https://www.yazilimekip.com/uploads/media/2017/05/img_leftjoin.gif" alt="" width="200" height="145" /></p>
<p>iki tablodan ilk tablonun tüm kayıtlarını, ikinci tablonun ise sadece ilk tablodaki ile eşleşen ( ortak olan ) kayıtlarını seçmek istediğimizde left join kullanılır.</p>
<p>Daha önce <a href="/mysql-sql-tablo-birlestirme-join-sorgulari-inner-join">inner join</a> yazımda inner join in sadece iki tabloda da eşleşen kayıtları getirdiğini söylemiştik. left join de ise durum biraz farklı. Burada soldaki tablo yani from dan sonra yazdığımız ilk tablo bizim için ana tablo oluyor ve bu tablodaki kayıtların hepsi eşleşme olsun olmasın listeye geliyor.</p>
<p>Peki eşleşme olmayan kayıtlarda ikinci tablonun kolonları ne olacak? Onlar da NULL (boş) olarak gelir.</p>
<p>kullanıcıların kurslarını listeleyen left join sorgusu ( tüm kolonları seçme)</p>
<p>kullanıcılar tablosu</p>
<figure class="wp-caption"><img class="wp-image-358 size-full" src="https://www.yazilimekip.com/uploads/media/2017/05/kullanıcı-tablosu.png" alt="" width="227" height="172" /><figcaption>tüm kullanıcıları içeren tablomuz</figcaption></figure>
<figure class="wp-caption"><img class="size-full wp-image-359" src="https://www.yazilimekip.com/uploads/media/2017/05/kurs-tablosu.png" alt="" width="137" height="166" /><figcaption>tüm kursları içeren tablomuz</figcaption></figure>
<pre><code class="language-sql">select * from kullanici
left join
kurs
on
kullanici.kurs_id=kurs.id</code></pre>
<p>sorgumuzu okuyacak olursak; kullanici tablosundaki tüm kayıtları getir, bu kayıtlardan kurs_id değeri kurs tablosundaki id ile eşleşenlerin kurs bilgilerini de yanına ekle demiş oluyoruz.</p>
<figure class="wp-caption"><img class="wp-image-373 size-medium" src="https://www.yazilimekip.com/uploads/media/2017/05/left-join-all-300x146.png" alt="" width="300" height="146" /><figcaption>left join ile listelenen kayıtlar.( tüm kolonlar listelendi)</figcaption></figure>
<p>Burada dikkat ederseniz tüm kullanıcılar listeye geldi. Kurs tablosunda karşılığı olmayan kullanıcıların kurs kolonları ise NULL olarak görünüyor.</p>
<p>eğer sorgumuzu</p>
<pre><code class="language-sql">select
kullanici.id,kullanici.ad,kullanici.kurs_id,kurs.kurs_ad
from kullanici
left join
kurs
on
kullanici.kurs_id=kurs.id</code></pre>
<p>kodları ile değiştirirsek.<br>
sadece seçtiğimiz kolonları getirir.</p>
<figure class="wp-caption"><img class="size-medium wp-image-374" src="https://www.yazilimekip.com/uploads/media/2017/05/left-join-select-300x178.png" alt="" width="300" height="178" /><figcaption>left join ile listelenen kayıtlar (sadece seçtiğimiz kolonlar)</figcaption></figure>
<h3>left join nerede işimize yarar?</h3>
<p>Şimdi bir senaryo düşünelim. Sitenizdeki tüm kullanıcıları listelemek istiyorsunuz, kursa kayıtlı olanların yanında da kurs adı görünsün istiyorsunuz. Eğer burada inner join kullanırsanız kursa kayıtlı olmayan kullanıcılar listede hiç görünmez. İşte bu durumda left join kullanmamız gerekir.</p>
<p>Hatta bu sorguya bir where şartı ekleyerek hiçbir kursa kayıtlı olmayan kullanıcıları da kolayca bulabiliriz.</p>
<pre><code class="language-sql">select kullanici.ad from kullanici
left join kurs on kullanici.kurs_id=kurs.id
where kurs.id is null</code></pre>
<p>Bu işlemin tam tersini yani ikinci tablonun tüm kayıtlarını getirmek isterseniz <a href="/mysql-tablo-birlestirme-sorgulari-right-join">right join</a> yazıma göz atabilirsiniz.</p>
]]></content:encoded>
        </item>
        <item>
            <title>MySQL Tablo Birleştirme Sorguları. ( İnner Join )</title>
            <link>https://www.yazilimekip.com/mysql-sql-tablo-birlestirme-join-sorgulari-inner-join</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/mysql-sql-tablo-birlestirme-join-sorgulari-inner-join</guid>
            <pubDate>Wed, 31 May 2017 10:56:36 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Daha önce join yazımda neden tablo birleştirmeye ihtiyaç duyduğumuzu anlatmıştım. Bu yazımda iki tarafta da eşleşen kayıtları getiren inner join var.]]></description>
            <content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-402" src="https://www.yazilimekip.com/uploads/media/2017/05/img_innerjoin.gif" alt="" width="200" height="145" /></p>
<p>iki tabloda birbiri ile ilişkili kayıtları listelerken tek sorgu kullanmak istediğimizde kullanacağımız yöntemin başında inner join gelir.</p>
<p>inner join ifadesi ile iki tablodaki belirtilen sütunların sadece eşleşen kayıtları gelir. Yani bir tarafta olup diğer tarafta karşılığı olmayan kayıtlar sonuca gelmez.</p>
<p>inner join ifadesi yerine sadece join de yazılabilir, ikisi de aynı işi yapar.</p>
<p>Daha önce <a href="/mysql-tablo-birlestirme-sorgulari-join">join yazımda</a> neden tablo birleştirmeye ihtiyaç duyduğumuzu anlatmıştım. Fazla bi açıklama yapmadan doğrudan örneklemeye geçelim.</p>
<p>iki tablodaki ortak olan kayıtları listeleyen inner join sorgusu ( select * - tüm alanları seçme)</p>
<p>kullanıcılar tablosu</p>
<figure class="wp-caption"><img class="wp-image-358 size-full" src="https://www.yazilimekip.com/uploads/media/2017/05/kullan%C4%B1c%C4%B1-tablosu.png" alt="" width="227" height="172" /><figcaption>tüm kullanıcıları içeren tablomuz</figcaption></figure>
<figure class="wp-caption"><img class="size-full wp-image-359" src="https://www.yazilimekip.com/uploads/media/2017/05/kurs-tablosu.png" alt="" width="137" height="166" /><figcaption>tüm kursları içeren tablomuz</figcaption></figure>
<p>kullanici tablosunda her kullanıcının kurs_id alanı var ve bu alan kurs tablosundaki id alanını gösteriyor. İşte iki tabloyu birbirine bağlayan alanlarımız bunlar.</p>
<pre><code class="language-sql">select * from kullanici inner join kurs on kullanici.kurs_id=kurs.id</code></pre>
<p>sorgumuzu okuyacak olursak; kullanici tablosunu kurs tablosu ile birleştir, birleştirirken de kullanicinin kurs_id değeri ile kursun id değeri aynı olanları getir demiş oluyoruz. on ifadesinden sonra yazılan kısım birleştirme şartımızdır.</p>
<figure class="wp-caption"><img class="size-medium wp-image-357" src="https://www.yazilimekip.com/uploads/media/2017/05/inner-join-all-300x123.png" alt="" width="300" height="123" /><figcaption>inner join sorgusu sonucunda seçilen verilerimiz</figcaption></figure>
<p>Burada dikkat ederseniz kursu olmayan yada kurs tablosunda karşılığı bulunmayan kullanıcılar listede yok. inner join in en önemli özelliği de budur, sadece iki tarafta da eşleşen kayıtları getirir.</p>
<p>php içerisinde kullanmak istediğimizde ise aşağıdaki kod bloğunu yazmamız gerekir.</p>
<pre><code class="language-php">&lt;?php
$sorgu = $pdo-&gt;query("select * from kullanici inner join kurs on kullanici.kurs_id=kurs.id");
$kullanicilar = $sorgu-&gt;fetchAll(PDO::FETCH_OBJ);

foreach ($kullanicilar as $kullanici) {

echo "Kullanıcı Adı :: ". $kullanici-&gt;ad ."&lt;br /&gt;";

echo "Kurs Adı :: ". $kullanici-&gt;kurs_ad ."&lt;br /&gt;";

}

/*
çıktısı

Kullanıcı Adı :: Mustafa Yılmaz
Kurs Adı :: php
...
...
...
*/</code></pre>
<p>Gördüğünüz gibi iki ayrı sorgu yazmak yerine tek sorgu ile hem kullanıcı adını hem de kurs adını aldık. (pdo bağlantısının nasıl yapıldığını bilmiyorsanız <a href="/php-ile-pdo-sinifi-kullanarak-sunucu-ve-veritabani-baglantisi-yapmak">buradaki yazıma</a> göz atabilirsiniz.)</p>
<p>eğer sorgumuzu</p>
<pre><code class="language-sql">select
kullanici.id,kullanici.ad,kullanici.kurs_id,kurs.kurs_ad
from
kullanici inner join kurs
on
kullanici.kurs_id=kurs.id</code></pre>
<p>kodları ile değiştirirsek.<br>
sadece seçtiğimiz kolonları getirir.</p>
<figure class="wp-caption"><img class="size-medium wp-image-368" src="https://www.yazilimekip.com/uploads/media/2017/05/inner-join-select-300x145.png" alt="" width="300" height="145" /><figcaption>inner join ile sadece seçtiğimiz kolonların listesi</figcaption></figure>
<p>Kolonları tek tek yazarken tablo adını başına yazmayı unutmayın. Çünkü iki tabloda da id gibi aynı isimde kolonlar olabilir ve bu durumda MySQL hangi tablonun kolonunu istediğinizi anlayamaz, hata verir.</p>
<p>Eşleşmeyen kayıtları da görmek isterseniz <a href="/mysql-tablo-birlestirme-sorgulari-left-join">left join</a> ve <a href="/mysql-tablo-birlestirme-sorgulari-right-join">right join</a> yazılarıma göz atabilirsiniz.</p>
]]></content:encoded>
        </item>
        <item>
            <title>php ile pdo sınıfı kullanarak sunucu ve veritabanı bağlantısı yapmak</title>
            <link>https://www.yazilimekip.com/php-ile-pdo-sinifi-kullanarak-sunucu-ve-veritabani-baglantisi-yapmak</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/php-ile-pdo-sinifi-kullanarak-sunucu-ve-veritabani-baglantisi-yapmak</guid>
            <pubDate>Wed, 19 Apr 2017 12:35:54 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Php ile mysql bağlantısı için eskiden mysql_connect kullanılırdı ama artık yok. Bu yazımızda yerine kullanacağımız PDO dan bahsedeceğiz.]]></description>
            <content:encoded><![CDATA[<p>php ile mysql veritabanına bağlantı için önceden mysql_connect, mysql_query gibi fonksiyonlar kullanılmakta idi.</p>
<p>fakat bazı güvenlik sorunlarından dolayı bu fonksiyonlar önce kullanımdan kaldırılacak olarak işaretlendi, php 7 ile birlikte de tamamen kaldırıldı. php.net tarafından bunların yerine PDO yada MySQLi tavsiye edilmektedir.</p>
<p>biz bu yazımızda sizlere PDO dan bahsedeceğiz.</p>
<h3>PDO nedir?</h3>
<p>PDO (PHP Data Objects) php ile birlikte gelen ve veritabanı işlemlerini nesne yönelimli olarak yapmamızı sağlayan bir sınıftır.</p>
<p>PDO bazı güvenlik risklerine (sql injection) karşı hazırlanmış sorgular (prepare) sayesinde doğal bir koruma sağlamakta ve mysql dışındaki veritabanlarına da (PostgreSQL, SQLite vb..) bağlanılabilmektedir. Yani yarın öbür gün veritabanınızı değiştirmek isterseniz kodlarınızın büyük kısmını değiştirmeden devam edebilirsiniz.</p>
<p>pdo ile MySQL sunucusuna bağlanabilmek için öncelikle host(sunucu), dbname(bağlanılacak olan veritabanı adı), veritabanı kullanıcı adı ve veritabanı şifresi gereklidir.</p>
<p>Eğer localhost üzerinde xampp kullanıyorsanız kullanıcı adı genelde root, şifre ise boştur. (xampp kurulumunu bilmiyorsanız <a href="/xampp-kurulumu-ve-ilk-php-kodunun-yazilip-calistirilmasi">buradaki yazıma</a> bakabilirsiniz.)</p>
<p>gerekli olan kodlarımız aşağıdaki gibidir.</p>
<pre><code class="language-php">&lt;?php
try {
$server = 'mysql:host=localhost; dbname=adresdefteri';
$user = 'root';
$pass = '';
$pdo = new PDO( $server, $user, $pass ); // pdo sınıfından bir nesne oluşturuyoruz. oluştururken bağlantı bilgilerimizi giriyoruz.
$pdo-&gt;exec('set names utf8');
} catch ( PDOException $hata ){ // pdo da oluşan hatayı $hata değişkenine alıyoruz.
echo "Bağlantı hatası..";
echo $hata-&gt;getMessage(); // oluşan hatayı ekrana yazıyoruz.
exit();
}</code></pre>
<p>kodların açıklamasını yapacak olursak,</p>
<p>$server değişkenine sunucu tipini (mysql), sunucu adresini ve veritabanı adını yazıyoruz. $user ve $pass değişkenlerine ise kullanıcı adı ve şifremizi yazıyoruz.</p>
<p>new PDO diyerek bu bilgiler ile PDO sınıfından bir nesne oluşturuyoruz. Eğer bilgiler doğru ise bağlantı kurulmuş oluyor ve artık tüm veritabanı işlemlerimizi $pdo değişkeni üzerinden yapacağız.</p>
<p>set names utf8 satırı ise türkçe karakterlerin (ş, ğ, ı vb..) bozuk görünmemesi için kullanılır.</p>
<p>Peki bu try catch ne işe yarıyor? Bağlantı sırasında şifre yanlış olabilir, veritabanı adı yanlış olabilir yada sunucu kapalı olabilir. Bu durumda PDO bir hata fırlatır ve biz bu hatayı catch bloğunda yakalayıp ekrana yazıyoruz. try catch yapısını daha detaylı öğrenmek için <a href="/php-ile-try-catch-yapisi-istisna-yakalamak">buradaki yazıma</a> göz atabilirsiniz.</p>
<p>Bağlantı kurulduktan sonra basit bir sorgu ile test etmek isterseniz,</p>
<pre><code class="language-php">$sorgu = $pdo-&gt;query("select * from kisiler");
foreach ($sorgu as $satir) {
echo $satir['ad'] ."&lt;br&gt;";
}</code></pre>
<p>Not: canlı sitede getMessage() ile hatayı ekrana yazmak yerine log dosyasına yazmanızı tavsiye ederim, çünkü hata mesajında sunucu bilgileriniz görünebilir.</p>
]]></content:encoded>
        </item>
        <item>
            <title>php ile try catch yapısı (istisna yakalamak)</title>
            <link>https://www.yazilimekip.com/php-ile-try-catch-yapisi-istisna-yakalamak</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/php-ile-try-catch-yapisi-istisna-yakalamak</guid>
            <pubDate>Wed, 19 Apr 2017 12:10:01 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Kullanıcıdan yaşını istediniz ve kullanıcı yaş yerine "evli" yazdı. Ne olacak? İşte bu gibi beklenmedik durumları try catch ile yakalıyoruz.]]></description>
            <content:encoded><![CDATA[<p>yazdığımız program parçaları çalışırken hatalar meydana getirebilir. bu meydana gelen hataları gizlemek bir seçenek iken bu hataları yakalamak ve bazı işlemler yapmak (hataları email ile göndermek, log tutmak vb..) da seçenekler arasındadır.</p>
<p>Şimdi bir senaryo düşünelim. Kullanıcıdan yaşını istediniz ve kullanıcı yaş yerine "evli" yazdı. Siz bu değeri kontrol etmeden hesaplama yaparsanız programınız ya yanlış sonuç verir ya da hata verip durur. İşte bu gibi beklenmedik durumlara istisna (exception) diyoruz.</p>
<p>php ile birlikte istisnalar ( veya hatalar ) try catch bloğu içinde yakalanabilirler.</p>
<p>try içinde bir hata olduğunda catch bloğuna bu hata atılır. catch bloğunda hata ile ilgili yapılmak istenen işlemler gerçekleştirilir.</p>
<p><strong><em>kullanımı::</em></strong></p>
<pre><code class="language-php">&lt;?php
try{
// istisna olabilecek kodlar
}catch( Exception $hata ){
// $hata kodu burada işlenir.
}</code></pre>
<p>try kelimesinin anlamı denemek, catch ise yakalamak demek. Yani "şu kodları dene, hata olursa yakala" demiş oluyoruz.</p>
<p><em><strong>örnek::</strong></em></p>
<pre><code class="language-php">try {
$yas = "evli";
if ( !is_integer($yas) ) {
throw new Exception('$yas sayı girilmedi');
}
echo "Bu satır işlendi..";
} catch (Exception $hata) {
echo "Hata Oluştu :: ". $hata-&gt;getMessage();
}

// çıktısı
// Hata Oluştu :: $yas sayı girilmedi</code></pre>
<p>kodların açıklamasını yapacak olursak,</p>
<p>$yas değişkenine sayı yerine "evli" yazdık. is_integer() fonksiyonu ile bu değerin sayı olup olmadığını kontrol ettik. Sayı olmadığı için throw ifadesi ile yeni bir istisna fırlattık.</p>
<p>throw satırı çalıştığı anda try bloğundaki kodların çalışması durur. Bu yüzden "Bu satır işlendi.." yazısı ekrana gelmez ve program doğrudan catch bloğuna geçer.</p>
<p>catch bloğunda ise fırlatılan hatayı $hata değişkenine aldık ve getMessage() metodu ile throw ederken yazdığımız mesajı ekrana yazdık.</p>
<p>Eğer $yas değişkenine 25 gibi bir sayı yazarsanız hata oluşmaz, catch bloğu hiç çalışmaz ve ekrana "Bu satır işlendi.." yazar.</p>
<h3>finally bloğu</h3>
<p>Dilerseniz try catch yapısının sonuna finally bloğu da ekleyebilirsiniz. finally içindeki kodlar hata olsa da olmasa da her durumda çalışır. Genelde açılan dosyayı yada bağlantıyı kapatmak gibi işlerde kullanılır.</p>
<pre><code class="language-php">try {
// istisna olabilecek kodlar
} catch (Exception $hata) {
echo $hata-&gt;getMessage();
} finally {
echo "ben her durumda çalışırım..";
}</code></pre>
<p>try catch yapısını en çok kullandığımız yerlerden biri de veritabanı bağlantısıdır. Bunun örneğini <a href="/php-ile-pdo-sinifi-kullanarak-sunucu-ve-veritabani-baglantisi-yapmak">pdo ile veritabanı bağlantısı</a> yazımda görebilirsiniz.</p>
]]></content:encoded>
        </item>
        <item>
            <title>kurucu ( __construct ) ve yıkıcı ( __destruct ) metodları</title>
            <link>https://www.yazilimekip.com/kurucu-construct-ve-yikici-destruct-metodlari</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/kurucu-construct-ve-yikici-destruct-metodlari</guid>
            <pubDate>Mon, 17 Apr 2017 12:52:20 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Bazen bazı kodların biz çağırmadan kendi kendine çalışmasını isteriz. Php de bunu kurucu ve yıkıcı metodlar ile yapıyoruz, nasıl çalıştıklarına bakalım.]]></description>
            <content:encoded><![CDATA[<h3>kurucu ve yıkıcı metodlar</h3>
<p>programlamada bazen belirlemiş olduğumuz komutların kendi kendine (otomatik) çalışmasını isteyebiliriz. mesela bir sınıftan nesne oluşturduğumuz anda başlangıç değerleri atansın, nesne kaldırılırken de açık bıraktığı dosya kapatılsın.</p>
<p>kurucu ve yıkıcı metodlar burada kullanılır. kurucu metodun adı <strong>__construct</strong>, yıkıcı metodun adı ise <strong>__destruct</strong> tır. başlarındaki iki alt çizgiye dikkat edin. tek alt çizgi yazarsanız PHP bunları bu özel metodlar olarak tanımaz.</p>
<p>kurucu metod, <strong>new</strong> ile nesne oluşturduğumuzda çalışır. yıkıcı metod ise nesneye ait son referans da kaldırıldığında yada program normal şekilde sonlanırken çalışır. yani yıkıcı metodun çalışması için mutlaka sayfanın sonuna gelinmesi gerekmez. birazdan bunu ayrıca deneyeceğiz.</p>
<p>önce basit bir örnek üzerinden hangi metodun ne zaman çalıştığını görelim.</p>
<pre><code class="language-php">&lt;?php
class Hesapla
{
    public function __construct()
    {
        echo "ben Hesapla içindeki kurucu metodum..&lt;br&gt;";
    }

    public function yaz()
    {
        echo "ben Hesapla içindeki yaz() metoduyum..&lt;br&gt;";
    }

    public function boz()
    {
        echo "ben Hesapla içindeki boz() metoduyum..&lt;br&gt;";
    }

    public function __destruct()
    {
        echo "ben Hesapla içindeki yıkıcı metodum..&lt;br&gt;";
    }
}

$ornek = new Hesapla();
$ornek-&gt;yaz();
$ornek-&gt;boz();

echo "ben arada bir satırım ki benim sınıfla bir alakam yok&lt;br&gt;";</code></pre>
<p>bu örneği ayrı bir PHP dosyasında çalıştırdığımızda ekran çıktısı aşağıdaki gibi olur.</p>
<pre><code class="language-text">ben Hesapla içindeki kurucu metodum..
ben Hesapla içindeki yaz() metoduyum..
ben Hesapla içindeki boz() metoduyum..
ben arada bir satırım ki benim sınıfla bir alakam yok
ben Hesapla içindeki yıkıcı metodum..</code></pre>
<p>burada dikkat ederseniz yaz ve boz metodlarını kendimiz çağırdık. fakat __construct için ayrıca bir çağrı yazmadık, new Hesapla() dediğimiz anda çalıştı. __destruct da bu örnekte programın sonuna geldiğimizde çalıştı. boz metodunun adı sizi yanıltmasın, o bizim verdiğimiz sıradan bir isim. PHP için yıkıcı olan metod __destruct tır.</p>
<h3>kurucu metoda parametre gönderme</h3>
<p>şimdi nesneyi oluştururken bir isim de göndermek istediğimizi düşünelim. kurucu metod bu değeri alıp nesnenin isim özelliğine yazsın. böylece nesneyi oluşturduktan sonra ayrıca isim atamak için başka bir metod çağırmamız gerekmez.</p>
<pre><code class="language-php">&lt;?php
class Kase
{
    public $isim;

    public function __construct($isim)
    {
        $this-&gt;isim = $isim;
    }
}

$ornek = new Kase("Mustafa YILMAZ");
echo $ornek-&gt;isim; // Mustafa YILMAZ</code></pre>
<p>burada new Kase parantezleri içine yazdığımız değer __construct metoduna parametre olarak gitti. $this-&gt;isim de o an oluşturulan nesnenin özelliği olduğu için, daha sonra nesne üzerinden bu değeri okuyabildik.</p>
<h3>yıkıcı metodu dosya kapatma üzerinden görelim</h3>
<p>ekrana yazı yazdırarak çalışma sırasını gördük. şimdi bir de gerçekten iş yapan örnek yazalım. bir sınıfımız olsun, nesne oluşunca dosya açsın ve gönderdiğimiz yazıyı bu dosyaya eklesin. nesne kaldırıldığında da açtığı dosyayı kapatsın.</p>
<pre><code class="language-php">&lt;?php
class DosyaYazici
{
    private $dosya;

    public function __construct($yol)
    {
        $this-&gt;dosya = fopen($yol, "a");

        if ($this-&gt;dosya === false) {
            throw new RuntimeException("dosya açılamadı.");
        }

        echo "dosya açıldı&lt;br&gt;";
    }

    public function yaz($metin)
    {
        fwrite($this-&gt;dosya, $metin . PHP_EOL);
    }

    public function __destruct()
    {
        if (is_resource($this-&gt;dosya)) {
            fclose($this-&gt;dosya);
            echo "dosya kapatıldı&lt;br&gt;";
        }
    }
}

$kayit = new DosyaYazici(__DIR__ . "/ornek-kayit.txt");
$kayit-&gt;yaz("ilk kayıt");
echo "kayıt yazıldı&lt;br&gt;";

unset($kayit);

echo "program devam ediyor&lt;br&gt;";</code></pre>
<p>bu örnekte PHP dosyasının bulunduğu klasöre yazma izni olması gerekir. fopen içindeki <strong>a</strong> dosyayı sonuna ekleme yapmak için açar, dosya yoksa oluşturmaya çalışır. kodu her çalıştırdığınızda ornek-kayit.txt içine yeni bir ilk kayıt satırı eklenir. önceki satırlar silinmez.</p>
<p>ekranda ise şu sırayı görürsünüz.</p>
<pre><code class="language-text">dosya açıldı
kayıt yazıldı
dosya kapatıldı
program devam ediyor</code></pre>
<p>burada dosya kapatıldı yazısının program devam ediyor yazısından önce geldiğine dikkat edin. çünkü unset($kayit) ile değişkeni kaldırdık ve bu örnekte nesneyi tutan başka bir referans kalmadı. PHP de o anda __destruct metodunu çalıştırdı. dosyayı kapatan fclose komutunu bu metodun içine yazmıştık.</p>
<p>unset satırını kaldırıp tekrar deneyin. bu defa program devam ediyor yazısı önce, dosya kapatıldı yazısı programın sonunda gelir. aynı örnekte tek satırı değiştirerek yıkıcı metodun sadece sayfanın sonunda çalışmadığını görebilirsiniz.</p>
<p>bu arada nesneyi daha önce başka bir değişkene de atadıysanız yalnızca $kayit değişkenini kaldırmanız nesnenin hemen yok edilmesi için yeterli olmayabilir. başka değişken de aynı nesneyi tutmaya devam eder. yani unset doğrudan yıkıcı metodu çağıran bir komut değildir, burada kaldırdığımız şey değişkendir.</p>
<p>dosyayı kapatmak da dosyayı silmek anlamına gelmez. yazdığımız kayıt dosyada durur, sadece açtığımız dosya kaynağı kapanır. yıkıcı metodun içine yazdığımız echo satırları da bu işlemlerin sırasını görebilmek için var. kendi sınıfınızda dosya kapatırken ekrana mesaj yazdırmak zorunda değilsiniz.</p>]]></content:encoded>
        </item>
        <item>
            <title>sınıflarda miras alma (extends)</title>
            <link>https://www.yazilimekip.com/siniflarda-miras-alma-extends</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/siniflarda-miras-alma-extends</guid>
            <pubDate>Mon, 17 Apr 2017 12:50:48 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Dört işlem yapan bir hesap makinesi sınıfınız var, şimdi bilimsel olanını yapacaksınız. Aynı metodları tekrar mı yazacağız? Hayır, miras alacağız.]]></description>
            <content:encoded><![CDATA[<h3>sınıflarda miras alma</h3>
<p>bir sınıfın kullanılabilir özellik ve metodlarını başka bir sınıfta da kullanmak istediğimizde miras alma işleminden faydalanırız. PHP de bu işlem için <strong>extends</strong> kelimesi kullanılır.</p>
<p>şimdi bir hesap makinesi sınıfı yazdığımızı düşünelim. toplama, çıkarma ve çarpma işlemlerini yapan metodlarımız hazır. daha sonra bu hesap makinesine yeni işlemler eklemek istedik, mesela bir sayının karesini de hesaplasın. yeni sınıfı yazarken önceki işlemlerin kodlarını tekrar mı yazacağız?</p>
<p>işte burada miras alma karşımıza geliyor. yeni sınıfı önceki sınıftan türetirsek ortak olan metodları tekrar yazmadan kullanabiliriz. yeni sınıfta da sadece eklemek istediğimiz işlemleri yazarız. böylece toplama işleminde bir değişiklik yapacağımız zaman aynı kodu kopyaladığımız bütün sınıfları tek tek bulup düzeltmek zorunda kalmayız.</p>
<p>bu ilişkide kendisinden türetilen sınıfa üst sınıf (parent), ondan türeyen sınıfa ise alt sınıf (child) denir. örneğimizde <strong>Topla_cikar_carp</strong> üst sınıf, <strong>Hesapla</strong> ise alt sınıf olacak.</p>
<h3>örnek kodlarımız</h3>
<p>aşağıdaki örnekte metodların başına özellikle farklı erişim belirleyicileri yazdım. miras alırken hangi metoda nereden ulaşabildiğimizi de aynı örnek üzerinden görelim.</p>
<pre><code class="language-php">&lt;?php
class Topla_cikar_carp
{
    public $sayi1 = 10;
    public $sayi2 = 20;

    public function topla()
    {
        $sonuc = $this-&gt;sayi1 + $this-&gt;sayi2;
        echo "Toplama Sonucu :: " . $sonuc . "&lt;br&gt;";
    }

    private function cikar()
    {
        $sonuc = $this-&gt;sayi1 - $this-&gt;sayi2;
        echo "Çıkarma Sonucu :: " . $sonuc . "&lt;br&gt;";
    }

    protected function carp()
    {
        $sonuc = $this-&gt;sayi1 * $this-&gt;sayi2;
        echo "Çarpma Sonucu :: " . $sonuc . "&lt;br&gt;";
    }
}

class Hesapla extends Topla_cikar_carp
{
    public function toplayi_cagir()
    {
        $this-&gt;topla();
    }

    public function carpmayi_cagir()
    {
        $this-&gt;carp();
    }

    public function karesini_al()
    {
        echo "Birinci sayının karesi :: " . ($this-&gt;sayi1 * $this-&gt;sayi1) . "&lt;br&gt;";
    }
}

$ornek = new Topla_cikar_carp();
echo "1 :: ";
$ornek-&gt;topla();

$ornek2 = new Hesapla();
echo "2 :: ";
$ornek2-&gt;topla();
echo "3 :: ";
$ornek2-&gt;toplayi_cagir();
echo "4 :: ";
$ornek2-&gt;carpmayi_cagir();
echo "5 :: ";
$ornek2-&gt;karesini_al();

// $ornek2-&gt;carp();  // hata: protected metoda dışarıdan ulaşılamaz.
// $ornek2-&gt;cikar(); // hata: private metoda dışarıdan ulaşılamaz.</code></pre>
<p>bu kodun ekran çıktısı aşağıdaki gibi olacaktır.</p>
<pre><code class="language-text">1 :: Toplama Sonucu :: 30
2 :: Toplama Sonucu :: 30
3 :: Toplama Sonucu :: 30
4 :: Çarpma Sonucu :: 200
5 :: Birinci sayının karesi :: 100</code></pre>
<p>burada dikkat ederseniz Hesapla sınıfının içine topla adında bir metod yazmadık. buna rağmen <strong>$ornek2-&gt;topla()</strong> dediğimizde toplama işlemi yapıldı. çünkü Hesapla sınıfını extends ile Topla_cikar_carp sınıfından türettik. sayi1 ve sayi2 özelliklerine de yine bu ilişki sayesinde alt sınıfın içinden ulaşabildik.</p>
<h3>public, protected ve private farkı</h3>
<p><strong>public</strong> olan topla metodunu hem nesne üzerinden dışarıdan hem de alt sınıfın içinden çağırabiliyoruz. toplayi_cagir metodu içinde yaptığımız işlem de bunun bir örneği.</p>
<p><strong>protected</strong> olan carp metodunu ise doğrudan $ornek2-&gt;carp() şeklinde çağıramıyoruz. fakat alt sınıfın içinden $this-&gt;carp() diyerek kullanabiliyoruz. carpmayi_cagir metodunu public yaptığımız için dışarıdan bu metodu çağırıyoruz, o da kendi içinde çarpma işlemini çalıştırıyor.</p>
<p><strong>private</strong> olan cikar metodunda durum farklı. bu metoda sadece tanımlandığı Topla_cikar_carp sınıfının içinden ulaşılabilir. Hesapla sınıfının içine bir metod yazıp oradan $this-&gt;cikar() dememiz de işe yaramaz. yani alt sınıfın içine girince üst sınıftaki bütün kapılar açılmıyor. (çıkarma işlemini de alt sınıfta kullanmak isteseydik erişimini buna göre düzenlememiz gerekirdi.)</p>
<p>kodun en altındaki iki satırı bu yüzden açıklama satırı olarak bıraktım. denemek isterseniz başındaki // işaretlerini birer birer kaldırıp çalıştırın. ikisini birlikte açarsanız ilk hatada program duracağı için diğer satırın sonucunu göremezsiniz.</p>
<p>son olarak karesini_al metodu sadece Hesapla sınıfında bulunuyor. alt sınıfa eklediğimiz bu metod üst sınıfa geri eklenmiş olmaz. dolayısıyla $ornek2-&gt;karesini_al() çalışırken, üst sınıftan oluşturduğumuz $ornek üzerinde aynı çağrı çalışmaz. mirasın hangi yönde olduğunu bu iki nesne üzerinden karşılaştırabilirsiniz.</p>]]></content:encoded>
        </item>
        <item>
            <title>protected erişim belirleyici (özel)</title>
            <link>https://www.yazilimekip.com/protected-erisim-belirleyici-ozel</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/protected-erisim-belirleyici-ozel</guid>
            <pubDate>Mon, 17 Apr 2017 12:44:18 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Protected aslında private ile public arasında bir yerde duruyor. Dışarıya kapalı ama aileye açık diyebiliriz. Aile de extends ile türeyen sınıflar.]]></description>
            <content:encoded><![CDATA[<p><strong>protected erişim belirleyicisi ( özel)</strong></p>
<p>Daha önce <a href="/php-siniflarda-erisim-belirleyicileri">sınıflarda erişim belirleyicileri</a> yazımda 3 adet erişim belirleyicisi olduğundan bahsetmiştik. <a href="/siniflarda-erisim-belirleyicileri-public-erisim-belirleyici-ozelligi">public</a> ve <a href="/siniflarda-erisim-belirleyicileri-private-erisim-belirleyici-ozelligi">private</a> konularını anlatmıştık, bu yazımda ise sonuncusu olan protected erişim belirleyicisini anlatacağım.</p>
<p>protected erişim belirleyicisi kullanılan metod yada özellik</p>
<ul>
<li>sınıf içinden erişilebilir,</li>
<li>sınıf dışından erişilemez,</li>
<li>ve türetilen sınıflardan erişilebilir.</li>
</ul>
<p>olmaktadır.</p>
<p>Yani protected aslında private ile public arasında bir yerde duruyor. Dışarıya kapalı ama aileye açık diyebiliriz. Buradaki aile dediğimiz de extends ile türetilen yani <a href="/siniflarda-miras-alma-extends">miras alan</a> sınıflar oluyor.</p>
<p>yine protected özellikteki metod yada özelliğe sınıf dışından erişebilmek için aynı sınıf içindeki başka bir public metod kullanılmalıdır.</p>
<pre><code class="language-php">class Kase{ // Kaşe sınıfı

protected $isim = "Mustafa YILMAZ"; // Kase sınıfına ait $isim özelliği ( protected görünürlüğüne sahip)

public function yaz(){

echo $this-&gt;isim ."&lt;br&gt;";

}

public function set( $param ){
$this-&gt;isim = $param;
}

}

$ornek = new Kase();

// $ornek-&gt;isim ="Büşra Büş"; // bu satır hata verir.

$ornek-&gt;set("Büşra Büş"); // public olan set() metodu ile değeri değiştiriyoruz.
$ornek-&gt;yaz();</code></pre>
<p>kodların açıklamasını yapacak olursak,</p>
<p>$isim özelliği protected olduğu için sınıf dışından $ornek-&gt;isim diyerek değiştirmeye çalıştığımızda php hata verir. Bu yüzden değeri değiştirmek için public olan set() metodunu, ekrana yazmak için de yine public olan yaz() metodunu kullandık.</p>
<p>Buraya kadar private ile aynı gibi görünüyor değil mi? Asıl fark türetilen sınıfta ortaya çıkıyor. Şimdi Kase sınıfından yeni bir sınıf türetelim.</p>
<pre><code class="language-php">class Imza extends Kase{

public function imzala(){
echo "imza sahibi :: ". $this-&gt;isim ."&lt;br&gt;"; // protected olduğu için erişebiliyoruz
}

}

$ornek2 = new Imza();
$ornek2-&gt;imzala(); // imza sahibi :: Mustafa YILMAZ</code></pre>
<p>Imza sınıfı Kase sınıfından türetildiği için içerisinde $this-&gt;isim diyerek protected olan özelliğe rahatlıkla erişebildik. Eğer $isim özelliği private olsaydı bu kod hata verecekti.</p>
<p>Peki ne zaman protected kullanmalıyız? Bir özelliğin dışarıdan değiştirilmesini istemiyorsanız ama ileride bu sınıftan türeteceğiniz sınıfların o özelliği kullanmasını istiyorsanız protected tam size göre.</p>
]]></content:encoded>
        </item>
        <item>
            <title>private olan metoda sınıf dışından erişim</title>
            <link>https://www.yazilimekip.com/siniflarda-erisim-belirleyicileri-protected-erisim-belirleyici-ozelligi</link>
            <guid isPermaLink="true">https://www.yazilimekip.com/siniflarda-erisim-belirleyicileri-protected-erisim-belirleyici-ozelligi</guid>
            <pubDate>Mon, 17 Apr 2017 12:40:50 +0300</pubDate>
            <dc:creator>Mustafa Yılmaz</dc:creator>
            <description><![CDATA[Evin kapısı kilitli, anahtar ev sahibinde. Siz içeri giremiyorsunuz ama ev sahibine "şunu bana verir misin" diyebiliyorsunuz. İşte public metod.]]></description>
            <content:encoded><![CDATA[<p>Daha önce <a href="/siniflarda-erisim-belirleyicileri-private-erisim-belirleyici-ozelligi">private erişim belirleyicisi</a> yazımda private olan metod yada özelliklere sınıf dışından erişilemediğini söylemiştik. Peki biz yine de bu değeri okumak yada değiştirmek istersek ne yapacağız? Bu yazımda bu sorunun cevabını vermeye çalışacağım.</p>
<p>private olan metoda yada özelliğe sınıf dışından erişim için yine aynı sınıf içindeki başka bir public metod kullanılır.</p>
<p>Mantığı şöyle düşünebilirsiniz; evin kapısı kilitli ve anahtar sadece ev sahibinde. Siz içeri giremiyorsunuz ama ev sahibine "şunu bana verir misin" diyebiliyorsunuz. İşte buradaki ev sahibi bizim public metodumuz oluyor.</p>
<pre><code class="language-php">class Kase{ // Kaşe sınıfı

private $isim = "Mustafa YILMAZ"; // Kase sınıfına ait $isim özelliği ( private görünürlüğüne sahip)

public function yaz(){

echo $this-&gt;isim ."&lt;br&gt;";

}

public function set( $param ){
$this-&gt;isim = $param;
}

}

$ornek = new Kase();

$ornek-&gt;yaz();

// $ornek-&gt;isim="Canan Can"; // bu satır hata verir. $ornek-&gt;isim private (gizli) özelliğine sahip

$ornek-&gt;set("Canan Can");

$ornek-&gt;yaz();</code></pre>
<p>kodların açıklamasını yapacak olursak,</p>
<p>Kase sınıfı içinde private olan $isim özelliğimiz var. Bu özelliğe sınıf dışından $ornek-&gt;isim diyerek ulaşmaya çalışırsak php bize "Cannot access private property" şeklinde bir hata verir.</p>
<p>Bu yüzden sınıf içine iki tane public metod yazdık. yaz() metodu $isim özelliğinin değerini ekrana yazıyor, set() metodu ise kendisine gönderilen parametreyi $isim özelliğine atıyor.</p>
<p>Bu metodlar sınıfın içinde olduğu için private olan $isim özelliğine $this ile rahatlıkla erişebiliyorlar. Biz de dışarıdan bu public metodları çağırarak dolaylı yoldan private özelliğe ulaşmış oluyoruz.</p>
<pre><code class="language-php">// çıktısı
// Mustafa YILMAZ
// Canan Can</code></pre>
<p>Peki bu kadar uğraşmaya ne gerek var, doğrudan public yapsak olmaz mı? diye sorabilirsiniz. Olur ama bu yöntemin bize sağladığı en büyük fayda kontrolün bizde olmasıdır. Mesela set() metodu içine bir kontrol ekleyerek boş isim girilmesini engelleyebiliriz.</p>
<pre><code class="language-php">public function set( $param ){
if ( $param == "" ) {
echo "isim boş olamaz..&lt;br&gt;";
return;
}
$this-&gt;isim = $param;
}</code></pre>
<p>Bu şekilde değer atayan metodlara genelde set (setter), değer okuyan metodlara ise get (getter) metodları denir.</p>
<p><em><strong>private metoda yada özelliğe sadece sınıf içinden erişilebilir.</strong></em></p>
]]></content:encoded>
        </item>
    </channel>
</rss>
