Banner

Kategori Arşivi: ‘Php’

En iyi PHP editörleri


PHP konusunda aldığımız bilgi, birikim ve tecrübelerin yanı sıra bu işi nerede ve nasıl icra ettiğimiz de önemli. Bu nedenle size PHP’yi en verimli ve en rahat yazabileceğimiz bazı editör ve IDE’lerden bahsedeceğim.

  1. Sublime Text 3
  2. PhpDesigner
  3. Notepad++
  4. Eclipse PDT
  5. NetBeans
  6. PhpStorm
  7. Zend Studio
  8. Aptana

Konuya girmeden kısaca IDE ve editör farkından bahsetmek gerekirse de; editörler günlük hayatta çok kez kullandığımız adı üstünde ilgili formatları açıp düzenlememizi sağlarlar. IDE’nin açılımı ise “Integrated Development Environment” türkçesiyle “Tümleşik Geliştirme Ortamı”. Yani sadece yazmak ve düzenlemekle kalmayıp aynı zamanda yazdığınız kodu derleyip çalıştırabilen ve bir çok geliştirme fonksiyonunu içinde bulunduran programlamlardır.

Sublime Text 3


Takdir edersiniz ki Sublime Text‘i ilk sıraya yazmamın bir sebebi var. Yakın zamanda tanıştığım ve “en sevdiğim editörler” listemin başına geçen Sublime Text, hem sade tasarımıyla hem de arkasında yatan çok süper eklenti desteğiyle neredeyse bir çok popüler editörün ve IDE’nin yaptığı şeyleri her işletim sisteminde (Cross-platform) yapabiliyor.

Bir lisans değeri $70 (~150TL), pahalı gözükse de isterseniz ücretsiz olarak kullanabiliyorsunuz. Ücretsiz olarak kullanırken tek etkisi ara sıra(dosyanızı kaydederken) sizi “hadi artık satın alın” şeklinde bilgilendirmesi oluyor. Bana soracak olursanız gerçekten satın almayı hak eden sade, temiz ve isteğinize göre çok fonksiyonlu bir editör.

PhpDesigner


Yazılım geliştirme sürecinde ihtiyacınız olan tüm fonksiyonları içinde barındıran bir PHP IDE ve PHP editörü. Adı özellikle PhpDesigner olsa bile çok sağlam HTML5, Javascript ve CSS desteği de bulunuyor. Kendi içinde bulunan FTP, SVN ya da GIT bölümleri ile hiç başka program açmadan sadece PhpDesigner ile tüm işinizi sonuna kadar yapabilirsiniz. Siz yazarken kodlarınızı deneyip yazım hatalarını bulup ilgili satırları işaretlemesi, basit gibi görünse de bunu onlarca ufak hatayla çarptığınızda gerçekten çok zaman kazandıran bir özelliği olduğunu anlayabilirsiniz.

Ticari kullanım lisansı $69, kişisel kullanım lisansı ise $29. Eğer isterseniz bunu da ücretsiz(21 gün) kullanmayı deneyebilirsiniz.

Notepad++


İşin aslı Notepad++‘ı başka editörleri kullanıyor olasanız bile mutlaka kurun. Yani yanlış anlaşılmasın aslında tek başına bile yetecek bir editör, fakat ben ondan daha fazlası olduğunu düşündüğüm için her türlü bilgisayarınızda barındırmanızı öneriyorum.

Kurduktan sonra sağ menünüze yer edinen “Edit with Notepad++” seçeneği çoğu üşendiğiniz durumlarda can kurtaran görevi görüyor. Gayet hafif ve çok hızlı, bu nedenle anında müdahelelerde çok işine yarayabilir.

Eclipse PDT


Bencil olmayan bu harika IDE; bir çok programlama dilinine özel geliştirme araçları eklentileri ile hizmet veriyor. Bence Eclipse IDE kategorisinde birinci sırada yer almalı, fakat genel olarak değerlendirdiğimizde bu alanda en iyiyi belirleyenin başka şeyler de olduğunu düşünüyorum.

Ayrıca buradaki sıralamamı çok ciddiye almayın, yani Eclipse PDT sonda olması en kötüsü o olduğu anlamına gelmiyor. Bu yazıyı hazırlarken bir çok başka editörü atladım ve yazmadım, hepsini yazsam Google’dan farkımın olmayacağını düşündüm 😀

