3 Aralık 2013 Salı

Javascript Browser Selector

Bu derste html tagına browser, işletim sistemi özelliklerinin classını yazdıracağız. Html tagına  browser ve işletim sistemi class ı ekleyerek tarayıcı farklılıklarını css ile önleyebiliriz.


var App: {
     detectBrowser: function() {
        function css_browser_selector(n) {
            var b = n.toLowerCase(),
                    f = function(c) {
                        return b.indexOf(c) > -1;
                    },
                    h = "gecko",
                    k = "webkit",
                    p = "safari",
                    j = "chrome",
                    d = "opera",
                    e = "mobile",
                    l = 0,
                    a = window.devicePixelRatio ? (window.devicePixelRatio + "").replace(".", "_") : "1";
            var i = [(!(/opera|webtv/.test(b)) && /msie\s(\d+)/.test(b) && (l = RegExp.$1 * 1)) ? ("ie ie" + l + ((l == 6 || l == 7) ? " ie67 ie678 ie6789" : (l == 8) ? " ie678 ie6789" : (l == 9) ? " ie6789 ie9m" : (l > 9) ? " ie9m" : "")) : (/trident\/\d+.*?;\s*rv:(\d+)\.(\d+)\)/.test(b) && (l = [RegExp.$1, RegExp.$2])) ? "ie ie" + l[0] + " ie" + l[0] + "_" + l[1] + " ie9m" : (/firefox\/(\d+)\.(\d+)/.test(b) && (re = RegExp)) ? h + " ff ff" + re.$1 + " ff" + re.$1 + "_" + re.$2 : f("gecko/") ? h : f(d) ? d + (/version\/(\d+)/.test(b) ? " " + d + RegExp.$1 : (/opera(\s|\/)(\d+)/.test(b) ? " " + d + RegExp.$2 : "")) : f("konqueror") ? "konqueror" : f("blackberry") ? e + " blackberry" : (f(j) || f("crios")) ? k + " " + j : f("iron") ? k + " iron" : !f("cpu os") && f("applewebkit/") ? k + " " + p : f("mozilla/") ? h : "", f("android") ? e + " android" : "", f("tablet") ? "tablet" : "", f("j2me") ? e + " j2me" : f("ipad; u; cpu os") ? e + " chrome android tablet" : f("ipad;u;cpu os") ? e + " chromedef android tablet" : f("iphone") ? e + " ios iphone" : f("ipod") ? e + " ios ipod" : f("ipad") ? e + " ios ipad tablet" : f("mac") ? "mac" : f("darwin") ? "mac" : f("webtv") ? "webtv" : f("win") ? "win" + (f("windows nt 6.0") ? " vista" : "") : f("freebsd") ? "freebsd" : (f("x11") || f("linux")) ? "linux" : "", (a != "1") ? " retina ratio" + a : "", "js portrait"].join(" ");
            if (window.jQuery && !window.jQuery.browser) {
                window.jQuery.browser = l ? {
                    msie: 1,
                    version: l
                } : {};
            }
            return i;
        }
        (function(j, b) {
            var c = css_browser_selector(navigator.userAgent);
            var g = j.documentElement;
            g.className += " " + c;
            var a = c.replace(/^\s*|\s*$/g, "").split(/ +/);
            b.CSSBS = 1;
            for (var f = 0; f < a.length; f++) {
                b["CSSBS_" + a[f]] = 1;
            }
            var e = function(d) {
                return j.documentElement[d] || j.body[d];
            };
            if (b.jQuery) {
                (function(q) {
                    var h = "portrait",
                            k = "landscape";
                    var i = "smartnarrow",
                            u = "smartwide",
                            x = "tabletnarrow",
                            r = "tabletwide",
                            w = i + " " + u + " " + x + " " + r + " pc";
                    var v = q(g);
                    var s = 0,
                            o = 0;
                    function d() {
                        if (s != 0) {
                            return;
                        }
                        try {
                            var l = e("clientWidth"),
                                    p = e("clientHeight");
                            if (l > p) {
                                v.removeClass(h).addClass(k);
                            } else {
                                v.removeClass(k).addClass(h);
                            }
                            if (l == o) {
                                return;
                            }
                            o = l;
                        } catch (m) {
                        }
                        s = setTimeout(n, 100);
                    }
                    function n() {
                        try {
                            v.removeClass(w);
                            v.addClass((o <= 360) ? i : (o <= 640) ? u : (o <= 768) ? x : (o <= 1024) ? r : "pc");
                        } catch (l) {
                        }
                        s = 0;
                    }
                    if (b.CSSBS_ie) {
                        setInterval(d, 1000);
                    } else {
                        q(b).on("resize orientationchange", d).trigger("resize");
                    }
                })(b.jQuery);
            }
        })(document, window);

    }
};

