[]
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.
ö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'");
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.
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.
- 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...
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.
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)
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