Ve sonuç olarak en yukarıdaki listeye yazıp burada resimleriyle gösterip açıklamadığım bir kaç editör/IDE daha var. Onları da inceleyip karar vermeyi size bırakıyorum. Fakat yukarıda da dediğim ve ilk sıraya koyduğum gibi; benim önerim Sublime Text 3‘dir.

Varsa sizin de beğendiğiniz editörleri burada paylaşabilir ya da burada paylaşılanların iyi ve kötü yanlarını yazabilirsiniz.

Bir sonraki PHP serüveninde görüşmek üzere, kendinize iyi bakın!

Kaynak :https://www.phpr.org/en-iyi-php-editorleri/

Kategori Php
22.08.2016
1402 Okunma

PHP htaccess kullanımı

Htaccess; web alanında birçok faydalı yönlendirme işlerinin  yapılmasını sağlayan, Apache web sunucularında olan etkili ve çok amaçlı bir ayar dosyasıdır.

Web projelerinizi bir çok şekilde düzene sokup kullanıcı dostu URL’ler yapmamıza ve bir takım yollarla güvenlik önlemleri de almanıza yarayan ve bu alanda en favori olaylarımdan bir tanesidir.

Htaccess ile neler yapabiliriz?

  • SEO dostu URL’ler oluşturabilme.
    site.com/icerik.php?id=123 yerine site.com/icerik-basligi gibi
  • Subdomain ya da dizin yönlendirmeleri.
    site.com girildiğinde www.site.com’a yönlendirme gibi
  • “404 sayfa bulunamadı” gibi tüm hata sayfalarını istenilen yere yönlendirebilme.
    site.com/olmayan-sayfa-asdasd girildiğinde sizin belirlediğiniz bir sayfa açılabilir.
  • Sitenizin tamamına ya da bir dizine sadece belirli bir IP’nin girebilmesini sağlayabilirsiniz.
    Siteniz yapım aşamasındayken sadece sizin girip diğerlerini yapım aşamasında sayfasına yönlendirebilirsiniz. 
  • Özel dizinlere erişim engelleme.
    Sadece include edilen php dosyalarının olduğu bir klasörün kullanıcılar tarafından girilmesini engelleyebilirsiniz.
  • Bazı web servisi botlarının sitenizi taramasını engelleyebilirsiniz.
    Hoşunuza gitmeyen bir web arama motorunun ya da spam bir web servisinin sitenizi taramasını engelleyebilirsiniz. 
  • Özel dizinlerinizi şifreleyebilirsiniz.
    PHP ile bir dizin kontrol sistemi yazmaya uğraşmak yerine hemen bir kaç satır htaccess komutu ile istediğiniz dizine şifre ile girilmesini sağlayabilirsiniz.
  • Resimlerinizin başka sitelerde görünmesini engelleyebilirsiniz.
    Başka sitelerde sizin sitenizdeki resimlerin gösterilmesini engelleyerek sunucunuzun bant genişliğin başka sitelerce harcanmasını önleyebilirsiniz. (bu yöntemin adı hotlink diye geçer)
  • Ve bu yukarıda sayılanların haricinde bu yöntemleri bir arada kullanarak çok daha fazlasını yapabilirsiniz.

Hadi şimdi sırayla bu yukarıda saydıklarımın nasıl yapıldığına bakalım.

SEO ve kullanıcı dostu bağlantılar oluşturma

Htaccess’in en popüler kullanım alanlarından birisi budur. Ve sizin de en sevdiğiniz özelliklerinden birisi olacağına inanıyorum.

Bu olayı kullanmanın 2 ideal yöntemi var; birincisi önceden öğrendiğimiz GET metodu ile sayfa.php?sayfa=iletisim şeklinde, ya da POST metodu gibi “REQUEST_URI” ile kullanmak. Hangisi kolayınıza geliyorsa onu seçebilirsiniz fakat benim favorim “REQUEST_URI”den yana.

Yöntem 1: GET metodu kullanarak yapmak.

