İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

PHP Sayfalama kodu

metadige

0
İyinet Üyesi
Katılım
23 Aralık 2005
Mesajlar
354
Reaction score
4
PHP de sayfalama çok soruluyor sanırım, buraya örnek olarak yazdığım bir kod ekleyim ihtiyacı olanlar için. Gerekli yerleri kendinize göre değiştirin,linklerin görünümü vs. için kendi beğeninize göre stillleri değiştirebilirsiniz.

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Veritabanı Sayfala</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9">
<style type="text/css">
body{
margin:0;
padding:0;
font-size:11px;
font-family:Tahoma, Verdana, Arial, Helvetica, sans-serif;
}
table{
border:1px solid #999;
margin-top:20px;
}
td{
padding:3px;
}
.baslik{
font-weight:bold;
text-align:center;
border:1px solid #999;
background-color:#900;
color:#fff;
padding:5px;
}
.sol, .sol2{
text-align:center;
font-weight:bold;
}
.orta, .orta2{
border-left:1px solid #999;
}
.sag, .sag2{
border-right:1px solid #999;
border-left:1px solid #999;
}
.sol, .orta, .sag{
background-color:#f4f4f4;
border-bottom:1px solid #999;
}
.sol2, .orta2, .sag2{
background-color:#ddd;
border-bottom:1px solid #999;
}
.div_sayfa{
font-weight:bold;
color:#009;
margin:10px;
padding:10px;
text-align:center;
}
.div_sayfa a{
color:#06c;
font-weight:bold;
padding:3px;
}
.div_sayfa a:hover{
color:#060;
}
.self{
color:#333;
font-weight:bold;
background-color:#ccc;
padding:3px;
}
.s_yok{
color:#666;
font-style:italic;
padding:10px;
text-align:center;
}
</style>
</head>
<body>
<?php
//Veritabanı bağlantı ayarları
$host= "localhost";
$database = ""; //Veritabanı adı
$username = ""; //Kullanıcı adı
$password = ""; //Şifre
$sql = mysql_connect($host, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR); 
mysql_select_db($database, $sql);

$gelen_sayfa = (isset($_GET['sayfa']) && $_GET['sayfa'] !='' ) ? intval($_GET['sayfa']) : 1;

//Bağlanılacak Tablo
$tablo = 'tablo';

//Sayafalamayı yapan dosyanın adı
$link = 'sayfala.php';

//Sayfada kaç kayıt görünecek
$limit= 20;

//Kaç sayfa öncesi ve sonrası görünecek
$s_s = 10;

/*------------------------------------
Alan Başlıklarını ve $sonuc['alan1'] 
kısımlarını kendinize göre değiştirin
-------------------------------------*/
$s_sor = mysql_query("select count(id) from $tablo") or trigger_error(mysql_error(),E_USER_ERROR);
$satir = mysql_result($s_sor,0);
mysql_free_result($s_sor);
echo '<table width="80%" align="center" border="0" cellspacing="0" cellpadding="0">
			<tr>
				<td class="baslik">No</td>
				<td class="baslik">Alan 1 Başlık</td>
				<td class="baslik">Alan 2 Başlık</td>
				<td class="baslik">Alan 3 Başlık</td>
				<td class="baslik">Alan 4 Başlık</td>
			</tr>';
