Farklı Tarayıcılar için CSS

CSS ile yapılan tasarımlarda en büyük sıkıntı css kodlarının tarayıcılar tarafından farklı yorumlanmasıdır.

Bir web sitesi tasarlanırken farklı tarayıcılar ile bu web sitesi test edilmelidir. Hatta farklı tarayıcılar için farklı css sayfaları oluşturulup tarayıcıya göre o tarayıcıya özel css sayfası devreye sokulmalıdır.

Farklı tarayıcıya göre farklı css sayfası çağırmak için if yapısı kullanmak gerekir.

İlk olarak kullanıcının tarayıcısını öğrenip if veya case ile css çağırma işlemi yapılabilir diye düşündüm ama internette daha pratik gibi bir yöntem var.

Bu yöntem css sayfasının çağrılması sırasında if komutunun kullanılması. Herhangi bir dile gerek kalmadan html ile uygulanabilen bir yöntem.

Yazımı aşağıdaki gibi:

<!–[if IE 6]>
<link rel=”stylesheet” type=”text/css” href=”/tema/cssler/ie6-icin.css” />
<![endif]–>

Yukarıdai örnek internet explorer 6.0 tarayıcı için uygun css sayfasını çağrıyor.

Aşağıda bu konuda yardımcı olabilecek bir kaç link var.

Bu örnekte css sayfaları ve css’i kullanan sayfa tam olarak verilmiş.

Bu örnekte de biraz daha karmaşık bir if yapısı kullanılmış.

Not: if yapısı ile firefox tarayıcılar belirtilemiyor.

CSS Firefox ve İE Margin Top Özelliği

Aşağıdaki gibi bir kod yazıldığı zaman internet explorer ve Firefox bu css’i farklı yorumlamaktadır. Margin ile sayfanın üst tarafındaki boşluk 0 verilmesine rağmen Firefox üst tarafta boşluk bırakmaktadır.

body {
 background-image: url(resim/tema/zemin.gif);
 margin-top: 0;
 padding-top: 0;

}

Bunun nedeni firefox’un p taglarını internet explorer’a göre farklı yorumlaması ve bi miktar yükseklik vermesidir. Çözüm için p taglarını biçimlendiren ve etrafındaki genişliği sıfırlayan css eklenmelidir. Aşağıdaki kodlar css sayfasına eklenerek sorun çözülür.

P {
 margin:0 0 1em 0; margin: 0 0 1em 0;
 padding:0; padding: 0;
 }

TinyMCE ile Varsayılan Ayarları Değiştirmek

TinyMCE editör ile varsayılan yazı fontu ve yazı boyutunu değiştirebilirsiniz. Bunun için css klasörü içindeki content.css sitil sayfası kullanılır. Burada bulunan body etiketleri içinde varsayılan biçimlendirmeler vardır. font-family ile yazının fontunu, font-size ile yazının boyutu değiştirilebilir.

PHP Warning: session_start(): Cannot send session cookie Hatası

Warning: session_start(): Cannot send session cookie hatası oturum açılış esnasında oluşuyor. Sorunu çözmek için session_start() ifadesini kodların en üstünde yazın. html kodlarının üstünde olsun. Oturum açma sayfasını çağırırken de yine en üstte sayfayı include edin.

PHP ile Dosya Okuma

Fopen komutu ile php’de dosya açılır. Komut w, r, a gibi kiplerde çalıştırabilir. w ile yazma, r ile okuma, a ile ekleme işlemleri yapılabilir.

Aşağıdaki örnekte c sürücüsünde php klasörü içinde ornek.txt dosyasını açıp içindeki verileri ekrana yazan php kodları verilmiştir.

