PHP Tırnak Problemi Çözümü
Daha önceki yazılarımızda PHP ile bazı problemlerin çözümüne değindik. Bu yazımızda PHP Tırnak Problemi Çözümü nasıl yapılır, onu inceleyeceğiz.

Önce problem nasıl oluşuyor onu anlamaya çalışalım. Örneğin aşağıdaki gibi bir SQL sorgunuz olsun;
$konu= $_POST['konu'];
$sql = SELECT * FROM tablo_sikayet WHERE konu='$konu';
mysqli_query($baglanti, $sql);
Şimdi bu satırları fonksiyon haline getirelim. ftirnak_kodla fonksiyonu tüm $_POST, $_REQUEST, $_GET ile gelen veriler için uygulanabilir.
Burada $_POST ifadesi aslında formdan gelen değişkenleri ve değerlerini tutan bir dizi olduğuna göre array_map fonksiyonu ile tüm diziyi bizim fonksiyonumuzdan aşağıdaki gibi geçirebilir.
if (!empty($_REQUEST))
Yukarıdaki fonksiyonu aşağıdaki şekilde kullanıyoruz.
$sonuc=mysqli_query($baglanti, "SELECT * FROM tablo_sikayet");

Önce problem nasıl oluşuyor onu anlamaya çalışalım. Örneğin aşağıdaki gibi bir SQL sorgunuz olsun;
$konu= $_POST['konu'];
$sql = SELECT * FROM tablo_sikayet WHERE konu='$konu';
mysqli_query($baglanti, $sql);
Burada dikkat ederseniz $konu alanı tek tırnaklar içine yazılmıştır. Peki gelen veri içinde de tırnaklar varsa ne olacak, tabi ki hata ile karşılacaksınız. Örneğin formdan gelen veri; Elazığ'ın Sorunları gibi tırnaklar içeriyorsa aşağıdaki gibi bir SQL ekranda göreceksiniz.
SELECT * FROM tablo_sikayet WHERE konu='Elazığ'ın Sorunları';
Yukarıdaki SQL kodu aşağıdaki hatayı verecektir. Burada SQL yazımında bir problem olduğu, problemin satır 1 deki 'ın Sorunları ifadesinden yani apostrof dediğimiz tırnaktan kaynaklandığını belirtiyor.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ın Sorunları'' at line 1
Bu problemin üstesinden gelmek için POST olarak aldığımız verileri aşağıdaki gibi bir fonksiyondan geçirerek tırnak işaretlerini kodlayacağız.
NOT: Bu şekilde kullanım aslında SQL Injection (SQL Sızıntısı) atağı çözümü için bile kullanılabilir.
htmlentities($degisken, ENT_QUOTES, "UTF-8");
Yukarıdaki şekilde kodladığımızda verimiz, Elazığ'ın Sorunları gibi kodlanmış bir şekle dönüşecektir, bu şekilde veritabanına yazdığınızda bir problem oluşmayacaktır.
Şimdi de, Kodladığımız veriyi veritabanından çekip ekrana yazmadan öncede de aşağıdaki gibi tekrar normal haline çevireceğiz.
html_entity_decode($degisken, ENT_QUOTES,"UTF-8");
SELECT * FROM tablo_sikayet WHERE konu='Elazığ'ın Sorunları';
Yukarıdaki SQL kodu aşağıdaki hatayı verecektir. Burada SQL yazımında bir problem olduğu, problemin satır 1 deki 'ın Sorunları ifadesinden yani apostrof dediğimiz tırnaktan kaynaklandığını belirtiyor.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ın Sorunları'' at line 1
Bu problemin üstesinden gelmek için POST olarak aldığımız verileri aşağıdaki gibi bir fonksiyondan geçirerek tırnak işaretlerini kodlayacağız.
NOT: Bu şekilde kullanım aslında SQL Injection (SQL Sızıntısı) atağı çözümü için bile kullanılabilir.
htmlentities($degisken, ENT_QUOTES, "UTF-8");
Yukarıdaki şekilde kodladığımızda verimiz, Elazığ'ın Sorunları gibi kodlanmış bir şekle dönüşecektir, bu şekilde veritabanına yazdığınızda bir problem oluşmayacaktır.
Şimdi de, Kodladığımız veriyi veritabanından çekip ekrana yazmadan öncede de aşağıdaki gibi tekrar normal haline çevireceğiz.
html_entity_decode($degisken, ENT_QUOTES,"UTF-8");
Şimdi bu satırları fonksiyon haline getirelim. ftirnak_kodla fonksiyonu tüm $_POST, $_REQUEST, $_GET ile gelen veriler için uygulanabilir.
function ftirnak_kodla($degisken){
$degisken= htmlentities($degisken, ENT_QUOTES, "UTF-8");
return $degisken;
}
Burada $_POST ifadesi aslında formdan gelen değişkenleri ve değerlerini tutan bir dizi olduğuna göre array_map fonksiyonu ile tüm diziyi bizim fonksiyonumuzdan aşağıdaki gibi geçirebilir.
if (!empty($_POST))
$_POST=array_map("ftirnak_kodla", $_POST);
Şimdi aynı işlemi $_GET ve $_REQUEST için yapacak olursak;
Şimdi aynı işlemi $_GET ve $_REQUEST için yapacak olursak;
if (!empty($_GET))
$_GET= array_map("ftirnak_kodla", $_GET);
if (!empty($_REQUEST))
$_REQUEST=array_map("ftirnak_kodla", $_REQUEST);
Şimdi de gelelim, veritabanından çektikten sonra ekrana verileri basarken yapacağımız işlemlere.
function ftirnak_dekodla($degisken){
$degisken= html_entity_decode($degisken, ENT_QUOTES,"UTF-8");
return $degisken;
}
Yukarıdaki fonksiyonu aşağıdaki şekilde kullanıyoruz.
$sonuc=mysqli_query($baglanti, "SELECT * FROM tablo_sikayet");
$satir = mysqli_fetch_array($sonuc);
$satir =array_map("ftirnak_dekodla", $satir);
Bir PHP probleminin de sonuna geldik, iyi çalışmalar, mutlu kodlamalar dilerim.
Oğuzhan TAŞ,
Mart, 2016
Bir PHP probleminin de sonuna geldik, iyi çalışmalar, mutlu kodlamalar dilerim.
Oğuzhan TAŞ,
Mart, 2016

