UYARI: İnternet bir özgürlük ortamı, evet fakat her site gibi bu site de yayınına devam edebilmesi için reklam almak zorunda, ama büyük ihtimalle siz de reklam görmekten sıkıldığınız için AdBlock veya benzeri bir programı kurdunuz. Bu durum anlaşılır bir durum birçok kişi bunu yapıyor, fakat bu yapıldığı zaman da siteler masraflarını karşılayamadıkları için kapanmak zorunda kalıyor. Sitemiz AdBlock kullanan birini "Sen siteye girme" kardeşim diye engellemiyor çünkü özgürlük bunu gerektiriyor, siteyi seven zaten AdBlock'u kapatıp desteğini gösterir buna gerek yok, bu yüzden sitede özgürce dolaşacak sadece her dolaştığınız sayfalarda bu uyarı bulunacaktır....
Logo
mobilmenu
RenkliKodlar
php PDO türü veritabanı sınıfı

PHP ile PDO türü veri bağlantılı class (sınıf) kullanımı


Merhaba yazılarım durmadan devam ediyor bukadar kısa zamanlarda bukadar yazı yazabileceğim benim bile aklımda değildi, bu yazımda kendi projelerimde kullanmak için yazdığım çok kullanışlı sizin de beğeneceğinizi umduğum PDO veritabanı class'ını nasıl kullanıldığını anlatmaya çalışacağım.

Bildiğiniz üzere PDO, PHP 5 öncesi sürümler tarafından desteklenmez sunucunuz güncel değilse güncelleyiniz, ayrıca artık yeni yazdığınız projelerde PDO kullanın etraftaki paylaşımlardan gördüğüm kadarı ile halen mysql_connect kullanarak veritabanına bağlananlar var, ya birgün php yeni sürümde artık mysql_connect desteği yok derse hüsrana uğrayacak veya PHP eski sürümlerinin kurulu olduğu host aramaya başlayacaksınız.

Neden class kullanmalı?


Nedeni çok basit class sayesinde birçok kodları tekrar tekrar yazmak yerine class'a gödereceğimiz küçük komutlarla aynı işlemi yaparız hem PHP ilerde atıyorum 10 yıl sonra yeni bir veri bağlantı türü geliştirirse yeni olan türe göre yazılmış başka bir class ile anında tüm sitemizdeki bağlantı türünü değiştirmiş oluruz. 

Neler yapacağız?


PHP ile yazdığım bu class'ı kullanarak veritabanına bağlanıp veri çekmek, eklemek, güncellemek, silmek, sayısal işlemleri ve çoklu veriyi sayfalama gibi işlemleri yapacağız dosyaları indirmekle başlayalım dosyalarda örnek için index.php class kodların olduğu dbclass.php ve örneklerde kullandığım veritabanı tablo verleri için renklikodlar.sql dosyaları var.
PDO dbclass Dosyaları buradan indirebilirsiniz. 

PDO dbclass sınıfının kullanımı


Öncelikle Class'ı kullanmak için veritabanı dosyasını Mysql'e yükleyin sonra dbclass.php'yi projemize dahil (include) etmemiz gerekli sonra da sınıf nesnemizi oluşturup gerekli işlemleri kayıt çekme, silme güncelleme v.b yaptıktan sonra veritabanı ile işimiz bitince kapatmamız gerekiyor bunu yapmak için aşağıdaki kodu kullanacağız.
<?php
ob_start();

$dbhost = "localhost";
$dbuser = "root"; //Veritabanı Kullanıcı Adı
$dbpass = "root"; //Veritabanı Şifresi
$dbdata = "renklikodlar"; //Veritabanı Adı

include("dbclass.php"); //veritabani class dosyamızı dahil ediyoruz
$bag = new db(); // db class'imizla $bag nesnemizi olusturduk

//Kullanılacak olan işlem türü kodları buraya yazılacak

$bag->kapat();// $bag nesnemizi kapattik

ob_end_flush();
?>Kopyala

Kodlardan anlaşıldığı gibi ilerleyen açıklamalardaki örnekler 12. satırda çalışacaktır yazının devamında tekrar bu kodları vermeyeceğim.

Class'ı kullanarak tek kayıt çekme


Bu sınıfta (class'ta) Tek Kayıt çekme ile ilgili 3 seçeneğimiz var ASSOC,OBJ ve NUM size kolay gelen seçeneği kullanın.

Örnek kullanım şekli.
cek("SEÇİM", "TABLO", "SÜTUNLAR", "KOŞUL", array(KOŞULDEĞERLERİ));Kopyala

Örnekte SEÇİM yazan yerde ASSOC,OBJ veya NUM kullanın size kalmış.
TABLO yazan yere veritabanında bağlanmak istediğiniz tablo adını yazın.
SÜTUNLAR bu bağlantıda tablodaki hangi sütunlara bağlanacaksanız virgülle ayırın veya tümüne bağlanılacaksa * yazın
KOŞUL olan yere sql sorgusunda kullanılan koşullar yazılacak.
KOŞULDEĞERLERİ bu diziye koşulların değerleri koşul sırasına göre yazılacak

Koşullardan bazı sql örnekleri, KOŞUL ve KOŞULDEĞERLERİ nasıl yazılacak anlamanız için.
  • "WHERE baslik LIKE ?", array("%manset%") //baslik sütununda manset kelimesi geçen kaydı alır
  • "ORDER BY id DESC", array() //id değerine göre listeleme ASC veya DESC
  • "WHERE id=?", array(12) //bizim belirttiğimiz bir id numarası koşulu
  • "WHERE id>? AND okuma>? AND okuma<?", array(5,8,10)) // id 5 ten büyük okuma 8 ile 10 arası kaydı getirir
