Kategoriler
mysql hakkında Öylesin Esti Php ve mysql Programlama Dilleri Webmaster yardım

PDO ve mysql işlemleri – [Başlangıç ve orta düzey] : Ekleme, silme, güncelleme, listeleme, bağlanma

PDO: gelişmiş veri tabanı yönetimi eklentisidir. Php nin yeni versiyonları ile hayatımıza girmeye başlayan bu uygulama bir çok veritabanını destekliyor. Böylece veritabanı modeli değiştirmek zorunda kaldığımızda php kodlarımızı silbaştan tekrar değiştirmek zorunda kalmayacağız. Çünkü PDO ile hazırlanan sorgu cümlecikleri desteklenen bütün veritabanı modellerinde geçerli olacak. size sadece başlangıç bağlantı sorgusunuz düzeltmek kalıyor.

PDO’nun desteklediği veri tabanı modelleri:
Cubrid
FreeTDS / Microsoft SQL Server / Sybase
Firebird/Interbase 6
IBM DB2
IBM Informix Dynamic Server
MySQL 3.x/4.x/5.x
Oracle Call Interface
ODBC v3 (IBM DB2, unixODBC and win32 ODBC)
PostgreSQL
SQLite 3 and SQLite 2
Microsoft SQL Server / SQL Azure

Php geliştiricileri artık php ve veritabanı programcılarına PDO yapısına geçmeleri konusunda tavsiyelerde bulunuyorlar. Ciddi anlamda da ilerleyen yıllarda PDO yapısının artık eski sistemlerin yerini alacağını düşünüyorum. Her şekilde öğrenmesi zor ve hantal sorgulardan bizi kurtaran yeni PDO programı Türk gençleri tarafından da bir an önce benimsenmeli ve kullanılmaya başlanmalı.

PDO ilk başlarda size zor gelebilir ancak sonrasında öğrendikçe zevkli olduğunu ve programlamasının kolaylığı ile heycanlandığınızı göreceksiniz. 3-4 ay önce PDO sistemine geçmek istediğimde düzgün bir anlatım bulamamıştım. Henüz 2 hafta falan oldu hobi amaçlı başladığım PDO uygulamasına yönelik tecrübelerimi yeni ve bunu öğrenmek isteyen kişilerle paylaşacağım.

Tavsiye: Bu konuda dökumanlardan çok sizin konuyu ne kadar öğrenmek istediğiniz önemlidir. Bilgisayarınızda bir localhost kurarak test ortamı hazırlayın. Hataları, doğruları test ederek gördüğünüzde öğrenmek dahada kolaylaşacaktır.

PDO konusunda şuan için başlangıç ve orta seviyesindeki konulara yer vereceğim. Aşağıdaki dökumanda yer vermediğim bir çok parametrede olacaktır. bunlara zamanım olduğunda yer vereceğim. Şuan için orta derece bir bilgiye bu dökuman ile ulaşabileceksiniz. Sonrasında zaten kendiliğinden yeteneğiniz artacaktır.

Öncelikle veritabanı bağlantı kod parçacığımızı ele alıp bağlantıyı sorunsuz gerçekleştirelim.

PDO Mysql veri tabanı bağlantısı

	<?php
	$host = "localhost";
	$dbismi = "test"; // Database ismi
	$dbkullanici = "root"; // Database kullanici adi
	$dbsifre = ""; // Kullanici sifresi

	try {
		$dbpdo = new PDO("mysql:host={$host};dbname={$dbismi}", $dbkullanici, $dbsifre, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
		$dbpdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
	} catch (PDOException $e) {
		return 'Baglanti hatasi '. $e->getMessage();
	}
	/* basit select kodu */
	$as = $dbpdo->query('SELECT * FROM galeriler');

	foreach($as as $row) {
	echo $row["ismi"]."<br>";
	}
?>

PDO php’nin yan uygulaması olarak geliyor. bazı sunucularda aktif edilmemiş olabilir. Apacheyi derlerken pdo bölümünüde seçemniz gerekli, bunun yanında mysql ve php ilişiğini sağlayan diğer yan uygulamalarıda seçmeniz gerekli (şuan isimleri aklımda değil :=)). Ayrıca PDO phpnin 5.1.x versiyonu dahil yeni sürümlerinde desteklenmektedir. Eski versiyon php programınız varsa güncellemenizi öneririm..

PDO::QUERY Mysql Select komutu

Select komutunu 2 ayrı başlıkta inceleyeceğiz arkadaşlar. İlki tek veriyi, tabloyu çekerek işlem yapma, diğeri ise birden fazla sonucu foreach yada while ile işleme alma. Yeni başlayanların yada yanlış bilenlerin ve daha hızlı hafif sorgular oluşturabilmeniz için gerekli olan PDO parametrelerinede bildiğim kadarıyla yer vermeye çalışacağım.

1 – Tek veri işleme:

Sorgumuz aşağıdaki gibi olacaktır:

$veri = $dbpdo->query('SELECT * FROM galeriler WHERE id = 3');
$veri = $veri->fetch(PDO::FETCH_ASSOC);

print_r($veri);
/*
Çıktı bu şekilde olur:

Array ( 
[id] => 3 
[ismi] => Backgrounds 
[aciklama] => Background displays can bring your computer screen to life. 
[userid] => 20 
)
*/

echo $veri["ismi"]; /* çıktı: Backgrounds */

Bazı arkadaşlar direk fetch() diğer kullanıyor ancak bu yanlıştır. parantezler arasına PDO parametlerini koyarak size en uygun veri biçimini çekerseniz gereksiz gelecek verilerden ve harcanacak zamandan kurtulursunuz. Bu alanda kullanabileceğiniz PDO parametlerine kısa bir göz atalım:

PDO::FETCH_ASSOC: veriyi stun ismi ile çeker. Örnek:

Array
(
    [ismi] => Backgrounds
    [aciklama] => fisfisda fisfis
)

PDO::FETCH_BOTH: Veriyi karşık çeker, yani hem stun ismiyle hemde sayısal değeri ile karışık iki bölüm işler. Eğer boş bırakırsanız bu kısım default olarak işleme alınacaktır. Eğer sadece stun ismiyle iş yapacaksanız yukarıdaki parametreyi kullanız, aksi taktirde fazladan veri ile belleği şişirmiş oluruz. bu veri her ne kadar küçük olsada çok büyüyecek bir sitede ilerde kendini hissetirmeye başlayacaktır. bu parametre sonucunda oluşacak array diziside bu şekilde:

Array
(
    [ismi] => Backgrounds
    [0] => Backgrounds
    [aciklama] => fisfisda fisfis
    [1] => fisfisda fisfis
)

Sonraki parametreleri tam olarak bilmiyorum ama üzerinden geçmekte fayda var.

PDO::FETCH_LAZY: Sonuçları array yerine PDORow Object yöntemi ile listeliyor, sorgu parametresinide queryString ismine atıyor. php.netdeki açıkmalası: Her özelliğin bir sütun ismine denk düştüğü bir anonim nesne olarak. Örnek çıktı aşağıdaki gibidir:

PDORow Object ( 
[queryString] => SELECT * FROM galeriler WHERE id = :gaid 
[id] => 3 
[ismi] => Backgrounds 
[aciklama] => Background displays can bring your computer screen to life. 
[userid] => 20 
)

PDO::FETCH_OBJ: Sonuçları stdClass Object şeklinde listeliyor, php.net deki açıklaması: Her özelliğin bir sütun ismine denk düştüğü bir anonim nesne olarak. Örnek çıktı aşağıdaki gibidir:

stdClass Object ( 
[id] => 3 
[ismi] => Backgrounds 
[aciklama] => Background displays can bring your computer screen to life.
[userid] => 20 
)

Ben genelde sorgularımı stun ismine göre çekiyorum. Böylece kafam karışmıyor ama uygulamanıza hangisi uygunsa ona görede diğer parametreleri kullanabilirsiniz. Yeni başlayanlar ve basit işlemler için kullanacak arkadaşlar için ilk parametreyi yani PDO:FETCH_ASSOC‘u öneririm.

PDO::FETCH_COLUMN: Select kısmında belirlenen sütunda bulunan bütün veriyi sayı dizgesi ile listeler. Eğer select kısmında ön tanımlı bir değer yoksa (*), birden fazla varsa ilk kolonu ele alarak listeleme yapar. Örnek dönen sonuç aşağıdaki gibidir:

Array (
[0] => mehmet cavus 
[1] => Anime 
[2] => Backgrounds 
[3] => Cars 
[4] => Colors 
[5] => Families 
[6] => Fashion 
[7] => Funny 
[8] => Just for Fun 
[9] => Love
)

PDO::FETCH_GROUP: Verileri belirlenen ilk sütuna göre gruplandırarak işlem yapar. Tek başına kullanıldığında ikinci tablonun isminin altına birde sayısal değeri ile ikinci veriyi ekler. sadece isim değerini alması için aynı parametreyi PDO::FETCH_ASSOC ile kullanmanızı öneriyorum yanı bu şekilde: PDO::FETCH_ASSOC|PDO::FETCH_GROUP

Bu parametreninde sonuçları örnekteki gibi olur:

Array (

[Anime] => Array ( 
[0] => Array ( 
[aciklama] => Search through all your favorite anime characters. 
) 
) 

[Backgrounds] => Array ( 
[0] => Array ( 
[aciklama] => Background displays can bring your computer screen to life. 
) 
) 

[Cars] => Array ( 
[0] => Array ( 
[aciklama] => Make a pit stop to check out everything about cars. 
) 
) 

[Colors] => Array ( 
[0] => Array ( 
[aciklama] => Search through unique images from all the colors of the rainbow… 
) 
) 

[Families] => Array ( 
[0] => Array ( 
[aciklama] => They are the cornerstones of our lives. Celebrate your family here. 
) 
)

)

PDO::FETCH_UNIQUE – Select alanındaki ilk tabloyu baz alarak benzersiz içerikleri listeler. Eski mysql de distintc ile aynı verileri eleyip sadece birini alıyorduk. PDO uygulamasında da işimizi kolaylaştıracak FETCH_UNIQUE parametresini kullanacağız. Yanlış hatırlamıyorsam PDO daki benzersiz kayıt parametresinin eskisine nazaran çok daha kullanışlı oluyor. Çünkü distinct de sadece belirtilen benzersiz kayıtları çekeceğimiz sütununa ait verileri alabiliyorduk. PDO daki bu parametre ile benzersiz kayıtları alacağımız sütun haricinde diğer sütunlarıda kolaylıkla çekebiliyoruz. Bu parametrenin yanında yine PDO::FETCH_ASSOC parametresiyle beraber kullanımı önereceğim, böylece sadece sayısal dizgeleri çekmeden hafif sonuçlar elde edebiliriz. Bu parametre örneğide aşağıdaki gibi olur:

PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE parametrelerinin sonuçları:

array (size=51)
  'mehmet cavus' => 
    array (size=3)
      'aciklama' => string 'hhhh demi aciklamasi yeni buda..' (length=32)
      'id' => string '1' (length=1)
      'userid' => string '645' (length=3)
  'Anime' => 
    array (size=3)
      'aciklama' => string 'Search through all your favorite anime characters.' (length=50)
      'id' => string '2' (length=1)
      'userid' => string '20' (length=2)
  'Backgrounds' => 
    array (size=3)
      'aciklama' => string 'Background displays can bring your computer screen to life.' (length=59)
      'id' => string '3' (length=1)
      'userid' => string '20' (length=2)
  'Cars' => 
    array (size=3)
      'aciklama' => string 'Make a pit stop to check out everything about cars. ' (length=52)
      'id' => string '4' (length=1)
      'userid' => string '20' (length=2)

