• 10-01-2020, 15:27:35
    #1
    Merhaba, PDO ile yeni yazı eklerken içerikte (tek tırnak ve çift tırnak) özel karakter kullanamıyorum. Hatayı nasıl düzeltirim. Teşekkürler


    Kodum bu şekilde:

     if (isset($_POST['yeniyazikle'])){
    
    $yazi_baslik = $_POST["yazi_baslik"];
    $yazi_kategori = $_POST["yazi_kategori"];
    $yazi_etiket = $_POST["yazi_etiket"];
    $yazi_detay = $_POST["yazi_detay"];
    $yazi_tarih = date("d.m.Y H:i:s");
    
    $yeniyazikle=$db->exec("INSERT INTO hk_yazilar SET
    
    yazi_baslik='$yazi_baslik',
    yazi_kategori='$yazi_kategori',
    yazi_etiket='$yazi_etiket',
    yazi_detay='$yazi_detay',
    yazi_tarih='$yazi_tarih' ");
    
    
    if ($yeniyazikle){
    
    echo 'tamam';
    
    }else{
    
    echo 'hata';
    
    }
    }
  • 10-01-2020, 15:30:25
    #2
    https://www.php.net/manual/tr/function.addslashes.php
    hocam bunu kullanabilirsiniz
  • 10-01-2020, 15:31:41
    #3
    efsungokmen adlı üyeden alıntı: mesajı görüntüle
    Örnek yapabilirmisiniz lütfen
  • 10-01-2020, 15:36:53
    #4
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Exec ile bu işlemi yapmak yerine prepare kullanabilirsiniz.

    $yazi_baslik = $_POST["yazi_baslik"];
    $yazi_kategori = $_POST["yazi_kategori"];
    $yazi_etiket = $_POST["yazi_etiket"];
    $yazi_detay = $_POST["yazi_detay"];
    $yazi_tarih = date("d.m.Y H:i:s");
    
    $query = $db->prepare("INSERT INTO hk_yazilar SET
    yazi_baslik = :baslik,
    yazi_kategori = :kategori,
    yazi_etiket = :etiket,
    yazi_detay = :detay,
    yazi_tarih = :tarih");
    
    $insert = $query->execute(array(
    "baslik" => $yazi_baslik,
    "kategori" => $yazi_kategori,
    "etiket" => $yazi_etiket,
    "detay" => $yazi_detay,
    "tarih" => $yazi_tarih
    ));
    
    if ( $insert ){
    echo 'tamam';
    }else{
        echo 'hata';
    }
  • 10-01-2020, 16:23:03
    #5
    grafiemo adlı üyeden alıntı: mesajı görüntüle
    Exec ile bu işlemi yapmak yerine prepare kullanabilirsiniz.

    $yazi_baslik = $_POST["yazi_baslik"];
    $yazi_kategori = $_POST["yazi_kategori"];
    $yazi_etiket = $_POST["yazi_etiket"];
    $yazi_detay = $_POST["yazi_detay"];
    $yazi_tarih = date("d.m.Y H:i:s");
    
    $query = $db->prepare("INSERT INTO hk_yazilar SET
    yazi_baslik = :baslik,
    yazi_kategori = :kategori,
    yazi_etiket = :etiket,
    yazi_detay = :detay,
    yazi_tarih = :tarih");
    
    $insert = $query->execute(array(
    "baslik" => $yazi_baslik,
    "kategori" => $yazi_kategori,
    "etiket" => $yazi_etiket,
    "detay" => $yazi_detay,
    "tarih" => $yazi_tarih
    ));
    
    if ( $insert ){
    echo 'tamam';
    }else{
        echo 'hata';
    }
    olmadı
  • 10-01-2020, 20:31:46
    #6
    Hocam prepared statement'ın mantığı hiç böyle değil. Bu sorguda SQL Injection açığı vardır. Birileri yetkisizce SQL kodlarını çalıştırabilir ve şifrelerinizi çalabilir ya da tüm veritabanını silebilir. Gelelim koda;
    $yeniyazikle=$db->prepare("INSERT INTO hk_yazilar SET
    yazi_baslik=?,
    yazi_kategori=?,
    yazi_etiket=?,
    yazi_detay=?,
    yazi_tarih=? ");
    $sonuc = $yeniyaziekle->execute([
       $yazi_baslik,
       $yazi_kategori,
       $yazi_etiket,
       $yazi_detay,
       $yazi_tarih
    ]);
    if($sonuc)
       echo "eklendi";
    else
       var_dump($sonuc);