Birkaç koşul şekli bu şekilde, sql koşulları çok fazla olabileceği için mantığı anlamanız açısından bu örnekler size faydalı olacaktır koşuldaki ? işareti koşul değeri yerine kullanılıyor soldan sağa doğru kaç ? işareti kullanıldıysa okadar değeri koşul sıralamasına denk gelecek şekilde array() içinde virgülle ayırarak giriyoruz KOŞULDEĞERLERİ sayısal alanlar için olduğu gibi array(5,8,10) sayısal olmayan alanlar için array("deger","deger2","deger3") tırnaklarla belirtilmeli.

ASSOC ile $sonuc[ "id" ] şeklinde kullanarak veri çekmek
$sonuc = $bag->cek("ASSOC", "haberler", "id,baslik,haber,tarih", "ORDER BY id DESC", array());
echo "Haber id: ".$sonuc["id"]."<br>Başlık: ".$sonuc["baslik"]."<br>Haber: ".$sonuc["haber"]."<br>Tarih: ".$sonuc["tarih"];Kopyala

OBJ ile $sonuc->id şeklinde kullanarak veri çekmek
$sonuc = $bag->cek("OBJ", "haberler", "id,baslik,haber,tarih", "ORDER BY id DESC", array());
echo "Haber id: ".$sonuc->id."<br>Başlık: ".$sonuc->baslik."<br>Haber: ".$sonuc->haber."<br>Tarih: ".$sonuc->tarih;Kopyala

NUM ile $sonuc[ 0 ] şeklinde kullanarak veri çekmek
$sonuc = $bag->cek("NUM", "haberler", "id,baslik,haber,tarih", "ORDER BY id DESC", array(5,8,10));
echo "Haber id: ".$sonuc[0]."<br>Başlık: ".$sonuc[1]."<br>Haber: ".$sonuc[2]."<br>Tarih: ".$sonuc[3];Kopyala

PDO class ile çoklu kayıt çekmek


Buraya kadar olan kodlar tek bir kaydı çekmek içindi şimdi de çoklu kayıt çekmek için bu kodları nasıl kullanırız ona bakalım.
Kodlar aynı olduğu için tek kayıtlarda olduğu gibi 3 seçeneği de yazmama gerek yok sadece neleri değiştirip toplu halde kayıt çekilir ona bakalım.
Örnek kullanım aynı hic değişmeyecek tablo adı sütunlar koşullar koşul değerleri de istekleriniz doğrultusunda belirtilecek burada  değişim yapacağımız yer SEÇİM yazan yer.
cek("SEÇİM", "TABLO", "SÜTUNLAR", "KOŞUL", array(KOŞULDEĞERLERİ));Kopyala

SEÇİM olan yere yazmamız gereken kayıt şekline göre ASSOC_ALL, OBJ_ALL ve NUM_ALL olacak, sonra çoklu kayıt olduğundan döngüye alarak tek tek kayıtları sayfaya yazdırıyoruz aslında tek kayıttaki şekline sadece _ALL sözcüğünü ekliyoruz.
$sonuc = $bag->cek("OBJ_ALL", "haberler", "id,baslik,haber,tarih", "ORDER BY id ASC", array());
foreach($sonuc as $satir) {
echo "Haber id: ".$satir->id."<br>Başlık: ".$satir->baslik."<br>Haber: ".$satir->haber."<br>Tarih: ".$satir->tarih;
echo "<hr>";
}Kopyala

Benim en sevdiğim kullanım $satir->id şeklinde olduğu için OBJ_ALL olan örneği verdim siz SEÇİM'de ASSOC_ALL, OBJ_ALL veya NUM_ALL kullanarak aynen tek kayıt kodlarında olduğu gibi ($satir[ "id" ] , $satir->id veya $satir[ 0 ]) şeklinde yazdırma seçimleri elde edebilirsiniz.
KOŞUL ve KOŞULDEĞERLERİ tek kayıtlarda geçerli olanlar burda da geçerlidir.

Class buraya kadar fetch(PDO::FETCH_ASSOC) şeklindeki en çok kullanılan sonuç kümelerini kendi içinde tamamlayarak geri döndürdü, olur ya başka bir sonuç kümesine ihtiyacınız olursa diye sonuç kümesini kendiniz belirleyebileceğiniz kod aşağıdaki şekilde yazılacak.
$sonuc = $bag->cek("", "haberler", "id,baslik,haber,tarih", "ORDER BY id DESC", array());
$rs = $sonuc->fetch(PDO::FETCH_OBJ);
echo "Haber id: ".$rs->id."<br>Başlık: ".$rs->baslik."<br>Haber: ".$rs->haber."<br>Tarih: ".$rs->tarih;Kopyala