if($satir >0){//sonuç varsa
	$baslama = ($gelen_sayfa > 1) ? (($gelen_sayfa -1) * $limit) : 0 ;
	$sayfa_kac = $satir/$limit;
	$sayfa_sayisi = ($satir % $limit != 0) ? intval($sayfa_kac)+1 : intval($sayfa_kac);
	$basla=( $satir >= $baslama ) ? $baslama : 0 ;
	unset( $sayfa_kac, $baslama );
	$sorgu = 'select * from '.$tablo.' order by id asc limit '.$basla.' , '.$limit;
	$sorgula = mysql_query($sorgu) or trigger_error(mysql_error(),E_USER_ERROR); 
	$i=1;
		$style='';
		while($sonuc=mysql_fetch_array($sorgula)){
			echo '
			<tr>
				<td class="sol'.$style.'">'.$i.'</td>
				<td class="orta'.$style.'">'.$sonuc['alan1'].'</td>
				<td class="orta'.$style.'">'.$sonuc['alan2'].'</td>
				<td class="orta'.$style.'">'.$sonuc['alan3'].'</td>
				<td class="orta'.$style.'">'.$sonuc['alan4'].'</td>';
				$style = ($style=='') ? '2' : '';
			$i++;
			}//while son
		mysql_free_result($sorgula);//hafızayı boşalt
		$hangi_sayfa= ($gelen_sayfa > 0)? $gelen_sayfa : 1 ;
		echo '
		</table>
		<div class="div_sayfa">
			Toplam '.$sayfa_sayisi.' Sayfadan '.$hangi_sayfa.'. Sayfa<br /><br />';	
			$alt= ($gelen_sayfa - $s_s);
			if($sayfa_sayisi <= $s_s || $gelen_sayfa <= $s_s ) {$alt=1;} 
			$ust= (($gelen_sayfa + $s_s)< $sayfa_sayisi ) ? ($gelen_sayfa + $s_s) : ($sayfa_sayisi);	
			echo ($gelen_sayfa > 1 )? '<a href="'.$link.'?sayfa=1" title="İlk Sayfa"><strong>« </strong></a><a href="'.$link.'?sayfa='.($gelen_sayfa -1).'" title="Önceki Sayfa"><strong>Geri</strong></a>':' ';
			for($i=$alt; $i<=$ust ;$i++){		
				echo ($i != $gelen_sayfa ) ? '<a title="'.$i.'. Sayfa" href="'.$link.'?sayfa='.$i.'">'.$i.'</a>' : '<span class="self">'.$i.'</span>';
				}
			echo ($gelen_sayfa < $sayfa_sayisi)? '<a href="'.$link.'?sayfa='.($gelen_sayfa +1).'" title="Sonraki Sayfa"><strong>İleri</strong></a><a href="'.$link.'?sayfa='.$sayfa_sayisi.'" title="Son Sayfa"><strong> »</strong></a>' :'';
			echo '</div>';
}
else{
		echo '<tr><td colspan="5" class="s_yok">Hiç Bir Sonuç Bulunamadı</td></tr></table>';
}

mysql_close($sql);
?>
</body>
</html>
 

ankara

0
İyinet Üyesi
Katılım
27 Ekim 2006
Mesajlar
397
Reaction score
0
Konum
Gemlik - Bursa
az önce bende sayfalama kodu arıordum buldum iyinet yeni mesajlara bi girdim kodlazımsa kullan

Mysql veri tabanina yazdigimiz verilerimizin (haberler, dokumanlar, linkler vb.) sayisi arttikca bunlari tek sayfada listelemek hiz ve okunabilirlik acisindan problem yaratir. Ancak veri tabanindaki verilerin tumunu bir sayfada listelemek yerine verileri beser beser, onar onar vb. diziler halinde bolerek listelersek hem okunabilirlik artar hemde hiz! Diyelimki 65 tane web adresinin bulundugu bir mysql tablomuz var. Bu tablodaki web adreslerinden ilk 3 tanesini alip digerlerinide linkler yardimi ile listeletebiliriz. Yani soyle birsey yapabiliriz;

Yapacagimiz sey tek bir php sayfasinda tum kayitlari bolerek listelemektir. Burada ilk once php sayfasina numara gondermeden calistirinca 1'nci sayfaya dusen kayitlar yani ilk 3 kayit listelenecek. 2 numarali sayfa linkine tikladigimizda php sayfasina ikinci sayfaya dusen verileri yani ilk uc kayittan sonraki uc kaydi listeletecegiz yani 4,5 ve 6'nci kayitlar. Bu boyle gidecek. Ileri linkine tikladigimizda siradaki 3 kayit listelenecek yani diyelimki 3 numarali sayfadayiz ve 7,8,9. kayitlar listeleniyor. Ileri linkine tikladigimizda 10,11,12. kayitlar listelenecek. Ayni sekilde Geri linkide Ileri linkinin tersine onceki 3 kaydi listeleyecek. Birde su ozellikler mevcut; diyelimki 4 uncu sayfadayiz 4. sayfa linki deaktif olacak yani gosterilen sayfanin linki deaktif olacak digerleri aktif olacak. Listelenen sayfaya birdaha tiklamanin mantigi yoktur herhalde! Ayrica diyelimki ilk 3 kaydi listeliyoruz yani 1. sayfadayiz. Bu durumda bundan daha geride bir kayit olmayacagi icin Geri linkini deaktif edecegiz. Ayni sekilde diyelimki son sayfadaki kayitlari listeliyoruz bundan sonra kayit olmadigi icin Ileri linkini deaktif edecegiz.

