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