elimde şöyle küçük bir script var yorum yazıyoruz fakat 100 yorum olsada 1000 yorum olsada hepsini ilk sayfada gösteriyor ben sadece ilk yada son 10 tanesini göstermesini istiyorum , diğerleri 2. 3. sayfada olucak elimdeki kod bu
bir arkadaş şöyle bir kod verdi ama çalışmadı ne yazıkkiPHP Kodu:// ##### GET COMMENTS #####
$comments_query = mysql_query ("SELECT * FROM comments LEFT JOIN users ON comments.user_id = users.user_id WHERE comments.file_id = '" . intval($_GET['id']) . "' ORDER BY comments.added");
while ($comment = mysql_fetch_array ($comments_query))
{
$comment['comment'] = stripslashes ($comment['comment']);
$comment['title'] = stripslashes ($comment['title']);
$comment['added'] = date('F d, Y', $comment['added']);
$comments .= $tpl->pull_template ('comment');
}
bir incelermisiniz lütfen bu arada SEO url kullanıyorum script'de ve arkadaşın verdiği şekilde ekliyince siteadi.com/files/xxx.HTML linki yorumların 2. , 3. sayfasına tıklıyınca siteadi.com/files/xxx.HTML?k=10 siteadi.com/files/xxx.HTML?k=20 şeklinde oluyor fakat öyle görünsede yorumlar değişmiyor hep aynı ( ilk ) yorumlar görünüyor ve çalışmamasının sebebi SEO url olabilirmi ?PHP Kodu:if (! $k ) { $k=0; }
$comments_query = mysql_query ("SELECT * FROM comments LEFT JOIN users ON comments.user_id = users.user_id WHERE comments.file_id = '" . intval($_GET['id']) . "' ORDER BY comments.added LIMIT $k , 10");
$hepsi_tab="SELECT * FROM comments LEFT JOIN users ON comments.user_id = users.user_id WHERE comments.file_id = '" . intval($_GET['id']) . "' ORDER BY comments.added ";
$hepsi=mysql_query($hepsi_tab);
$toplam=@mysql_num_rows($hepsi);
while ($comment = mysql_fetch_array ($comments_query))
{
$comment['comment'] = stripslashes ($comment['comment']);
$comment['title'] = stripslashes ($comment['title']);
$comment['added'] = date('F d, Y', $comment['added']);
$comments .= $tpl->pull_template ('comment');
$i = 0;
while ($i < $toplam) {$a = $a + 10;
echo "<a href='?k=$i'>[$a]</a>";
$i=$i + 10;}
}
bu arada kullandığım htaccess
Mesaj hotr1de tarafından 21.12.2006 (00:47) yeniden düzenlendi.
Spoiler:
şurada konuya değinilmiş ama ben olsam daha sade şekilde şöyle yapardım:
Dikkat yazdigim satırı LIMIT kullanımını kurcalarsan anlarsın nasıl çalıştığını. Örn; $page = 1 geldiyse LIMIT $perpage*($page-1).", ".$perpage formülünün çıktısı LIMIT 0, 10 olacaktır (sıfırıncı kayıttan başla 10 tane al)PHP Kodu:// sayfa başına kayıt
$perpage = 10;
// kacinci sayfa istendi? SQL injection vs. kontrol etmek lazım :)
if( intval($_GET['sayfa']) )
$page = $_GET['sayfa'];
else
$page = 1;
// o sayfada gösterilecek verileri al
$SQL = "SELECT * FROM comments
LEFT JOIN users ON comments.user_id = users.user_id
WHERE comments.file_id = '" . intval($_GET['id']) . "'
ORDER BY comments.added
LIMIT ".$perpage*($page-1).", ".$perpage; // BU SATIRA DIKKAT!
$comments_query = mysql_query ($SQL);
// vs.
// vs.
// vs.
$page = 3 geldiyse çıktı LIMIT 20, 10 -> 20. kayıttan başla 10 tane al.. gibi
Ayrica en altta sayfa 1 . 2 . 3 vs gostermek için;
Burada da toplam potansiyel gösterimi olabilecek kayıtı COUNT(*) ile buluyoruz. Atıyorum 54 geldiyse bu 6 sayfa eder, o yüzden kayıt sayısı/sayfa başına değilde ceil($t_rec/$perpage) ile bölüyoruz. (Yukarıya yuvarlayıp.) Sonra da 1'den 6'ya kadar tek tek istediğin formatta yazdırıyorsun.PHP Kodu:// toplam kayit sayisini bul -> $t_rec
$SQL = "SELECT COUNT(*) FROM comments
LEFT JOIN users ON comments.user_id = users.user_id
WHERE comments.file_id = '" . intval($_GET['id']) . "'";
list($t_rec) = mysql_fetch_row( mysql_query($SQL) );
// bu kontrolü ozellestirebilirsin
for($i=1; $i<=ceil($t_rec/$perpage); $i++) {
echo "<a href='?sayfa=$i'>$i</a> | ";
}
Umarım yardımcı olabilmişimdir.![]()
Spoiler:
Ohooo. Projeyi zip'leyip gönder, yapılmışını verelim.
Şaka bir yana kod syntax'ı normal gözüküyor. Ne hatası verdiğini yapıştırırsan yardımcı olurum.
Not: bu arada senin veridğin kodla benimkisi aynı mantık.
Spoiler:
kodu böyle çalıştırdım fakat bu seferde ?sayfa=2 , ?sayfa=3 'e geçincede aynı ilk 10 yorum görünüyor.
PHP Kodu:// ##### GET COMMENTS #####
$perpage = 10;
if( intval($_GET['sayfa']) )
$page = $_GET['sayfa'];
else
$page = 1;
$comments_query = mysql_query ("SELECT * FROM comments LEFT JOIN users ON comments.user_id = users.user_id WHERE comments.file_id = '" . intval($_GET['id']) . "' ORDER BY comments.added LIMIT ".$perpage*($page-1).", $perpage");
while ($comment = mysql_fetch_array ($comments_query))
{
$comment['comment'] = stripslashes ($comment['comment']);
$comment['title'] = stripslashes ($comment['title']);
$comment['added'] = date('F d, Y', $comment['added']);
$comments .= $tpl->pull_template ('comment');
}
// toplam kayit sayisini bul -> $t_rec
$SQL = "SELECT COUNT(*) FROM comments
LEFT JOIN users ON comments.user_id = users.user_id
WHERE comments.file_id = '" . intval($_GET['id']) . "'";
list($t_rec) = mysql_fetch_row( mysql_query($SQL) );
// bu kontrolü ozellestirebilirsin
for($i=1; $i<=ceil($t_rec/$perpage); $i++) {
echo "<a href='?sayfa=$i'>$i</a> | ";
}
Bende gayet güzel sayfa sayfa gösteriyor.
Şu satırı;
şöyle yazıp HTML çıktısını verir misin; Her sayfa için ayrı ayrı çıktısını ver. Örn; ?sayfa=1 ?sayfa=2 .. gibi.PHP Kodu:$comments_query = mysql_query ("SELECT * FROM comments LEFT JOIN users ON comments.user_id = users.user_id WHERE comments.file_id = '" . intval($_GET['id']) . "' ORDER BY comments.added LIMIT ".$perpage*($page-1).", $perpage");
Ayrıca neden 1000 karakterlik satırlarla kodlamaya ısrar ediyorsun ki. Temiz kod yaz ilerde kitap okur gibi ne yaptığını anlarsın.PHP Kodu:
Dipnot: mysql_fetch_array($comments_query) döngüsünde de de mysql_fetch_assoc($comments_query) kullan, kullanacağın kadar değişken alır sunucuyu daha az yorarsın.
Mesaj s5prin tarafından 21.12.2006 (14:29) yeniden düzenlendi. Açıklama: ek
Spoiler:
senin yazdığın gibi şu şekilde değiştirdim (aşağıda ) fakat her sayfada aynı şey yazıyor sanırım sorunda bu , her sayfada
SELECT * FROM comments LEFT JOIN users ON comments.user_id = users.user_id WHERE comments.file_id = '50' ORDER BY comments.added LIMIT 0, 10arkadaşın verdiği kod demiştim başta ondada aynı şekilde oldu sayfalar çıktı ama hepsi aynı yorum bir çıkamadım işin içinden :PHP Kodu:// ##### GET COMMENTS #####
$perpage = 10;
if( intval($_GET['sayfa']) )
$page = $_GET['sayfa'];
else
$page = 1;
$SQL = "SELECT * FROM comments
LEFT JOIN users ON comments.user_id = users.user_id
WHERE comments.file_id = '" . intval($_GET['id']) . "'
ORDER BY comments.added
LIMIT ".$perpage*($page-1).", $perpage";
echo $SQL; exit; // <- SQL sorgu çıktısını istiyorum
$comments_query = mysql_query ($SQL);
while ($comment = mysql_fetch_array ($comments_query))
{
$comment['comment'] = stripslashes ($comment['comment']);
$comment['title'] = stripslashes ($comment['title']);
$comment['added'] = date('F d, Y', $comment['added']);
$comments .= $tpl->pull_template ('comment');
}
// toplam kayit sayisini bul -> $t_rec
$SQL = "SELECT COUNT(*) FROM comments
LEFT JOIN users ON comments.user_id = users.user_id
WHERE comments.file_id = '" . intval($_GET['id']) . "'";
list($t_rec) = mysql_fetch_row( mysql_query($SQL) );
// bu kontrolü ozellestirebilirsin
for($i=1; $i<=ceil($t_rec/$perpage); $i++) {
echo "<a href='?sayfa=$i'>$i</a> | ";
}
Bende problemsiz çalışıyor. Şurada bir sorunun var;
script.PHP?sayfa=x -> x ne gelirse gelsin intval($_GET['sayfa']) her zaman '0' üretiyor ve $page değişkenin default 1 oluyor.PHP Kodu:if( intval($_GET['sayfa']) )
$page = $_GET['sayfa'];
else
$page = 1;
Çok basit bir yerde hata yapıyorsun muhtemelen. script'ini /script.PHP?sayfa=2 gibi elle çağırarak sayfanın en başına da $_GET dump yaparsan gelip gelmediğini görürsün;
PHP Kodu:print_r($_GET); exit;
Spoiler: