indir.com Yeni Yıl Hediyesi Google Cardboard 3D VR

Gelenekselleşen indir.com yeni yıl hediyeleri, bu sene yine göz kamaştırdı. Yeni yıl hediyeleri gönderilmeden önce Hasan Yaşar Facebook’ta paketlenen kargoların fotoğrafını paylaşınca heyecanlanmaya başladık. Devamını oku »

1and1.com Domain Kaydı ve Transferi Nasıl Yapılır?

logo

Domain kaydını indirimli yapmak isteyenler için godaddy yetersiz geldiyse şimdi yeni bir alternatif var: 1and1.com

Bi süre ücretsiz olarak domain kayıt olanağı sağlayan bu sitede şu an (16 Kasım 2015) domain kayıt ücreti sadece 1$. Devamını oku »

PDO Nedir ve PDO Kullanımı

PDO sürücüsü PHP 5.1.0 sürümünden itibaren etkindir.

php.ini dosyasından aşağıdaki satırı etkin hale getirebilirsiniz.

extension=php_pdo.dll

PDO ile veritabanı bağlantısı nasıl yapılır?

try {
     $db = new PDO("mysql:host=localhost;dbname=deneme;charset=utf8", "deneme", "123");
} catch ( PDOException $e ){
     print $e->getMessage();
}

Try catch kullanmaya yavaş yavaş alışsanız iyi olacak. Try catch nesne yönetimli kod yazmak isteyen kişilerin kullandığı bir yapıdır. Try catch’i hataların raporlanmasında kullanıyoruz.

Bağlantı kodunda charset=utf8 belirttim fakat isteğe bağlı olarak aşağıdaki gibi de kullanabilirsiniz.

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

PDO ile select işlemi

$query = $db->query("SELECT * FROM tablo", PDO::FETCH_ASSOC);
   foreach( $query as $row ){
      echo $row['isim']."<br />";
   }

Yukarıdaki kod’da PDO::FETCH_ASSOC “Yöntemin, sonuç kümesindeki her satırının, sütun isimleriyle indislenmiş bir dizi olarak döndürüleceğini belirtir. Eğer sonuç kümesi aynı isimde birden fazla sütun içeriyorsa her sütun için tek bir değer döner.” işlemini gerçekleştirmektedir.

Eğer bu şekilde değil de tek bir satır çekecekseniz aşağıdaki kodu kullanabilirsiniz.

$query = $db->query("SELECT * FROM tablo WHERE ID = 1")->fetch(PDO::FETCH_ASSOC);
    print_r($query);

Eğer parametreyi dışarıdan alacaksanız kesinlikle aşağıdaki kodu kullanmanızı öneririm, çünkü sql injection açığına tam manasıyla bir güvenlik sağlamaktadır.

$sql= "SELECT * FROM tablo WHERE ID = :tabloID";
$query = $db->prepare($sql);
$query->bindParam(':tabloID', $tabloID, PDO::PARAM_INT);
$sonuc = $query->execute();

Tabi bu kodda integer değer aldık, peki ya string değer alsaydık? Bu sefer de bindParam kısmında aşağıdaki kodu kullanacaktık.

$query->bindParam(':isim', $isim, PDO::PARAM_STR);

PDO ile insert işlemi

Bu aşamayı yine prepare kullanarak yapacağız.

$sql = "INSERT INTO tablo (isim,yaz,) VALUES (:isim,:yazi)";
$query = $db->prepare($sql);
$sonuc = $query->execute(array(':isim'=>$isim,':yazi'=>$yazi));

PDO ile update işlemi

Yine yukarıdaki prepare ile yapacağız, fakat bu sefer değişik bir yol göstermek istiyorum.

$sql = "UPDATE tablo SET isim=?, yazi=? WHERE id=?";
$query = $db->prepare($sql);
$sonuc = $query->execute(array($isim,$yazi,$id));

PDO ile delete işlemi

insert ve update kodlarında kullandığımızın aynısı aslında, sadece örnek olsun diye ekliyorum.