2 – Birden fazla veriyi çekme:
Yukarıdaki işlemleri anladıysanız bu kısmı çok kolayca kavrayacaksınız diye düşünüyorum, çünkü fazla bir ayrıntı yok. yukarıdaki sorgu kodumuzdan sadece fetch() kısmını fetchAll() olarak değiştirerek çoklu veri çekimleri için kullanacağız. Sonrasında çektiğimiz veriyi foreach yada while ile işleyebiliriz.

$veri1 = $dbpdo->query('SELECT * FROM galeriler');

print_r($veri1->fetchAll(PDO::FETCH_ASSOC));

Bu işlem sonunda ekrana tahmin edebileceğiniz gibi galeriler tablosundaki bütün veriler çekilecektir. Bunları foreach ile kolayca işleyebiliriz:

$veri1 = $dbpdo->query('SELECT * FROM galeriler');

$sonuc = $veri1->fetchAll(PDO::FETCH_ASSOC);

foreach($sonuc as $cek){

echo $cek["ismi"]."<br>";

}

Basit query ile select yöntemini işledik arkadaşlar. Daha profesyonel kullanım için PDO da bir çok fonksiyon bulunmakta. Şimdi size PDO da en çok sevdiğim ve bence eski mysql sorgularını bir daha kullanmamanıza neden olacak parametre: prepare

Detaylı prepare konusuna geçmeden önce hızlı şekilde silme,ekleme,güncelleme kodumuzu yazmak istiyorum. fonksiyonun adı exec(). Extra tanımlamalara gerek kalmadan hızlıaca işlemlerinizi yapmaya olanak veriyor. Bir kaç örnek vererek sizi bilgilendirip sonrada bunların daha detaylısı ve profesyonel yapıda olanı prepare kullanımına geçeceğim:

PDO::EXEC – Hızlı Veri silme

$sorgumuz = $dbpdo->exec("delete from galeriler where id = 235");

echo $sorgumuz; /*etkilenen satir sayisini verir - 1 ise silinmistir :) */

PDO::EXEC – Hızlı Veri güncelleme

$sorgumuz = $dbpdo->exec("update galeriler set ismi = 'mehmet cavus' where id = 1");

echo $sorgumuz; /*etkilenen satir sayisini verir - 1 ise silinmistir :) */

PDO::EXEC – Hızlı Veri ekleme

$sorgumuz = $dbpdo->exec("insert into galeriler(ismi) values('mehmet cavus yemenli')");

echo $sorgumuz; /*etkilenen satir sayisini verir - 1 ise silinmistir :) */

PDO::prepare:

Standart açıklama yerine kendi tecrübelerimi ve test sonuçlarımı paylaşacağım arkadaşlar. Büyük bir projeniz varsa yada aynı sorgunu sadece where alanındaki parametresi değişiyor diye 5-6 kere kullanmak zorunda kalıyorsanız, prepare komutu işlerinizi çok kolaylaştıracak hemde iş yükü zamanınızı çok düşürecek. Fazla kafa karıştırmadan bir kaç örnekle prepare kullanımını daha iyi anlamanıza vesile olayım.

PDO::PREPARE parametresini açıkmak için size bir örnek kod hazırladım:

$veri = $dbpdo->prepare('SELECT * FROM galeriler WHERE userid = :userid');

$veri->bindValue(':userid', 2, PDO::PARAM_INT); 
$veri->execute();
print_r($veri->fetchAll(PDO::FETCH_ASSOC)); /* userid 2 olan butun tabloları çeker */

echo "<hr>";

$veri->bindValue(':userid', 3, PDO::PARAM_INT);
$veri->execute();
print_r($veri->fetch(PDO::FETCH_ASSOC)); /* userid 3 olan ilk tabloyu (tek) çeker */

echo "<hr>";

$veri->bindValue(':userid', 20, PDO::PARAM_INT);
$veri->execute();
print_r($veri->fetchAll(PDO::FETCH_ASSOC)); /* userid 20 olan butun tabloları çeker */

/* her işlem ayrı ayrı çalışır, üstdeki ile bir bağı yoktur.. */

Yukarıdaki göreceğiniz gibi sadece bir sorgu cümlesi hazırladık ve alt tarafta 3 ayrı birbirinden farklı sonuç listeledik. Kafanız karışmasın arkadaşlar. alt alta yazdığınız her yeni kural üstdeki yani bir önceki kural ile alakası yoktur. Yaptığınız her execute() bir üstünde belirttiğiniz bindValue() parametresindeki kuralı işler. Böylece tek sorgu ile bir tablodaki 3 üyenin galerilerini ister birini, istersenizde hepsini ayrı ayrı çekmiş olduk.

Bunun bize getireceği kolaylıklar neler derseniz: Aynı anda tek bir sorgu cümlesini kullanarak güncelleme, silme, yada veri çekme yapabilirsiniz birdenf azla. Bu mantık işi, kullanabileceğiniz alanlar tamimiyle hayal gücünüze bağlı..

PDO::PREPARE komutu ile sadece veri çekme işi değil, silme, ekleme, güncelleme işlemleride yapabiliriz. PDO daki en iyi alanlardan birisi güvenlik uygulamalarınıda beraberinde kullanarak sistemimizi güven altına alabiliriz.

PDO::PREPARE ile veri ekleme:

Birden fazla yönetmi bulunmakla beraber kullanım alanınıza göre özelleştirebilirsiniz arkadaşlar.. İlk göstereceğim kullanım uygulamanın en kolayı olacak.

$yeniisim = "yeni galeri ismi";
$yeniaciklama = "galeri aciklamasi yeni buda..";

$sorgumuz = $dbpdo->prepare("INSERT INTO galeriler(ismi,aciklama) VALUES(:ismi,:aciklama)");

$sorgumuz->execute(array(':ismi' => $yeniisim, ':aciklama' => $yeniaciklama));

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

Yukarıdaki sorguyu çalıştırdığınızda veritabanına yeni veri ekleyecektir ve geri olarak rowCount() parametresi ilede etkilenen yada eklenen veri sayısını verecektir bize.

Yukarıdaki veri ekleme yönetminin biraz farklı olanı ise sorguda soru işareti kullanabileceğimiz ve array kısmınıda sırakı değişkenler olarak atayabileceğimiz yöntem. Burda değişkenlerin sırasına dikkat edin, sırayla soru işaretlerinin olduğu yerlere atanmaktadır..

$yeniisim = "en yeni galeri ismi";
$yeniaciklama = "en galeri aciklamasi yeni buda..";

$sorgumuz = $dbpdo->prepare("INSERT INTO galeriler(ismi,aciklama) VALUES(?,?)");

$sorgumuz->execute(array($yeniisim, $yeniaciklama));

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

İşi biraz daha büyütüp eklenecek veri güvenliğini en ideal şekilde kontrol edecek aşağıdaki gibi bir işlem yapabilirsiniz:

$yeniisim = "fyeni galeri ismi";
$yeniaciklama = "ggaleri aciklamasi yeni buda..";

$sorgumuz = $dbpdo->prepare("INSERT INTO galeriler(ismi,aciklama,userid) VALUES(:ismi,:aciklama,:userid)");

$sorgumuz->bindValue(':ismi', $yeniisim, PDO::PARAM_STR);
$sorgumuz->bindValue(':aciklama', $yeniaciklama, PDO::PARAM_STR);
$sorgumuz->bindValue(':userid', 24, PDO::PARAM_INT);

$sorgumuz->execute();

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

Ekleyeceğiniz her veriyi sorguya ekledikten sonra bindValue() paremetresi ilede eklenecek veriyi hazırlıyoruz. Son olarak execute() fonksiyonunu çalıştırdığımızda işlem çalışmaya başlauacak ve altda etkilenen satır sayısını verecektir..

PDO – Eklenen son verinin ID2sini alma:
INSERT işleminden sonra eklenen veriye ait ID’yi almak zorunda olabilirsiniz. Bu gibi durumlarda Aşağıdaki değişken bize eklenen son verinin ID’sini verecektir..

$sorgumuz = $dbpdo->exec("insert into galeriler(ismi) values('mehmet cavus yemenli')");

echo $sorgumuz . "<br>"; /*etkilenen satir sayisini verir - 1 ise silinmistir :) */
echo $dbpdo->lastInsertId(); /* Eklenen son verinin ID si. */

PDO::PREPARE fonksiyonu ile silme, ekleme, güncelleme gibi işlemleride yukarıdaki gibi yapabiliyornuz. Konuyu anladığınızı düşünüyorum prepare kısmında fazla detaya girmeden kısa kısa örneklerle bilgilerimizi pekiştirelim.

PDO::PREPARE – Tablodaki verileri Güncelleme:

PDO da farkeden tek şey mysql standart fonksiyonları yerine PDO class yapısını ve ek olarak ekleyeceğimiz verileri ayrı bir alanda işleyerek yapmamızdır. Bunun güvenilirliği konusunda tecrübem yok ancak yapı itibari ile bunun hazırlanmış olduğunu düşünüyorum. Örnek bir veri güncelleme yapısı:

$yeniisim = "fyeni galeri ismi";
$yeniaciklama = "ggaleri aciklamasi yeni buda..";

$sorgumuz = $dbpdo->prepare("update galeriler set ismi = :ismi ,aciklama= :aciklama,userid=:userid WHERE id = :id");

$sorgumuz->bindValue(':ismi', $yeniisim, PDO::PARAM_STR);
$sorgumuz->bindValue(':aciklama', $yeniaciklama, PDO::PARAM_STR);
$sorgumuz->bindValue(':userid', 241, PDO::PARAM_INT);
$sorgumuz->bindValue(':id', 1, PDO::PARAM_INT);

$sorgumuz->execute();

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

Bu alandaki veri güncelleme yöntemlerini aşağıda sırasıyla veriyorum:

2. Farklı yöntem:

$yeniisim = "yenidir daaa";
$yeniaciklama = "demi aciklamasi yeni buda..";

$sorgumuz = $dbpdo->prepare("update galeriler set ismi = :ismi ,aciklama= :aciklama,userid=:userid WHERE id = :id");

$sorgumuz->execute(array(':ismi' => $yeniisim, ':aciklama' => $yeniaciklama,':userid' => 542, ':id' => 1));

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

3. Farklı yöntem:

$yeniisim = "Baska yenidir daaa";
$yeniaciklama = "baska demi aciklamasi yeni buda..";

$sorgumuz = $dbpdo->prepare("update galeriler set ismi = ? ,aciklama= ?,userid=? WHERE id = ?");

$sorgumuz->execute(array($yeniisim, $yeniaciklama,542, 1));

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

4. Farklı yöntem: Standart değişkenleri sorgu içinde belirtmek, ancak kullanışlı değil, yukarıdaki yöntemlerden birini tercih etmenizi öneririm:

$yeniisim = "gggg yenidir daaa";
$yeniaciklama = "hhhh demi aciklamasi yeni buda..";

$sorgumuz = $dbpdo->prepare("update galeriler set ismi = '".$yeniisim."' ,aciklama= '".$yeniaciklama."', userid='645' WHERE id = '1'");

$sorgumuz->execute();

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

PDO::PREPARE – Tablo silmek

Tablo silmek prepare ile çok kolay, ayrıca bu fonksiyonun ilk başlarda anlattığım özelliği ile aynı anda birden fazla farklı tabloyu silebiliyoruz. bunu yaparken sorguğu defalarca değiştirmemize gerek kalmıyor. Küçük bir mantık yürütmek gerekirse toplu olarak silmek istediğiniz yada sitenizde bu özelliği eklemek istediğiniz alana gelen veriyi sadece foreach alanında execute kullanarak kodlama kalabalığı yapmadan halledebiliriz. Ben küçük bir mantık yürüttüm, ihtiyaçlara göre hayal gücümüz dahada farklı yorumlar bulacaktır.

ÖRnek bir tablo silme kodu:

$sorgumuz = $dbpdo->prepare("delete from galeriler where id = :id");

$sorgumuz->bindValue(':id', 240 , PDO::PARAM_INT);

$sorgumuz->execute();

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

id si 240 olan tablo tarih oldu şuanda… Kodlamada bir kaç ekleme yaparak aynı anda bir kaç tabloyu silebiliriz. sorgu cümlesini değiştirmeden:

$sorgumuz = $dbpdo->prepare("delete from galeriler where id = :id");

$sorgumuz->bindValue(':id', 240 , PDO::PARAM_INT);
$sorgumuz->execute();

$sorgumuz->bindValue(':id', 230 , PDO::PARAM_INT);
$sorgumuz->execute();

$sorgumuz->bindValue(':id', 220 , PDO::PARAM_INT);
$sorgumuz->execute();

$sorgumuz->bindValue(':id', 210 , PDO::PARAM_INT);
$sorgumuz->execute();

$etkilenen_veri_sayisi = $sorgumuz->rowCount(); //son sorgu icin bilgi verecektir, her execute den sonra eklerseniz o islem içinde bilgi verir..

echo $etkilenen_veri_sayisi;

Bir başka veri silme kodu. değişkenleri direk execute() parametresine ekleriz:

$sorgumuz = $dbpdo->prepare("delete from galeriler where id = :id");

$sorgumuz->execute(array(':id' => 239));

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

Buda diğer bir basit veri silme kodumuz:

$sorgumuz = $dbpdo->prepare("delete from galeriler where id = ?");

$sorgumuz->execute(array(238));

$etkilenen_veri_sayisi = $sorgumuz->rowCount();

echo $etkilenen_veri_sayisi;

Sormak istediklerinizi yada önerilerinizi konu altından yorum atabilirsiniz. Bu konuda yeni dökumanları zaman içerisinde tekrar yazacağım. Türk geliştiricilerinin PDO sistemine geçmesini şiddetle öneriyorum. Gelecek herzaman yeni teknolojilere çabuk atapde olabilenlerin olacaktır.

Sağlıcakla kalın..

Kategoriler
Php uygulamalari Php ve mysql Webmaster yardım

Php ile sql cache uygulamasi: Sisteminizi rahatlatin, sitenizi hizlandirin!

Sql cache, file cache ile nerdeyse ayni mantiga sahip bir php cache uygulamasidir. Tek farki sql cache verileri disk uzerinde degil mysql tablolarinda tutmasidir. Bunun file cache’ye gore bir cok artilarinin oldugunu dusunuyorum. Cunku bazi olumsuz durumlar file cache yapisinin iyi sekilde calisamamasina neden oluyor. Ornegin kullandiginiz hostun yada sunucunun disk yapisinin veya yazma hizinin dusuk olmasi cache sirasinda yavaslamalar ve optimasyon sorunlari yasamasina neden olur. Ozellikle SATA diskler uzerinde bu biraz daha gozle gorulur derecede kendini hissettirmektedir. SSD ve sas disk yapilari file cache icin en uygun olanlari ancak bunun eksikliginde sizlere sql cacheyi tavsiye edecegim. Mysql yapisi hizli islem yapmaya cok musait, file cacheden daha hizli ve aktif sekilde kullanim alani yaratir size.

Normalde localhostda sql cache yazisi icin denemeler ve testler yapiyordum, bunun icin bir kalip hazirladim, bu kalibi kullanarak birden fazla alan icin cache olusturabilirsiniz. Hazirladigim kalipda sadece cache alinacak alanin ismi ve cachede bekletilecegi suresini girmeniz yeterli olacak. Ve cache alinacak alanida belirttikten sonra hic ellemeden zamani geldiginde o bolum kendini guncellemis olacak. Mantik olarak cache alinan alanin ne kadar cachede kalacagi ve ne kadar ayni sorgunun gosterilecegini belirtebiliyoruz. boylece cache almadan onceki 50,100lerce sorguyu tek sorguya indirgemis olacagiz.

Uygulama iki bolumden olusuyor:

1: Fonksiyon bolumu, sizin duzenlemenize gerek olmayan bolum.

2: Cache icin kullanacaginiz kalip kod yigini.

Anlatima baslarken bunun biraz karisik gelebilecegini ancak mantik yuruttugunuzde gayet basarili bir calisma oldugunu anlayacaksiniz. Ayni tarz sistemi ayri tablo acmadan, sadece hazirladigim kod yiginini kullanarak wordpress de de istediginiz alani (buyuk sorguya neden olan yerleri) cache ye alabileceksiniz ki bu wordpress icin olan dokumani bir sonraki yazimda yazacagim.

Oncelikle kodu uygulayacaginiz sayfada mysql baglantisinin saglanmis olmasi gerekli, eger mysql baglantisi saglanmamis ve yeni basliyorsaniz asagidaki mysql baglanma kod yapisini kullanabilirsiniz, tabi oncesinde bu islem icin database olusturmaniz gerekli, yada var olan databaseye baglanti acmaniz gerekli asagidaki kod ile:

$conn = mysql_connect("localhost", "KULLANICI", "SIFRE");

if (!$conn) {
echo "baglantida sorun var: " . mysql_error();
exit;
}

if (!mysql_select_db("DATABASE")) {
echo "kullanilamiyor bu database: " . mysql_error();
exit;
}

Kendinize gore duzenlemeyi unutmayin.

Bu islemin hemen ardindan cache verilerini tutacagimiz tablomuzu mevcut databasemize eklememiz gerekli. Asagidaki kodu phpmyadmin den sorgu kismindan uygulayin:

CREATE TABLE IF NOT EXISTS kuaza_sqlcache (

id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
cache_ismi varchar(64) NOT NULL DEFAULT '',
cache_icerik longtext NOT NULL,
cache_zamani varchar(30) NOT NULL DEFAULT '',
cache_suresi int(10) NOT NULL DEFAULT '60',
PRIMARY KEY (id),
UNIQUE KEY cache_ismi (cache_ismi)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

Sorguladiginiz bu tabloya cache alanlari icin bize gerekli olan bilgileri kaydedecegiz, ve tekrar sonrasinda ekrana yazdiracagiz.

Simdi sira fonksiyonlarimiza geldi. Normalde fonksiyonlari kullanmamistim testlere ilk basladigimda, ancak hem kolaylik saglamasi hemde yeni arkadaslarin fonksiyonla olan baglarini guclendirmek adina boyle bir yol sectim. Hemde cache alacagimiz kalip kod yigini daha temiz ve sade bir duruma geldi. yinede bunu yazdigima bakmayin, anlayanlar icin basit, anlamayanlar icin biraz fazla gorunebilir :)

Bu fonksiyonlari ister ayri sayfadan, istersenizde cache alacaginiz sayfada bir yere ekleyin. Eger coklu bir sistemde calisiyorsaniz her sayfaya include ettiginiz belli dosyalariniz vardir, bu include ettiginiz dosyanin icerisine eklemeniz daha mantikli olacaktir.

/* Cache kontrol alani, buradan once kontrol yaptirip, sonrasinda gerekli islemlere baslayacagiz. */
function c_cachekontrol($cacheismi,$bilgiiste=""){
$sorgu=mysql_query("select cache_ismi,cache_icerik,cache_zamani,cache_suresi from kuaza_sqlcache where cache_ismi = '$cacheismi'");
$bilgi = mysql_fetch_array($sorgu);
if($bilgi > 0)
{
if($bilgiiste == "cache_zamani"){
return $bilgi["cache_zamani"];
}elseif($bilgiiste == "cache_suresi"){
return $bilgi["cache_suresi"];
}elseif($bilgiiste == "cache_icerik"){
return $bilgi["cache_icerik"];
}
}else{
return "tabloyok";
}
}

/* eger mysql tablomuz yoksa yeni tablo ve cache alinan kodlari tabloya yazdiracagiz,
boylece sonraki calistirmamizda bu kaydettigimiz tablodan cache alinacak.
*/
function c_yenicacheac($cacheismi,$cacheicerik,$cachesuresi="60"){
$alhepsini = $cacheicerik;
$zaman = time();
$yeniekle = mysql_query("INSERT INTO kuaza_sqlcache
(cache_ismi, cache_icerik, cache_zamani, cache_suresi)
VALUES ('$cacheismi', '$alhepsini', '$zaman','$cachesuresi')");
/*
Bu alanida sorgunun gerceklesip gerceklesmedini arka planda yani kullanici arayuzunde gostermeden ekrana basiyoruz.
Bunu gormek icin kaynak kod kismina bakmaniz yeterli olacaktir.
*/
if($yeniekle) {
return "";
} else {
return "";
}
}

/* Eger cache suresi belirledigimizden eski ise bu alan ilede varolan cache alanini guncelliyoruz. */
function c_cacheguncelle($cacheismi,$cacheicerik,$cachesuresi="60"){
$alhepsini = $cacheicerik;
$zaman = time();
$guncelle = mysql_query("UPDATE kuaza_sqlcache SET cache_icerik = '$alhepsini', cache_zamani = '$zaman', cache_suresi = '$cachesuresi' WHERE cache_ismi = '$cacheismi'");
/*
Bu alanida sorgunun gerceklesip gerceklesmedini arka planda yani kullanici arayuzunde gostermeden ekrana basiyoruz.
Bunu gormek icin kaynak kod kismina bakmaniz yeterli olacaktir.
*/
if($guncelle) {
return "";
} else {
return "";
}
}

Kod icerisinde ki alanlari anlayabileceginiz sekilde yorumlamaya calistim.

Simdi ise en can alici noktaya geldik diyebilirim. Cache almamizda bize en cok yardimci olacak alanlardan birisi, kalip kod yigini alanina geldik. Bunu sisteminize entegre etmeyi basardiginiz,da sonraki uygulamalarda zorluk cekmeyeceginize eminim. Bir kere yapan, sonraki eklemelerde zorlanmayacaktir.

Kod icerisinde gerekli aciklamalari yaptim, ancak sonrasinda da olayi daha iyi kavrayabilmeniz icin onemli bolumleri detayli sekilde yazacagim:

/*
cacheye alacaginiz bolum icin bir isim girin, 
boylece birden fazla alani cache alacaginizda farkli isimlerle 
yeni alanlar acabilirsiniz.
*/
$cacheismi = "cachedeneme4"; 

/*
Cacheye aldiginiz kodlarin ne SIKLIKLA yenilenecegini,
guncellenecegini buradan belirtebilirsiniz. Dakika cinsinden bir sayi girmeniz yeterli.
5 = 5 dakika, 60 = 1 saat.
*/
$cachesuresi = "160";

/*belirledigimiz cache ismini kontrol ettiriyoruz, varsa sonraki islemlere geciyoruz, yoksa yeni alan girip cache bolumu olusturuyoruz.*/
$bilgi = c_cachekontrol($cacheismi);

/* if ile daha once cache tablosunun acilip acilmadigini kontrol ediyoruz, eger tablo var ise sonraki adima geciyoruz. */
if($bilgi != "tabloyok"){

/* Buradan bize yardimci olacak cache zamanini ve belirlediginiz suresini aliyoruz. */
$db_cache_zamani = c_cachekontrol($cacheismi,"cache_zamani");
$db_cache_suresi = c_cachekontrol($cacheismi,"cache_suresi");

$cachetime = 60 * $db_cache_suresi; // 60 ile belirledigimiz cache suresini carparak suanki zamandan cikartacagiz, bir sonraki adimda.

/* 
if ile cachelenen icerigin zamanini hesapliyoruz ve 
daha once belirttigimiz dakikadan daha az ise (yani cache zamani icerisinde ise) cache zamani, 
direk cacheli alani ekrana yazdiriyoruz.
*/
if (time() - $cachetime < $db_cache_zamani) {

# cache belirttigimiz zaman icerisinde ise ekrana bastiriyoruz. Boylece tek sorguda hersey halletmis olduk.
echo unserialize(base64_decode(c_cachekontrol($cacheismi,"cache_icerik")));
echo "";
}else{
/*Eger cachenin suresi belirledigimiz dakikayi asmis ise, 
o zaman burdan yeniden normal kodlarimizi calistiriyoruz ve 
cache alanini guncellemesini sagliyoruz. */
ob_start();




// Cachelenecek kodlar ve sorgular alani (aynisi)





/* Ekrana basilan alanin kodlarini html alarak, var olan tabloyu yeniden guncelliyoruz. */
 echo c_cacheguncelle($cacheismi,base64_encode(serialize(ob_get_contents())),$cachesuresi); 
 
 ob_end_flush();
 }
 /* Zaman kontrol if fonksiyonu alani bitti, daha once actigimiz ve 
 tablo var yok kontrolu yaptigimiz if icin else alanina geciyoruz
 */

 }else{
 /* Eger sql cache alaninda belirledigimiz isimde bir cache alani yoksa, 
 buradan kodlarin html yapisini alarak yeni cache alanini ekliyoruz. 
 */
 ob_start();




// Cachelenecek kodlar ve sorgular alani (aynisi)





/* Alinan html kodlari yeni eklenecek tablomuza ekliyoruz. */
 echo c_yenicacheac($cacheismi,base64_encode(serialize(ob_get_contents())),$cachesuresi); 

 ob_end_flush();
 }
 /* Ve gerekli if kontrolleri bitti, yaptigimiz sorgu sayilari 1000 ken 2 oldu, hayirli olsun :) */

Kodlarin icerisinde butun alanlarin ne islem ve ne fonksiyon gorevi gordugunu belirttim.

Yinede unutmamaniz gereken kalip kod yigini alanindaki “Cachelenecek kodlar ve sorgular alani (aynisi)” kismi ikiside ayni olacak, yani bu alana cache alinmasini istediginiz sorgularinizi, kodlarinizi girmeniz gerekli. Genelde yuksek soegular oluyor, 50,60 sorgu gibi, o zaman buradaki uygulama ile sorgu sayisi 2 ye kadar dusecektir. Boylece gerek acilislarda olsun, gereksede sonraki sayfa gezintilerinde sitenizde gozle gorulur hizlanma olacaktir. bunun yaninda sunucunuzu yada hostunuzu rahatlatmasida cabasi :)

