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ı

PHP Yönetim Paneli İçin TinyMCE Kullanımı

TinyMCE kullanarak PHP  yönetim paneli hazırlamak.

Php ile site yapımında yayınlanacak yazıyı biçimlendirmek, resim eklemek gibi işlemleri yaparken editör kullanmak gerekir. TinyMCE ve FCKEditor gibi ücretsiz editörleri kullanabilirsiniz. Bu yazıda PHP site için TinyMCE editörün kullanımı anlatılacaktır.

Editörün demosu için: TinyMCE demo
TinyMCE editörü indirmek için: TinyMCE  indir

Editörü indirip açtığınıza zaman jscripts ve examples isimli iki klasör ve bir txt açılacaktır. jscripts klasörü editörün çalışması için gerekli klasörleri bulundurur. example içinde ise TinyMCE için örnek uygulamlar bulunmaktadır.

TinyMCE Kullanımı:

Mesela sitenizde yonetici isimli bir klasör oluşturdunuız ve yönetim panelini bu klasör içinde oluşturmak istiyorsunuz. jscripts ve txt sayfasını bu klasörün içine kopyalayın. examples klasörü içinden de full.html sayfasını yonetim klasörüne kopyalayın.(diğer klasörleri de kopyalayın. css klasörü varsayılan biçimlendirmeleri değiştirir.) full.html editörün tüm özelliklerini içeren örneğidir. full.html sayfasını açın ve aşağıdaki değişikliği yapın.

<script type=”text/javascript” src=”../jscripts/tiny_mce/tiny_mce.js” mce_src=”../jscripts/tiny_mce/tiny_mce.js”></script>

yukardaki satır yerine aşağıdaki satırı yazın.

<script type=”text/javascript” src=”jscripts/tiny_mce/tiny_mce.js” mce_src=”jscripts/tiny_mce/tiny_mce.js”></script>

Bu değişiklik ile taşıdığımız full.html sayfanın bağlantısını düzeltmiş olduk. Bir üst klasöre çıkardığımız için baştaki .. (üst klasör) yolunu iptal etmiş olduk.

full.html sayfasının action bölümünde verilerin alınacağı sayfa gösterilmelidir. full.html sayfasının adı da değiştirilebilir.

TinyMCE ile oluşturulan içeriğin MySQL veritabanına kaydedilmesi ve Türkçe karakter sorununun çözümü.

PHP ile MySQL Veritabanındaki İçeriği Sayfalamak

PHP ile Yönetim Paneli Hazırlamak 

Bu uygulamada örnek olarak bir şiir sitesi verilecek. Harflerden oluşan bir menü ve harfe tıklandığı zaman ismi o harf ile başlayan şairler listelenecek. Liste 10 şairden oluşan sayfalara ayrılacak. En altta da sayfa sayısını gösteren linkler bulunacak.

Harf menü ana sayfada(index.php) bulunsun. Şairlerin listeleneceği sayfa ise sair.php olsun. index.php içindeki harf menüdeki linklerin get metodu ile şairin baş harfini göndermesi gerekir. Yani harf menü linkleri aşağıdaki gibi olmalı.

<a href=”sair.php?k=a” mce_href=”sair.php?k=a”>A</a> 

Yukarıdaki link sair.php sayfasına Yazının tamamını okuyun »

Meb.k12.tr Altında Okul Siteleri İçin Okul Teması

Milli Eğitim Bakanlığı’nın ücretsiz olarak verdiği alanlar php veya asp desteklemez. Bu sitelerde sadece html, flash veya javascript kullanılabilir. Aşağıdaki linklerden sadece css oluşturulmuş Milli Eğitim Bakanlığı’nın sitesinde yayınlanan şablona uygun temaya ulaşabilirsiniz.

Okul temasının önizlemesi

Okul teması için detaylı bilgi ve dosyalar.