Scripti Hazirliyoruz...

Bir php dosyasi yaratin..Icine alttaki kodlari ekleyin;

PHP:
<?
# Php Ile Mysql'deki Verileri Sayfalama
# Yazar: JARGON - e-Mail: [email protected]
# Bu dokumani icerigini ve yazar bolumunu degistirmeden, 
# istediginiz sekilde kullanabilirsiniz.

# * * * AYARLAR * * *
$ayar['server']='localhost'; #Mysql server adresiniz.
$ayar['kullanici']='root'; #Mysql kullanici adiniz.
$ayar['sifre']='root'; #Mysql kullanici sifreniz.
$ayar['vt']='sayfalama'; #Mysql veri tabanizin adi.
$ayar['tablo']='linkler'; #Kayitlarin tutuldugu tablonuzun adi.
$ayar['kacar']=3; 
#Verileri kacar kacar listelemak istiyorsaniz o sekilde ayarlayin.


# * * * KONTROLLER * * *
if(!$ayar['kacar'] OR $ayar['kacar']<=0){$ayar['kacar']=5;} 
#$ayar['kacar'] degiskenini ayarlamamissaniz veya yanlislikla 0 
# yapmissaniz scriptin hata vermemesi icin degiskene 5 ataniyor.
if(!$HTTP_GET_VARS[sayfa]){$sayfa=0;} 
#Hangi sayfadaki kayitlarin listelenecegi belirtilmemisse, $sayfa adli 
# degiskene 0 degerini atiyoruz, boylece ilk sayfa acilir.
if($HTTP_GET_VARS[sayfa]<0){$sayfa=0;} 
#$sayfa adli degiskene disaridan 0'dan kucuk bir deger 
# gonderiliyorsa degiskene 0 degerini atiyoruz, boylece ilk sayfa acilir.

# * * * VERI TABANINA BAGLANIP VERILERI SECIYORUZ * * *
@mysql_connect($ayar['server'],$ayar['kullanici'],$ayar['sifre']);
@mysql_select_db($ayar['vt']);
$kayitlar=mysql_query('SELECT * FROM '.$ayar['tablo'].' LIMIT '.($sayfa*$ayar['kacar']).','.$ayar['kacar']); 
#Kayitlari seciyoruz.
$kacsecili=mysql_num_rows($kayitlar);
#Kac kayit sectigimizi buluyoruz.
if($kacsecili>0){$toplam=mysql_fetch_row(mysql_query('SELECT COUNT(*) FROM '.$ayar['tablo']));} 
#Tablodaki toplam kayit sayisini buluyoruz.

# * * * KAYITLARI YAZDIRIYORUZ VE SAYFALAMA LINKLERINI HAZIRLAYIP YAZDIRIYORUZ * * *
while($listele=mysql_fetch_row($kayitlar)){echo $listele[0].'<br>';} 
#Kayitlari yazdiriyoruz.
$kacsayfa=ceil($toplam[0]/$ayar['kacar']); 
#Tum kayitlarin toplam kac sayfada listelenecegini hesapliyoruz.
if($sayfa>0){echo'<a href='.$PHP_SELF.'?sayfa='.($sayfa-1).'>Geri</a> | ';}
#Ilk sayfada degilsek bir onceki sayfaya gitmek icin 
#Geri linkini yazdiriyoruz.
#Sayfalama numaralarini yaziyoruz.
for($i=0;$i<$kacsayfa;$i++){
if($sayfa==$i){echo ($i+1).' ';}
else{echo' <a href='.$PHP_SELF.'?sayfa='.$i.'>'.($i+1).'</a> ';}}
if($kacsayfa>($sayfa+1)){echo'| <a href='.$PHP_SELF.'?sayfa='.($sayfa+1).'>Ileri</a>';} 
#Son sayfada degilsek ve birden fazla sayfa varsa, 
#bir sonraki sayfaya gitmek icin Ileri linkini yazdiriyoruz.
?>