Bu uygulamanin faydasi bir tek mysql sorgularinda olmuyor arkadaslar, sistemi zorlayacak php sorgularinda veya fonksiyonlarinda da cache alma islemi uygulandigi icin ciddi derecede sisteminizi rahatlatacaktir.

Sitenizin hizlanacaginida hesaba katarsaniz hem kullanici sitenize girdiginde keyifli zaman gecirir, hemde arama motorlari icin cazip bir alan haline gelir. Guncellik konusuna deginmiyorum, orasi size bagli. Ancak hic bir kullanici, siz bile bir sayfanin acilmasini 5 saniye beklemek istemezsiniz :)

Uygulamayi gelistirmeye yetecek zamanim olursa el atar arada bir yenilikler eklemeye calisirim, bunun haricinde gelistirme amacli kodlari kullanacak arkadaslara simdiden basarilar diliyorum. Anlamadiginiz bir yer olursa konu altindan yorum ile beni uykumdan edip, pc basina cagirabilirsiniz.

Sevgiyle kalin, bol kodlu gunler :)

Kategoriler
Amo-Seo-PR Php ve mysql Webmaster yardım

Php ve Mysql ile dinamik sitemap sayfalari hazirlamak

Genelde Hazir sistemler icin eklentiler yada moduller bulunur bu tarz uygulamalar icin. Gunumuzde artik sitemap uygulamasi olmayan site neredeyse cok az, ve olmasi gereken bir sey haline geldi. En buyuk sebeplerinden biriside arama motorlarinin sitenizin iceriginden daha cabuk ve hizli haberdar olabilmesidir.. Php ve mysql kullanan sistemler icin eger iceriginiz cok fazla degilse sitemap generator sitelerini kullanarak sitemap olusturabilirsiniz, ancak devamli guncellenen ve artik site iceriginizdeki sayfalar 50-100 bin’i gecmeye basladiginda sitemap generator siteleri artik size yardim edemeyecektir. cunku cogu belli bir limite kadar izin veriyor, daha fazlasi icin ucret istiyorlar. Ancak basit bir kac uygulama yazarak bunu hem otomatik, hemde basite indirgeyerek google ve dengi arama motorlari icin sitemizi daha cazip hale getirebiliriz..

Kategoriler
Php ve mysql Webmaster yardım Wordpress

WordPress degisikliklerinde eski yorumlarinizi yeni siteye ekleme!

Arkadaslar bazi durumlarda kullandiginiz wordpress i degistirmek istersiniz. Bu nhasil olur ? iki farkli domaininiz vardir, birinde kisisel digerinde de farkli alanda yazilarinizi barindirirsiniz. Tarihin birinde de artik bir tanesini birakip tek siteyle devam etmek istediginizi anlarsiniz. bu durumda yazilarinizi yeni siteye manuel olarak eklersiniz ancak yorumlar cok fazlaysa ve manuel sql sorgusu ile eklemek cok zahmetli geleceginden bu yazimda 2 saniyede bunu nasil yapacaginizi anlatacagim.

Yapacagimiz islem hazirlik asamasi 5 dk, uygulamaya alma asamasi da1 dk olarak 2 ayri kisimda olacaktir. bunlardan ilki Eski db de bulunan yorumlar tablosunu farkli bir on ek ile yeni databaseye eklemek, sql sorgusu icinde php dosyasini hazirlamak olacaktir. 2 kisimda ise bunu calistirip kontrol etmek kalacaktir geriye..

Burda unutmamaniz gereken konu, devap olarak eklenen yorumlar eskisi gibi cevap seklinde degil normal sekilde gorunecektir. cunku yeni db ye eski yorumlari eklerken otomatik yeni ID almasini sagliyoruz, burada da ID lerfkli olacagindan cevap ozelligini yorumlari cektiginiz konu icin yok saymaniz gerek :)

Baslamadan once iki databaseyide mutlaka yedek almayi unutmayin.

Phpmyadminden eski websitenizin databasesini acin ve sadece bu tabloyu bilgisayariniza indirin: comments (eger on ek kullanmis iseniz onu indirin, default wp_comments seklinde de olabiliyor)

* Inen dosyayi acip icerisindeki comments tarisinin onundeki takiyi yada komple ismi duzenleyin.

* Yeni DBnizin oldugu tabloya yukleyin.

* Ardindan asagidaki php sorgusunu yeni wordpress’inizin root dizininde bir php dosyasina ekleyin, kendinize gore duzenleyin.

< ?php

include_once "mysql/ez_sql_core.php";
include_once "mysql/ez_sql_mysql.php";

$kullanici="DB-kullanici-adin";
$parola="sifren";
$DBCIK="DB-adin";
$sunucu="localhost";

$db = new ezSQL_mysql($kullanici,$parola,$DBCIK,$sunucu);
$db->query("SET NAMES utf8");

$eskisitekonuyorumid = "202";
$yenisitekonuyorumid = "1459";

$sonuclar = $db->get_results("SELECT * FROM ESKI_comments where comment_post_ID='$eskisitekonuyorumid'");