OBJ_ALL gibi bir SEÇİM belirtmedik onun yerine $sonuc->fetch(PDO::FETCH_OBJ); ile istenilen sonuç kümesini belirttik.

PDO class ile çoklu kayıt çekmek ve sayfalamak


Sayfalama mantığı aynı çoklu kayıtta olduğu gibi (ASSOC_ALL, OBJ_ALL ve NUM_ALL, sorgular, koşullar v.s) sadece birkaç ekleme yapacağız.
sayfala("SEÇİM", "TABLO", "SÜTUNLAR", "KOŞUL", array(KOŞULDEĞERLERİ), SAYFABAŞIKAYIT, SAYFANO, "?sayfa=", ÖNCESONRA);Kopyala

SAYFABAŞIKAYIT buraya anladığınız gibi bir sayfada gösterilecek olan kayıt sayısını yazıyoruz.
SAYFANO o anda bulunduğumuz sayfa numarası bunu devam eden örnekte goreceğiniz gibi $_GET[ "sayfa" ] ile alacağız.
?sayfa= burası adres satırımızı temsil eden yer adresle gönderdiğiniz başka veriler varsa ?id=5&okuma=7&sayfa= şeklinde düzenlenmeli
ÖNCESONRA buraya da sayfa numaraları için bir özellik yaptım (ilk onceki [ -10 ]123[ 4 ]567[ +10 ] sonraki son) kırmızı olan yerde kac sayfa çıkması gerekiyorsa onu yazın 3 yazarsanız parantez içindeki gibi olacaktır bu sayede sayfalama numaraları sayfadaki alana sığdırılabilir olacak.
sayfala functionu array() (dizi) olarak geri döner "veriler","sayfalar","toplamsayfa","toplamkayit" gibi bunların içinden veriler olanda bir array() dizidir ve istenilen kayıtları bu diziyi döngüye alarak yasfaya yazdıracağız.
// $_GET["sayfa"] ile hangi sayfada olduğumuzu alıyoruz bir sayı girilmemişse veya veri boş gelirse 1 sayıyoruz.
$sayfa = isset($_GET["sayfa"]) ? (int) $_GET["sayfa"] : 1;

//yazdırma SEÇİMİ (OBJ_ALL) kullandık sayfa başı (5) kayıt sonraki linklerin deseni (?sayfa=) sayfalama numaraları (3)lü sıra olsun
$sonuc = $bag->sayfala("OBJ_ALL", "haberler", "id,baslik,haber,tarih", "ORDER BY id ASC", array(), 5, $sayfa, "?sayfa=", 3);

// $sonuc["veriler"] dizi olduğu için döngü kurduk
foreach($sonuc["veriler"] as $satir) {
echo "Haber id: ".$satir->id."<br>Başlık: ".$satir->baslik."<br>Haber: ".$satir->haber."<br>Tarih: ".$satir->tarih;
echo "<hr>";
}

// Sayfalama yapacak olan kodlarımız
echo "<div class='sayfala'>";
echo $sonuc["sayfalar"];//sayfa sayilarini yazdirir (ilk onceki [-10]123[4]567[+10] sonraki son) seklinde
echo "</div><br>";

// Bazen kayıt sayısı sayfa sayısı gerekli olabilir kullanabileceklerimiz
echo $sonuc["toplamsayfa"]. " sayfada toplam " .$sonuc["toplamkayit"]. " kayit var, " .$sayfa. ". sayfadasınız.";Kopyala

Sayfa numaraları güzel bir görüntü oluşturmadı class='sayfala' var kodlarda dikkatinizi çektiyse sayfaya asağıdaki css kodunu ekleyin kendinize göre düzenleyebilirsiniz renkleri v.s 
<style>
.sayfala {
  margin-top: 10px;
  color: #000;
} 
.sayfala, li {
  cursor:pointer;
  margin-right: 8px;
  font-size: 12px;
  display: inline-block;
  padding: 5px 9px;
  background-color: #efefef;
  border: 1px solid #ccc;
  border-radius: 3px
} 
.sayfala, li:hover, li.current {
  color: #000;background-color: #c9d2da;
} </style>Kopyala

Kayıt sayımı ve sayısal işlemler


Şimdi de haberler tablosunda kaç kayıt var kaç kez okundular veya başlığı manşet olan veriler kaçtane gibi sayısal işlemleri yapalım burada tek kayıt çekmede kullandığımız mantığı kullanıyoruz ufak değişikliklerle.
cek("SEÇİM", "TABLO", "SÜTUNLAR", "KOŞUL", array(KOŞULDEĞERLERİ));Kopyala