Simdi php dosyasini kaydedin ve sonra; mysql icinde sayfalama adinda bir veri tabani yaratip, bu veri tabani icinde alttaki linkler isimli mysql tablosunu yaratin.

HTML:
CREATE TABLE linkler (
link varchar(100) NOT lisanssız default ''
) TYPE=MyISAM;
INSERT INTO linkler VALUES ('http://www.box.sk');
INSERT INTO linkler VALUES ('http://www.google.com');
INSERT INTO linkler VALUES ('http://www.mail.com');
INSERT INTO linkler VALUES ('http://www.php.net');
INSERT INTO linkler VALUES ('http://www.mysql.com');
INSERT INTO linkler VALUES ('http://www.apache.org');
INSERT INTO linkler VALUES ('http://www.yahoo.com');
INSERT INTO linkler VALUES ('http://www.daum.net');
INSERT INTO linkler VALUES ('http://www.msn.com');
INSERT INTO linkler VALUES ('http://www.alexa.com');
INSERT INTO linkler VALUES ('http://www.ebay.com');
INSERT INTO linkler VALUES ('http://www.msb.gov.tr');
INSERT INTO linkler VALUES ('http://www.dmoz.org');
INSERT INTO linkler VALUES ('http://www.meb.gov.tr');
INSERT INTO linkler VALUES ('http://ww.tdk.gov.tr');
INSERT INTO linkler VALUES ('http://sourceforge.net');
INSERT INTO linkler VALUES ('http://www.ntvmsnbc.com');
INSERT INTO linkler VALUES ('http://www.cnn.com');
INSERT INTO linkler VALUES ('http://www.aklimasitegelmedi.com');

Ornek veri tabaninida olusturduktan sonra biraz once kaydettiginiz php dosyasini calistirin. Kayitlarin ucer ucer listelendigini goreceksiniz. Bu scripti kendi web sitenize uyarlayip cok rahatlikla kullanabilirsiniz. Eger veri tabaninizin veya tablonuzun adi farkli ise php kodundaki ayarlar bolumunde gerekli duzeltmeleri yapmayi unutmayiniz.

alıntıdır: http://www.ceviz.net/php-ile-mysqldeki-verileri-sayfalama_a118.html
 

metadige

0
İyinet Üyesi
Katılım
23 Aralık 2005
Mesajlar
354
Reaction score
4
Arkadaşım, eğer denediysen verdiğim kod söylediklerini zaten yapıyor. Artı olarak kaç sayfa öncesi ve sonrasının görüneceğini de ayarlıyabiliyorsun.

Tabi isteyen istediğini kullansın, ancak eklediğin kodda bir iki hata var. Birincisi sayfa linkleri yanlış çıkıyor, ikincisi veritabanında kayıt olup olmadığını baştan kontrol etmediğinden misal sayfala.php?sayfa=14 gibi bir adres yazdığında geri linki çıkıyor. Kullanacak arkadaşlar buna dikkat etsin.
 

ankara

0
İyinet Üyesi
Katılım
27 Ekim 2006
Mesajlar
397
Reaction score
0
Konum
Gemlik - Bursa
phpden fazla anlamam eğer anlıorsan neden bule verilerlistelendi
36 Array
37 Array
38 Array
39 Array
40 Array
41 Array
42 Array
43 Array
44 Array
45 Array
46 Array
47 Array
48 Array
49 Array
50 Array
 

metadige