<?php 
$dizin=”C:/php”;  
$dosya=”ornek.txt”;  
$dosya=fopen (”$dizin/$dosya”,’r'); /*Dosya okuma modunda açılıyor*/
if ($dosya)
/*Dosya açılabildimi.*/

{   echo “dosyayı açabildim </br>”;   }
else
{   echo “hata oldu”;   }  

while(!feof($dosya)) //dosyayı sonuna kadar satır satır oku.
{
$i++; /*satır sayısını yazacak değişken*/
$satir=fgets($dosya,1024);/*fgets ile satır oku. En fazla 1024 karakter*/
print $i.”.Satır: “.$satir.”<br>”; /*Satırı başında satır numarası ile ekrana yaz.*/
}
?>

Notice: Undefined variable ve Undefined offset: 1 Hatası

PHP ile fonksiyon yazarken aşağıdaki hatayı aldım.

Notice: Undefined variable: sayilar in c:\program files\easyphp1-8\www\dene\ynt\fonksiyon-r\r_sayi.php on line 12

Notice: Undefined offset: 1 in c:\program files\easyphp1-8\www\dene\ynt\fonksiyon-r\r_sayi.php on line 12

İnternette biraz araştırma yaptım. Undefined variable tanımsız değişken anlamına geliyor. Yukarıdaki ilk hata mesajı sayilar değişkeninin (dizi değişkeni) tanımsız olduğunu ikinci hata mesajı ise 1. offset değerinin(sayilar[1]) olmadığını söylüyor.

Sorun dizi kullanımından kaynaklanıyor. Mesela sayilar[1] döngü içinde geçiyor ama sayilar[1] değeri yok. Bu durum Notice: Undefined offset: 1 hatasını oluşturuyor.

Notice: Undefined offset: 1 Hatasının Çözümü:

Çözüm olarak eğer $sayilar[$i]  boşsa işleme sokma komutu ile çözülüyor.

Bu da $sayilar[$i] işleme girmeden önce:

if (isset($sayilar[$i])) { $sayilar[$i] içeren komutlar} şeklinde kod yazımı ile yapılabilir.

Burada isset boş değilse true döndürecektir. Dizi boşsa komutları işlemez.

PHP Checkbox (Seçim Kutusu) Kullanımı

Örnekte bir yazıya ait anahtar kelimeler ve anhatar kelime sayıları seçim kutuları ile  listelenmekte ve gönder butonu tıklandığı zaman diğer sayfada seçili anahtar kelimeler görüntülenmektedir.

Örnek bir yazıdaki kelimeleri ve kelime sayısını seçim kutuları ile listeleyen bir fonksiyon ve formu alan php sayfasından oluşmaktadır.

Kelimeleri ve kelime sayılarını tablo olarak listeleyen fonksiyon:

<?php
function akel_liste($nesne_id)  /*Fonksiyon nesne_id değişkenini alarak bu yazıya ait en çok kullanılan kelimeleri listeler*/
{
include(”baglanti.php”);  /*Mysql vertabanı bağlantısı için gerekli Yazının tamamını okuyun »

PHP Fonksiyonları

Aşağıda php ile metinler(string) üzerinde işlem yaparken kullanılan bazı php fonksiyonlarının kullanımı ve bu fonksiyonlar ile ilgili örnek programlar verilmiştir.

php strstr fonksiyonu ve kullanım örnekleri

php strpos fonksiyonu ve kullanım örnekleri

php substr fonksiyonu ve kullanım örnekleri

php strlen fonksiyonu

boşlukları almak için trim fonksiyonu

PHP ile Yazıyı Kelimelere Bölmek ve HTML Taglarını Çıkarmak

Elinizdeki içerikteki kelime yoğunluğunu ölçmek istiyorsanız, string’i kelimelere bölmeniz gerekir. Ayrıca içeriği TinyMCE gibi bir editörden alıyorsanız; html taglarını da almamanız gerekecek.

explode fonksiyonu kullanılabilir ama bu fonksiyon ile yazının düzenli olması gerekir. Mesela boşluk sayısı birden fazlaysa sorun çıkarabilir(denemedim). Ayrıca html kodlarını ayıklamak için uygun değil.

Aşağıda yazdığım fonksiyon yazıdaki kelimeleri en az bir boşluğa ve html taglarına göre kelimelere ayırıyor. Bu fonksiyon ile veritabanına kelimeler kaydedilip kelime yoğunluğu ölçülebilir.

Fonksiyonun çalışma mantığı şu şekilde; string uzunluğu kadar for açılır ve her harf for içinde kontrol ettirilir. Eğer string içerisinde < işareti varsa html başlamış demektir. while ile html bitene kadar yani > işaretine kadar pas geçilir. Eğer boşluk varsa while ile boşluk olmayana kadar pas geçilir. Bunların dışında harfler toplanır ve < ve boşluk işaretine göre kelime oluşturulur.

PHP ile Yazıyı Kelimelere Bölmek için gerekli fonksiyonu indir

 <?php
function htmlsil($x)
    /*Fonksiyon $x ile kendine gelen stringi alıyor.*/
 {  /*Fonksiyon başlangıcı*/
   $uz=strlen($x);   /*Fonksiyon stringin uzunluğunu uz değişkenine aktardı.*/
  $topla=”";      /*Kelimenin oluşacağı değişken boşaltılıyor. */
    for ($i=0;$i<$uz;$i++)   /*String uzunluğu kadar döngü açlıyor. */
                                                /* Bu sayede $x[$i] ile her karakter kontrol edilebilir.*/
    {  /*For başladı*/
        if ($x[$i]==”<”)  /*Eğer karakter < ise html başlamıştır. */
            { /*Eğer html başlamışsa /if başlangıcı/ */
            
echo $topla.”<br>”; /*Eğer html başlamışsa önceki kelimeyi ekrana yaz.*/
             $topla=”";  /*Kelimeyi toplayan değişkeni yeni kelime için boşalt.*/
             while($x[$i]<>”>”)  /*html bitişi için > işaretine kadar boşa dön*/
               {$i++;}                    /*Bu sayede html tagları pas geçiliyor.*/
           }  /*Eğer html ise bitti. /if sonu/*/
      else if ($x[$i]==” “) /*Eğer boşluk varsa. Kelime bitmiştir ve yeni kelime başlar.*/
         { /*Eğer boşluk varsa /if başlangıcı/*/
            echo $topla.”<br>”;  /*Boşluk varsa kelime tamamlanmıştır. Kelimeyi yaz*/
            $topla=”";                 /*Kelime toplayan değişkeni yeni kelime için boşalt*/
            while($x[$i]<>” “)  /*Eğer birden fazla boşluk olmayan kadar dön.*/
           {$i++;}                      /*Fazladan boşluklar pas geçilmiş oldu.*/
         } /*Boşluk varsa bitti. /if sonu/ */

       else if (($x[$i]<>”,”) && ($x[$i]<>”.”) )  {$topla=$topla.$x[$i];}
      /*Eğer boşluk ve < işareti yoksa harflari toplayıp kelime oluştur. Ama . ve , gibi karakterleri alma. Bu karakterlere başka noktalama işaretleri de eklenebilir. */                                    
   } /*string bitti /for sonu/ */               
}
?>

Kelimeler ekran yerine veritabanına da yazılabilir. Bu sayede kelime yoğunluğu ölçülür.

Üstteki bölüm yayınlandıktan sonra strlen, strpos ve substr fonksiyonlarını incelerken html kodlarını ayıran bi fonksiyon daha yazdım. Bu fonksiyon üsttekine göre sanırım biraz daha iyi sanırım.

Aşağıdaki fonksiyon > tagı ile < tagı arasında bulunan yazıları alır. < > tagları arası html olduğu varsayılırsa > < arası html dışındaki yazı olacaktır.
function html_cik($metin)
{
$uz=strlen($metin);
$bitti=1;

$yeni_basla=0;

$topla=”";

while ($bitti)
{
$html_basla = strpos($metin,”<”,$yeni_basla);
$html_bit = strpos($metin,”>”,$yeni_basla);

if ($html_basla === false)
   {
   $bitti=0;
   }
else
{
$k_say=$html_basla-$yeni_basla;
$parca=substr($metin,$yeni_basla,$k_say);
$topla=$topla.” “.$parca;
$yeni_basla=$html_bit+1;
}
}
return($topla);
}

Aşağıdaki fonksiyon da nokta,virgül, soru işareti gibi işaretleri boşluğa çeviriyor.

function k_sil($metin)
{
$o_kel=array(”.”,”,”,”:”,”;”,”?”,”!”,”-”);

  foreach ($o_kel as $kar)
    {
      $metin=str_replace($kar, ‘ ‘, $metin);
    }
return($metin);
}

Veritanına yazaken \n karakteri(enter) yazıyı alt satıra yazar, bunun olmaması içinde aşağıdaki kod kullanılabilir. Yani yazıyı satırlara bölmeden kaydeder. Bi de &nbsp; karakterini boşluğu dönüştürür.

$metin=preg_replace(’/\s\s+/’, ‘ ‘, $metin);
$metin=str_replace(’&nbsp;’, ‘ ‘, $metin);

Yukarıdaki fonksiyonlar sonucunda peşpeşe birden fazla boşluk oluşabilir veya yazıda peşpeşe birden fazla boşluk olursa diye peşpeşe birden fazla boşluğu alan bir fonksiyon yazdım… 

Peşpeşe birden fazla boşluğu tek boşluk haline getiren php fonksiyonu:

function tek_bosluk($metin)
{
$toplam_metin=”";
$uz=strlen($metin);
$bosluk=0;

for ($i=0;$i<$uz;$i++)
  {
 
if (!(($bosluk) && ($metin[$i]==” “))) 

{$toplam_metin=$toplam_metin.$metin[$i];}

  if ($metin[$i]==” “)
     {
       $bosluk=1;
     }
  else{$bosluk=0;}
   
  }
  return(trim($toplam_metin));
}

Yukarıdaki işlemleri Tinymce gibi bir editörden gelen veriye uyguladıktan sonra yan yana kelimeleri aşağıdaki fonksiyonla veri tabanına yazabilirsiniz… Tabi sql ile bunları guruplama ve yoğunluk ölçme işlemleri yapmak lazım..

 function bol($metin,$nesne_id)
{
include(”baglanti.php”);
$kelime=explode(” “,$metin);
 for ($i=0;$i<count($kelime);$i++)
  {
   mysql_query(”INSERT INTO `analiz` (`kelime`,`nesne_id` ) VALUES ( ‘$kelime[$i]’,'$nesne_id’ )”);
  }
}

TinyMCE ile MySQL Veritabanına Veri Girişi (PHP için)

PHP ile TinyMCE Kullanarak Yönetim Paneli Hazırlamak.

TinyMCE ile MySQL veritabanına veri girişi sırasında en büyük sorunlardan birisi türkçe karakter sorunudur. Yazıda Türkçe karakterlerin MySQL veri tabanına düzgün bir şekilde kaydedilmesi anlatılmıştır.

TinyMCE kullanımı yazısında TinyMCE’nin nasıl kullanılacağı anlatıldı. TinyMCE’nin olduğu formun action bölümünde bilgial.php yazıldığını varsayalım ve bilgial.php sayfasını oluşturalım.

Öncelikle MySQL veritabanı bağlantısı için baglanti.php isimli bir sayfa oluşturulmalı ve sayfaya include ile eklenmelidir. Aşağıda baglanti.php için MySQL veritabanı bağlantısı kodları bulunmaktadır.

<?php
$baglan=mysql_connect(”localhost”,”root”);
if(!($baglan))
{  die(’Veritabani baglantisi kurulamadi: ‘.mysql_error()); }

mysql_select_db(”ruya6″, $baglan);

setlocale(LC_COLLATE, ‘turkish’);
mysql_query(”SET NAMES ‘latin5′”); 
?>

Bağlantını son iki satırında MySQL veritabanında Türkçe karakterler kullanılacağı beliritiliyor.

Veritabanı oluşşturuken ise veritabanı dili ve tabloların dili için(sadece veritabanı yeterli olmayabilir)  utf8_turkish_ci kullanılmalıdır. Ayrıca web sayfalarında aşağıdaki metayı kullanarak sayfalar için Türkçe dil desteği sağlayın.

<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-9″ />

MySQL Veritabanına Bilgileri Yazmak için gerekli kod(bilgial.php):

<?php
include(”baglanti.php”);
  /*Veritabanı bağlantısı için sayfa çağrışıyor.*/

$icerik=$_POST[”elm1″];
/*TinyMCE nin bulunduğu metin alanından(elm1) veriler post ile alınıyor*/

$eski = array(”ç”,”Ç”, “ö”,”Ö”,”ü”,”Ü”);
$yeni   = array(”ç”,”Ç”, “ö”,”Ö”,”ü”,”Ü”);
$icerik = str_replace($eski, $yeni, $icerik);
/*TinyMCE içeriği html’ye çevirir. Bu yüzden mesela ç harfini ç olarak çevirir. Post ile içerik alındığı zaman yukardaki üç satır sayesinde Türkçe karakterler normal haline çevrilip veritabanına kaydedilir. Mysql’de  utf8_turkish_ci  kullanıldığı için de Türkçe karakterler normal bir şekilde yazılacaktır. Veriler web sayfasına yazılırken de dil karakter seti olarak iso-8859-9 kullanıldığı için Türkçe karakterler sayfada düzgün görünecektir.*/


mysql_query(”INSERT INTO `nesne` (`icerik` ) VALUES ( ‘$icerik’ )”);
/*içerik nesne tablosunun içerik alanına yazdırılıyor.*/

/*Aşağıdaki satırlar da içeriği aynı sayfaya yazdırıyor. Kullanılmasa da olur.*/
$x=mysql_query(”select * from `nesne`”);
while($row = @mysql_fetch_array($x))
  {
  echo $row[’nesne_id’] . ” ” . $row[’icerik’];
  echo “<br />”;
 }
?>

Not: Yukardaki kodlar bu blogta yayınlanırken tırnak işaretlerinde bozulmalar olabilir. Ya da php sürümüne göre tek tırnak veya çift tırnak değişebilir.

str_replace kullanımı