• 19-09-2014, 14:58:04
    #10
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Rica ederim hocam ne demek, ihtiyacını görmesine sevindim.
    Veritabanındaki kayıtlı olan ürünlerin ID 'sinden bahsediyoruz dimi?
    Eğer o ise, aklıma gelmedi değil. Neyse birazdan yapar onu da veririm.
  • 19-09-2014, 16:56:06
    #11
    teşekkür ederim şimdilik geçici olarak çıkan ürün isimlerinden bir kontrol kodu oluşturdum where ile ürün adını aratıyorum ve çıkan sonuçların id sini çekiyorum ama 300.000 ürünü karşılaştırırken zaten kasıyorken bu kontrolü yaptırıp id sini bulurken daha fazla kasıyor böyle bir bot siteyi yerlerde süründürür mecbur id sini de çektirmemiz lazım.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 16:56:06 -->-> Daha önceki mesaj 15:31:34 --

    ayrıca bu bota nasıl limit koyabiliriz? 10 taneden başka isabetli ürüne teklif vermesin mesela sql koduna eklemeye çalıştığımda hata alıyorum sanırım foreach komutuna müdahale etmek gerekiyor
  • 19-09-2014, 18:28:13
    #12
    Kodu güncelledim ID felan eklenmiştir.
    aşağıdaki kodlamada gelen sonuçlara limit sınırlaması koyabilirsin veya sınırsız sonuç da elde edebilirsin.(ben db'ye göre ayarlamadım sen db kısmından kendine göre ayar çekersin)
    Demo link: http://www.evdekorasyonblogu.com/eslestir/
    skype varsa ekleyebilirsin sorun yaşarsan daha hızlı yardımcı olmaya çalışırım. skype: burhan_1985

    Aramayı eslestir() fonksiyonuyla yapabilirsin.
    eslestir() fonksiyonu bulunan sonuçları array olarak getirir.
    sonuç bulunamadıysa false değeri döndürür.
    Bu fonksiyonla gelen sonuçları foreach kullanarak kolayca alabilirsin.
    Gelen sonuçların array dizilişini ve key'lerini görmek istersen
    var_dump($sonuclar); ile bakabilirsin.
    eslestir() fonksiyonunun içine alacağı değerler aşağıdaki örnekteki gibidir;
    $sonuclar=eslestir($db_urunler,$aranacak_baslik,$sonuc_limit=5);
    
    if($sonuclar!=false){
    	//var_dump($sonuclar);//Gelen sonuçları array içinde göstermek için. istersen kaldır.
    	foreach($sonuclar as $result){//Eşleşen sonuçları döngüye sokarak satır satır gösterir.
    		echo "En fazla eşleşen({$result['matched_words']} kelime eşleşti) veritabanındaki ürün adı: \"<strong>".$result['urun_adi']."</strong>\" dir.(ID:{$result['urun_id']})<br>";
    	}
    }else{
    	if(!empty($aranacak_baslik)){
    		echo "Eşleşen hiçbir ürün bulunamadı!<br>";
    	}else{
    		echo "Lütfen kutuya ürün giriniz.<br>";
    	}
    }

    Full Kodlama;

    <?php
    
    
    function check_if_word_exists($word,$db_baslik){
    	$word_pieces = explode(' ', $word);
    	$db_baslik_pieces = explode(' ', $db_baslik);
    	
    	$num=0;
    	foreach($db_baslik_pieces as $db_piece){
    		foreach($word_pieces as $word_){
    			if(strcasecmp($db_piece, $word_) == 0){$num++; break;}
    			//if($db_piece==$word_){$num++; break;}
    		}
    	}
    	if($num==0){return false;}else{return $num;}
    }
    
    function get_db_titles($table_name){//
    
    	$query = mysql_query("SELECT * FROM $table_name")or die($query."<br/><br/>".mysql_error());
    	if(mysql_num_rows($query)>0){
    		$urun_bilgileri=array();
    		while($row = mysql_fetch_array($query)){
    			$urun_bilgileri[]= array('urun_adi' => $row['urun_adi'],'urun_id' =>$row['id']);
    
    		}
    		return $urun_bilgileri;
    	}else{ return false;}
    
    }
    function eslestir($db_urunler,$aranacak_baslik,$sonuc_limit){
    //Sonuçları Getirme Kısmı
    if(!$db_urunler){//Veritabanında karşılaştırılacak ürün bulunamadıysa hata ver.
    	echo "Veritabanında eşleştirilecek hiçbir ürün bulunamadı<br>";
    	return false;
    }else{//Aksi durum için aşağıdakileri yap;
    	foreach($db_urunler as $db_urun_bilgisi){//Array içindeki ürün başlıklarını string'e çevir ve döngüye gir.
    		//$results=array();//results adında array değişken oluştur.
    		$num=check_if_word_exists($aranacak_baslik,$db_urun_bilgisi['urun_adi']);//Aranacak kelimeyi(kaynak sitedeki başlığı) sırayla db'dekilerle karşılaştır
    		if($num!=false){//Eğer en az eşleşen bir kelime bulunduysa,
    			$results[]=array('matched_words'=>$num,'urun_adi'=>$db_urun_bilgisi['urun_adi'],'urun_id'=>$db_urun_bilgisi['urun_id']);
    			//var_dump($results);
    		}
    		
    	}
    	
    	if(isset($results)){
    		//var_dump($results);//En az 1 eşleşme olmuş tüm ürün sonuçlarını ekranda göster.
    		echo "<br><br><br>Aranan ürün: <strong>\"{$aranacak_baslik}\"</strong><br><br>";
    		$sonuclar=encokeslesenleribul($results,$sonuc_limit);//en çok eşleşen 5 sonucu sırayla array içine al
    		return $sonuclar;
    	}else{
    		return false;
    	}
    }
    }
    function encokeslesenleribul($results,$sonuc_limit){
    	$nums=array();
    	foreach($results as $result){//en fazla hangi üründe eşleşme olduğunu karşılaştırmak için kelime eşleşme sayılarını $nums array içine at.
    		$nums[]=$result['matched_words'];
    	}		
    				
    	$max_matchednum=max($nums);//En çok eşleşeni bul ve değişkene at.
    	
    	$n=0;
    	for($x=1; $x<=$sonuc_limit; $x++){
    		//$result=array();
    		foreach($results as $result){//Yukarıda bulunan en çok eşleşmiş kelime sayısına sahip ürünü döngüye giderek bul ve göster.					
    			if($result['matched_words']==($max_matchednum-$n)){
    				$sonuc[]=array('urun_id'=>$result['urun_id'],'urun_adi'=>$result['urun_adi'],'matched_words'=>$result['matched_words']);
    				
    			}
    		
    		}
    		
    	$n++;
    	}
    	return $sonuc;			
    }
    
    
    
    echo'<form name="input" action="index.php" method="get">Ürün adı: <input type="text" name="urun"><input type="submit" value="Bul"></form>';
    if(isset($_GET['urun'])){//Aranacak ürün.
    	$aranacak_baslik=$_GET['urun'];	
    }else{
    	$aranacak_baslik="";
    }
    //$db_urunler=get_db_titles('urunler');//Veritabanındaki ürün başlıklarını array içine yerleştir.
    
    //Bende veritabanı hazırda olmadığı için alttaki 3 satırı manuel ekledim. Sen üst satırdakiyle veritabanından işlemini yapacaksın. bu 3 satırı silebilirsin.
    $urunler=array('iphone 5', 'samsung galaxy s5', 'samsung galaxy s4', 'nokia bilmem ne', 'nokia lumnia 1536', 'philips saç kurutma makinası' , 'philips 60W tasarruf lambası','Arzum AR569 Linda 2000W', 'Sunny AT 52 Saç Kurutma Makinesi','Arçelik 2395 Buzdolabı');
    $n=0;
    foreach($urunler as $urun){$db_urunler[]=array('urun_adi' =>$urun, 'urun_id' =>$n++);}
    
    
    //var_dump($db_urunler);
    echo "Veritabanındaki ürünler:";
    echo "<ul>";
    foreach($db_urunler as $urun){
    	echo "<li><strong>".$urun['urun_adi']." ------ ID:".$urun['urun_id']."</strong><br></li>";
    }echo "</ul>";
    
    
    
    
    
    $sonuclar=eslestir($db_urunler,$aranacak_baslik,$sonuc_limit=5);
    
    if($sonuclar!=false){
    	//var_dump($sonuclar);//Gelen sonuçları array içinde göstermek için. istersen kaldır.
    	foreach($sonuclar as $result){//Eşleşen sonuçları döngüye sokarak satır satır gösterir.
    		echo "En fazla eşleşen({$result['matched_words']} kelime eşleşti) veritabanındaki ürün adı: \"<strong>".$result['urun_adi']."</strong>\" dir.(ID:{$result['urun_id']})<br>";
    	}
    }else{
    	if(!empty($aranacak_baslik)){
    		echo "Eşleşen hiçbir ürün bulunamadı!<br>";
    	}else{
    		echo "Lütfen kutuya ürün giriniz.<br>";
    	}
    }
    
    
    
    
    ?>
    ]