App.detectBrowser();

19 Haziran 2013 Çarşamba

MongoDB de PHP ile Kayıt Listeleme

merhaba. Önceki derste mongolab a kayıt ekleme işlemi yapmıştık.

Şimdi ise tüm kayıtları listeleyeceğiz.


Liste fonksiyonu:

function listItem($collection) {
       $cursor = $collection->find();
       return $cursor;
 }



list.php sayfası:

if($_REQUEST) {
   
    include "db.php";
   
    $db = new DB();
    $collection = $db->connectDB();
    $array = $db->listItem($collection);
   
    foreach ($array as $k => $v) {
      if(is_array($v)) {
        foreach ($v as $key => $val) {
            if(is_array($val)) {
                echo $key."<br />";
                foreach ($val as $kk => $vv) {
                    echo "&emsp;".$kk. ' : '. $vv.'<br />';
                }
            } else
          echo $key. ' : '. $val.'<br />';   
        }
      }
      else echo ' - - - - '. $k. ' - '. $v;
      echo "<br /><br />";
    }   
}



ve html sayfası:

<form action="list.php" method="post">
     <input type="submit" name="listele" value="Kayıtları Listele" />
</form>



4 Haziran 2013 Salı

MongoDB de PHP ile Kayıt Ekleme

Bir önce dersimizde mongolab.com dan bahsetmiştik ve veritabanı oluşturmuştuk.

Bu dersimizde ise PHP ile Mongolab.com da oluşturduğumuz MongoDB veritabanına  veri kaydedeceğiz.

Sayfaları oluşturmaya başlayabiliriz.

db.php sayfamız:

<?php

    class DB {
       
        private $dbusername =""; // Veritabanı kullanıcı adı
        private $dbpass = "";   // Veritabanı şifresi
        private $dbname = "";  // Veritabanı adı
        private $dbcollection= "";  // Collection adı
       
        function connectDB() {
            $url = "mongodb://".$this->dbusername.":".$this->dbpass."@ds027348.mongolab.com:27348/".$this->dbname;
            //echo $url;
            try {
                $conn = new Mongo($url);
                $dbbname = $conn->selectDB($this->dbname);
                $collection = $dbbname->selectCollection($this->dbcollection);
               
                return $collection;
            } catch(MongoConnectionException $e) {
                die ("Baglanti kurulamadi".$e->getMessage());
            }
        }
        

    // Ekleme Fonksiyonu
        function addItem(array $arr, $collection) {
            $result = $collection->insert($arr);
           
            if($result) {
                echo "Eklendi";
            } else {
                echo "bir sorun olustu";
            }
        }
    }
?>




Şimdi de form sayfasını hazırlayalım.

<form action="insert.php" method="post">
                   
                    <table>
                        <tr>
                            <td>Ad</td>
                            <td>:</td>
                            <td><input type="text" name="ad" /></td>
                        </tr>
                        <tr>
                            <td>Soyad</td>
                            <td>:</td>
                            <td><input type="text" name="soyad" /></td>
                        </tr>
                        <tr>
                            <td>Doğum Tarihi</td>
                            <td>:</td>
                            <td><input type="text" name="dogum_tarihi" /></td>
                        </tr>
                        <tr>
                            <td>Cinsiyet</td>
                            <td>:</td>
                            <td>
                                <input type="radio" name="cinsiyet" value="E" /> Erkek
                                <input type="radio" name="cinsiyet" value="K" /> Kadın
                                <input type="radio" name="cinsiyet" value="EC" /> Eşcinsel
                            </td>
                        </tr>
                        <tr>
                            <td>Ülke</td>
                            <td>:</td>
                            <td>
                                <select name="ulke">
                                    <option value="TR">Türkiye</option>
                                    <option value="DE">Almanya</option>
                                    <option value="FR">Fransa</option>
                                    <option value="CA">Kanada</option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td>Hobiler</td>
                            <td>:</td>
                            <td>
                                <input type="checkbox" name="hobi[]" value="Yüzmek" /> Yüzmek
                                <input type="checkbox" name="hobi[]" value="Kitap okumak" /> Kitap Okumak
                                <input type="checkbox" name="hobi[]" value="Dans Etmek" /> Dans Etmek
                                <input type="checkbox" name="hobi[]" value="Gitar Çalmak" /> Gitar Çalmak
                            </td>
                        </tr>
                        <tr>
                            <td></td>
                            <td></td>
                            <td>
                                <input type="submit" name="kaydet" value="Kaydet" />
                            </td>
                        </tr>
                    </table>
                   
                </form>




