• 17-11-2024, 00:16:00
    #1
    Merhaba,

    Sql'e yazarken aşağıda ki hatayı alıyorum. Ürün adında ' simgesinden kaynaklı.

    Alıntı
    Fatal error: Uncaught mysqli_sql_exception: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'si 1 Arada Besleyici Şampuan 150 ml','17.11.2024 00:13:43')' at line 1 in D:\xampp\htdocs\bot\bot\cek.php:91 Stack trace: #0 D:\xampp\htdocs\bot\bot\cek.php(91): mysqli_query(Object(mysqli), 'insert into der...') #1 {main} thrown in D:\xampp\htdocs\bot\bot\cek.php on line 91

    Veritabanına aşağıda ki şekilde yazıyorum;

    Alıntı
    $kayit=mysqli_query($conn,"insert into cekilen (barkod , urunadi , eklenmezamani) values ('".$barkod."','".$urunadi."','".$tarih."')");
    Burayı nasıl düzenlemem gerekiyor?

    Herkese şimdiden çok teşekkürler.
  • 17-11-2024, 00:24:34
    #2
    EliKaPs adlı üyeden alıntı: mesajı görüntüle
    Merhaba,

    Sql'e yazarken aşağıda ki hatayı alıyorum. Ürün adında ' simgesinden kaynaklı.




    Veritabanına aşağıda ki şekilde yazıyorum;



    Burayı nasıl düzenlemem gerekiyor?

    Herkese şimdiden çok teşekkürler.
    PHP’nin addslashes() fonksiyonunu kullanarak sorunumu çözdüm. Aşağıda ki şekilde kullandım.

    Alıntı
    $kayit=mysqli_query($conn,"insert into cekilen (barkod , urunadi , eklenmezamani) values ('".$barkod."','". addslashes($urunadi)."','".$tarih."')");
  • 17-11-2024, 00:28:49
    #3
    Kidlin kuralına göre bir problemi açıkça yazabilir haldeysen problemin yarısını çözmüşsün demektir. Öncelikle kutlarım.

    Problem girdinin içerisinde "'" karakteri olması ve bunun SQL kodunu bozması, buradaki parametrenin senin kodunu engellememesi için karakterin öncesine kaçış karakteri ("") koyman gerekiyor(*), bunun en mantıklı yolu $urunadi değişkeninin içerisinde "'" karakterini bulup "'" ile değiştirmen olabilir

    Burada kullandığın insert yöntemi ile SQL injection denen duruma izin vermiş oluyorsun, normalde böyle bir hatanın olmasına izin vermemen gerekiyor. Gelecekte hayata geçireceğin projelerde başını ağrıtabilir.
    Kendini geliştirmek için "stored procedures" yöntemine bakmanı öneririm.
  • 17-11-2024, 00:49:50
    #4
    glaitaht adlı üyeden alıntı: mesajı görüntüle
    Kidlin kuralına göre bir problemi açıkça yazabilir haldeysen problemin yarısını çözmüşsün demektir. Öncelikle kutlarım.

    Problem girdinin içerisinde "'" karakteri olması ve bunun SQL kodunu bozması, buradaki parametrenin senin kodunu engellememesi için karakterin öncesine kaçış karakteri ("") koyman gerekiyor(*), bunun en mantıklı yolu $urunadi değişkeninin içerisinde "'" karakterini bulup "'" ile değiştirmen olabilir

    Burada kullandığın insert yöntemi ile SQL injection denen duruma izin vermiş oluyorsun, normalde böyle bir hatanın olmasına izin vermemen gerekiyor. Gelecekte hayata geçireceğin projelerde başını ağrıtabilir.
    Kendini geliştirmek için "stored procedures" yöntemine bakmanı öneririm.


    Önerileriniz için çok teşekkür ederim. Dediklerinizi dikkate alacağım. Bu proje yerel sunucuda çalıştığı için ekstra güvenlik konusunda özenli olamadım.