foreach ( $sonuclar as $sonuc )
{

$comment_post_ID = $yenisitekonuyorumid;
$comment_author = $sonuc->comment_author;
$comment_author_email = $sonuc->comment_author_email;
$comment_author_url = $sonuc->comment_author_url;
$comment_date = $sonuc->comment_date;
$comment_content = mysql_real_escape_string(stripslashes($sonuc->comment_content));
$comment_approved = $sonuc->comment_approved;
$comment_agent = $sonuc->comment_agent;
$comment_type = $sonuc->comment_type;
$user_id = $sonuc->user_id;

$query = $db->query("INSERT INTO wp_comments(
comment_post_ID,
comment_author,
comment_author_email,
comment_author_url,
comment_date,
comment_content,
comment_approved,
comment_agent,
comment_type,
user_id
) VALUES (
'$comment_post_ID',
'$comment_author',
'$comment_author_email',
'$comment_author_url',
'$comment_date',
'$comment_content',
'$comment_approved',
'$comment_agent',
'$comment_type',
'$user_id'
)");

if($query) {
echo "basarili oldu - ".$sonuc->comment_ID." = ".$sonuc->comment_content."

"; }else{ echo "basarisiz oldu - ".$sonuc->comment_ID." = ".$sonuc->comment_content."

"; } } ?>

Sirasiyla duzeltmeniz gereken yerleri yazacagim:
1: $eskisitekonuyorumid = Yorumlarini almak istediginiz konunun eski sitedeki ID si
2: $yenisitekonuyorumid = Yorumlari eklemek istediginiz konunun yeni sitedeki ID si
3: ESKI_comments = Eski yorumlarin oldugu ve yeni konuya ekleyeceginiz yorumlarin bulundugu tablo ismi (indirdigimiz)
4: wp_comments = Yorumlarin eklenecegi yeni tablo ismimiz.

Sistemde EZsQL ile calistigimdan buradaki ezsql dosyalarini indirip php dosyasinin oldugu yere yukleyin (klasorle beraber)

Dosyalarda yerli yerine yuklendikten sonra kodlarin bulundugu php dosyasini webtarayicinizda acin ve basarili yada basarisiz sonuclari takip edin. Genelde butun sonuclar basarili sekilde listeleniz. Ancak sorun varsa uyari verefcektir. Bu durumda konu altina yorum duserseniz sorunu anlayip yardimci olmaya calisirim..

Yardimci olmasi umidiyle, basarilar..

Kategoriler
Php ve mysql Program Anlatımları Webmaster yardım

Mysql INNER JOIN İşlemi ve Program Resimli Anlatim

Merhaba arkadaslar uzun zamandir yazmiyorum farkindayim ancak cok yogun oldugumu soylemk istiyorum. Inanin yazacak o kadar cok seyim varki bugun baslasam 1 haftaya ancak bitiririm. Yavas yavas zaman buldukca konulara deginecegim. Ancak simdi size cok isime yarayan ve gercekten php mysql programlamada webmasterin mutlaka bilmesi ve ogrenmesi gereken bir uygulamayi anlaracagim. Bu tablolarin birbiri ile iliskisel degerlerinin alinarak birden fazla sorguyu tek sorguya dusurmeye yarayan JOIN islemidir..

Daha net ve kisa bir ornek vermek gerekirse: Mysql tablomuzda birden fazla iliskili tablo varsa bunlari birdenf azla sorgu ile degilde tek sorgu ile cekmeye yariyor. bu bize hem sorgu sayisindan dusus hem hiz, hemde yazmada kolaylik sagliyor..

IPUCU: sunucuda my.cnf ayarlarinda join duzenlemeleri mevcutdur, eger bu ayarlar guzel yapilmis ise join uygulamalari hermzaman hizli ve sunucuyu yormayacak sekilde isleyecektir.

ONERI: Php ve MLsql programlamaya baslamadan once database yapinizi iyi duzenlemeniz ve plana dokmeniz gerek. cunku ilerde cok buyuk zorluklar yasayabilirsiniz. bu yuzden olusturdugunuz her tabloda baska bir tablo ile iliski barindiran kisimlar icinde duzenleme yapmanizi ve JOIN islemini kullanmanizi siddetle oneriyorum.

Kisa Bir ornek: 4 tablomuz olsun. Tablolar : arabalar, renkleri, markalari, sahibi
bu 4 tabloyu tek sorguda birbirine baglamak icin join islemini kullanip tek sorgu ile 4 sorgunun isini yapmis olacagiz ve sorgu sayisida dustugu icin mysql programini rahatlatacagiz..

Fazla zamanim olmadigi icin kisa kesecegim ve size join uygulamasinda cok kolaylik saglayacak kafa yormadan birlestirme islerini yapacak bir programla tanistirayim. ilerde bir cok konuda da yardimciniz olacaktir.
Programin ismi: SQL Maestro for MySQL

Bu aralar uzerinde calistigim Ka-press uyuglamasinda bir cok tabloyu join yontemi ile listeliyorum bu bana en azindan 10 sorgu eksilterek kazanc sagliyor. Ornek tablo uygulamasi icin size asagidaki resme bakmanizi oneriyorum:
Free Image Hosting At site

ben direk kisa bir anlatimdan sonra program icin baska bir yerden join uygulamasi icin yazilmis bir yaziyi alt da paylasacagim, boylece konuyu daha iyi anlamis olursunuz..

Programi indirip kuralim: SQL Maestro for MySQL
Programin guzel tarafi sunucunuzdaki mysql disariya acik degilse ssh bilgileriyle erisim imkani saglayarak butun databaselerde islem yapabilmenizi sagliyor..

Programi kurduktan sonra acin, ilk actiginizda sizden giris bilgileri isteyecek, burada ssh ile baglanmayi secerek bilgilerinizi girip devam edin, sonrasindasizden veritabani secmenizi istecek, veritabanlarin hepsini secebilirsiniz, yada sadece islem yapacaginiz veritabanini secebilirsiniz. devam edip ready yapacaksiniz ve veritabani eklenmis olacak. Daha iyi anlayabilmeniz icin asagidaki ornek resimleri sirasina ve icerisindeki sayilara gore takip edin:
Free Image Hosting At site

Free Image Hosting At site

Free Image Hosting At site

En sonunda ready dedikten sonra Database programin sol tarafinda gorunecektir. ona 2 kere tiklayarak acin.
Sonrasinda asagidaki resimlerdeki sirayi izleyin ve birlestirme icin aracimizi acalim:

Free Image Hosting At site

Free Image Hosting At site

Bunlardan sonra tablolar gelecek ornek asagidaki gibi:
Free Image Hosting At site

burada yapmaniz gereken onemlidir arkadaslar. Birlestirme yapacaginiz tabloyu maus ile tutup siger tablodaki eslesecek alanin uzerine getirip birakmani gerek. Bu sekilde birlestirme yapacaginiz yani eslesen alanlari birbirine baglayin. ve Asagidaki resimdeki gibi ustden editor kismini acin:
Free Image Hosting At site

isde burada da sizin php kodlariniz duruyor, hic kafa yormadan dusunmeden join islemi icin gerekli kodlariniz hazir. Sonrasinda bunu phpde kullanabilirsiniz. Kodlarin calisip calismadigini yada mantigin dogru oldugunu anlamak icin programdaki Execute query kismina tiklayip editorun yanindaki result‘a bakabilirsiniz. Eger eslesmis bir kayit varsa burada listelenecektir. Boylece dogrulunu kanitlamis olacaksiniz.

Benden bu kadar bir baska sitedeki jion yazisinida asagida paylasiyorum anlamayanlar icin yardimci olacak niteliktedir..

INNER JOIN İşlemi (Burasi alinti kisimdir, yazan kisi hakkinda bilgim yok)
Ortak bir alanda eşleşen değerler olduğunda iki tablonun kayıtlarını birleştirir.

Sözdizimi

FROM tablo1 INNER JOIN tablo2 ON tablo1.alan1 karşılaştırma tablo2.alan2

INNER JOIN

işleminin bölümleri şunlardır:

tablo1, tablo2: İçinden kayıtların birleştirileceği tabloların adıdır.
alan1, alan2: Birleştirilen alanların adıdır. Alanlar sayısal değilse, aynı veri türünde olmalı ve aynı türde veriler içermelidir, ancak alanların aynı ada sahip olmaları gerekmez.
karşılaştırma: Herhangi bir karşılaştırma işlecidir: “=,” “<,” “>,” “<=,” “>=,” or “<>.”

Uyarılar

INNER JOIN işlemini herhangi bir FROM yan tümcesinde kullanabilirsiniz. Bu, en sık kullanılan birleştirme türüdür. İç birleşimler, iki tabloda ortak olan bir alanda eşleşen değerler olduğunda her iki tablonun kayıtlarını birleştirirler.

INNER JOIN’i, Bölümler ve Çalışanlar tablolarında, bölümlerdeki tüm çalışanları seçmek için kullanabilirsiniz. Buna karşılık, tüm bölümleri (bölüme atanmış çalışan olmasa bile) veya tüm çalışanları (herhangi bir bölüme atanmamış olsa bile) seçmek için, bir dış birleşim oluşturmak üzere LEFT JOIN veya RIGHT JOIN işlemini kullanabilirsiniz.

Not veya OLE Nesnesi verileri içeren alanları birleştirmeyi denerseniz bir hata oluşur.

Benzer türdeki herhangi iki sayısal alanı birleştirebilirsiniz. Örneğin, benzer türlerde olduklarında OtomatikSayı ve Uzun alanlarını birleştirebilirsiniz. Ancak, Tek ve Çift türündeki alanları birleştiremezsiniz.

Aşağıdaki örnek, Kategoriler ve Ürünler tablolarını KategoriNo alanına göre nasıl birleştirebileceğinizi gösterir:

SELECT KategoriAdi,Urunadi

FROM Kategoriler INNER JOIN Urunler

ON Kategoriler.KategoriNo = Urunler.KategoriNo;

Önceki örnekte KategoriNo, birleştirilen alandır ancak SELECT deyiminde yer almadığı için sorgu sonuçlarında bulunmaz. Birleştirilen alanı bulundurmak için, alan adını SELECT deyiminde yazın (örneğimizde Kategoriler.KategoriNo).

Aşağıdaki sözdizimini kullanarak, JOIN deyimi içinde çok sayıda ON yan tümcesini de bağlayabilirsiniz:

SELECT alanlar
FROM tablo1 INNER JOIN tablo2
ON tablo1.alan1 karşılaştırma tablo2.alan1 AND
ON tablo1.alan2 karşılaştırma tablo2.alan2) OR
ON tablo1.alan3 karşılaştırma tablo2.alan3)];

Aşağıdaki sözdizimini kullanarak içiçe JOIN deyimleri de oluşturabilirsiniz:

SELECT alanlar
FROM tablo1 INNER JOIN
(tablo2 INNER JOIN [( ]tablo3
[INNER JOIN [( ]tablox [INNER JOIN ...)]
ON tablo3.alan3 karşılaştırma tablox.alanx)]
ON tablo2.alan2 karşılaştırma tablo3.alan3)
ON tablo1.alan1 karşılaştırma tablo2.alan2;

Bir LEFT JOIN veya bir RIGHT JOIN bir INNER JOIN içinde içiçe yer alabilir ancak bir INNER JOIN bir LEFT JOIN veya RIGHT JOIN içinde yer alamaz.

Kategoriler
Php ve mysql

PHP ve Veritabanı

phpKişisel bilgisayarınızdaki kişisel Web sunucusuna PHP öğretme işlemine geçmeden önce, hemen hemen PHP`nin ikiz kardeşi sayılan MySQL`den ve onun rakibi PostgreSQL`den kısaca söz edelim.
PHP`nin varlık sebeplerinin başında, ticarî Unix ve Microsoft Windows işletim sistemlerinden ayrı, ticarî olmayan Açık Sistem ortamlarında çalışan bir Script dili ile bu dille kullanılabilecek yine Açık Sistem ürünü bir veritabanı erişim ve yönetim aracına sahip olmak gelir. Perl, gerçi PHP`den çok önce Açık Sistem ürünü olarak, isteyen Web Programcısı`nın ücretsiz edineceği bir CGI programlama dili olarak Web`in ilk gününden beri Web Programcısının emrinde idi. Ama Perl, metin dosyalarından yazı çekmek ve bunları biçimlendirerek rapor haline getirmek amacıyla geliştirilen bir dil olduğu için, özellikle veritabanına dayalı işlemlerde programcıya çok güçlük çıkartıyordu. ASP ise (ASP desteği sağlayan ve ücretsiz Web sitesi veren firmaların giderek artmasına ve veritabanı konusunda hem kolaylık, hem de büyük bir etkinlik sağlamasına rağmen) çoğunlukla ücretli Web sitesi aldığımız ticarî amaçlı evsahibi (Hosting) firmalarının sağladığı bir teknoloji olarak görüldü. PHP, tasarımcılarının MySQL ve PostgreSQL teknolojilerini geliştiren kurum ve firmalarla yaptığı yakın işbirliği sonucu ikinci sürümünden itibaren veri-yönlendirmeli Web uygulaması alanında önemli bir araç olarak belirdi. Dolayısıyla, PHP kurulumu dendiği zaman, kendiliğinden, MySQL kurulumu da kastedilmiş olur. Şimdi PostgreSQL da ekleyebiliriz.

PHP, bir dildir; MySQL ve PostgreSQL ise bir demet sürücüdür. PHP ile, Web Server`a sayfanızı Internet ziyaretçisine göndermeden önce bir takım komutları icra etmesini, bir takım veri dosyalarını açıp içindeki bilgileri alıp bunları HTML kodlarıyla bezeyip, Browser`a bildiğimiz klasik HTML sayfası olarak göndermesi talimatını veririz. MySQL ve PostgreSQL ise, Windows sistemlerinde Denetim Masası`nda gördüğünüz ODBC Veri Kaynağı Yönetmeni adlı araç gibi, bir vertabanı sunucusu, yani Database Server pprogramlarıdır. Yakın zamana kadar bu iki veritabanı yönetim aracı arasında fazla bir çekişme yoktu. Ancak şimdi özellikle Linux kullanıcıları topluluklarında iki program arasında verimlilik testleri yapılıyor; hangisinin daha iyi olduğnuna ilişkin yoğun bir tartışma sürüyor. PHPBuilder.com uzmanları, yaptıkları bir çok denemede, MySQL`in daha hızlı ve daha etkin çalıştıkları sonucuna varıyorlar. (Bu konuda daha geniş bilgi edinmek için Internet`te www://PHPbuilder.com/columns/tim20000705.PHP3 adresine bakabilirsiniz.)