$sql = "DELETE tablo WHERE id=?";
$query = $db->prepare($sql);
$sonuc = $query->execute(array($id));

PDO sonuç kontrolü

Yukarıdaki kodlarda $query->execute kısmına bir değişkene atadım, sizde if ile aşağıdaki gibi işlemin başarılı olup olmadığını görebilirsiniz.

if($sonuc)
   echo "Execute işlemi başarılı.";

PDO bağlantı sonlandırma

İşimiz bittiğinde bağlantılarımızı sonlandırmamız lazım. Bunun için de aşağıdaki kodu kullanabilirsiniz.

$db = null;

PDO count_row işlemi

Tüm verilerin kaç tane olduğunu saymak için aşağıdaki kodu kullanırız.

$toplam = $query->rowCount();

Ödev İçin Php Kategorili Haber Sitesi

Yakın bi akrabanın php ödevini beraber yaparken geliştirdiğimiz siteyi yeni başlayanlara yol göstermesi açısından paylaşıyorum.

Öncelikle bir index.php ve duygu.css dosyası oluşturduk.

index.php dosyası:

/*
 * Dosyalar klasöründen baglanti.php dosyasını
 * olduğu gibi bu sayfaya ekliyorum
 * baglanti.php dosyasında veritabanı bilgileri yer almaktadır.
 */
require_once 'dosyalar/baglanti.php';
?><!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    <title>Duygu</title>
    <link href="duygu.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <?php
    include 'dosyalar/ust.php';
    ?>
    <table cellpadding="4" cellspacing="0" class="ustmenutable">
        <tr>
            <td id="altkisimtd" >
                <table>
                    <tr>
                        <td id="sitesol" valign="top">
                            <?php
                            include 'dosyalar/sol.php';
                            ?>
                        </td>
                        <td id="sitesag" valign="top">
                            <div class="ortahaberler">
                                <?php
                                $sonuc = mysql_query("select * from haberler order by id desc Limit 0,5");
                                $habersay = mysql_num_rows($sonuc); //Haberleri sayar
                                if ($habersay != 0) {
                                    while ($oku = mysql_fetch_array($sonuc)) {
                                        echo "<h1><a href='yazi.php?id=" . $oku["id"] . "'>" . $oku["baslik"] . "</a></h1>";
                                        echo "<div class='habericerik'>" . substr($oku["yazi"], 0, 255) . "... <a href='yazi.php?id=" . $oku["id"] . "'>Devamını Oku</a></div>";
                                    }
                                } else {
                                    echo "<li>Hic haber yok!</li>";
                                }
                                ?>
                            </div>
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>
    <?php
    include_once 'dosyalar/alt.php';
</body>
</html>

Duygu.css dosyasının içeriği:

body{
    font-family: arial;
    font-size: 10pt;
    background-color: #993300;
    color: #ffffff;
}
a{
    color: #993300;
    text-decoration: none; //Alt çizgiyi kaldır
}
a:hover{
    color: #7c0000;
    text-decoration: underline; //altını çizer
}
.ustmenutd a{
    font-weight: bold;
    font-size: 12pt;
    color: #ffffff;
}
.ustmenutd a:hover{
    color: #bdbdbd;
}
.ustmenutable{
    width: 900px;
}
.ustmenutd{
    width: 170px;
    background-color: #468b28;
    color: #ffffff;
    text-align: center;
}
.ustmenutd:hover{
    background-color: #224114;
}
#altkisimtd{
    background-color: #ffffff;
    color:#000000;
}
#sitesol{
    width: 300px;
    border-right: 1px solid #000000; //hücrenin sağına çizgi çekmek için
    vertical-align: baseline; //yazıları yukarda tutmak için
}
#sitesag{
    padding-left: 10px;
    width: 590px;
    vertical-align: baseline; //yazıları yukarda tutmak için
}
h1{
    font-size: 13pt;
    margin-top: 6px; //Tepeden 6 pixel boşluk bıraktık
}
.ortahaberler{
    border-bottom: 1px dotted #525252;
}
.habericerik{
    padding-bottom: 5px;
}