SEÇİM sayısal işlemler için ASSOC,OBJ veya NUM yerine KAYITSAY yazılıyoruz
SÜTUNLAR sayım yapacağımız türe göre SUM(okuma) , COUNT(id) gibi
TABLO, KOŞUL , KOŞULDEĞERLERİ önceki örneklerde olan mantıkla çalışıyor
Konuyu uzatarak bilgili arkadaşları ince detaylarla sıkmamak için örnekleri bir arada veriyorum
//haberler tablosunda kac kayit var
$say1 = $bag->cek("KAYITSAY", "haberler", "COUNT(id)", "", array());
echo "Tabloda " .$say1 . " haber var<br>";

//haberler tablosundaki okuma sutununda olan sayilari toplar
$toplam = $bag->cek("KAYITSAY", "haberler", "SUM(okuma)", "", array());
echo "Haberler " .$toplam. " defa okundu<br>";

//haberler tablosunda okuma sayısı 4 olan kac kayit var
$say2 = $bag->cek("KAYITSAY", "haberler", "COUNT(id)", "WHERE okuma=?", array(4));
echo "Okuma sayısı 4 olan " .$say2 . " haber bulundu<br>";

//baslik alaninda (Basligi 1) kelimesi gecen kac kayit var
$say3 = $bag->cek("KAYITSAY", "haberler", "COUNT(id)", "WHERE baslik LIKE ?", array("%Basligi 1%"));
echo "(Basligi 1) kelimesi gecen " .$say3 . " haber bulundu<br>";Kopyala

Kayıt ekleme


Kayıt eklemek çok basit bir şekilde tamamlanıyor, kayıt eklendikten sonra eklenen kaydın id nosu döndürür aksi halde false döner ve ona göre işlem yapar veya uyarı veririrz.
ekle("TABLO", "sutun,sutun", array("sutundeğeri", "sutundeğeri"));Kopyala

TABLO sadece veri gireceğimiz tablo adını yazıyoruz sütun ve sütun değerlerini veriyoruz
//haberler tablosunun baslik,haber,tarih ve okuma sütunlarına veriler ekleyerek bir kayıt oluşturalım
$ekle = $bag->ekle("haberler", "baslik,haber,tarih,okuma", array("Haberin Basligi", "Haber icerigi", date("Y-m-d H:i:s"), 0));

//$ekle bize yeni kaydın id no yu verecektir false dönerse kayıt varsa gibi durumlar için kontrolu yapalım 
if ($ekle){
echo "Haber " .$ekle. " nolu id'e eklendi";
}else{
echo "Kayit eklenmedi";
}Kopyala

Var olan kaydın güncellenmesi


Var olan kaydı güncelleme gerektiğinde kullanılacak kod örneği.
guncelle(TÜR, "TABLO", "SÜTUNLAR", "KOŞUL", array(SÜTUNDEĞERLERİ,KOŞULDEĞERLERİ));Kopyala

TÜR , bir veya birden çok (koşullara bağlı) sütun içeriğini değişmek için 0 yazıyoruz.
// id numarası 10 olan kaydı güncelleyelim
$guncel = $bag->guncelle(0, "haberler", "baslik,haber", "WHERE id=?", array("Değişen Başlik", "Değişen Haber Iceriği", 10));
if ($guncel){
echo $guncel. ": haber guncellendi";
}else{
echo "haber guncellenmedi";
}Kopyala

İşlem başarılı olduğu durumda guncelle functionu güncellediği kayıt sayısını döndürür aksi halde false olarak döner.
TÜR , (sayac haber okuma sayisi) gibi sutunlarda kullandigimiz önceki degere +1 eklemek için buraya 1 yazıyoruz böylece eski değeri 12 olan bir veri 1 artıyor yada artmasını istediğiniz kadar.
//id'si 10 olan haberin okuma sütunundaki sayıyı 1 arttıalım
$guncel = $bag->guncelle(1, "haberler", "okuma", "WHERE id=?", array(1, 10));
if ($guncel){
echo $guncel. ": haberin okuma sütunundaki sayı 1 arttırıldı";
}else{
echo "haber guncellenmedi";
}Kopyala

İşlem başarılı olduğu durumda guncelle functionu güncellediği kayıt sayısını döndürür aksi halde false olarak döner.

Bir kaydı silmek için


Bir kaydı silmek için kullanılacak function örneği.
sil("TABLO", "KOŞUL", array(KOŞULDEĞERLERİ));Kopyala

Açıklamam gereken detay olduğunu sanmıyorum üsttekileri okuyarak buraya geldiyseniz zaten bunlari biliyorsunuz kullanım şekli oldukça açık anlaşılır vaziyette sanırım onun için birkaç örnek kodu toplu şekilde veriyorum.
//haberler tablosunda id'si 10 olan kaydı sil
$sil = $bag->sil("haberler", "WHERE id=?", array(10));
if ($sil){
echo $sil. ": haber silindi";
}else{
echo "kayit YOK";
}

//haberler tablosunda id'si 12 ve 15 olan kayıtları sil
$sil = $bag->sil("haberler", "WHERE id=? AND id=?", array(12, 15));
if ($sil){
echo $sil. ": haber silindi";
}else{
echo "kayit YOK";
}

