[]

mysql'e veri kaydetmede türkçe karakter problemi

merhaba php sever arkadaşlar,
öncelikle mysql konusunda neredeyse hiçbir şey bilmediğimi yazarak konuya gelmek istiyorum.

basit bir php uygulaması hazırladım. rehber gibi bir şey. veri giriş ekranı olarak bir html sayfası kullanıyorum.

içeriği de tam olarak bu;

<title>Rehber</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9">
<meta http-equiv="content-type" content="text/html;charset=windows-1254">
<meta http-equiv="content-type" content="text/html;charset=x-mac-turkish">
<center>
<form id="myForm" method="post" action="kayit.php">
<table width="400" border="1">
<caption>
Kayıt Formu
</caption>
<tr>
<td width="90">İsim</td>
<td width="294"><input type="text" name="isim"></td>
</tr>
<tr>
<td height="150">İçerik</td>
<td><textarea name="icerik" cols="45" rows="5"></textarea></td>
</tr>
</table>
<br />

<input value="Gonder" type="submit" class="submit">
</p>
</form>
</center>

formdan gelen bu veriler kayit.php dosyası vasıtasıyla veritabanına kaydoluyor:

<?php

$username="root";
$password="1234";
$database="hagi";
$isim="localhost";

$first=$_POST['isim'];
$text=$_POST['icerik'];

mysql_connect($isim,$username,$password);
@mysql_select_db($database) or die( "Veritabanı Yalama Oldu");

$query = "INSERT INTO contacts VALUES ('','$first','$text')";
mysql_query($query) or die( "Query Yalama Oldu");

mysql_close();

echo "Galiba bir seyler oldu...";
?>

Bu şekilde kayıt ettiğim verilerde veri tabanına TR karakterler yerine garip karakterler gönderiliyor. Dolayısıyla bu verileri görüntülerken de o garip karakterleri görüyorum. Bu problemin üstesinden nasıl gelebilirim? Başlangıçta da yazdığım gibi bu veritabanı mevzularında neredeyse hiçbir şey bilmeyen birine göre anlatırsanız sevinirim.

 
veritabanındaki tabloyu türkçe karakter setine göre ayarlamanız gerekebilir. Ben en son yaptığım bi sitede latin5_turkish_ci seçip db bağlantısından sonra şu kodları yazdım, oldu;

mysql_query("SET NAMES 'latin5'");
mysql_query("SET CHARACTER SET latin5");
mysql_query("SET COLLATION_CONNECTION = 'latin5_turkish_ci'");
  • gsgsgsgsgsgsgsgs  (02.05.11 12:27:15) 
@mysql_select_db($database) or die( "Veritabanı Yalama Oldu"); satırından sonrasına ekledim herhangi bir değişiklik olmadı.

bir de veritabanında kayıt yapılan alan latin5_turkish_ci. veritabanına phpmyadmin'den yaptığım TR karakter içeren verilerde herhangi bir karakter sıkıntısı olmuyor.
  • vito andolini  (02.05.11 12:42:56) 
phpmyadmin de isim ve içerik tablolarını utf-8 yapıp deneyin bir de.


  • Dharmalı  (02.05.11 12:54:44) 
tüm herşeyi utf-8 yaparsan sorun düzelir. bu şekilde kullanırsan bir daha hiç karakter sorunu yaşamazsın. daha ajaxı falan var bunun.

- database collation (utf8_turkish_ci)
- sayfa charset (<meta http-equiv="Content-Type" content="text/html; charset=utf-8">)
- mysql bağlantısı (gsgsgsgsgsgsgsgs'nin dediği)
- dosya encoding (notepad++ için encoding > utf8 without bom) bunu yaparken dosyanın içindekileri kopyalayıp, işlemi uyguladıktan sonra tekrar yapıştırırsan dosya içindeki türkçe karakter bozulmalarının önüne geçersin.
  • tuyra  (02.05.11 12:56:07) 
@Dharmalı
sözkonusu tabloları utf8_turkish_ci yaptım denedim olmadı. Birde değişiklik yok...

@tuyra
söyledikleriniz ile birlikte gsgsgsgsgsgsgsgs'nin de dediği gibi satırları @mysql_select_db($database) or die( "Veritabanı Yalama Oldu"); satırından sonrasına ekledim herhangi bir değişiklik olmadı. notepad++'tan dediklerinizi yaparak sayfaları gözden geçirdim. hataları düzelttim ama yine değişiklik yok.

"son deneme çözüm" olarak girdiğim veri "son deneme çözüm" olarak veritabanına kaydoldu...
  • vito andolini  (02.05.11 13:37:35) 
php dosyanı ve veritabanın export edilmiş halini upload edip yollarsan sorunu çözebiliriz. ufak birşeyler kaçırıyorsun muhtemelen biryerlerde.

edit: kayit.php nin tepesine

header("content-type: text/html; charset=utf-8");

bunu koyarsan düzelecek muhtemelen.
  • tuyra  (02.05.11 13:48:31 ~ 13:50:17) 
yine olmadı/beceremedim :)

dl.dropbox.com
  • vito andolini  (02.05.11 14:13:48) 
veri tabanının her şeyini utf-8 yapıp meta tagindeki charset'i utf-8 yapmazsan olmaz. belki gözden kaçırmışsındır. tuyra yazmış gerçi.


  • uckac  (02.05.11 16:17:25) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.