php fckeditör ve mysql tablo sorunu

Kodla Büyü

Tarik_Turan

Aktif Üye
Mesajlar
190
Öncelikle merhabalar...
Benim sorunum ilginç olmakla birlikte ilk defa başıma gelen bir olay...
Yaptığım bir sigorta acentesi sitesinde sınırsız kategori mantığını siteye yeni bir tablo ile yerleştirecektim. Elimdeki eski tablolar "kategoriler" ve "makaleler" idi. Bunlardan ilki ana kategorileri ikincisi alt kategorileri içeriyordu.Kayıtları yeni oluşturduğum "categories" tablosuna aktaracaktım... basit bir kod ile eski tablolardan aldığım verileri yeni tabloya eklemeye başladım ama ilginç olan bir kayıt kategoriler tablosundan categories tablosuna kopyalanırken, bir diğer kayıt kopyalanmıyordu.Aynı sorunu makaleler tablosundan categories tablosuna kayıtları kopyalarken de yaşadım. MYSQL de oluşturduğum tablolardaki alanlar ve veri türlerine baktım. Hepsi birbiri ile uyumlu. Aslında sorun içerik eklemelerinde FCKeditör ile admin panelinden eklemeler yapıyor ve bunları MYSQL e LONGTEXT bir alana kayıt ediyordum. Ama boyut çok büyük olmasa da yani LONGTEXT e göre büyük olmasa da bir kayıt koypyalanırken bir diğeri kopyalanmıyor...Durumu açayım.MYSQL tablolarım şöyle;

yeni categories tablom :

Kod:
CREATE TABLE categories (
kat_id int(8) unsigned NOT NULL auto_increment,
kat_baslik varchar(250) NOT NULL default '',
altkat_id int(8) NOT NULL default '0',
kat_icerik longtext NOT NULL,
kat_date datetime NOT NULL default '0000-00-00 00:00:00',
kat_tanim varchar(80) NOT NULL default '',
kat_anahtar varchar(250) NOT NULL default '',
kat_link varchar(250) NOT NULL default '',
kat_hit int(8) NOT NULL default '0',
PRIMARY KEY (kat_id)
) TYPE=MyISAM;

Ana kategorilerin bulunduğu kategoriler tablom :
-------
Kod:
CREATE TABLE kategoriler (
  kat_id int(8) unsigned NOT NULL auto_increment,
  kat_baslik varchar(250) default '',
  kat_icerik longtext NOT NULL,
  kat_date datetime NOT NULL default '0000-00-00 00:00:00',
  kat_tanim varchar(80) default NULL,
  kat_anahtar varchar(250) default NULL,
  kat_link varchar(250) default NULL,
  kat_hit int(8) NOT NULL default '0',
  PRIMARY KEY  (kat_id)
) TYPE=MyISAM;

alt kategorilerin bulunduğu makaleler tablom :
--------

Kod:
CREATE TABLE makaleler (
  makale_id int(8) unsigned NOT NULL auto_increment,
  makale_baslik varchar(250) NOT NULL default '',
  kat_id int(8) NOT NULL default '0',
  altkat_id int(8) NOT NULL default '0',
  makale_metni longtext NOT NULL,
  makale_izle int(8) NOT NULL default '0',
  makale_tanim varchar(80) NOT NULL default '',
  makale_anahtar varchar(250) NOT NULL default '',
  makale_tarih datetime NOT NULL default '0000-00-00 00:00:00',
  makale_goster char(1) NOT NULL default '0',
  makale_link varchar(250) NOT NULL default '',
  PRIMARY KEY  (makale_id)
) TYPE=MyISAM;

-----kopyala.php dosyasındaki sadece ilgili kopyalama bölümü

PHP Kodu:
Kod:
$sql="SELECT * FROM kategoriler WHERE kat_id>0";
$sonuc=mysql_query($sql);
while ($sorgu_verisi = mysql_fetch_array($sonuc)) 
{
$mkid = "$sorgu_verisi[kat_id]";
$mkbaslik = "$sorgu_verisi[kat_baslik]";
$mkmetni = "$sorgu_verisi[kat_icerik]";
$mkdate = "$sorgu_verisi[kat_date]";
$mktanim = "$sorgu_verisi[kat_tanim]";
$mkanahtar = "$sorgu_verisi[kat_anahtar]";
$mkhit = "$sorgu_verisi[kat_hit]";
$mklink = "$sorgu_verisi[makale_link]";
$mkkatid=0;
$komut= "INSERT INTO categories (kat_id,kat_baslik,altkat_id,kat_icerik, kat_date,kat_tanim,kat_anahtar,kat_link,kat_hit) VALUES ('', '$mkbaslik', '$mkkatid','$mkmetni','$mkdate','$mktanim','$mkanahtar','$mklink','$mkhit') ";
$sorgu=mysql_query("$komut");
if ($sorgu){ echo"$mkbaslik eklendi <br>";}else {echo"<b>$mkbaslik</b> eklenemedi<br>";}
}

şimdi bu son iki tablodaki içerikler aktarılırken sorun oluşuyor aslında...yani LONGTEXT veri türünden dolayımı böyle bir sorun olabilir bilmiyorum ama bir kayıt aktarılırken ki boyut olarak içeriği kopyalanan bir diğerinden daha az ve diğeri kopyalanıyor ama bu kopyalanmıyor... 3. ya da 8. kayır aktarılmıyor. (not : içerikler FCK editör yardımıyla html taglarıyla tabloya kayıt ediliyor.yani kat_icerik içerisinde html tagları mevcut...)

Son olarak kestane kebap acele cevap valla bu sorun çok uğraştırdı beni arkadaşlar...
Şimdiden Teşekkür ediyorum...
 
güncel...Arkadaşlar php ve mysql bilgisine güvenenler özellikle ; en azından sorunun nedenleri hakkında bir fikir verebilir misiniz ?
 
Şu anda deneyemediğim için kesin bir şey söyleyemeyeceğim ama HTML metni içindeki tırnaklar ve diğer özel karakterlerden kaynaklanıyor olabilir. Bundan kaçınmak için veritabanına eklenen değerlere escape (kaçış karakterleri, ' yerine \' kullanmak gibi) eklemek için eskiden addslashes ve stripslashes kullanılırdı. Ancak yenisinin veritabanı için özel ve Unicode karakterleri de destekleyen mysql_real_escape_string fonksiyonu olması lazım.

Şu anda deneyemediğim için emin değilim ama tahminimce son yazdığınız sorgu;

Kod:
$komut= "INSERT INTO categories (kat_id,kat_baslik,altkat_id,kat_icerik, kat_date,kat_tanim,kat_anahtar,kat_link,kat_hit) VALUES ('', '$mkbaslik', '$mkkatid','" . mysql_real_escape_string($mkmetni) . "','$mkdate','$mktanim','$mkanahtar','$mklink','$mkhit') ";

şeklinde olmalı. Bir deneyin.
 
canora hocam çok çok teşekkür ettim. Aslında daha önceki projelerimde bazen kullandığım addslashes ve stripslashes den ötürü böyle bir sorun yaşamışım...Bu projede duruma göre içerik uzayabiliyordu.Ama addslashes kullanmadan kayıt yapmışım...Ayrıca mysql_real_escape_string() fonksiyonuyla da başarılı olmadığını okuyan arkadaşlar için belirteyim.İlginçtir ki phpmyadmin den manual olarak baktığımda tablo alanında slash karakteri ya da tırnak falan koymadığını gördüm.Ama addslashes kullanımını unutmam baya zaman kaybetmemi sağladı. Tekrar teşekkür ettim sayın hocam...
 
BBNET
Geri
Üst