//haberler tablosundaki baslik alaninda manset kelimesi gecen kaylari silmek için
$sil = $bag->sil("haberler", "WHERE baslik LIKE ?", array("%manset%"));
if ($sil){
echo $sil. ": haber silindi";
}else{
echo "kayit YOK";
}Kopyala

Doğrudan sorgu çalıştırmak


Genel anlamda Class hemen hemen tüm sık kullanılan sorgu türlerini çalıştırsa bile bazen farklı sorgu türleri kullanmak isteyebileceğinizi düşünerek bu functionu da ekledim sınıf tarafına.
Mesela bir tablodaki tüm veriyi boşaltmak AUTO_INCREMENT verileri sıfırlamak ve buna benzer class ta bulunmayan işlemler için kullanabilirsiniz siz sorguyu yazın PDO taraflı diğer işlemleri class yapacaktır.
Örnek kullanım
sorgu("SQL Sorgusunu koşular", array(KOŞULDEĞERLERİ));Kopyala

Bir tablodaki tüm verileri boşaltmak için kullanılacak sorgu örneği.
$bag->sorgu("TRUNCATE TABLE haberler", array());Kopyala

Doğrudan sorgu çalıştırmak için SQL cümlesini siz yazarsınız koşullarda yine ? kullanilir array ile değerler gönderilir.
Fakat burda yazdırma sınıfı belirtmediğimiz için sonuna ->fetch(PDO::FETCH_ASSOC) gibi ifadeler ekleyerek sonuçları $sorgu[ "baslik" ] seklinde yada diğer şekiller gibi yazdıracağımızı belirtmemiz gerekli.
Tek veri icin fetch(PDO::FETCH_ASSOC), fetch(PDO::FETCH_OBJ), fetch(PDO::FETCH_NUM) coklu veri icin fetchAll(PDO::FETCH_ASSOC), fetchAll(PDO::FETCH_OBJ), fetchAll(PDO::FETCH_NUM) sorguda count(*) veya sum(okuma) varsa fetchColumn() gibi PDO ile gelen ifadeleri belirtmemiz gerekli.
haberler tablosundan id no 5 olan kaydı alalım
//haberler tablosundan id no 5 olan kaydı alalım
$sorgu = $bag->sorgu("SELECT id,baslik,haber FROM haberler WHERE id=?", array(5))->fetch(PDO::FETCH_OBJ);
echo $sorgu->baslik;Kopyala

Doğrudan sorgu çalıştırma durumu için birde döngülü örnek yapalım tablodaki verileri alalım
//haberler tablosundan okuma değeri 7 den büyük kayıtları alalım döngü ile sayfaya yazalım
$sorgu = $bag->sorgu("SELECT id,baslik,haber,tarih FROM haberler WHERE okuma>? ORDER BY id DESC", array(7))->fetchAll(PDO::FETCH_OBJ);
foreach($sorgu as $satir) {
echo "Haber id: ".$satir->id."<br>Başlık: ".$satir->baslik."<br>Haber: ".$satir->haber."<br>Tarih: ".$satir->tarih;
echo "<hr>";
}Kopyala

Dikkat ettiyseniz sınıf functionu kodun sonuna ->fetchAll(PDO::FETCH_OBJ); gibi üstte verdiğim ifadelerden birini yazdık, bunu buraya yazmayıp alt satırda yazabilirdik sonuç aynı olacaktır.
$sorgu = $bag->sorgu("SELECT id,baslik,haber,tarih FROM haberler WHERE okuma>? ORDER BY id DESC", array(7));
$sorgu = $sorgu->fetchAll(PDO::FETCH_OBJ);
foreach($sorgu as $satir) {
 echo "Haber id: ".$satir->id."<br>Başlık: ".$satir->baslik."<br>Haber: ".$satir->haber."<br>Tarih: ".$satir->tarih;
 echo "<hr>";
}Kopyala

Öyle sanıyorum ki bu php class PDO ile veritabanına bağlanarak yapmak istediğiniz her türlü veri çekme,güncelleme,silme,sayısal işlemler gibi ihtiyaçlarınızı fazlasıyla karsılayacaktır.
Yazı biraz uzun gibi görünebilir, class'ın yapabileceği işlemleri 2 sayfaya ayırmak istemedim toplu halde olmaları sizin için daha kolay olacaktır.
Benden bukadar kullanması size kalmış bir durum başka bir yazıda görüşmek üzere Hoşçakalın.

Mehmet İbrahim

php PDO türü veritabanı sınıfı Yorumları:


