PDA

View Full Version : insert کردن فارسی به دیتابیس توسط php



storm_saeed
چهارشنبه 18 تیر 1393, 09:51 صبح
سلام دوستان من این کد رو دارم

$age = $_GET['age'];
$sex = $_GET['sex'];
$height = $_GET['h'];
$skin = $_GET['skin'];
$city = $_GET['city'];
$weight = $_GET['w'];


mysql_query('set names "utf8"');
$con = mysqli_connect($host,$username,$password,$db); //connect to mysql
if (!$con)
{
die('false');
}
if(!mysqli_query( $con, "INSERT INTO demography (age, sex , height, skin, city, weight)
VALUES ('$age', '$sex', '$height', '$skin', '$city', '$weight')" )){
die('false');
}
echo "true";
mysqli_close($con);



موقعی که مثلا به city مقدار 'تهران' داده باشم در دیتابیس بصورت تهران ذخیره میشه ولی اگه دستی در بخش INSERT در phpmyadmin مقدار'تهران' رو بدم درست دخیره میشه
collation هم برابر utf8_persian_ci میباشد

پیشاپیش ممنون

vahidqara
چهارشنبه 18 تیر 1393, 10:38 صبح
سلام و درود ..
به جای این خط
mysql_query('set names "utf8"');

از این خط استفاده کن ببین خوب میشه..


<meta charset="UTF-8">

storm_saeed
چهارشنبه 18 تیر 1393, 10:56 صبح
نه درست نشد

php_programmer021
چهارشنبه 18 تیر 1393, 10:57 صبح
با سلام
ببین این کارایی که می گم مرحله به مرحله انجام بده:
1= Collection رو توی دیتابیس utf8_bin انتخاب کن
2= بعد از کانکت شدن به دیتابیس این کد رو توی صفحه بنویس


mysql_query ( 'SET NAMES \'utf8\'' );
mysql_set_charset ( 'utf8' );

3= توی تگ هد html هم <meta charset="utf-8"> قرار بده
ببین این کارارو بگنی امگان نداره فارسی نشه

MMSHFE
چهارشنبه 18 تیر 1393, 11:08 صبح
توی تاپیک پرسشهای تکراری این موضوع مطرح شده.

storm_saeed
چهارشنبه 18 تیر 1393, 13:45 عصر
بازم نشد
<!DOCTYPE html><html>
<head>
<meta charset="UTF-8"></head>
<body>
<?php




$age = $_GET['age'];
$sex = $_GET['sex'];
$height = $_GET['h'];
$skin = $_GET['skin'];
$city = $_GET['city'];
$weight = $_GET['w'];


$con = mysqli_connect($host,$username,$password,$db); //connect to mysql
if (!$con)
{
die('false');
}
mysql_query ( 'SET NAMES \'utf8\'' );
mysql_set_charset ( 'utf8' );
if(!mysqli_query( $con, "INSERT INTO demography (age, sex , height, skin, city, weight)
VALUES ('$age', '$sex', '$height', '$skin', '$city', '$weight')" )){
die('false');
}
echo "true";
mysqli_close($con);


?>
</body>
</html>



این کدم
روی utf8_bin هم ست کردمشون

Jarvis
چهارشنبه 18 تیر 1393, 13:49 عصر
از کدوم IDE استفاده می کنید ؟
دقت کنید کدگذاری فایل هاتون باید روی UTF-8 without BOM باشه ...

ab.ali
چهارشنبه 18 تیر 1393, 13:53 عصر
سلام دوستان من این کد رو دارم

$age = $_GET['age'];
$sex = $_GET['sex'];
$height = $_GET['h'];
$skin = $_GET['skin'];
$city = $_GET['city'];
$weight = $_GET['w'];


mysql_query('set names "utf8"');
$con = mysqli_connect($host,$username,$password,$db); //connect to mysql
if (!$con)
{
die('false');
}
if(!mysqli_query( $con, "INSERT INTO demography (age, sex , height, skin, city, weight)
VALUES ('$age', '$sex', '$height', '$skin', '$city', '$weight')" )){
die('false');
}
echo "true";
mysqli_close($con);



موقعی که مثلا به city مقدار 'تهران' داده باشم در دیتابیس بصورت تهران ذخیره میشه ولی اگه دستی در بخش INSERT در phpmyadmin مقدار'تهران' رو بدم درست دخیره میشه
collation هم برابر utf8_persian_ci میباشد

پیشاپیش ممنون

ایشون درست می گن، مال من هم همین طوره از تابع mysql_set_charset که استفاده می کنم، دیتابیس درست می شه ولی نمایش اطلاعات خراب می شه!

storm_saeed
چهارشنبه 18 تیر 1393, 14:16 عصر
از کدوم IDE استفاده می کنید ؟
دقت کنید کدگذاری فایل هاتون باید روی UTF-8 without BOM باشه ...
رو ادیتور سی پنل کپی پیست میکنم که اون فقط UTF-8 داره

MMSHFE
چهارشنبه 18 تیر 1393, 14:32 عصر
خوب برادر من شما داری با mysqli وصل میشی بعد با mysql کوئری میفرستی؟

storm_saeed
چهارشنبه 18 تیر 1393, 17:34 عصر
خب درستش چی میشه ؟!!

vahidqara
چهارشنبه 18 تیر 1393, 19:50 عصر
خب درستش چی میشه ؟!!


mysqli_query('set names "utf8"');

storm_saeed
چهارشنبه 18 تیر 1393, 21:31 عصر
باز هم درست نشد :|

MMSHFE
چهارشنبه 18 تیر 1393, 21:33 عصر
دوست عزیز، مطمئن هستین فایلتون با کدگذاری UTF-8 without BOM ذخیره شده؟ توی ++Notepad فایل رو باز کنید و از منوی Encoding گزینه Convert to UTF-8 without BOM رو انتخاب کنید و فایل رو مجدداً ذخیره کنید. ضمناً با انجام این کارها، رکوردهایی که از این به بعد ثبت میشه درست میشن و رکوردهایی که قبلاً ثبت شده رو باید دستی اصلاح کنید. کد کاملتون رو هم بگذارین ببینیم مشکل از کجاست (همین فایلی که ثبت میکنه و نمایش میده). دقت کنید که هم موقع ثبت و هم موقع نمایش باید کوئری 'SET NAMES 'utf8 برای MySQL ارسال بشه.

storm_saeed
چهارشنبه 18 تیر 1393, 22:06 عصر
بله ut8 without bom هست اینم کدم
<!DOCTYPE html><html>
<head>
<meta charset="UTF-8"></head>
<body>
<?php


//server info
$username ="user";
$password = "pass";
$host = "localhost";
$db="db";


$age = $_GET['age'];
$sex = $_GET['sex'];
$height = $_GET['h'];
$skin = $_GET['skin'];
$city = $_GET['city'];
$weight = $_GET['w'];


$con = mysqli_connect($host,$username,$password,$db); //connect to mysql
if (!$con)
{
die('false');
}
mysqli_query('set names "utf8"');
if(!mysqli_query( $con, "INSERT INTO demography (age, sex , height, skin, city, weight)
VALUES ('$age', '$sex', '$height', '$skin', '$city', '$weight')" )){
die('false');
}
echo "true";
mysqli_close($con);


?>
</body>
</html>

vahidqara
چهارشنبه 18 تیر 1393, 22:31 عصر
بله ut8 without bom هست اینم کدم
<!DOCTYPE html><html>
<head>
<meta charset="UTF-8"></head>
<body>
<?php


//server info
$username ="user";
$password = "pass";
$host = "localhost";
$db="db";


$age = $_GET['age'];
$sex = $_GET['sex'];
$height = $_GET['h'];
$skin = $_GET['skin'];
$city = $_GET['city'];
$weight = $_GET['w'];


$con = mysqli_connect($host,$username,$password,$db); //connect to mysql
if (!$con)
{
die('false');
}
mysqli_query('set names "utf8"');
if(!mysqli_query( $con, "INSERT INTO demography (age, sex , height, skin, city, weight)
VALUES ('$age', '$sex', '$height', '$skin', '$city', '$weight')" )){
die('false');
}
echo "true";
mysqli_close($con);


?>
</body>
</html>




هنوزم مشکل دارید آیا؟

storm_saeed
چهارشنبه 18 تیر 1393, 22:51 عصر
بله هنوزم به اون شکل وارد mysql میشه

MMSHFE
جمعه 20 تیر 1393, 13:45 عصر
توی پیام خصوصی بهم TeamViewer بدین تا به سیستمتون وصل بشم ببینم مشکل چیه.

storm_saeed
شنبه 21 تیر 1393, 11:46 صبح
ممنون از همه مشکل حل شد
meta رو به این تغییر دادم
<meta content="text/html;charset=UTF-8" http-equiv="Content-Type" />



و
mysqli_query('set names "utf8"');



رو به
mysqli_query($con,'SET NAMES utf8');

MMSHFE
شنبه 21 تیر 1393, 12:38 عصر
MySQL کوتیشن جفت رو نمیشناسه. تگ متا رو اگه سند HTML5 میگذارین (با <doctype HTML!> ) میتونید بصورت خلاصه بنویسید وگرنه باید کامل بگذارین. ضمناً باید utf8 رو توی کوئری کوچک بنویسید ولی SET NAMES مهم نیست بزرگ یا کوچک باشه. اگه بجای کوتیشن جفت از کوتیشن تک هم استفاده میکردین (یعنی اینطوری mysqli_query('SET NAMES \'utf8\';'); باز هم کار میکرد.