Dil Değiştir(Change Language)
Kategoriler
- Csharp(58)
- Csharp Formlar(23)
- Web Tasarım(9)
- CSS(27)
- JavaScript(37)
- PHP(50)
- Laravel(3)
- ASP.net(38)
- Excel(15)
- Güvenlik(4)
- E-Ticaret(3)
- Kariyer(5)
- SQL Server(29)
- MySQL(16)
- Linux(17)
- MacOSX(8)
- Ayarlar(12)
- Bilgisayar Ağları(3)
- Symfony(1)
- Teknoloji(7)
- VBS(1)
- Arduino(6)
- RaspberryPi(1)
- Algoritmalar(15)
- HTML(3)
- Python(2)
- Bash Script(7)
- C Programlama(10)
- Flutter - Dart(11)
- Bootstrap(1)
En çok Okunan 18 Makale
- :: Excelde EĞER Fonksiyonu Kullanımı...
- :: Csharp ile Access Veritabanı Bağlan...
- :: SQL nedir, Temel SQL Komutları nele...
- :: Hangi Linux Dağıtımı?
- :: OSX İşletim Sistemine PHP, MySQL, A...
- :: Excel Hesap tablosunda EĞERSAY Fonk...
- :: PHP dilini kullanarak MySQLi tekniğ...
- :: Excel Hesap tablosunda ÇOKETOPLA Fo...
- :: Excel Hesap tablosunda ETOPLA Fonks...
- :: Excel Hesap tablosunda ÇOKEĞERSAY F...
- :: Hangi Programlama Dilini Öğrenmeliy...
- :: Mac Bilgisayarınıza Windows 7 Yükle...
- :: PHP ile Basit Dosya Yükleme
- :: Excel hücrelerinde yıldız koyarak b...
- :: C# Programlama Dili ile İlgili Örne...
- :: PHP Dili kullanarak MySQLi Tekniği ...
- :: PhpMyAdmin Şifresi Nasıl Değiştiril...
- :: Hangisi acaba, PHP mi ASP.NET mi ?