Öncelikle bir içerik sayfa.php‘miz olsun ve örnek amaçlı switch ile sayfaları tanımlayalım:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
if(!isset($_GET['sayfa'])) { // eğer boşsa anasayfa varsayalım.
   $sayfa = 'anasayfa';
} else {
   $sayfa = $_GET['sayfa'];
}
switch($sayfa) {
case 'iletisim':
   echo '<h2>İletişim</h2>';
   echo '<p>Bize bilgi@site.com adresinden ulaşın!</p>';
   echo '<p><a href="/">Anasayfa</a></p>';
   break;
case 'hakkinda':
   echo '<h2>Hakkında</h2>';
   echo '<p>Bizi tanıyan tanır, yeniler örnek alır, tanımayanlar ibret alır.</p>';
   echo '<p><a href="/">Anasayfa</a></p>';
   break;
case 'anasayfa':
   echo '<h2>Sitemize hoşgeldiniz!</h2>';
   echo '<p><a href="/hakkinda">Hakkında</a><br/>';
   echo '<a href="/iletisim">İletişim</a></p>';
   break;
default: // hiç birisi değilse 404 varsayalim
   echo '<h2>Bulunamadı!</h2>';
   echo '<p>Böyle bir sayfamız henüz yok, değiştirilmiş ya da silinmiş olabilir.</p>';
}

Şuan htaccess kullanmadan bu sayfamızı “sayfa.php, sayfa.php?sayfa=hakkinda, sayfa.php?sayfa=iletisim” şeklinde kullanabiliriz. Şimdi gelelim bunu kullanıcı dostu yapmamıza, bu kısımda kod kısmımızda herhangi bir şey değiştirmemize gerek yok.

Sitemizin ana dizinine “.htaccess” adında dosya oluşturuyoruz. Eğer FTP programınız ya da işletim sisteminiz böyle bir dosya oluşturmanıza izin vermiyorsa, not defterinden boş bir sayfa açıp kodları içerisine yazıp, farklı kaydet diyip, “Tüm dosyalar” seçeneğini seçip “.htaccess” yazıp bu dosyayı oluşturabilirsiniz.

İçerisine şu satırları yazıyoruz:

1
2
3
4
5
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ sayfa.php?sayfa=$1 [QSA,L]

Bu işlemi yaptıktan sonra Htaccess; kullanıcılar eğer olmayan bir sayfaya girmeye çalışırlarsa, yani normalde /hakkinda ya da /iletisim gibi bir dizinimiz olmadığı için, 404 hata sayfasına değil de bizim sayfa.php dosyamıza yönlendirecek.

Fakat yönlendirirken girilmiş olan sayfayı bizim dosyamıza “sayfa” GET parametresi olarak gönderek. Yani bu şekilde site.com/deneme diye girildiğinde arkaplanda çalışacak olan sayfa “site.com/sayfa.php?sayfa=deneme” olacaktır.

Sonuç olarak yine aynı sistem çalışsa da kullanıcılar artık php dosyalarının adını ya da diğer GET parametresi uzantılarını yazmasına gerek kalmadan temiz ve akılda kalıcı bağlantılarla sitenizde gezebiliyor.

Yöntem 2: REQUEST_URI ile yapmak.

Diğer yöntemden tek farkı $_GET[‘sayfa’] yerine girilen adresi $_SERVER[‘REQUEST_URI’] ile okuyoruz. Fakat burada bize ilk baştaki “/” işaretini de veriyor (“/hakkinda” şeklinde). Bunun için ilk karekteri substr fonksiyonu ile atlıyoruz.

Yani kod kısmımızın ilk 5 satırını şöyle değiştireceğiz:

1
2
3
4
$sayfa = substr($_SERVER['REQUEST_URI'], 1); // ilk "/" karakterini atlıyoruz.
if(!empty($sayfa)) { // eğer boşsa anasayfa varsayalım.
   $sayfa = 'anasayfa';
}

.htaccess dosyamızda da bu yöntem için bir satırlık değişiklik yapıyoruz, GET parametresi tanımladığımız kısmı siliyoruz:

1
2
3
RewriteRule ^(.*)$ sayfa.php?sayfa=$1 [QSA,L]
// yerine
RewriteRule ^(.*)$ sayfa.php [L]

Subdomain ya da dizin yönlendirme

Bu blog üzerinde bir örneğini görebilirsiniz; phpr.org diye girmeye çalıştığınızda sizi otomatik olarak www.phpr.org adresine yönlendirir.  Buradaki mevzu kişinin zevkine de bağlı olsa da daha çok arama motorları ile alakalı. Bazı durumlarda Google sitenizin “www” ekli olan ve olmayan halini farklı iki site gibi değerlendirebiliyor. Mesela bir sitenizin bir çok yerde linki hem “www” ile hem de olmadan paylaşılınca kısmen domain popülerliğini dağıtmış oluyor.