Bu yazıya toplam 20 yorum yapılmış.
Toplam 2 sayfa yorum var, Gösterimde olan yorum sayfası 1
16 Mayıs 2017, 11:25
Murat yazdı:
Harika. kısa ve güzel. Bir kaç projede kullandım.
Bir konuda yardım isteyeceğim. DB ve Dbclass doslarını include ettiğimizde çıktı HTML sayfamızda 6 satırlık boşluk oluşuyor. Bunu nasıl giderebiliriz?
17 Mayıs 2017, 12:18
Mehmet Ibrahim cevapladı:
Merhaba Murat
Sorun büyük ihtimalle UTF 8 Bom veya Bom olmadan kodlanan dosyalardan kaynaklı indidiğin dosyaların kodlaması sadece UTF 8 sendeki dosyalar "Bom Olmadan UTF 8 Olarak" Kodlandı Notepad++ programıyla açarak üst menüde (Kodlama/Bom Olmadan UTF 8 Olarak Kodla) veya sadece (UTF 8 Olarak Kodla) daha doğrusu senin dosyaların nasıl kodlanmış ona da aynı menüden bakıp Dbclass dosyanı da aynı kodlamaya çevir

Not
Aynı sorunu cPanel dosya yöneticisinde zip arşivi olarak yükleyince dosyalarda senin soruna benzer bir sorun yaşadım arşivi açarken server taraflı bozulma olmuştu bunu da belirteyim dedim..
22 Mayıs 2017, 11:39
Murat cevapladı:
Öyle olabileceğini tahmin ederek deneme yapmıştım ama yine de boşluk oluştu. Tabi sadece bi ihtimal deyip denediğim için sonuç alamayınca fazla ısrarcı olmadan başka ihtimaller üzerinde durdum.
Ama yine de sizde bu durumdan dolayı dediğinize göre tekrar deneyeceğim. Sonuçla ilgili bilgi veririm.
26 Şubat 2019, 06:07
Nejdet ACAR cevapladı:
Mehmet İbrahim,
Dediğin gibi yaptım, UT8 e Dönüştür seçeneğini kullandım ve kaydedim sayfayı yeniledim, tüm boşluklar yok oldu.
Teşekkürler...
06 Ocak 2018, 09:38
Metin yazdı:
Merhaba. Öncelikle kodlamayı paylaştığınız için teşekkür ederim. Güncelleme işleminde tablo içerisindeki bir hücreye ek yapmak için concat kullanmak istiyorum fakat çalıştıramadım. Bu konuda yardımcı olurmusunuz?
09 Ocak 2018, 12:36
Mehmet Ibrahim cevapladı:
Merhaba Metin istediğinizi daha detaylı anlatarak bana mail ile yazın elimden geldiği kadar yardımcı olurum elbette.
info
01 Mayıs 2018, 06:0
Kafamagirlasti yazdı:
Hocam pdo da herşey hos oluyor ama kayit yaparken ayni veri varsa kayit yapma kısmında takildim. Rowcount ile kontrol ediyorum ama yine de olmuyor. Bir ornek varmi gösterebileceğin?
11 Haziran 2018, 03:17
Mehmet Ibrahim cevapladı:
Merhaba mail şifremi değişince siteye de değişimi yapmadığım için yazdığınızı geç ördüm sorunuza gelince şöyle tek veri çektiğimiz kodu baz alarak yapabilirsiniz ORDER BY id DESC yerine WHERE id=? veya id yerine ne kullanmak istersen
$sonuc = $bag->cek("OBJ", "haberler", "*", "WHERE baslik=?", array("Manset"));
if($sonuc){
echo "Manset adında başlık var!";
} else {
echo "Böyle bir başlık yok";
}

}Kopyala
16 Kasım 2018, 04:57
Mümin yazdı:
Gayet başarılı.Teşekkür ederim.
01 Ocak 2019, 11:48
naber yazdı:
13 Şubat 2019, 08:57
Nejdet ACAR yazdı:
Öncelikle elinize sağlık ve teşekkür ederim.
Birçok sitede PDO kullanımıyla ilgili yazılar okudum ama bu sayfadaki kadar işime yarayan ve anlayabildiğim olmadı.
Yıllardır PHP bilmeme rağmen diğer sayfalardaki sayfalama kodlarını bir türlü doğru çalıştıramadım ama buradakinde doğru objeleri ve tablo adını değiştirip hemen listeye ulaştım.
Şimdi eski sayfamdaki CSS leri bu kodların içine uygulama işim kaldı sadece.
Class çok kullanışlı ve günümüzde bile hala en doğru yöntem buradaki.
Mesela çoğu yerde prepare kullanmayı bile göstermemişlerdi.
Tekrar teşekkür eder, saygılar sunarım...
02 Mart 2019, 08:13
Nejdet ACAR yazdı:
Merhabalar Ustam,
Bu veritabanı sınıfını kullanarak ufak bir site yapmaya başladım.
Fakat şöyle bir sorunum var.
Çoklu veri çekmek hakkındaki kodunuzu aynen kullandım, veriyi çektim, listeledim fakat veri yoksa kayıt yok dedirtemedim bir türlü.
*************************************************
$sonuc = $bag->cek("OBJ_ALL", "haberler", "id,baslik,haber,tarih", "ORDER BY id ASC", array());
foreach($sonuc as $satir) {
echo "Haber id: ".$satir->id."Başlık: ".$satir->baslik."Haber: ".$satir->haber."Tarih: ".$satir->tarih;
echo "<hr>";
}Kopyala

