Filtre Sistemi (Veritabanli)
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 ?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
if kısmını bu şekilde değiştirip dene
if(stristr($data, $row["kelime"]) === true)
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.
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.
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.