Demo

Diğer tüm dosyalar için tıklayınız.

Php Recursive ile Sonsuz Alt Kategori

Elimizde aşağıdaki gibi bi dizi var ve biz bunu recursive ile derin kategori haline getirmek istiyoruz.

Kendi kendisini doğrudan veya dolaylı olarak çağıran fonksiyonlara özyineli (recursive) fonksiyonlar adı verilir.

Derin kategori yani sonsuz alt kategori mantığına göre çalışma yapmak için, bir tane ekstra sütun oluşturuyoruz tablomuza ve bunun adına üst diyoruz, bu sütunda üst kategorinin id’sini yayınlıyoruz.

Array
(
    [5] => Array
        (
            [id] => 5
            [isim] => Citroen
            [ust] => 0
            [altkategori] => Array
                (
                    [6] => Array
                        (
                            [id] => 6
                            [isim] => Citroen Jumper
                            [ust] => 5
                            [altkategori] => Array
                                (
                                    [7] => Array
                                        (
                                            [id] => 7
                                            [isim] => Citroen Jumpy
                                            [ust] => 6
                                            [altkategori] => Array
                                                (
                                                )

                                        )

                                )

                        )

                    [8] => Array
                        (
                            [id] => 8
                            [isim] => Berlingo
                            [ust] => 5
                            [altkategori] => Array
                                (
                                )

                        )

                    [9] => Array
                        (
                            [id] => 9
                            [isim] => C1
                            [ust] => 5
                            [altkategori] => Array
                                (
                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 1
            [isim] => Peugeot
            [ust] => 0
            [altkategori] => Array
                (
                    [4] => Array
                        (
                            [id] => 4
                            [isim] => Peugeot Boxer
                            [ust] => 1
                            [altkategori] => Array
                                (
                                )

                        )

                    [2] => Array
                        (
                            [id] => 2
                            [isim] => Peugeot Partner
                            [ust] => 1
                            [altkategori] => Array
                                (
                                )

                        )

                    [3] => Array
                        (
                            [id] => 3
                            [isim] => Peugeot Partner Tepee
                            [ust] => 1
                            [altkategori] => Array
                                (
                                )

                        )

                )

        )

)

Şimdi de bu döngüyü yayınlamaya geçiyoruz.

                echo rec($kategoriler);

                function rec($kategoriler) {
                    $sonuc = "<ul>\n";
                    foreach ($kategoriler as $goster) {
                        $sonuc .= '<li><a href="' . site_url('kategori/' . $goster["id"] . '/' . sef_link($goster["isim"]) . '.html') . '">';
                        $sonuc .= '' . $goster["isim"] . '</a></li>';
                        $sonuc .= "\n";
                        if (!empty($goster["altkategori"]))
                            $sonuc .= rec($goster["altkategori"]);
                    }
                    $sonuc .= "</ul>\n";
                    return $sonuc;
                }

Düzenleme 1:
Şimdi bunu bir de select option içerisinde nasıl döndüreceğimize bakalım.

                            function rec($kategoriler, $ust, $tire) {
                                foreach ($kategoriler as $goster) {
                                    if ($goster["ust"] == 0) {
                                        $tire = 0;
                                    }
                                    if ($ust != $goster["ust"]) {
                                        $ust = $goster["ust"];
                                        $tire++;
                                    }
                                    $sonuc .= '<option>' . str_repeat('--', $tire) . $goster["isim"] . '</option>';
                                    $sonuc .= "\n";
                                    if (!empty($goster["altkategori"]))
                                        $sonuc .= rec($goster["altkategori"], $ust, $tire);
                                }
                                $sonuc .= "\n";
                                return $sonuc;
                            }

Yukarıdaki kod içerisinde üst kategorisi arttıkça tire işareti koyduk, kodu detaylı incelediğinizde ayrımı kolayca yapabileceksiniz.

Web Tabanlı Fihrist Programı

Daha önce geliştirdiğimiz nüans web tabanlı crm programı istek doğrultusunda fihrist programına dönüştürülmüştür.

fb-logo

Nüans Yazılım tarafından desteklenen programda bir çok özellikte kişi bilgileri tutulmaktadır. Datatable ile hızlı arama ve akıllı sırama özelliği bulunmaktadır. (ortalama arama süresi 0.012 saniye) Devamını oku »

Codeigniter Parser stdClass Sorunu

Codeigniter parser library kullanırken aldığım hatanın çözümünü sizinle de paylaşmak istiyorum.

Parser yaparken stdclass string ifadeye çevrilmediği için arıza veriyor. Devamını oku »

Nüans Web Tabanlı CRM Programı

Nüans yazılım bünyesinde geliştirdiğim CRM programı hakkında detaylı bilgiler vermek istiyorum.

Bu yazılımı geliştirirken php tabanlı kullanışlı framework olan Codeigniter kullandım, arayüz tasarımını ise themeforest üzerinden satın aldık.

CRM ‘in açılımı “Customer Relationship Management” yani müşteri ilişkileri yönetimi. Kurum veya işletme müşterileriyle olan ilişkilerini, tüm işlerini koordine etmesini sağlayan uygulamaların bütünüdür.

Data mining (Veri madenciliği) ile satışlarını ve kar oranlarını artırabilirler, bunu da CRM programına eklenen veriler ile sağlayabilirler.

fb-logo

CRM programının web tabanlı olması, her yerden erişim imkanı olmasını sağlar, sahada bulunan şantiye şefi telefonundan programa girerek gerekli bilgileri görebilir veya yeni veri ekleyebilir. Bu nedenle web tabanlı olarak CRM programı geliştirmeye karar verdik. Devamını oku »

Mysql Left Join ile Count ve SUM Kullanmak

Başlık çok acayip oldu ama yapmak istediğimizden kısaca bahsedebilirim.

İki tane tablom var birinde firmalar diğerinde verilen servisler. Firmalara ait servisler giriliyor, bana lazım her firmaya ne kadar servis verilmiş ve toplam ne kadar servis vermişim.
Servisleri count ile saydırdım, tarih ve saat farklı sütunlardaydı CONCAT ile birleştirdim, TIMESTAMPDIFF ile dakika olarak farkı aldım, SUM ile de tüm dakikaları topladım, COALESCE ile toplam değer NULL ise 0 yazdırdım.
GROUP BY ile gruplayarak sadece firmalara göre işlem yaptırdım. 

Öyle işte…

İşte o kod:

SELECT
COUNT(servis.firmaid) as servissayisi, 
COALESCE(SUM(TIMESTAMPDIFF(MINUTE, CONCAT(servis.giristarih," ",servis.girissaat), CONCAT(servis.cikistarih," ",servis.cikissaat))),0) as toplamsure,
firma.id as firmaaid, firma.isim,firma.yetkili,firma.telefon1,firma.telefon2,firma.ilce,firma.sehir
FROM firma LEFT JOIN servis ON firma.id=servis.firmaid
GROUP BY firma.id
ORDER BY servissayisi DESC

edit: COALESCE(sum(…),0) ile NULL değeri 0 olarak yazdırdım.

MongoDB ve PHP Tarih işlemleri

Belirli bir formatta tarih gösterme;

date('d M Y h:i:s', $obj["tarih"]->sec)

Tarih Aralığına Göre İçerik Çekme

$dbhost = 'localhost';
$dbname = 'newDB';
$m = new Mongo("mongodb://$dbhost");
$con = $m->$dbname->yazi;

$baslama 	= new MongoDate(strtotime("2013-05-25 00:00:00"));
$bitis 		= new MongoDate(strtotime("2013-05-27 00:00:00"));

$goster = $con->find(array("tarih" => array('$gt' => $baslama, '$lte' => $bitis)));
	foreach($goster as $obj){
		echo date('d M Y h:i:s', $obj["tarih"]->sec) ."
";
		}

Detaylı olarak php.net üzerinden inceleyebilirsiniz http://us1.php.net/manual/en/class.mongodate.php

« Daha eski yazılar


Kategoriler