***********************************************
Yukarıdaki kodu kullandım.
Buna kayıt yoksa kayıt yok nasıl dedirtiriz.
Neresine ne ekleyeeğiz, beceremedim.
03 Mart 2019, 04:06
Mehmet Ibrahim cevapladı:
$sonuc nesnesi sorgulama sonucunda kayıt yoksa false döner.
Örnek verdiğiniz kodun hemen altında aşağıdaki kontrolü yaparsanız istediğiniz olur
if(!$sonuc) {
echo "Henüz haber eklenmemiş";
}Kopyala
28 Mart 2019, 09:34
Nejdet ACAR yazdı:
Merhabalar Üstadım,

Veritabanı sınıfındaki aklıma takılan bir konuyu dile getirmek için yazıyorum. Bir öneri veya çözümü olanın yazmasını rica ederim.

Sayfalama sorgusunda sayfa adlı bir değişken oluşturup, ona göre URL den GET ile sayfayı alıp sayfalama işlemi yapılıyor.

Fonksiyon içerisinde URL deki sayfa değerine olmayan bir sayfa yazılırsa ilk sayfaya git gibi kontroller var ama farklı durumlar kontrol edilemiyor gibi görüyorum veya benim yaptığım bir hata olabilir diye düşünüyorum.

Örneğin : 5 sayfalık bir sayfalamada alttaki bilgilendirme kısmında

şuanda 2.sayfadasınız
Kopyala

şeklinde yazan yere

şuanda 200000000000000000000000000000000000.sayfadasınız
Kopyala

yazdırmak için URL deki sayfa sayısının yanına bu 200000000000000000000000000000000000 değerini yazıp enter a basmak yetiyor.

Bir hata yoksa benim kullandığım sayfada öyle oluyor.

Çok da önemli bir sorun değil ama ne yapabilirim acaba diye aklıma takıldı, o yüzden yazdım, belki ben bir yerini bozmuşumdur dedim.

Fikri olan var mıdır?

Saygılar...
29 Mart 2019, 01:15
Mehmet Ibrahim cevapladı:
Evet $_GET ile alınan sayfa değerini goğrudan sayfaya yazdırdığımız için adres satırında yazan değeri yazar bunu değiştirebiliriz olmayan bir değer yazınca nasıl ki ilk sayfayı gösteriyorsan şu anda 1. sayfadasınız da yazdırabiliriz bunun için dbclass.php dosyasını açın //sayfalama yapan functionu sonundaki return kodu bulun.
return array("veriler"=>$sonuc, "sayfalar"=>$sayfala, "toplamsayfa"=>$toplamsayfa, "toplamkayit"=>$kayitSayisi);Kopyala

alttaki ile değiştirin
return array("veriler"=>$sonuc, "sayfalar"=>$sayfala, "toplamsayfa"=>$toplamsayfa, "toplamkayit"=>$kayitSayisi, "simdikisayfa"=>$sayfa);Kopyala

artık bulunduğunuz sayfayı yazdırmak için $_GET ile alınan değer yerine, şu an $sonuc["simdikisayfa"] sayfadasınız şeklinde yazdırabilirsiniz
Kolaygelsin
31 Mart 2019, 09:29
Nejdet ACAR yazdı:
dbclass içindeki sayfala fonksiyon düzeltmesini ve sayfa altlarındaki kısımları
$sonuc["simdikisayfa"]Kopyala

şeklinde düzelttim, sorun ortadan kalktı.
Artık URL den birşey girilse de sayfada yazılamıyor, güzel oldu.
Teşekkür ederim.
09 Ağustos 2019, 04:06
Fatih yazdı:
Selamun aleykum öncelikle, kolaygelsin
benim sorum kategoriye göre sayfalama yapsak yani koşullu sayfalama nasıl yaparız böyle bir fonksiyon yazabilirmisiniz db class a

şimdiden yardımlarınız için teşekkür ederim
09 Ağustos 2019, 04:28
Mehmet Ibrahim cevapladı:
A.S
Koşulu sorgunun kendisinde tanımlamanız gerekli
$sonuc = $bag->sayfala("OBJ_ALL", "haberler", "id,baslik,haber,tarih", "ORDER BY id ASC", array(), 5, $sayfa, "?sayfa=", 3);

sorgusunda ORDER BY id ASC yerine WHERE kategori=? ORDER BY id ASC ve array() içinde de kategori id nosunu alırsanız istediğiniz olacaktır altaki kod örnektir

$sonuc = $bag->sayfala("OBJ_ALL", "haberler", "id,baslik,haber,tarih", "WHERE kategori=? ORDER BY id ASC", array(57), 5, $sayfa, "?sayfa=", 3);

alttaki örnekte ise çift koşul kullanıldı