ve insert.php sayfamız:

$ad= $_POST['ad'];
    $soyad= $_POST['soyad'];
    $dogum_tarihi= $_POST['dogum_tarihi'];
    $cinsiyet= $_POST['cinsiyet'];
    $ulke= $_POST['ulke'];
    $hobi = implode(",", $_POST['hobi']);
   
    $document = array ("names:" => array ( "first" => $ad, "soyad" => $soyad), "dogum_tarihi" => $dogum_tarihi, "cinsiyet" => $cinsiyet, "ulke" => $ulke, "hobi" => $hobi );

    include "db.php";
   
    $db = new DB();
   
    $collection = $db->connectDB();
      
    $db->addItem($document, $collection);












MongoLab Kullanımı

MongoLab, MongoDB veritabanı, otomatik yedekleme, web tabanlı araçları, 7/24 izleme, uzman desteği içeren ve tam yönetilen bulut veritabanı hizmetidir. Heroku kullanıcılar ürün geliştirme yerine faaliyetleri üzerinde dikkatini çekmek için ücretsizdir. 500 mb ücretsiz bir alan sağlamaktadır. Heroku kullanıcılar uygulamalarını bu alanda test edebilirler.


MongoDB Veritabanı Oluşturma

MongoLab kullanıcı oluşturup giriş yaptığınızda veritabanı eklemek için bir pencere geliyor. Buradan "Create New" i tıklıyoruz.







Gelen pencereden veritabanı ismi, barındırılacak yeri (ben amazon u seçtim. Diğerleri ücretsiz mi hiç denemedim.), paketlerden ücretsiz olanı (sandbox u) seçiyoruz.






Bunları seçtikten sonra veritabanı yetkisi için kullanıcı adı ve şifre kısımları oluyor. Onları da yazıyoruz ve "Create Database" butonuna basıldığında ücretsiz veritabanımız oluşturulmuş oluyor.








Veritabanımıza tıkladığımızda, veritabanı ile ilgili collection, kullanıcılar, durum, yedekleme, araçlar ve dış kaynaklardan bağlanmak için bağlantı adresleri çıkıyor.





Veritabanına dışarıdan bağlanmak için konsol ve url olmak üzere 2 farklı şekil var. Siz her ikisini de kullanabilirsiniz.


Yeni collection eklemek için "Add" butonuna tıklayınız.

Açılan popup dan adını yazıyorsunuz. Dilerseniz dosya boyutu da verebilirsiniz. Default 8 kb dır.



3 Haziran 2013 Pazartesi

XAMPP PHP ye MongoDB kurulumu


https://github.com/mongodb/mongo-php-driver/downloads

Buradan güncel sürümünü indiriniz. Ben php_mongo-1.3.2RC1.zip sürümünü indirmiştim.

İndirdiğiniz zip i açın ve  php_mongo-1.3.2RC1-5.4-vc9.dll dosyasını c:/xampp/php/ext  içine kopyalayın.

php.ini dosyasını açıp  extension=php_mongo-1.3.2RC1-5.4-vc9.dll satırını ekleyin.

Daha sonra apache servisini yeniden başlatın.

Localhostu çalıştırıp phpinfo() yu açtığınızda görünmesi gerekiyor.






Eğer görünmüyorsa farklı bir dll dosyası deneyiniz. Ben windows 7 64bit sürümünde denemiştim.

Test etmek için de;

- mongodb yi başlatın. 

- php dosyanızı şu şekilde ayarlayın.

<?php
   
    $connection = new Mongo();
   
    if($connection) {
        echo "baglandi";
    } else {
        echo "baglanilamadi!";
    }
   
?>



MongoDB - Delete İşlemleri

Delete() işleminin söz dilimi şu şekildedir.

db.collection.remove( <query>, <justOne> )

justOne: Argüman bool değer alır ve LIMIT 1 ile aynı etkiye sahiptir.


remove() metodunda  sorguda eşleşen tüm belgeleri siler.

Örnek: 

db.example.remove(
    {
        _id:1
    }
)