MySQL, bir kullanıcı lisansı 200 Dolar olan ticarî bir program iken 2000 yılı ortalarında GPL (GNU General Public License/GNU Kamusal Lisans) uygulamasına geçmiş ve ücretsiz dağtılır hale gelmiş bulunuyor. Buna göre MySQL`i bir ticarî uygulamanın içinde motor olarak kullanacaksanız üreteci firmaya lisans ücreti ödemeniz gerekir; bunun dışındaki uygulamalar için programı Internet`ten indirerek kullanabilirsiniz. PHP için MySQL`e gerek yoktur. PHP, bir NT veya Win9x tabanlı Web Server`da çalıştırılıyorsa, Microsoft`un ODBC sürücüleri ile çalışabilir; ve ODBC`nin okuduğu bütün veritabanlarından veri çekebilir. (ODBC`nin Unix-Linux sürümü de vardır.) Ayrıca PHP için Adabas, dBase, Empress, FilePro, Informix, InterBase, mSQL, Oracle, Solid, Sybase, Velocis ve bir çok Unix veritabanı yöneticisi için geliştirilmiş add-on (sonradan eklenen) modüller vardır. PHP, bir çok LDAP istemci programı için yazılmış API`lere de sahiptir. PHP ile IMAP, SMTP gibi Internet elektronik mektup protokollerini kullanmak da mümkündür.

Biz bu kitapçıkta örneklerimizde ve uygulamalarımızıda MySQ`den yararlanacağız. PHP-MySQL ikilisini kişisel bilgisayarımıza kurmak için önce gerekli programları Internet`ten indirmemiz gerekir. Bunun için şu adreslerden yararlanabilirsiniz:

http://www.PHP.net/downloads.PHP

http://www.mysql.com/downloads/index.html

Kategoriler
Php ve mysql

PHP`ye Giriş

phpC/C++, Pascal, hatta Visual Basic bilen kişiler için PHP öğrenmek hemen hemen bir öğleden sonrayı ayırmak suretiyle yapılabilecek bir iştir. Bu dillere aşina olmayanlar ise belki bir kaç öğleden sonralarını ayırmak zorunda kalabilirler! PHP, bir Script dilidir; yani kodları düz yazı dosyaları halinde kaydedilir ve kullanılacağı ortamda bir yorumlayıcı tarafından yorumlanır. Bu, PHP ile yazacağınız programları, derlemek yani ortaya bir EXE veya çalıştırılabilir başka bir dosya çıkartmaya gerek olmadığı anlamına gelir. Fakat PHP Script`lerinizi çalıştırabilmek için bu dili bilen bir programa ihtiyacınız vardır. Bu programın tek başına (komut istemci penceresinde veya terminal ekranında) çalışması mümkün olduğu gibi, Web Server tarafından da çalıştırılabilir olması gerekir. Başka bir deyişle Web Sunucu programının PHP anlar hale getirilmesini sağlamak zorundayız.

PHP yorumcusu, bugün Zend-çekirdeği adı verilen bir Scripting teknolojine dayalı olarak, Zeev Suraski ile Andi Gutmans tarafından sıfırdan, tamamen yeniden yazılmış bulunuyor. Zend, tıpkı Windows Script Host ve mesela Visual Basic for Applications (VBA) gibi, işletim sistemine kendisi ile uyumlu Script dilleriyle yazılmış programları çalıştırma imkanı kazandıran bir teknolojidir (Zend konusunda ek bilgiyi Internet`te www.zend.com adresinde bulabilirsiniz.) Bugün bu dilin resmî adı “PHP: Hypertext Preprocessor” (Hiper-metin ön-işlemcisi) olarak değiştirildi, ve çeşitli Web Server`ların PHP dili anlaması için gerekli yorumlayıcıları yeniden üretlidi. 20 Ocak 200`de İsrail`de PHP`nin ilk uluslararası konferansı yapıldı ve 4`ncü sürümünün betası ortaya kondu.

Peki ama PHP nedir?

PHP ile artık oturup her türlü işlevselliği sahip programlar yazabilirsiniz; yani PHP başlı başına uygulama alanları bulabilecek düzeye ulaşmıştır. Başka bir deyişle PHP ile oyun programından tutun veritabanı yönetimine kadar hemen her türlü programı yazabilirsiniz. Bizi bu kitapçıkta ilgilendiren tarafıyla PHP, Web Sunucu`ya bir takım işler yaptırmak için program yazma dilidir. Tıpkı CGI/Perl veya ASP ya da ColdFusion, Java (Javascript değil!) gibi! PHP kodları, oluşturacağımız HTML sayfalarında HTML etiketlerinin arasında kendi özel ayracı içinde yazılır:

İster kişisel bilgisayarımızda, ister gerçek Internet ortamında olsun, bir Web Sunucu, ziyaretçinin (Internet istemci programının, Browser`ın) talep ettiği dosya adının uzatması olarak “.PHP,” “.PHP2,” “.PHP3,” veya “.PHP4” görünce, kendine kendine, “Yine bana iş çıktı!” diye düşünür! Çünkü Web Server, uzatması “.htm” veya “.html” olan bir dosyayı, kendi sabit disklerinden birinde bulur ve zahmetsizce, ziyaretçinin bilgisayarına gönderir. Fakat, “.asp,” .pl,” “.cfm” gibi, “.PHP” uzatması, Web Sunucu`ya bu sayfayı olduğu gibi, alıp ziyaretçinin Browser`ına göndermek yerine, önce PHP yorumlayıcıyı çağırarak, ona teslim etmesi gerektiğini bildirir. PHP yorumlayıcısı (yani Windows ortamında PHP.exe veya 4`ncü sürümle gelen PHP4isapi.dll, Unix ve türevlerinde çalıştırılabilir PHP dosyası), kendisine teslim edilen bu belgede önce “<?PHP” ve “?>” ayraçları arasındaki PHP kodlarını seçerek alır ve gereği ne ise onu yapar. Bu ayraçların içinde kalan kodlar, bizim yapılmasını istediğimiz işlemin komutlarıdır. HTML ile yetinmeyip, PHP kullanmamızın sebebi, bu komutların HTML`in yapayacağı şeyleri yapmasıdır.

HTML`in yapamayacağı şeylerin başında, Web Sunucusu`nda yapılacak işler vardır. Sözgelimi HTML etiketlerini kullanarak, Web Sunucusu`ndaki bir veritabanı dosyasını açıp, içindeki verileri okuyamayız. HTML yoluyla Web Sunucusu`nun sabit disklerindeki düz yazı dosyalarını da okuyamayız ve bu disklere dosya yazamayız. HTML etiketleri ile Web ziyaretçimizden bilgi edinebilir ve bunları Sunucu`ya yollayabiliriz; ama o kadar! Bu bilgileri işe yarar şekle sokmak için bize Server`da çalışan bir program gerekir. Server`da çalışan program, EXE ve DLL veya JSP (Java Server Pages) gibi bir “gerçek program”; veya Perl, ASP ve PHP gibi Script diliyle yazılmış bir program olabilir. (Gerçek programları yazanlar, tabiî, sizin Script diliyle yazılmış programlara “program” demenize çok kızarlar! Ama bu Script pogramlarının program olmasını hiç engellemez.)

Ne diyorduk? Web Sunucu, “.PHP” uzatmasını görünce telaşa kapılır, bu dosyayı PHP yorumlayıcısına verir ve o da “<?PHP” ve “?>” ayraçları içindeki kodları icra eder, demiştik. Bu icraatın sonunda ortaya çıkan ürün eğer ziyaretçiye gönderilecekse, HTML etiketleri içinde gönderilir; yani ziyaretçi asla PHP kodlarını göremez. Kimi zaman PHP programımızın çalışması sonucu ortaya ziyaretçiye gönderilecek bir ürün çıkmaz; elde edilen sonuç ya başka bir programa (örneğin elektronik ileti gönderen bir Sendmail progamına) hammadde olarak verilir, ya da Server`da sabit diske yazılır. Fakat her durumda, Web ziyaretçimiz bizim PHP kodlarımızı göremez; bu Web sayfalarımızda PHP kodu kullanmamız halinde, sayfalarımızın Browser tarafından tanınması veya tanınmaması gibi bir durumun ortaya çıkmaması demektir. Ziyaretçi ne tür Browser kullanırsa kullansın, kendisine Sunucu`dan daima saf HTML kodu geleceği için, sayfalarımızı rahatça görebilecektir. Tabiî bir nokta var: Sayfalarımızda herhangi bir Browser`ın arızalı yorumladığı veya hiç yorumlayamadığı HTML etiketleri bulunabilir; ya da söz gelimi ziyaretçiye giden HTML`in içinde Browser`da çalıştırılacak olan başka Script kodları bulunabilir; ve Browser bu kodları anlamayabilir. Örneğin, HTML sayfanızda VBScript kodları kullanmış iseniz, Netscape ile sitenize bağlanmış olan kişiler bu kodun oluşturmasını istediğiniz etkiyi göremeyeceklerdir; çünkü Netscape VBScript anlamaz! PHP ile yazacağınız Web programlarının (eski deyimiyle “sayfaların”) oluşturacağı HTML belgesinin Browser türleri ve sürümleri ile uyarlılığını sağlamak yine Web programcısı olarak sizin sorumluluğunuzdadır.

Özetlersek, PHP bir CGI programlama dilidir; bu dille, Web Sunucusu ile Web ziyaretçisi arasındaki buluşma noktası olan CGI`da bilgi alışverişi yapılabilir; Sunucu`da bulunan başka programlar çalıştırılabilir ve böylece Web sayfalarımıza HTML`in sınırlamalarının ötesinde hareket ve ziyaretçi ile etkileşme olanağı kazandırılabilir.

Sanırım iyi bir Web programcısı olarak şu anda ekrana “Merhaba Dünya!” yazdırmak için sabırsızlanıyorsunuz. Ama bunun için, PHP sayfanızı ya PHP-uyumlu bir Web Sunucusu`ndaki Web sitenize yüklemek, ya da kişisel bilgisayarınızdaki kişişel Web Sunucusu`na PHP öğretmek zorundasınız. Bu ikinci yöntemi kuvvetle tavsiye ederim; çünkü yazacağınız PHP programlarını gerçek Internet Sunucusunda sınamak, bazen arzu edilmeyen durumlara yol açabilir. Oysa kişinin bu denemeleri, evinde ve işyerinde kendi bilgisayarında yapması, çoğu zaman daha az başağrısı ve gözyaşına yol açar! En azından, PHP hatalarınızı ve gözyaşlarınızı sizden başka gören olmaz!

Kategoriler
Php ve mysql

Php Değişken İşlemleri

php

Değişken Yazımı
$yazar
= “Merhaba Dünya”; //$yazar ifadesine değer atadık
$Yazar = “Merhaba Dünya”; //$Yazar ifadesine değer atadık
Farklı şeylerdir. Çünkü değişken isimleri büyük/küçük harf duyarlıdır.
Uzunca kodlardan oluşan bir sistem yazıyorsunuz diyelim, altlara doğru ilerlerken kullandığınız bir değişkenin tipini öğrenmek istediniz (Sayısal, dizi, string vs..). İşte burada “Veri Tipleri” devreye girmektedir.
Veri Tipleri (Bu konuyla ilgili örnekler aşağı kısımlarda verilecektir.)
string
(text) //Harflerden oluşan yapılardır
integer (tamsayı) //Tamsayılardan oluşur. Örn: 5, 34 gibi
double (ondalıklı sayı) //Ondalıklı sayılardan oluşur. 2,3 gibi
array (dizi değişken) //Dizi tipi değişkendir. Örn: Haftanın günleri, aylar gibi.
object (Nesne) //Nesnelerden oluşur.
unknown type (bilinmeyen veri tipi) //Biçimi belirlenemeyen yapılardır.
————-
Örnek
[sourcecode language=’php’]$Sayi
= 5; //Sayı adlı değikeninin değerini 5 olarak bellekte tuttuk.
$Sayi ++; //Php’nin değişik sayı ekleme fonksiyonu ile Sayı adlı değişkeni “1” arttırdık
echo $Sayi; //Ekrana sonucu yaz.
[/sourcecode]
Örnek
[sourcecode language=’php’]$Deger
= 15; //Değer adlı değişkenimizi 15 olarak belirledik.
$Deger + = 4; //Değer adlı değişkenimizi artırıyoruz ama artış miktarı da 4 olarak belirliyoruz.
echo $Deger; //Sonucu ekrana yazdırıyoruz.[/sourcecode]
Ekran Çıktısı:19
Sabitler
Define
: Bir değişkenin değerinin yeniden tanımlanmasını önlemek için kullanılır.
define(“benimsitem”, http://www.teorik.net);
define(“harddiskkapasite”, 120);
define(“baskent”, “Ankara”);
echo “Türkiye’nin Başkenti” . baskent; //Ekrana: Türkiye’nin başkenti Ankara yazacaktır
echo “Harddiskimin kapasitesi” . harddiskkapasite; //Ekrana: Harddiskimin kapasitesi 120 yazacaktır
echo “Site adresim” . benimsitem; //Ekrana: Site adresim http://www.teorik.net yazacaktır.

Dönüşümler

Örnek
[sourcecode language=’php’]$Araba = “1.6 Tofas”;
$KDV = 17;
$Odenecek_Vergi = $Araba * $KDV ;[/sourcecode]
Ekran Çıktısı: 27.2 dir.
* String içindeki sayısal ifadeyi diğer bir sayısal ifade ile çarpabilmektedir.

Değişken Tip Dönüşümü

Örnek
[sourcecode language=’php’]$DegiskenAdi = 3;
$DegiskenAdi = (string) $DegiskenAdi;[/sourcecode]
* Sayısal bir ifade tanımladık ama daha sonra bu değişken bize string olarak gerekecekse ikinci satırdaki işlemle stringe çeviririz.
Örnek
[sourcecode language=’php’]$DegiskenAdi = “Serkan”;
$DegiskenAdi = (integer) $DegiskenAdi;[/sourcecode]
* İnteger bir ifade tanımladık ama daha sonra bu değişken bize integer olarak gerekecekse ikinci satırdaki işlemle integera çeviririz.
Örnek
[sourcecode language=’php’]$DegiskenAdi = 3.45;
$DegiskenAdi = (integer) $DegiskenAdi;
* Double bir ifade tanımladık ama daha sonra bu değişken bize integer olarak gerekecekse ikinci satırdaki işlemle integera çeviririz.
echo $DegiskenAdi;[/sourcecode]
Ekran Çıktısı: 3
Değişken Tipini Öğrenme ve Yeniden Belirleme
gettype ()
: Bir değişkenin tipini öğrenmek için kullanılır.
* gettype ($Degisken) şeklinde kullanılır.
settype (): Bir değişkenin tipini yeniden belirlemek için kullanılır.
* settype ($Degisken, “tip”) şeklinde kullanılır.

Örnek
[sourcecode language=’php’]$Degisken = 3.45;
echo gettype ($Degisken);[/sourcecode]
Ekran Çıktısı: double

Örnek
[sourcecode language=’php’]$Degisken = “Serkan”;
echo gettype ($Degisken);[/sourcecode]
Ekran Çıktısı: string

Örnek
[sourcecode language=’php’]$Degisken = 45;
echo gettype ($Degisken);[/sourcecode]
Ekran Çıktısı: integer

Örnek
[sourcecode language=’php’]$Degisken = 45.39;
settype ($Degisken, “integer”);
echo $Degisken;
[/sourcecode]

Isset, Unset ve Empty Fonksiyonları
isset()
: Bir değişken tanımlı ise ekran çıktısı olarak “1” sonucunu verir yoksa sonuç vermez.
unset(): Tanımlı olan değişkenin değerini siler.
empty(): Bir değişkenin boş olup olmadığını kontrol eder. Değişken yoksa ekran çıktısı 1 olur varsa ekran çıktısı olmaz.

Örnek
[sourcecode language=’php’]$Deger = 23;
echo isset($Deger);
[/sourcecode]

Örnek
[sourcecode language=’php’]echo isset($Sayi);[/sourcecode]
Ekran Çıktısı:
* Sonuç çıkmayacaktır.

Örnek
[sourcecode language=’php’]$Deger = 23;
unset($Deger);
echo $Deger[/sourcecode]
Ekran Çıktısı:
* Sonuç çıkmayacaktır.

Örnek
[sourcecode language=’php’]$Deger = 4;
echo empty($Deger);[/sourcecode]
Ekran Çıktısı:
* Sonuç çıkmayacaktır.

Örnek
[sourcecode language=’php’]echo empty($Deger);[/sourcecode]
Ekran Çıktısı: 1
* Sonuç çıkmayacaktır.
Not: Bir başka makalede görüşmek üzere. Makale, çeşitli kaynaklardan derlenip örneklerle çoğaltılmıştır.
Kategoriler
Php ve mysql

Upload edilen resmi Veritabanına kaydettirmek

code1. Adım : Sunucuya dosya göndermek
Sunucuya dosya gönderebilmek için gerekli input tipi file dır. yani,

<input type=”file” name=”dosya”>

yazdığımız anda, bize göz at penceresi sunacaktır. Ancak dosyanın sunucuya ulaşabilmesi için, form tagına – enctype=”multipart/form-data” – eklenmelidir. yani örnek bir form oluşturacak olursak;

<form name=”yuklemeformu” method=”post”  action=”yukleme.php” enctype=”multipart/form-data”>
<input type=”file” name=”dosya”>
<br>
<input type=”submit” name=”Gönder”>
</form>

işte sadece html kullanarak yaptığımız form ve doğru bir action adresi, sunucuya dosya yollamamız için yeterlidir. artık formu dolurduğunuzda, istediğiniz dosya, ekstra bir işleme gerek kalmadan sunucunuzn geçici klasörüne atılacaktır.

Kategoriler
Php ve mysql

php mysql islemleri – ekleme, silme, duzenleme, listeleme !!

php2ek5arkadaslar bunu uzun zamandir yapmak istiyordum php konusunda

kendini gelistirmek isteyen arkadaslar icin guzel bir dokuman olacak eminim.. oncelikle dokuman su ana kadarki son sistemlerde denenmistir ve sorun gorulmemistir, (php 5 …), kullandigim vista sisteminde de denedim, localde yani.. dokuman gelistirilmeye acik, sorun olursa konu altinda yorum yazarak yardim alabilirsiniz.

aragida anlatilan kodlar kullanilarak gelistirilmeye baslanan bir veb sitesi ve temasi demosu:
Demo silinmistir :s
Yukaridaki demo’nun Kaynak dosyalari download:
http://www.kuaza.com/kuaza-tema-arsivi-f193/php-islemlerini-yapabilen-yeni-tema-50-bitti-t2244.html

yukaridaki link kuaza tema arsivi icin hazirlanan bir iceriktir, gelistirilmeye devam edilmektedir..
gorus ve onerilerinizi yazabilirsiniz..

simdi gel gelelim okumanimizin baslangicina oncelikle kendimize bir veritabani olusturuyoruz ve asagidaki bilgileri veri tabanindan olusturdugumuz veritabanina yukluyoruz..


CREATE TABLE `not_defteri` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `baslik` varchar(255) NOT NULL,
  `aciklama` varchar(255) NOT NULL,
  `resim` varchar(255) NOT NULL,
  `ekleyen` varchar(255) NOT NULL,
  `tarih` varchar(255) NOT NULL,
  `k_site` varchar(255) NOT NULL,
  `k_url` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=67 ;


— Tablo döküm verisi `not_defteri`

INSERT INTO `not_defteri` (`id`, `baslik`, `aciklama`, `resim`, `ekleyen`, `tarih`, `k_site`, `k_url`) VALUES
(1, ‘maffay’, ‘maffay hakkinda hersey :)’, ‘resim.png’, ‘kuaza’, ‘2008’, ‘site 1’, ‘kuaza.com’),
(2, ‘baba nerdesin soyle’, ‘Bu site paylaşılan dosyaları içerisinde barındırmamaktadır,
dosyalar farklı kaynaklardan derlenip paylasılmaktadır ve sorumlulukları
tamamen kaynaklarına aittir.Hak sahibinin talebi durumunda paylasımlar
derhal sitemizden kaldırılacaktır.
Sitede verilen lin’, ‘http://www.kuaza.com/out/i45812_kk.jpg ‘, ‘pala’, ‘2009’,
‘bir kuaza olusumudur :)’, ‘kuaza.com’),
(3, ‘Baslik 3’, ‘Modern Kristallitler’, ‘resim.png’, ‘kuaza’, ‘2008’, ‘site 3’, ‘kuaza.com’),
(4, ‘Baslik 4’, ‘Masa Lambalari’, ‘resim.png’, ‘kuaza’, ‘2008’, ‘site 4’, ‘kuaza.com’),
(5, ‘Baslik 5’, ‘Aplikler’, ‘resim.png’, ‘kuaza’, ‘2008’, ‘site 5’, ‘kuaza.com’),
(48, ‘ne basligi’, ‘dfgdfgdfgdfgdfg’, ‘sdfsdfsd’, ‘fsdf’, ‘sdfsd’, ‘fsdf’, ‘sdfsd’),
(47, ‘kuaza.net php dersleri’, ‘aciklama icin zaman yok be guzelim’,
‘http://www.kuaza.com/out/i45657_image0011hk3rq3fb2iswp2.jpg’, ‘maffay61’,
’11-2-2008′, ‘ucretsiz resim yukleyin’, ‘kuaza.com’),
(66, ‘Sonuçları şşüü’, ‘Sonuçları şşüü’, ‘Sonuçları şşüü’, ‘Sonuçları şşüü’,
‘Sonuçları şşüü’, ‘Sonuçları şşüü’,
‘Sonuçları şşüü’);

 

sonrasinda baglanti bilgilerimizi iceren sayfamizi hazirlayalim…

baglan.php


<?PHP

$conn mysql_connect("localhost""root""");

if (!$conn) {
    echo 
"Unable to connect to DB: " mysql_error();
    exit;
}
  
if (!
mysql_select_db("deneme")) {
    echo 
"Unable to select mydbname: " mysql_error();
    exit;
}
mysql_query ("SET NAMES ‘latin5’ ");
?>

 

bu yukaidaki bilgileri kendinize gore gerekli yerlerini duzenleyin.. veri tabanina baglantimiz basarili olacaktir, sonrasinda ilk sayfamiz listeleme sayfamiz olsun, index sayfasinda veritabanimizdan gelen bilgileri listeleyelim..

k_index.php


<?PHP
require_once(‘baglan.php’);
?>
<table width="800px">
<tr>
<td bgcolor="gray">Sira</td>
<td bgcolor="gray">baslik</td>
<td bgcolor="gray">aciklama</td>
<td bgcolor="gray">resim</td>
<td bgcolor="gray">ekleyen</td>
<td bgcolor="gray">tarih</td>
<td bgcolor="gray">Site</td>
</tr>
<?php

$sql "SELECT id as id, baslik, aciklama, resim, ekleyen, tarih, k_site, k_url 
    FROM   not_defteri
    WHERE  id"
;

$result mysql_query($sql);

if (!$result) {
    echo 
"Could not successfully run query ($sql) from DB: " mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo 
"No rows found, nothing to print so am exiting";
    exit;
}

// While a row of data exists, put that row in $row as an associative array
// Note: If you’re expecting just one row, no need to use a loop
// Note: If you put extract($row); inside the following loop, you’ll
//    then create $userid, $fullname, and $userstatus

while ($row mysql_fetch_assoc($result)) {
    

$id=$row[‘id’];
$baslik=$row[‘baslik’];
$aciklama=$row[‘aciklama’];
$resim=$row[‘resim’];
$ekleyen=$row[‘ekleyen’];
$tarih=$row[‘tarih’];
$k_site=$row[‘k_site’];
$k_url=$row[‘k_url’];

?>

<tr><td><?php echo "$id"?></td>
<td> <?php echo "$baslik"?></td>

<td> <?php echo "$aciklama"?></td>
<td> <a href="<?php echo "$resim"?>" /> Resmi gormek icin tiklayin</a></td>
<td> <?php echo "$ekleyen"?></td>
<td> <?php echo "$tarih"?></td>
<td> <a href="http://<?php echo "$k_url"?>"><?php echo "$k_site"?></a></td>

<?php 

}

mysql_free_result($result);
?>
</tr>
</table>

 

yukaridaki listeleme sayfasina dikkat ederseniz oncelikle baglan.php sayfasini sayfamiza cagirdik sonrasinda gelen bilgileri degiskenlere atadik, ve alt tarafindaki tablolara yansittik..

simdide ekleme silme ve duzenleme sayfamizi yapalim..

k_islem.php


<style type="text/css">
<!–
.style1 {
    color: #FF8040;
    font-weight: bold;
}
–>
</style>
<form action="k_ekle.php" method="POST">
<table width="439" border="0">
  <tr>
    <td width="53" height="32"><span class="style1">Bolumler</span></td>
    <td width="370">&nbsp;<span class="style1">Doldurulmasi Zorunlu Alanlar</span></td>
  </tr>
  <tr>
    <td>Baslik</td>
    <td><input name="baslik" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>aciklama</td>
    <td><textarea name="aciklama" rows="10" cols="45"></textarea></td>
  </tr>
  <tr>
    <td>Resim</td>
    <td><input name="resim" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>Ekleyen</td>
    <td><input name="ekleyen" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>Tarih</td>
    <td><input name="tarih" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>Site ismi</td>
    <td><input name="k_site" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>Site url</td>
    <td><input name="k_url" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="submit" value="Ekle"/></td>
  </tr>
</table>
</form>
<table width="0">
<tr>
<td bgcolor="gray">Sira</td>
<td bgcolor="gray">baslik</td>
<td bgcolor="gray">aciklama</td>
<td bgcolor="gray">resim</td>
<td bgcolor="gray">ekleyen</td>
<td bgcolor="gray">tarih</td>
<td bgcolor="gray">Site</td>
<td colspan="2" bgcolor="gray">islem</td>
</tr>

<?PHP
require_once(‘baglan.php’);

$sql "SELECT id as id, baslik, aciklama, resim, ekleyen, tarih, k_site, k_url 
    FROM   not_defteri
    WHERE  id"
;

$result mysql_query($sql);

if (!$result) {
    echo 
"Could not successfully run query ($sql) from DB: " mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo 
"No rows found, nothing to print so am exiting";
    exit;
}

while ($row mysql_fetch_assoc($result)) {
    

$id=$row[‘id’];
$baslik=$row[‘baslik’];
$aciklama=$row[‘aciklama’];
$resim=$row[‘resim’];
$ekleyen=$row[‘ekleyen’];
$tarih=$row[‘tarih’];
$k_site=$row[‘k_site’];
$k_url=$row[‘k_url’];

?>

<tr><td><?php echo "$id"?></td>
<td> <?php echo "$baslik"?></td>

<td> <?php echo "$aciklama"?></td>
<td> <a href="<?php echo "$resim"?>" /> Resmi gormek icin tiklayin</a></td>
<td> <?php echo "$ekleyen"?></td>
<td> <?php echo "$tarih"?></td>
<td> <a href="http://<?php echo "$k_url"?>"><?php echo "$k_site"?></a></td>
<td> <a href="k_duzenle.php?id=<?php echo "$id"?>">Duzenle</a></td>
<td> <a href="k_sil.php?id=<?php echo "$id"?>">Sil</a></td>
<?php 

}

mysql_free_result($result);
?>
</tr>
</table>

 

yukaridaki islem sayfamizda da oncelikle ekleme bolumu yaptik ve hemen altinada veritabanindaki bilgileri listeleyerek duzenleme ve silme alanlari ekledik, bu sekilde listelenen bilgileri duzenleme ve silme linklerini kullanarak islem yapabilecegiz..

———-
Listelemeyi Sondan Baslayarak yapmak icin asagidakileri uygulamaniz yeterlidir:

Bunu

butun

kodlarinizda,

k_index.php

icin ve

k_islem.php

icinde kullanabilirsiniz.

 

listeleme islemini sondan baslayarak yapmak icin bu komutu kullanacagiz:

ORDER by id DESC

yani listeleme sayfamiz olan

k_islem.php

, sizinkini bilmiyorum herneyse, bu sekildeki kodlari:


$sql "SELECT id as id, baslik, aciklama, resim, ekleyen, tarih, k_site, k_url 
    FROM   not_defteri
    WHERE  id"
;     

bu sekilde degistirecegiz:

$sql "SELECT id as id, baslik, aciklama, resim, ekleyen, tarih, k_site, k_url 
    FROM   not_defteri
    ORDER by id DESC"
;     

yani sorgu sonundaki

WHERE id

degerine bununla degistirdigimizde :

ORDER by id DESC

Siralamayi sondan baslatarak yaptirmis oluyoruz…

——–

ama once eklemek istedigimiz bilgilerin gidecegi ve veritabanina eklenmesini saglayan sayfamizi olusturmaya..

k_ekle.php


<?PHP
require_once(‘baglan.php’);
?>

<?php

# güvenli form ç?kt?lar?
$baslik  strip_tags(htmlspecialchars(mysql_real_escape_string

($_POST["baslik"])));
$aciklama strip_tags(htmlspecialchars(mysql_real_escape_string
($_POST["aciklama"])));
$resim  strip_tags(htmlspecialchars(mysql_real_escape_string
($_POST["resim"])));
$ekleyen strip_tags(htmlspecialchars(mysql_real_escape_string
($_POST["ekleyen"])));
$tarih strip_tags(htmlspecialchars(mysql_real_escape_string
($_POST["tarih"])));
$k_site strip_tags(htmlspecialchars(mysql_real_escape_string
($_POST["k_site"])));
$k_url strip_tags(htmlspecialchars(mysql_real_escape_string
($_POST["k_url"])));

if(($baslik=="") or ($aciklama=="") or ($resim=="") or ($ekleyen=="") or ($tarih=="") or
 (
$k_site=="") or ($k_url=="")){
echo 
"Lutfen bos alan birakmayiniz<br />
<a href=’k_islem.php’>Tekrar Denemek icin geri donebilirsiniz</a>"
;
}else{

# kay?t sorgusu
$query mysql_query("INSERT INTO not_defteri 
(baslik,aciklama,resim,ekleyen,tarih,k_site,k_url) 
VALUES (‘$baslik’,’$aciklama’,’$resim’,’$ekleyen’,’$tarih’,’$k_site’,’$k_url’)"
);

# kontrol ediliyor
if($query) {
echo 
"kayit tamam";
echo 
"<br /><a href=’k_islem.php’>
geriye donerek islemlere devam edebilirsiniz</a>"
;
} else {
echo 
"kayit tamamlanamadi <br />
<a href=’k_islem.php’>Tekrar Denemek icin geri donebilirsiniz</a>"
;

}
}
?>

 

gordugunuz gibi ilk basta gelen verinin guvenirliligini kontrol ettik, ve ilerde gelebilecek aciklaara karsi veritabanina eklenen bilgileri sinadik..

 

sira geldi duzenleme sayfamizin yapimina gelen veriyi duzenlemek icin yukaridaki sayfada(k_islem.php) listeledigimiz veritabani id lerine duzenle linki eklemistirk, bu duzenle linkine tikladiktan sonra duzenleme yapacagimiz sayfayi olusturalim..

k_duzenle.php


<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" />
</head><?PHP
require_once(‘baglan.php’);
?>

   <?php 

# Once bilgileri al
$id=(int)$_GET[‘id’];

$sorgu=mysql_query("select * from not_defteri where id=’$id’");
$bilgi mysql_fetch_array($sorgu); 

echo ‘<form method="POST" action="k_baglan_duzenle.php">
<table width="439" border="0">
  <tr>
    <td width="53" height="32"><span class="style1">Bolumler</span></td>
    <td width="370">&nbsp;<span class="style1">Doldurulmasi Zorunlu Alanlar</span></td>
  </tr>
<input type="hidden" name="id" value="’
.$id.‘">
  <tr>
    <td>Baslik</td>
    <td><input name="baslik" value="’
.$bilgi[baslik].‘" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>aciklama</td>
    <td><textarea name="aciklama" rows="10" cols="45">’
.$bilgi[aciklama].

</textarea></td>
  </tr>
  <tr>
    <td>Resim</td>
    <td><input name="resim" value="’
.$bilgi[resim].‘" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>Ekleyen</td>
    <td><input name="ekleyen" value="’
.$bilgi[ekleyen].‘" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>Tarih</td>
    <td><input name="tarih" value="’
.$bilgi[tarih].‘" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>Site ismi</td>
    <td><input name="k_site" value="’
.$bilgi[k_site].‘" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>Site url</td>
    <td><input name="k_url" value="’
.$bilgi[k_url].‘" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="submit" value="Ekle"/></td>
  </tr>
</table>
</form>’
;  ?> 
</html>

 

en basa yazdigimiz html karakter seti komutu veritabanindan gelen tr karakterli bilgilerin bozuk cikmamasini saglamak ;;

sonrasinda k_islem.php sayfasindan gelen id yi get metoduyla aldik ve o id deki bilgileri listeledik..

listeleme isleminden sonra yaptigimiz degisikliklerin veritabanina kaydedilmesi icin bize bir de bu bilgilerin yollandigi update sayfasi lazim, gelin simdi bunu yapalim..

k_baglan_duzenle.php


  <?PHP
require_once(‘baglan.php’);
?>
<?php
$id
=$_POST["id"];
$baslik=$_POST["baslik"];
$aciklama=$_POST["aciklama"];
$ekleyen=$_POST["ekleyen"];
$resim=$_POST["resim"];
$tarih=$_POST["tarih"];
$k_site=$_POST["k_site"];
$k_url=$_POST["k_url"];

$guncelle=mysql_query("update not_defteri SET 

baslik=’$baslik’,aciklama=’$aciklama’,
ekleyen=’$ekleyen’,resim=’$resim’,tarih=’$tarih’,k_site=’$k_site’,
k_url=’$k_url’ where id=’$id’");

if($guncelle) {

echo "guncelleme basarili oldu<br />
<a href=’k_islem.php’>geriye donerek islemlere devam edebilirsiniz</a>"
;
}else{
echo 
"guncelleme basarisiz oldu";
}
?>

bir ocneki sayfamizdan k_duzenle.php sayfamizdan yani gelen bilgileri degiskenlere atadik, ve sonrasinda update komutunu kullanarak veritabanina eklettirdik..

duzenleme sayfamizda bitmistir simdi gelelim silme sayfamiza..

daha once k_islem.php sayfasindan sil linki eklemistik, buna tiklayarak sil komutunu yapmamiz icin bize gerekli olan son sayfada,

 

k_sil.php


<?php
require_once(‘baglan.php’);

$id=$_GET["id"];
echo 
"$id";
$sil=mysql_query("delete from not_defteri where id=’$id’");
if(
$sil){
echo 
"silme islemi basarili";
}else{
echo 
"silme islemi basarisiz";
}
?>

yukaridaki komutlada get metoduyla gelen id yi degiskene atadik ve degiskeni delete kodu kullanarak veritabanindan sildik..

islem bu kadar arkadaslar, sorulariniz olursa cekinmeyin sorun..

vista kullaniyorum localhostta sorunsuz bir sekilde calisiyor, sizde denemelerini yapmak icin yukaridaki dokumanlari kullanabilirsiniz..