$sonuc = $bag->sayfala("OBJ_ALL", "haberler", "id,baslik,haber,tarih", "WHERE kategori=? AND okunma>? ORDER BY id ASC", array(57, 10), 5, $sayfa, "?sayfa=", 3);
10 Ağustos 2019, 01:55
Fatih yazdı:
Çok Teşekkür Ederim İbrahim Bey yapmış olduğunuz yardım için işe yaradı. Herşey için sağolun.
çalışmalrınız ve kısa sürede cevap vermeniz çok güzel gerçekten. tekrar saoğolun kolay gelsin...
21 Ağustos 2019, 10:52
Fatih yazdı:
Selamun aleykum Tekrar Kolay Gelsin
dediğinizi yaptım fakat şöyle bir sorunla karşılaştım

########
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.*******.com$
RewriteRule ^(.*)$ http://*******.com/$1 [L,R=301]


RewriteRule ^([0-9a-zA-Z-_]+).html$ index.php?do=konu&link=$1
RewriteRule ^kategori/([0-9a-zA-Z-_]+)(/?)$ index.php?do=kategori&link=$1




RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([0-9a-zA-Z-_]+)(/?)$ index.php?do=$1


##########
böyle bir htaccess dosyası var bende normalde kategoriye göre verileri sayfalatmadığımda gayet güzel sayfalama yapıyor. ama
kategoriye göre sayfalama yaptığımda maalesef 2. sayfaya tıkladığımda
******/vazoda-cicek?go=kategori_urunler&sayfa=2
oluyor ama veri tabanından resimler gelmiyor ve tıklanmamış gibi oluyor. Acaba Bu sorun için bana yardımcı olabilirmisiniz. Saygılarımla

21 Ağustos 2019, 03:00
Fatih yazdı:


***.com/?do=kategori?sayfa=2
Kopyala


gibi oluyor anlatmaya çalıştığım bunu nasıl çözeriz acaba
21 Ağustos 2019, 08:25
Mehmet Ibrahim cevapladı:
Tekrar merhaba Fatih
Kodları gönderin bir bakayım bu şekilde ben de karıştım ya php tarafında kategori adini alırken hatanız var ya da htaccess dosyan php tarafı ile uyumlu olmuyor info
22 Ağustos 2019, 01:37
Fatih yazdı:
Çok teşekkür Ederim Mehmet Bey
Kodları gönderiyorum mailinize Allah razı olsun saolun
31 Aralık 2019, 05:11
Nejdet ACAR yazdı:
Merhaba Mehmet Usta,

Yine bir PDO sorusuyla karşınızdayım.
PDO Veritabanı Sınıfını daha önce birkaç siteme eklemiştim. Fakat yönetim paneli yapmaya üşendiğim için veri ekleme kısmını kullanmamıştım.
Veri Ekleme konusunda bir yerde takıldım, kafam durdu sanırım.
mysql_query deki gibi id yerine NULL falan yazıyor muyuz?
Kaydedilecek değerleri değişkenlere atadığım için array kısmındaki değişkenleri nasıl yazacağımı becerememiş olabilirim.
array daki değişkenleri '$degisken_adi','$degisken_adi','$degisken_adi' şeklinde mi,
yoksa direkt olarak $degisken_adi,$degisken_adi,$degisken_adi şeklinde mi
yazmakta hata yapmış olabilirim.
Sorgu hatası da vermiyor. Veya ben hataları kapatmışsam ondan vermiyordur.
Sorgum Şöyle :

$kayit_sorgusu = $baglan->ekle("urunler", "urun_kat,urun_date,urun_adi,urun_resim,urun_metin,urun_ekleyen", array($kat_sec, $eklenme_tarihi, $urun_ismi, $resim_adresi, $urun_tanitimi, $urunu_ekleyen));Kopyala


Muhtemelen saçma bir hata yaptım ve ondan çalışmıyordur.

Senden bir yorum ve öneri alabilir miyim Mehmet Ustam.

Saygılar...
31 Aralık 2019, 10:53
Mehmet Ibrahim cevapladı:
Merhaba Yazdığınız sorgu doğru görünüyor array daki değişkenleri tek tırnak içine almayınız
HATALI: '$degisken_adi'
DOĞRU: $degisken_adi
tüm array larda olduğu gibi , virgül ile de ayrılmalı değişkenler.
Sorgunuzdaki değişken adlarını doğru yazdığınızdan emin olun boş veri geliyor olabilir.
id yerine NULL falan yazmanız gerekmez AUTO_INCREMENT olarak belirtilen id alanını mysql veri ekleme anında kendi bir sonraki noya günceller.
Çözüme ulaşmak için Sorgunuzun önüne // ekleyip kapatın tüm değişkenleri echo ile sayfaya yazdırıp gelen verilerin doğru mu sağlamasını yapın veritabanında urun_kat,urun_date,urun_adi,urun_resim,urun_metin,urun_ekleyen alanlarının bir kısmı (NOT NULL) boş olamaz ayarlanıp ta veri boş gelirse sorun olabilir, ayrıca bu şekilde gerçekten sorgunun olduğu yere gelip gelmediğinizi de tespit etmiş olursunuz belki formu gönderirken hatalı bir adrese yönlendiniz.
Mutlu yıllar Kolaygelsin
  • 1
  • 2
  • Sonraki
  • Son



Bağlan

Yorumunuza cevap yazilmasi durumunda bildiri almak istiyor musunuz?