8 Temmuz 2008Php ile sonraki konu bilgileri alınması.
Bazen yazdığımız betikler de önceki konu sonraki konu yapmamız gerekebiliyor. Aslında çok basit lakin bazen çok çalışmaktan insan gözü önündeki hatayı bile göremez hale gelmekte. Aslında mantık olarak gelen ID değerini bir artırıp veritabanını sorgulayıp değeri alıp yazdırmak her ne kadar basit bir çözümmüş gibi görünse de unutulan bir şey oluyor. ID auto_increment özelliğini aldığında her veri girişinde bildiğimiz gibi değer bir artırılıyor bunun yanında veri sildiğimiz de olmakta işte bu noktada sıralı rakamlar arasında boşluk oluşmakta ve az önceki söylediğim ID değerini bir artırmak bu noktada çuvallıyor çünkü kendisinden sonraki numara veritabanından silindiyse sorgu sonucu bize false olarak dönecektir.
O yüzden sql sorgumuzu aşağıdaki gibi değiştirirsek bunun önüne geçebiliriz.
SELECT * FROM tablo WHERE id > intval($_GET['id']) LIMIT 1
bu sorgu da yapılmak istenenleri açıklayalım. SELECT ile tablodaki tüm alanları ( field ) seçtik. Ardından WHERE ile koşulumuzu belirttik yani tablodaki ID alanının urlden gelen ID degerinden büyük olanları koşul olarak belirtip LIMIT ifadesi ile dönen bütün kayıtlardan sadece ilkini aldık.
Önceki konu için ise sql cümlemizi aşağıdaki gibi değiştirmemiz yeterli olacaktır.
SELECT * FROM tablo WHERE id < intval($_GET['id']) LIMIT 1
intval() fonksiyonu ise kendisine verilen string in type kontrolunu yapar eğer verilen string numeric değil ise sonucu 0 a eşitler.
Ufak bir örnek vermek gerekirse
$sayi = 12; echo intval($sayi); // sonuc 12 $sayi = "a1as2dsf2"; echo intval($sayi); // sonuc 0
örneklerde de görüldüğü gibi bu fonksiyon yardımı ile sql injectionların önüne bi nebze olsun geçmiş de oluyoruz.
Evet işte bu kadar yazının başında da dediğim gibi insan göz önündeki şeyi bazen görmekte zorlanıyor haksız mıyım ?
iyi çalışmalar


2-3 ay önce pg de bu konu ile ilgili bi başlık açmıştım
birde bir önceki nasıl alınır derseniz
bunu “>” böyle yaparsak “<” bir önceki almış oluruz
evet yazıya önceki konu olayını da ekledim bir bütün olsunlar
$sonraki = $id + 1;
ü
1 fark olacagını sanmıyorum
gende teşekkürler
@Sa1donder
bir sonraki ID sistemden silinmişse?
kontrol ederiz,
ama oylede baya uzar dogru haklısınız ama şoyle olsa
doğru > < kullanmak daha iyi olur
güzel bir konu olmuş bir çok kişinin ihtiyacı olduğuna eminim
ben bir türlü önceki konu olayını başaramadım sonraki konu mevzusunda herhangi bir sıkıntım yok ama önceki konuyu listelemeye gelince işler bozuluyor acaba nerde yanlış yapıyorum yardımcı olabilirseniz sevinirim
örnek:
$veri=mysql_fetch_array(mysql_query(“select * from haber where bolum=’$_GET[bolum]‘”));
$sonraki=mysql_fetch_array(mysql_query(“SELECT * FROM haber where bolum=$veri[bolum] and ID>”.intval($veri['ID']).” LIMIT 1″));
$onceki=mysql_fetch_array(mysql_query(“SELECT * FROM haber where bolum=$veri[bolum] and ID<".intval($veri['ID'])." LIMIT 1"));
onceki olayında ID=$veri['ID']-1 şeklinde sonuç alıyorum yalnız Id olmadığı zaman sorun yaratıyor üstte verdiğim örnektede sürekli 1. konuyu ele alıyor
sonraki order by ID asc
önceki order by ID desc yaparak sorunu çözdüm benim gibi başka biri daha takılmaz böyle bir yerde ama takılırlarsada bilsinler
sonraki ya da önceki konu yok ise ne yapacağız peki bilen varmıdır?