Htaccess ile “www” olmadan girildiğinde ekleyerek kalıcı yönlendirme yapıldığında tüm ilgiler tek bir subdomain ve domainde toplanıyor.

1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST} phpr.org [nc]
RewriteRule (.*) //www.phpr.org/$1 [R=301,L]

İsterseniz tam tersini de yapabilirsiniz;

1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST} www.phpr.org [nc]
RewriteRule (.*) http://phpr.org/$1 [R=301,L]

Bir dizin yönlendirmek için de çok basit olarak tek bir satır ile yapabiliyoruz. Dikkat edilecek nokta dizini ne şekilde yönlendireceksiniz? Genel olarak kalıcı (301) ya da geçici (302) durumları kullanılır. Dahası için buraya bakabilirsiniz.

Eğer kalıcı yönlendirme (301) derseniz arama motorları girilen adresdeki indexleri yeni yönlenen adres ile değiştirir. Geçici derseniz herhangi bir değişiklik yapmadan yönlenen adrese girer ve tarar.

1
2
RewriteEngine On
RewriteRule ^eski_adres$ /yeni_adres [R=301,L]

Hata sayfalarını yönlendirme

Hata sayfalarının durum kodlarını öğrenmek için şuraya bakabilirsiniz. Bunlardan en yaygın olarak bildiğimiz; 404 kodlu sayfa bulunamadı, bir diğer örnek olarak da 403 kodlu giriş izni olmayan sayfa hatasıdır.

Dikkat etmeniz gereken nokta; yukarıda SEO ve kullanıcı dostu bağlantılar oluşturma yönteminin temeli, olmayan sayfaları yani 404 kodlu sayfaları bizim belirli dosyamıza yönlendirme olduğu için o yöntemi kullanırken bu aşağıdaki kodlar ile 404 sayfası tanımlamaya çalışmak faydasız olacaktır.

1
2
ErrorDocument 403 /izin_yok.html
ErrorDocument 404 /bulunamadi.html

Belirli IP adresine izin verme/engelleme

Tüm bir siteyi olduğu gibi isterseniz sadece belirli klasörlere göre de IP erişim engeli koyabilirsiniz. Bunu yapmak için hazırladığınız “.htaccess” dosyasını ilgili alt klasörün içerisine koymanız yeterli.

1
2
3
deny from all #herkesin girmesini engelle
allow from 127.0.0.1 #bu ip adresine izin ver
allow from 192.168.0.0/255 #ya da bu ip blokunun girmesine izin ver

Ayrıca sadece “deny from all” diyerek kullanıcılar tarafından erişimini tamamen engelleyebilirsiniz.

Bazı bot ve web servislerinin erişimini engellemek

İstemediğiniz ya da sitenizde aşırı dolaşıp yoran botları basit bir htaccess hamlesiyle engelleyip sunucunuzu rahatlatabilirsiniz.

Şu adreste genel olarak mimlenmiş kötü amaçlı olduğu düşünülen tüm botların bu yöntem için olan listesini bulabilirsiniz. Ben örnek amaçlı bir kaç tanesini yazacağım.

1
2
3
4
5
6
7
8
9
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule .* - [F]

Ayrıca bu yöntem ile mobilden giren kişileri de algılayıp mobil sitenize yönlendirilmesinde de kullanabilirsiniz.

1
2
3
RewriteCond %{REQUEST_URI} !^/mobil_dizin/.*$
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^(.*)$ /mobil_dizin/ [L,R=302]

Özel dizinleri şifrelemek

Bu yöntem için öncelikle basit bir şifre dosyası oluşturmamız gerekiyor. Dosyanın içerisine her satıra bir kullanıcı ekleyebiliyoruz. Ve her satırda “isim:şifre” şeklinde kullanıcı adı ve şifreleri tanımlıyoruz.

Şifre dosyamızın adını .htpasswd yapıp .htaccess dosyamızda belirteceğmiz bir yere yerleştiriyoruz. Sonrasında bu bilgiler ile şifrelemek istediğimizin dizinin içerisine aşağıdakileri yazıyoruz.

1
2
3
AuthUserFile /dosya/dizini/.htpasswd
AuthType Basic
AuthName "Gizli Dizin"

İçeriklerin başka sitelerde kullanılmasını engellemek

Hotlink adıyla bilinen bu yöntem sayesinde sitenizde olan müzik, resim, video gibi içeriklerin başka sitelerde gösterilip, oynatılmasını engellemenizi sağlıyor. Bu sayede sunucunuzun bant genişliğinin başka siteler üzerinden harcanmasına engel oluyorsunuz.

Bu yöntemde başka siteden bizdeki bir resim görüntülenmek istendiğinde ona istenilen resim yerine bir hotlink uyarı resmi gösterebiliyoruz. Bunun çokça örneğini imageshack.us’da görmüşsünüzdür.

1
2
3
4
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://([-a-z0-9]+.)?phpr.org[NC]
RewriteRule .*.(zip|mp3|avi|wmv|mpg|mpeg)$ //www.phpr.org/hotlink.jpg [R,NC,L]

Dikkat edilmesi gereken bazı detaylar

Farkettiyseniz yukarıda gösterdiğim yöntemlerin neredeyse hepsinde ilk “RewriteEngine on” komutu var. Eğer bu yöntemlerden bir kaçını birlikte kullanacaksanız tekrar tekrar bu satırı eklemenize gerek yok. Bunu sadece htaccess dosyanızın en başında bir kere yazmanız yeterlidir.

Diğer önemli husulardan birisi de birden fazla komut kullanırken işlemlerin sıralamasının öneminin olduğunu unutmayın. Yani eğer ilk önce 404 hata sayfası uyarı komutunu yazıp, alt satırına SEO dostu bağlantı komutlarını yazarsanız, önce 404 hata sayfa komutu tetiklenip ilgili yere gideceği için SEO dostu bağlantı yöntemi çalışmaz.

Parantez içlerinde kullanılan NC, L ve R harflerinin anlamları:

  • L: Last
    Bu tanımlanmadan önce ifade edilen kurallar bundan sonrakilere geçmemesini ve karışmamasını sağlar.
  • R: Redirect
    Bu değer kullanılırsa browserda adres değişir, kullanılmazsa yönlendirme arkaplanda yapılır fakat kullanıcının girdiği URL aynı kalır.
  • NC: No Case
    Büyük küçük harfe duyarsız davranır.
  • QSA: Query String Append
    GET metodu ile yönlendirme yaptığımızda yönlendirilen yere sonuna eklenen  GET parametrelerini de dahil eder.

Diğer tüm ifadeler için buraya bakabilirsiniz.

Bir başka faydalı PHP serüveninde görüşmek üzere esen kalın!

Kaynak : https://www.phpr.org/php-htaccess-kullanimi/

Kategori Php
22.08.2016
903 Okunma

PHP ile sayfalama

İçerikleriniz çoğaldı, bayağı kaynağınız ve birikiminiz oldu. Ve artık bunları sayfalamanın zamanı geldi. MySQL veritabanı tablosu verileri ile sayfalama yapımı anlatacağım bu yazıda genel sayfalama mantığını anladıktan sonra başka kaynaklardan gelen (array, xml, vs.) verilerle de sayfalama yapabileceğinize inanıyorum.

Toplam sayfa sayısını bulmak

Sayfalama olayına öncelikle toplam sayfa sayısını bulmakla başlayalım. Bu işlem için toplam içerik sayısını bir sayfada göstereceğimiz içerik sayısına böleceğiz, çıkan sonucu ise ceil fonksiyonu ile yukarı yuvarlayacağız.

1
2
3
4
5
6
7
$sayfada = 5; // sayfada gösterilecek içerik miktarını belirtiyoruz.
$sorgu = mysql_query('SELECT COUNT(*) AS toplam FROM mesajlar');
$sonuc = mysql_fetch_assoc($sorgu);
$toplam_icerik = $sonuc['toplam'];
$toplam_sayfa = ceil($toplam_icerik / $sayfada);

Buradaki ince noktalardan birisi yukarı yuvarlamak. Diyelim her sayfada 5 içerik istiyoruz ve 12 içerik var, bu durumda (12 / 5 = 2.4), ceil fonksiyonu ile bu rakamı 3’e yuvarlıyoruz. Eğer normalround fonksiyonunu kullanırsak böyle bir durumda 2 sayfamız olur ve son 2 içerik görünmez.

Eğer çok fazla içeriğiniz varsa, her sayfada toplam içerik sayınızı sayan bu SQL sorgusunu çalıştırmak yerine bir şekilde cache uygulayıp oradan okutmanız performans açısından daha faydalı olacaktır.

Sayfanın içeriğini listelemek

Bir sayfada ne kadar içerik olacağını belirledik, şimdi gelelim bulunduğumuz sayfaya göre içeriklerimizi listelemeye. Bu noktada artık kullanıcı tarafından sayfa sayısını almanın zamanı geldi. Ben örneğimde “sayfa” GET verisi ile alacağım, yani index.php?sayfa=2 şeklinde olacak. İsterseniz “s”de idealdir.

1
2
3
4
5
6
7
8
// eğer sayfa girilmemişse 1 varsayalım.
$sayfa = isset($_GET['sayfa']) ? (int) $_GET['sayfa'] : 1;
// eğer 1'den küçük bir sayfa sayısı girildiyse 1 yapalım.
if($sayfa < 1) $sayfa = 1;
// toplam sayfa sayımızdan fazla yazılırsa en son sayfayı varsayalım.
if($sayfa > $toplam_sayfa) $sayfa = $toplam_sayfa;

Eklediğimiz bu ufak koşullar ile geçersiz yazılan sayfa numaralarından doğacak olan hataları da engellemiş oluyoruz. Ayrıca değişkeni tanımlarken başına (int) eklememiz sayı haricinde yapılan girişleri geçersiz kılıyor. Bu ifadeyi NO, ID gibi dışardan gelen verileri çekerken de kullanabilirsiniz.

Hangi sayfada olduğumuzu da belirlediğimize göre artık içeriklerimizin istenilen kısmını listeleyebiliriz.

1
2
3
4
5
6
7
8
// kaçıncı içerikten başlanacağını ifade edecek limit değeri.
$limit = ($sayfa - 1) * $sayfada;
$sorgu = mysql_query('SELECT * FROM mesajlar LIMIT ' . $limit . ', ' . $sayfada);
while($icerik = mysql_fetch_assoc($sorgu)) {
   // ...
}

Sanırım kilit ve kafa karıştıran noktası burası. LIMIT ifadesi ile tüm içerikler arasından bizim istediğimiz adet ve aralıktaki içerikleri istiyoruz. Normalde sadece “LIMIT 10” dediğimizde 10 adet içerik verir. Fakat virgül ile ikinci bir sayı daha girdiğimizde kaçıncı sıradan sonra vereceğini ifade eder.

Yani “LIMIT 0, 5” dediğimizde 0. içerikten yani ilk içerikten sonra 5 tane ver diyoruz, bu bizim ilk sayfamız oluyor. 2. sayfa için “LIMIT 5, 5” yani 5. içerikten sonra 5 tane göster diyoruz. 3. sayfa için “LIMIT 10, 5”. Bu ifade için “($sayfa – 1) * $sayfada” işlemimizi yapıyoruz.

Sayfa sayılarını gösterme

Son olarak en alta sayfa sayılarını göstereceğiz. Bunun için döngü ile toplam sayfa sayısı kadar link oluşturacağız. Ayrıca bulunduğumuz sayfayı da dikkate alarak o sayfayı yazarken link yapmayacağız.

1
2
3
4
5
6
7
for($s = 1; $s <= $toplam_sayfa; $s++) {
   if($sayfa == $s) { // eğer bulunduğumuz sayfa ise link yapma.
      echo $s . ' ';
   } else {
      echo '<a href="?sayfa=' . $s . '">' . $s . '</a> ';
   }
}

Sonuç

Şimdi tüm hepsine bir arada bakalım ve daha rahat anlayalım.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$sayfada = 5; // sayfada gösterilecek içerik miktarını belirtiyoruz.
$sorgu = mysql_query('SELECT COUNT(*) AS toplam FROM mesajlar');
$sonuc = mysql_fetch_assoc($sorgu);
$toplam_icerik = $sonuc['toplam'];
$toplam_sayfa = ceil($toplam_icerik / $sayfada);
$sayfa = isset($_GET['sayfa']) ? (int) $_GET['sayfa'] : 1;
if($sayfa < 1) $sayfa = 1;
if($sayfa > $toplam_sayfa) $sayfa = $toplam_sayfa;
$limit = ($sayfa - 1) * $sayfada;
$sorgu = mysql_query('SELECT * FROM mesajlar LIMIT ' . $limit . ', ' . $sayfada);
while($icerik = mysql_fetch_assoc($sorgu)) {
   // ...
}
for($s = 1; $s <= $toplam_sayfa; $s++) {
   if($sayfa == $s) { // eğer bulunduğumuz sayfa ise link yapma.
      echo $s . ' ';
   } else {
      echo '<a href="?sayfa=' . $s . '">' . $s . '</a> ';
   }
}

