• 18-12-2015, 14:39:19
    #1
    Yeşil SEO İnt. Hiz.
    Merhaba arkadaşlar;
    Üzerinde çalıştığım bir proje var. Bu proje aşağıdaki sorunum haricinde bitti sayılır.
    Sorunum şu ki ; Mysql de arama yaparken büyük küçük harfe duyarlı olarak arama yapıyor.
    Yani "Kelime" ile arama yaptırdığımda sadece "Kelime" olan sonuçlar çıkıyor. Ama ben "kelime" , "KeLiMe" , "KELime" geçenleri de sonuca dahil etmesini istiyorum.
    Bu sorunu nasıl aşabilirim ?
    Yardımcı olanlara şimdiden teşekkürler.

    Aşağıda kodları veriyorum.
    baglan.php
    <?php
    $baglanti = @mysql_connect('localhost', 'root', '');
    $veritabani = @mysql_select_db('kupur');
     
    if($baglanti && $veritabani) {
    } else {
       echo 'Bağlantı kurulamadı.';
    }
    
    ?>
    aramasonuclari.php
    <?php
    include("baglan.php");
    include("fonksiyonlar.php");
    
    $Git = $_GET["Git"];
    $kelime = $_POST["kelime"];
    
    
                $veri = mysql_query("select * from faturalar where firmaadi like '%$kelime%' or faturadetayi like '%$kelime%' or marka like '%$kelime%' or faturano like '%$kelime%' or maladedi like '%$kelime%' or malincinsi like '%$kelime%' or organizasyon like '%$kelime%'");
                $sayi=mysql_num_rows($veri);
                if($sayi<1){ 
                echo "<td>Bulunamadı!</td>";}
                else{
                while($uye = mysql_fetch_array($veri)) {
                    echo $uye['firmaadi'];    
                }}
                ?>
    veritabanı yapısı


    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 14:39:19 -->-> Daha önceki mesaj 13:04:31 --

    konu hakkında bilgisi olan arkadaş yok mu acaba ?
  • 18-12-2015, 15:51:58
    #2
    <?php
    include("baglan.php");
    include("fonksiyonlar.php");
    
    $Git = $_GET["Git"];
    $kelime = lowercase($_POST["kelime"]);
    
    
                $veri = mysql_query("select * from faturalar where lower(firmaadi) like '%$kelime%' or lower(faturadetayi) like '%$kelime%' or lower(marka) like '%$kelime%' or lower(faturano) like '%$kelime%' or lower(maladedi) like '%$kelime%' or lower(malincinsi) like '%$kelime%' or lower(organizasyon) like '%$kelime%'");
                $sayi=mysql_num_rows($veri);
                if($sayi<1){ 
                echo "<td>Bulunamadı!</td>";}
                else{
                while($uye = mysql_fetch_array($veri)) {
                    echo $uye['firmaadi'];    
                }}
                ?>
    Şu şekilde yapabilirsin. Bu arada, GET, POST ile aldığın veriyi mutlaka filtrelemelisin.
  • 18-12-2015, 16:00:03
    #3
    Yeşil SEO İnt. Hiz.
    phpGuru adlı üyeden alıntı: mesajı görüntüle
    <?php
    include("baglan.php");
    include("fonksiyonlar.php");
    
    $Git = $_GET["Git"];
    $kelime = lowercase($_POST["kelime"]);
    
    
                $veri = mysql_query("select * from faturalar where lower(firmaadi) like '%$kelime%' or lower(faturadetayi) like '%$kelime%' or lower(marka) like '%$kelime%' or lower(faturano) like '%$kelime%' or lower(maladedi) like '%$kelime%' or lower(malincinsi) like '%$kelime%' or lower(organizasyon) like '%$kelime%'");
                $sayi=mysql_num_rows($veri);
                if($sayi<1){ 
                echo "<td>Bulunamadı!</td>";}
                else{
                while($uye = mysql_fetch_array($veri)) {
                    echo $uye['firmaadi'];    
                }}
                ?>
    Şu şekilde yapabilirsin. Bu arada, GET, POST ile aldığın veriyi mutlaka filtrelemelisin.
    Yanıt için çok teşekkürler.
    lowercase fonksiyonunu denedim hocam.
    fakat sonuç olarak aynı. Büyük küçük harfe dikkat ediyor çıkan sonuçlarda.
  • 18-12-2015, 18:40:40
    #4
    merhaba bölümdaş,
    Türkçe karakterler biraz uğraştırıyor sadece. Tablo yapını bilmiyorum fakat performans sıkıntısı yoksa şöyle bir
    function strtoupperx($str,$a){
        $_trSpec = array(
        'Ç' => 'ç',
        'Ğ' => 'ğ',
        'İ' => 'ı',
            'İ'=>'i',
        'Ö' => 'ö',
        'Ş' => 'ş',
        'Ü' => 'ü');
    $enChars = array_keys($_trSpec);
    $trChars = array_values($_trSpec);
    if($a == "x") $str = str_replace($trChars, $enChars,$str); else $str = str_replace( $enChars,$trChars,$str);
       return $str;
    
    }
    fonksiyonu where sorgusunda kullanabilirsin. 2 yeni where koşulu daha eklenir her stun için.

    Yine de http://dev.mysql.com/doc/refman/5.1/...xt-search.html şuradan fulltext search'e bakmanı öneririm.

    $stunlar[] = "firma";
    $stunlar[] = "fatura";
    $stunlar[] = "marka";
    $stunlar[] ="baskastun";
    $uzunwhere = "";
    
    foreach($stunlar as $s=>$a) {
    $uzunwhere . = " or `$a` like '%".strtoupperx($_POST['kelime'],"x")."%' 
    or `$a` like '%".strtoupperx($_POST['kelime'],"y")."%' 
    or `$a` like '%".$_POST['kelime']."%' ;
    }
    
    $veri = mysql_query("select * from faturalar where 1=2 $uzunwhere");
    gibi algoritmayla dizdirip sorgulattırabilirsin. denemedim ama mevzuyu anlatabilmişmdir sanırım.

    Dediğim gibi tablo kalabalık ve işlem hit alan bir işlemse fulltext search daha optimize olur.

    kolay gelsin



    staticiation adlı üyeden alıntı: mesajı görüntüle
    Merhaba arkadaşlar;
    Üzerinde çalıştığım bir proje var. Bu proje aşağıdaki sorunum haricinde bitti sayılır.
    Sorunum şu ki ; Mysql de arama yaparken büyük küçük harfe duyarlı olarak arama yapıyor.
    Yani "Kelime" ile arama yaptırdığımda sadece "Kelime" olan sonuçlar çıkıyor. Ama ben "kelime" , "KeLiMe" , "KELime" geçenleri de sonuca dahil etmesini istiyorum.
    Bu sorunu nasıl aşabilirim ?
    Yardımcı olanlara şimdiden teşekkürler.

    Aşağıda kodları veriyorum.
    baglan.php
    <?php
    $baglanti = @mysql_connect('localhost', 'root', '');
    $veritabani = @mysql_select_db('kupur');
     
    if($baglanti && $veritabani) {
    } else {
       echo 'Bağlantı kurulamadı.';
    }
    
    ?>
    aramasonuclari.php
    <?php
    include("baglan.php");
    include("fonksiyonlar.php");
    
    $Git = $_GET["Git"];
    $kelime = $_POST["kelime"];
    
    
                $veri = mysql_query("select * from faturalar where firmaadi like '%$kelime%' or faturadetayi like '%$kelime%' or marka like '%$kelime%' or faturano like '%$kelime%' or maladedi like '%$kelime%' or malincinsi like '%$kelime%' or organizasyon like '%$kelime%'");
                $sayi=mysql_num_rows($veri);
                if($sayi<1){ 
                echo "<td>Bulunamadı!</td>";}
                else{
                while($uye = mysql_fetch_array($veri)) {
                    echo $uye['firmaadi'];    
                }}
                ?>
    veritabanı yapısı


    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 14:39:19 -->-> Daha önceki mesaj 13:04:31 --

    konu hakkında bilgisi olan arkadaş yok mu acaba ?
  • 18-12-2015, 19:28:30
    #5
    Yeşil SEO İnt. Hiz.
    bluexpres adlı üyeden alıntı: mesajı görüntüle
    merhaba bölümdaş,
    Türkçe karakterler biraz uğraştırıyor sadece. Tablo yapını bilmiyorum fakat performans sıkıntısı yoksa şöyle bir
    function strtoupperx($str,$a){
        $_trSpec = array(
        'Ç' => 'ç',
        'Ğ' => 'ğ',
        'İ' => 'ı',
            'İ'=>'i',
        'Ö' => 'ö',
        'Ş' => 'ş',
        'Ü' => 'ü');
    $enChars = array_keys($_trSpec);
    $trChars = array_values($_trSpec);
    if($a == "x") $str = str_replace($trChars, $enChars,$str); else $str = str_replace( $enChars,$trChars,$str);
       return $str;
    
    }
    fonksiyonu where sorgusunda kullanabilirsin. 2 yeni where koşulu daha eklenir her stun için.

    Yine de http://dev.mysql.com/doc/refman/5.1/...xt-search.html şuradan fulltext search'e bakmanı öneririm.

    $stunlar[] = "firma";
    $stunlar[] = "fatura";
    $stunlar[] = "marka";
    $stunlar[] ="baskastun";
    $uzunwhere = "";
    
    foreach($stunlar as $s=>$a) {
    $uzunwhere . = " or `$a` like '%".strtoupperx($_POST['kelime'],"x")."%' 
    or `$a` like '%".strtoupperx($_POST['kelime'],"y")."%' 
    or `$a` like '%".$_POST['kelime']."%' ;
    }
    
    $veri = mysql_query("select * from faturalar where 1=2 $uzunwhere");
    gibi algoritmayla dizdirip sorgulattırabilirsin. denemedim ama mevzuyu anlatabilmişmdir sanırım.

    Dediğim gibi tablo kalabalık ve işlem hit alan bir işlemse fulltext search daha optimize olur.

    kolay gelsin
    Vaaay Salihcim )
    seni buralarda görmek de mi nasip olacaktı ))

    Konuya dönelim
    sorunu php fonksiyonları ile bir çok kez halletmeme rağmen esas sorun şurda.
    Benim veritabanım ve tablolarım utf8_general_ci (ci = case insensitive) karakter setinde olmasına rağmen nedense bana sensitive muamelesi yapıyor ))
    Sorun php ile alakalı değil aslen üstad. MySQL gıcıklık yapıyor benim kanaatimce (

    Bu arada verdiğin kodları da deneyeceğim. İnşallah çözülür