v2.5.2
Giriş yap

Filtre Sistemi (Veritabanli)

tia
661 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Filtre Sistemi

Hepinize merhaba arkadaşlar. Benim istediğim veritabanımda bulunan kelimeleri cekip kontrol ettirerek yazdırmak bunu şu fonksiyon ile başardım ;

<?php
    function clear($veri)
{
    global $dbh;


    $filter = $dbh->prepare('SELECT * FROM cms_filter');
    $filter->execute();
    $getword = $filter->fetchAll(PDO::FETCH_COLUMN, 1);
    

    $changefilter = $dbh->prepare('SELECT * FROM cms_filter');
    $changefilter->execute();
    $getchange = $changefilter->fetchAll(PDO::FETCH_COLUMN, 2);

    $degisecek = $getword;
    $yeniler = $getchange;
    return str_replace($degisecek,$yeniler,$veri);
}
?>

Bu yapmis oldugum fonksiyon ile gelip o yazilan yaziyi ya da texti degistirebiliyordum. Ama benim istedigim eger veritabanimda varsa o kelime POST edilen cümleyi hatalı şekilde döndürtmek. Nasil yapariz ?

Cevap yaz
Cevaplar (4)
makifgokce
1365 gün önce

if kısmını bu şekilde değiştirip dene

if(stristr($data, $row["kelime"]) === true)
tia
1365 gün önce

Tesekkurler @makifgokce hocam ise yaradi ancak bir sorun oluştu OOP olarak veri ekledigim icin foreach kullaninca diger alertleri alamiyorum.

Ornegin ;

<?php 
public static function CreateComment()
	{
		global $dbh, $lang;

		if (isset($_POST['addcomment'])) {

			$k = $dbh->prepare("SELECT * FROM cms_filter");
			$k->execute();

			foreach ($k as $row) {

				$content = $_POST['comment'];

				$result = $dbh->prepare('SELECT * FROM comment_cms ORDER BY id DESC LIMIT 1');
				$result->execute();
				$res = $result->fetch(PDO::FETCH_ASSOC);

				if (stristr($content, $row['word']) == true) {
					Html::error($lang["false"] . $lang["notAvailable"]);
				} else {
				if ($res['authorid'] !== User::userData('id')) {

					Html::errorSucces($lang["true"] . $lang["succesComment"]);

					$comment = $dbh->prepare('INSERT INTO comment_cms SET
					content = :content,
					authorid = :auid,
					newsid = :newsid,
					verify = :verify,
					date = :date
			');
					$comment->execute(array(
						":content" => $content,
						":auid" => User::userData('id'),
						":newsid" => $_GET['newsid'],
						":verify" => 1,
						":date" => time()
					));
				}
				 else {
					Html::error($lang["false"] . $lang["spamming"]);
				}
			}
		}
			Yonlendir('haber?newsid=' . $_GET['newsid'], 4);
		}
	}
?>

Bu benim OOP de yazmis oldugum bir sinif yorum eklenmesi icin. Dediklerinizi yaptim yorum ekleniyor ancak == true'yse o istedigim hatayi verdiriyorum burasi da gayet guzel ancak eger son yorumu o atmışsa yani yaptığım sisteme göre son yorumu atmışsa o kişi spam olarak algılandı mesajıda geliyor 2 si birden geliyor bunun onune nasil gecerim? Yani eger == true'yse sadece o mesaj gosterilmesini yapabilir miyim ?
// Ek olarak POST edilen veri yasakli kelime icerse veya direkt olarak yasakli kelime olsa bile alert gelmesine ramen paylasiliyor.

tia
1366 gün önce

Hocam maalesef. Benim istedigim olaya benziyor ancak foreach veritabanimda kac adet kelime varsa o kadar donduruyor.
Benim yapmak istedigim sey yorum sistemi yaptim ve yorum atarken POST edilen yorumu if kontrollerinden geçirip eğer
veritabanımda belirlediğim kelimeler var ise ona hata mesajı döndürecek.

Ornegin : Veritabanimda ki 1 kelime Hey olsun

"Hey sen nasılsın ?" yazdığım zaman orada hey olduğunu okuyup işlem yapması gerekir ama bizim yazdığımız fonksiyonlarda,
sadece Hey yaziyorsa ya da diger kelimelerden 1 tane iceriyorsa okuyor harici olarak tamamen metin içinden okuma yapmıyor.

Umarım anlatabilmişimdir hocam yardımcı olabilirseniz çok mutlu olurum.

aydinkeskin
1366 gün önce
function Filter($data){
    global $db; 
        $k = $db->prepare("SELECT * FROM filter ");
        $k->execute();
        if($k->rowCount()){
            foreach($k as $row){
                if($data == $row["kelime"]){
                    echo "veritabanında mevcut";
                }else{
                    echo "mevcut değil";
                }
            }
        } 
}

sana gerekli fikri vermiştir bu kadadarı. yanlış anlamadıysam.