Eğer <justOne> değeri belirtirseniz, eşleşen koleksiyonda sadece bir kaydı siler.

Örnek: 

db.example.remove(
    {
        age:24
    },
    1
)



Eğer remove() metodunda <query> kullanmazsanız dökümanı siler.

Örnek: 

 db.example.remove()   // example dökümanı siliniyor..








31 Mayıs 2013 Cuma

MongoDB - Update İşlemleri



update() yöntemi, MongoDB belgelerini değiştirmek için kullanılan birincil yöntemdir. Güncelleme collection da sorgu kriterlere uyan tüm belgeleri güncelleyebilirsiniz.

Kullanımı ise şöyledir:

db.collection.update( <query>, <update>, <options> )

<query> : Sorgu, sql de wWHERE deyimine karşılık gelir. 

<update> : Değişitirilecek kayıtlar, sql de SET deyimine karşılık gelir.


$set ifadesi 

Bir kaydın değerinin güncellenmesi için kullanılır. 

Örnek

> db.example.update (
    { _id : 4 },
    {  $set:
        {
            'age' : 23
        }
    }
)


Update işlemi, belgeye yeni alanlar eklemenizi de sağlar. Yani update işleminde hem istenilen alan güncellenir hem de belgeye yeni alanlar da ekleyebilirsiniz.

Örnek: 

> db.example.update (
    { _id : 4 },
    {  $set:
        {
            'country' : 'Turkey',
            'age' : 25
        }
    }
)


$unset ifadesi 

update(), $unset operatörünü içeriyorsa belgeden alanı kaldırır. Yani bir alanı kaldırmak istiyorsak $unset ifadesini kullanabiliriz. 

Örnek: 

> db.example.update(
    { _id : 4 },
    {  $unset:
        {
            'country' : 'Turkey'
        }
    }
)


Konum belirterek element güncelleme

Güncelleştirme işlemi bir dizi alanında bir elemanın güncelleştirilmesi gerekiyorsa , elemanın konumu kullanılarak güncelleme yapılabilir.

Örnek olarak şöyle bir belge ekleyelim: 

> db.ex.insert (
    {
        _id :1,
        name : { first: 'Aaa', last: 'AAA'},
        age: 23,
        tags : ['JAVA', 'HTML', ' JQUERY', 'CSS'],
        awards: [
            {
                "award" : "Onur Belgesi",
                "year" : 2004,
                "by" : "Lise 2"
            },
            {
                "award" : "Okul Birinciligi",
                "year" : 2006,
                "by" : "Lise 4"
            },
            {
                "award" : "Mezuniyet Derecesi",
                "year" : 2010,
                "by" : "Universite"
            }
        ]
      
    }
)


Şimdi ise tags'daki 'HTML' olan veriyi pozisyon yonetimi ile 'HTML5' olarak güncelleyeceğim. 

> db.ex.update(
    { _id : 1},
    {
    $set :
        {
            'tags.1': 'HTML5'
        }
    }
)

Programlama dilinde arraylarda index 0 dan başladığı için, üstteki örnekte "tags.1" deki 1 index i, "HTML" verisini işaret etmektedir.


Konumu bilinmeyen elementin güncellenmesi 

Eger konumu bilinmiyorsa, pozisyon operatörü ($) kullanılarak güncelleme yapılabilir.  Alanın güncellenmesi için, güncellenecek eleman değerinin sorgu alanında olması gerekiyor.

Örnek

> db.ex.update(
    {
        _id : 1,
        'tags': 'CSS'
    },
    {
    $set :
        {
            'tags.$': 'CSS3'
        }
    }
)



Konumu bilinmeyip aynı hizada olan elementin güncellenmesi

eger güncellenecek bir array içindeyse ve konumu bilinmiyorsa; güncellenecek alan sorguda eklenir, güncellenecek kısmı da belgenin alt alanı ( "awards.$.by" gibi ) yazılarak yeni değer eklenir.

Örnek

> db.ex.update(
    {
        _id : 1,
        'awards.by': 'Lise 4'     // Eski değer
    },
    {
    $set :
        {
            'awards.$.by': 'Lise 3'    // Yeni değer
        }
    }
)

Çoklu döküman güncelleme

update() operatörünün multi özelliği true ya da 1, sorgu sonucunda eşleşen tüm belgeler güncellenir. 

Örnek

db.bios.update(
   { 'awards.award': 'Turing' },
   { $set: { turing: true } },
   { multi: true }
)