• 05-02-2018, 09:57:25
    #1
    merhaba
    aşağıdaki gibi tablodan gelenleri ekrana listelediğim bir kod yapım var
    db: utf-8 genaralci olup
    bağlantı için bunu
     
      <?php
      $DB_host = "localhost";
    $DB_user = "root";
    $DB_pass = "";
    $DB_name = "portal";
          try
        {
            $DBcon = new PDO("mysql:host={$DB_host};dbname={$DB_name}",$DB_user,$DB_pass);    
            $DBcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }
        catch(PDOException $e)
        {
            echo "ERROR : ".$e->getMessage();
        }
    ?>
    ve listeleme içinde
      <?php
    $stmt = $DBcon->prepare("SELECT * FROM arac00 where arac_act='1' ORDER BY arac_adi asc");
    $stmt->execute();
    ?>
      <center>
    <table width="600px">
            <tr class="tablobaslik">
                    <th title="Aracın Plakası">Araç Plakası</th>
                    <th title="Aracı Kullanan Şöför Adı" height="20px">Araç Şöförü</th>
                    <th title="Hareket Tipleri" width="80px">İşlem</th>
            </tr>
      
    <?php
    if($stmt->rowCount() > 0)
    {
        while($row=$stmt->FETCH(PDO::FETCH_ASSOC))
        {
            ?>
            <tr>
                    <td width="150"><center><?php print($row['arac_plaka']); ?></center></td>
                    <td><?php print($row['arac_adi']); ?></td>
    bu kodu her sayfada aynı şekilde tablo ve field ları değiştirerek kullanıyorum... ezbere iş
    sorunum şu... büyük listelerde maalesef A dan sonra Ş ve İ-Ü-Ö-Ç sonrasında B geliyor... şuan kayıtları ben yaptığım için ilk harf i büyük sonrası küçük şeklinde kaydediyorum.. tabi ki kullanıcılar buna pek dikkat etmezler..

    2 ricam var....
    a) eleman nasıl kayıt ederse etsin... db ye ben field ı gönderirken (crud.php içinden) hep aynı mantıkda yazsın.... yani ilk harf büyük ve gerisi küçük... burda şu sorun aklıma geliyor.. ve gibi veya kelimelerinde de aynı durum olmadan yaptırmak mümkün mü ? kelime haznesi yok ve seçemicek ise diğer şekilde ne olursa kelime nin ilk harfini büyük yapıp diğerlerini küçük yazdırma durumunda arama esnasında eleman büyük küçük harf ile yapıyor olması sorun çıkartır mı , nasıl önleriz.. öneri ve tecrübeniz nedir ? acemi olduğumu unutmayın...
    b) ilk harf büyük küçük farketmeden sırama yapan bir örnek kodunuz varsa paylaşabilir misiniz nasıl sıralama yaparım ?

    lütfen hatalı veya ilerde sorun yapacak kod hatamı bildirirseniz iyi olur...
  • 05-02-2018, 10:12:51
    #2
    $db->exec("SET NAMES 'utf8'; SET CHARSET 'utf8'");
    ilk problem için bunu kullanıp bir test edin 2. sorun ise
    function ucfirst_tr($metin) { $k_uzunluk = mb_strlen($metin, "UTF-8"); $ilkKarakter= mb_substr($metin, 0, 1, "UTF-8"); $kalan = mb_substr($metin, 1, $k_uzunluk - 1, "UTF-8"); return mb_strtoupper($ilkKarakter, "UTF-8") . mb_strtolower($kalan,"UTF-8"); }
    türkçe karakter uyumlu bir arkadaş yazmış bunu kullanabilirsin.
  • 05-02-2018, 10:22:05
    #3
    öncelikle teşekkür
    ilk verdiğin kısmı dbcon a koyduğumda ekrandaki türkçe görsellik kayboluyor...
    2. olarak da bu fonksiyonu listeleme kısmında nasıl kullanacğaımı bilmiyorum... verdiğim kod içinde uygulamasını paylaşabilirsen daha kolay olacak benim için....

    az önce tüm php dosyalarımı notpadd de açıp bom olmayan utf8 e çevirip yeniden kaydettim... db ye baktığımda 2 tablonun nasıl oldu ise sweedish_ci olarak kayıt olduğunu gördüm ama o tabloların şuan için önemi yok... liste tablosu veya şuan ki çalıştığım field lar ile bağlantısı yok.
  • 05-02-2018, 10:32:06
    #4
    ztk
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Veritabanı karşılaştırmasını her zaman utf8mb4_unicode_ci yapmalısınız.
  • 06-02-2018, 09:01:36
    #5
    kodu düzeltip yardım edecek yok mu ?
  • 07-03-2018, 15:23:12
    #6
    konu hakkında direl bir çözüm öneren olmadığı için konuyu araştırmaya forsat buldukça devam ettim
    şunu buldum
    xampp localhost olarak kullandığım için my.ini dosyasının içeriğine baktığım da
    ## UTF 8 Settings
    init-connect='SET NAMES utf8'
    collation_server=utf8_general_ci
    character_set_server=utf8
    #skip-character-set-client-handshake
    #character_sets-dir="/xampp/mysql/share/charsets"

    kısmındaki tüm değerlerin kapalı olduğunu gördüm... ve 3 satırı bu şekilde açtım... tabiki sonucu almaya yetmedi... diğer sayfaalrda da tablo ve db konusunda bir arkadaşımızın şu ifadesi çok dikkat çekici idi..
    kaynak
    Örnekle açıklamak istersek, almancada da “ü” harfi var türkçede de, isveçcede de… Ama bu harflerin alfabedeki yeri dile göre değişiyor yani collation’ı latin1_swedish_ci seçip sıralama yaparsanız ü başka yerde, latin1_german1_ci seçerseniz başka yerde yer alır. Ya da latin1_german1_ci seçerseniz aramalarda ‘ä’ ile ‘a’ aynı kabul edilirken latin1_german2_ci seçerseniz farklı kabul edilir.
    dolayısı ile sıralama sorunumun kaynağının maalesef bu olduğunu öğrendim.... saolsun güzel örnek vermiş
    db yine utf8_general_ci olarak duruyor ama tabloyu latin5_turkish_ci ve field ları da çevirdim...
    dolayısı ile de önce my.ini yi bu hale getirdim ama yeterli mi ? bilmiyorum ama şuan için sıralamaya yeterli... şimdi yeni .ıkan sorunu çözmem gerekiyor... oda daha önce kayıt yapmış olduğum rehber deki binlerce kayıdı düzeltmek...
    20-30 satırlık olanları düzeltmeyi manuel yapıyorum...
    ama şunu da yapabilirim... yardımcı olacak var ise... elimde mdb den export ettiğim 6k lık adres kaydım var... bunlar klasik Türkçe harflerden oluşuyor.. bunları bir şekilde latin5_turkish_ci şekline sorunsuz aktarabilir miyim ?
    denemelerde şunu gördüm
    eğer my.ini dosyasındaki karakter kısımlarını örjinaldeki gibi kapalı hale getirdiğimde kayıt sıralaması doğru çıkıyor ama bu seferde görüntülenmesi gidiyor... ?
    çiçek = çiçek .... eğer kapalı utf8 seçeneği kapalı iken çiçek yazdığımda phpmyadmin de çiçek sorunsuz gözükürken ve sorunsuz sıralanır iken... kapattığımda bu hale geliyor... kapalı iken aynı şeyi düzeltip açtığımda ise benzer sorun çıkıyor... bu durumda size şunu sormak istiyorum
    doğru tablo SIRALAMA yapısını bulduğuma göre... mysql in ini dosyasında utf8 i açık mı yoksa kapalı şekilde mi devam edip eski kayıtları buna göre güncellemek gerekiyor ?
    işlem nasıl olursa olsun sonucu L_A_N da kullanılacağı için ... şuan için windows içindeki xampp da.. daha sonrası için emin değilim...
    konu hakkında öneri ve yorumlarınızı alabilir miyim ?