Çok daha fazlası

Yukarıda anlattığım bu yöntem ile artık içeriklerinizi sayfalı yapabilirsiniz. Ama biraz ileri görüşlü olursak ya da elimizde çook fazla içerik ve bu nedenle yüzlerce sayfamız varsa; 1’den 200’lere kadar çok uzun sayfalar bağlantımız olur. Hem çirkin hem de kullanıcı dostu olmayan bir görüntü ile karşılaşırız. Bunu önlemek için ne kadar çok sayfamız olursa olsun kullanıcını o an kaçıncı sayfada ise ona ilaveten sonraki ve önceki 5-10 sayfayı göstermeliyiz. Yani şu şekilde;

1
<<İlk sayfa <Önceki 35 36 37 38 [39] 40 41 42 43 Sonraki> Son sayfa>>

Ben bu olay için bir kod bloğu hazırladım, bunu direkt çalışmanıza dahil edip kullanabilir ya da inceleyip daha farklı versiyonlarını yazabilirsiniz. Dikkat edilmesi gereken nokta; bu yöntemin doğru ve güzel çalışması için $sayfa_goster değerine her zaman tek sayı girin. Bu sayede kullanıcı bulunduğu sayfayı yukarıdaki örnekteki gibi ortada görür.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// yukarıdan geldiği varsayılan değişkenler:
// $toplam_sayfa ve $sayfa
$sayfa_goster = 11; // gösterilecek sayfa sayısı
$en_az_orta = ceil($sayfa_goster/2);
$en_fazla_orta = ($toplam_sayfa+1) - $en_az_orta;
$sayfa_orta = $sayfa;
if($sayfa_orta < $en_az_orta) $sayfa_orta = $en_az_orta;
if($sayfa_orta > $en_fazla_orta) $sayfa_orta = $en_fazla_orta;
$sol_sayfalar = round($sayfa_orta - (($sayfa_goster-1) / 2));
$sag_sayfalar = round((($sayfa_goster-1) / 2) + $sayfa_orta);
if($sol_sayfalar < 1) $sol_sayfalar = 1;
if($sag_sayfalar > $toplam_sayfa) $sag_sayfalar = $toplam_sayfa;
if($sayfa != 1) echo ' <a href="?sayfa=1">&lt;&lt;İlk sayfa</a> ';
if($sayfa != 1) echo ' <a href="?sayfa='.($sayfa-1).'">&lt;Önceki</a> ';
for($s = $sol_sayfalar; $s <= $sag_sayfalar; $s++) {
    if($sayfa == $s) {
        echo '[' . $s . '] ';
    } else {
        echo '<a href="?sayfa='.$s.'">'.$s.'</a> ';
    }
}
if($sayfa != $toplam_sayfa) echo ' <a href="?sayfa='.($sayfa+1).'">Sonraki&gt;</a> ';
if($sayfa != $toplam_sayfa) echo ' <a href="?sayfa='.$toplam_sayfa.'">Son sayfa&gt;&gt;</a>';

1000+ sayfadan çok daha ötesi için burada anlattığımız “LIMIT 10, 5” ifadesini kullanmak yerine şu slaytta anlatılan yöntemleri inceleyebilirsiniz. Eğer fırsat olursa buradaki slaytta bahsi geçen yöntemleri de ayrı bir yazı ya da bu yazıya ek olarak yazmayı düşünüyorum.

Bu konuyla alakalı aklınıza takılan soruları ya da uyguladığınızda karşılaştığınız sorunları paylaşmaktan çekinmeyin.

Bir sonraki PHP serüveninde görüşmek üzere, hayırlı ramazanlar!

Kaynak : https://www.phpr.org/php-ile-sayfalama/

Kategori Php
22.08.2016
761 Okunma