0
İyinet Üyesi
Katılım
23 Aralık 2005
Mesajlar
354
Reaction score
4
Arkadaşım yazımışım ya ilgili yerleri kendinize göre değiştirin diye. Yani Alan 1 başlık ve $sonuc['alan1'] vs. olan yerlere kendi tablonda ki ilgili yeri yazacaksın. Diyelim ki tablonda ad, soyad, adres diye 3 alan var

Alan 1 Başlık yerine ---> Adı
Alan 2 Başlık yerine ---> Soyadı
Alan 3 Başlık yerine ---> Adresi

$sonuc['alan1'] yerine $sonuc['ad']
$sonuc['alan2'] yerine $sonuc['soyad']
$sonuc['alan3'] yerine $sonuc['adres']

yazacaksın ve alan 4 başlık ve $sonuc['alan4'] kısmını sileceksin.Veya tersi 5 alan varsa onları da altına ekleyeceksin.

Alan 5 Başlık
$sonuc['alan5']
...
...

gibi.

Veya fetch_array yerine fetch_row kullanıp $sonuc[0], $sonuc[1] gibi de yapabilirsin ama üstteki şekil daha kullanışlı olduğu için öyle yaptım.
 

arrayturgut

0
İyinet Üyesi
Katılım
27 Kasım 2013
Mesajlar
2
Reaction score
0
***********************************
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*********************************
BU KISIM DA SAYFA ORTASINDA
3 ERLİ ALT ALTA ÜRÜNLERİN SAYFALANDIĞI KISIM
BURDAKİ SORUNUM NE KADAR ÜRÜNÜM VARSA
BU MARKA ALTINDAKİ OLMASI GEREKTİĞİ GİBİ
BU SAYFADA ÇIKIYOR FAKAT SORUN ŞUKİ NEKADAR VARSA
HEPSİ ALT ALTA UZAYIP GİDİYOR
YANİ BUNU HER SAYFADA YİNE YAN YANA 3ERLİ
VE ALT ALTA TOPLAM 10 YADA 20 ÜRÜN ŞEKLİNDE
SAYFALAMAK MÜMKÜNMÜ
YANİ 1-2-3 SON ŞEKLİNDE
BU KODU İNCELEYİP YAPMAM GEREKENLERİ
YAPIP YARDIMCI OLUCAK BİRİLERİ VARMI
TEŞEKÜRLER..!!!!!!!!!
************************************-->
<td colspan="2" valign="top" > 
<font size="4" color="#FFFFFF"> <?=$sorgu['baslik'];?></font>
<br>
<table width="154" border="0" bgcolor="#FFFFFF" cellpadding="4" cellspacing="4">
<tr>
<?
$paket=mysql_query("SELECT * from urun where kid='".$kid."'");
if(mysql_num_rows($paket)==0)
print "<br/>
<center>
<font color='#ff0000'>Bu kategoriye daha önce ürün eklenmemiş.</font>
</center>";
while($p=mysql_fetch_array($paket)){
if($satir%3==0){echo "
</tr>
<tr>";};
?>
<td colspan="3" valign="top" style="border-right:solid 1px #CCC; border-bottom:solid 1px #CCC;">
<table width="190" border="0">
<tr>
<td width="184" height="24" align="center" background="images/header_07.png">
<font color="#ffffff" size="2" face="Arial, Helvetica, sans-serif">
<a class="dd4" href="urun.php?id=<?=$p['id']?>"><?=substr($p[baslik],0,13)?></a>..
</font>
</td>
</tr>
<tr>
<td align="center">
<a href="urun.php?id=<?=$p['id']?>">
<img src="admin/uresim/<?=$p[resim]?>_b.jpg" width="180" height="180" border="0"/></a>
</td>
</tr>
<tr>
<td align="center">
<font color="#990000" size="2">Fiyatı :</font>
<font size="2" color="#339921"> <?=$p['fiyat']?> TL</font>
</td>
</tr>
<tr>
<td height="23" align="center" background="images/geri.jpg" style="border:solid 1px #CCC;">
<a href="urun.php?id=<?=$p['id']?>">Detaylar</a>
</td>
</tr>
</table>
<? $satir++;}?>
</td>
<!-- /SONU -->
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst