PDA

View Full Version : سوال: فارسی نویسی در MySQL



wordnet
پنج شنبه 27 بهمن 1390, 12:12 عصر
سلام

دوستان عزیز من یه سیستم عضویت دارم وقتی اطلاعات مثلا نام کاربر به فارسی به دیتابس داده میشه در دیتابس به این شکل در میاد
?????
صادق

مشکل و راه حل رو لطفا بفرمایید

ممنون

nader3
پنج شنبه 27 بهمن 1390, 12:41 عصر
سلام. دوست عزیز ممکن مشکل کار از دو جا باشه. اول : در درست کردن تیبل
Collation (http://localhost/phpmyadmin/db_structure.php?db=webauth&token=5cf1ae5905f24f64061d4d3b145a116d&pos=0&sort=collation&sort_order=ASC) utf8_persian_ci نذاشته باشی. دوم: این کوِِئری ها رو اجرا کن احتمالا درست بشه { mysql_query("SET NAMES 'UTF8'") ;
mysql_set_charset('utf8');
mysql_query("SET CHARACTER SET 'UTF8'") ;
mysql_query("SET SESSION collation_connection = 'utf8_persian_ci'"); }

wordnet
پنج شنبه 27 بهمن 1390, 13:36 عصر
سلام

راه اولی که گفتید انجام دادم نشد
دومی هم درست متوجه نشدم کجا باید قرار بدم اما قرار دادم به این صورت در فرم عضویت


<?php
session_start();
error_reporting(0);
?>
<!doctype html>
<html>
<head dir="rtl">
<meta charset="utf-8">
<title>صفحه عضویت</title>
<link href="style.css" rel="stylesheet" type="text/css"/>
</head>
<body id="page">
<p id="b1">به سیستم عضویت دفترچه تلفن خوش آمدید</p>
<table border="0px" id="table" width="400px" align="center">
<tr>
<th>
<p id="test">جهت عضویت در سیستم دفترچه تلفن لطفا اطلاعات خواسته شده زیر را به صورت صحیخ پر کنید</p>
<form action="" method="post">
<p id="test">نام و نام خانوادگی:</p><input maxlength="40" name="name" style="width: 150px;" type="text"/>
<p id="test">نام کاربری دلخواه:</p><input maxlength="20" name="username" style="width: 150px;" type="text"/>
<p id="test">کلمه عبور دلخواه:</p><input maxlength="20" name="password" style="width: 150px;" type="password"/>
<p id="test">ادرس ایمیل شما:</p><input maxlength="20" name="email" style="width: 150px;" type="text"/>
<p><input value="عضویت" type="submit" name="sumit"/></p>
</form>
</th>
</tr>
</table>
<p id="copy">کپی رایت</p>
</body>
</html>
<?php
if (isset($_POST['name']) && isset($_POST['username']) && isset($_POST['password']) && isset($_POST['email'])) {
require_once 'class/config.php';
$na = $_POST['name'];
$user = $_POST['username'];
$pass = $_POST['password'];
$mail = $_POST['email'];
if(!$na) {
die('لطفا یک نام وارد کنید');
}
if(!$user) {
die('لطفا یک نام کاربری وارد نمائید');
}
if(!$pass) {
die('لطفا یک کلمه عبور مجاز وارد نمائید');
}
if(!$mail || !preg_match("/[a-zA-Z0-9._-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z\.]+/", $mail)) {
die('لطفا یک ایمیل معتبر وارد نمائید');
}
$pass_hash = md5($pass);
{ mysql_query("SET NAMES 'UTF8'") ;
mysql_set_charset('utf8');
mysql_query("SET CHARACTER SET 'UTF8'") ;
mysql_query("SET SESSION collation_connection = 'utf8_persian_ci'"); }
$query = mysql_query ("INSERT INTO `user` (`na`,`user`,`pass`,`mail`) VALUES ('{$na}','{$user}','{$pass_hash}','{$mail}');");
die(mysql_affected_rows() > 0 ? 'شما با موفقیت در سیستم دفترچه تلفن عضو شدید' : 'متاسفانه عملیات ناموفق بود');
}
?>


لطفا کمی بیشتر توضیح بدید

تشکر

nader3
پنج شنبه 27 بهمن 1390, 14:20 عصر
الان همین خوبه. بازم اجرا کنید ببینید درست میشه؟؟

MMSHFE
پنج شنبه 27 بهمن 1390, 16:21 عصر
فقط دستور زیر بعد از اتصال به دیتابیس کافیه:

mysql_query('SET NAMES \'utf8\'');
موفق باشید.

wordnet
پنج شنبه 27 بهمن 1390, 16:46 عصر
فقط دستور زیر بعد از اتصال به دیتابیس کافیه:

mysql_query('SET NAMES \'utf8\'');
موفق باشید.
جسارتا من این کد رو بعد از خط 55 در کد قرار دادم اما متاسفانه باز هم مشکل رفع نشد!
بعد از خط 33 هم قرار دادم اما متاسفانه...

لطفا راهنمایی کنید
بسیار ممنون

wordnet
پنج شنبه 27 بهمن 1390, 20:45 عصر
لطفا کمک فرمایید

MMSHFE
پنج شنبه 27 بهمن 1390, 22:14 عصر
دوست عزیز، من گفتم بلافاصله بعد از اتصال. بعد از دستور mysql_select_db این دستور رو بنویسید. موفق باشید.

wordnet
پنج شنبه 27 بهمن 1390, 22:32 عصر
سلام

واقعا شرمنده اما من دقیق متوجه نشدم
mysql_select_db که در کدهای من نیست؟

کد اصلی کد زیر است لطفا بفرمایید در کدام خط وارد کنم

*واقعا عذرخواهی میکنم اما مبتدی هستیم ببخشید



<?php
session_start();
error_reporting(0);
?>
<!doctype html>
<html>
<head dir="rtl">
<meta charset="utf-8">
<title>صفحه عضویت</title>
<link href="style.css" rel="stylesheet" type="text/css"/>
</head>
<body id="page">
<p id="b1">به سیستم عضویت دفترچه تلفن خوش آمدید</p>
<table border="0px" id="table" width="400px" align="center">
<tr>
<th>
<p id="test">جهت عضویت در سیستم دفترچه تلفن لطفا اطلاعات خواسته شده زیر را به صورت صحیخ پر کنید</p>
</br>
br>
<form action="" method="post">
<p id="test">نام و نام خانوادگی:</p><input maxlength="40" name="name" style="width: 150px;" type="text"/>
<p id="test">نام کاربری دلخواه:</p><input maxlength="20" name="username" style="width: 150px;" type="text"/>
<p id="test">کلمه عبور دلخواه:</p><input maxlength="20" name="password" style="width: 150px;" type="password"/>
<p id="test">ادرس ایمیل شما:</p><input maxlength="20" name="email" style="width: 150px;" type="text"/>
<p><input value="عضویت" type="submit" name="sumit"/></p>
<p>
<?

require ("login.php");
?>
&nbsp;</p>
</form>
</th>
</tr>
</table>
<p id="copy">کپی رایت</p>
</body>
</html>
<?php
if (isset($_POST['name']) && isset($_POST['username']) && isset($_POST['password']) && isset($_POST['email'])) {
require_once 'class/config.php';
$na = $_POST['name'];
$user = $_POST['username'];
$pass = $_POST['password'];
$mail = $_POST['email'];
if(!$na) {
die('لطفا یک نام وارد کنید');
}
if(!$user) {
die('لطفا یک نام کاربری وارد نمائید');
}
if(!$pass) {
die('لطفا یک کلمه عبور مجاز وارد نمائید');
}
if(!$mail || !preg_match("/[a-zA-Z0-9._-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z\.]+/", $mail)) {
die('لطفا یک ایمیل معتبر وارد نمائید');
}
$pass_hash = md5($pass);
$query = mysql_query
("INSERT INTO `user` (`na`,`user`,`pass`,`mail`) VALUES ('{$na}','{$user}','{$pass_hash}','{$mail}');

");

die(mysql_affected_rows() > 0 ? 'شما با موفقیت در سیستم دفترچه تلفن عضو شدید' : 'متاسفانه عملیات ناموفق بود');
}

?>

MMSHFE
پنج شنبه 27 بهمن 1390, 22:40 عصر
خوب شما باید اول دستورات اتصال به موتور mysql و انتخاب دیتابیس رو بنویسید (یعنی دستورات mysql_connect و mysql_select_db) و بعد از اون، دستوری که گفتم رو بگذارین و بعد از تمام این دستورات، اونوقت با mysql_query اقدام به ارسال کوئری برای دیتابیس و دریافت خروجی کنید. این کدها رو قبل از خط 59 (mysql_query) بنویسید:


mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');

و بجای dbname نام دیتابیس خودتون رو بگذارین.
موفق باشید.

wordnet
پنج شنبه 27 بهمن 1390, 22:46 عصر
اقا بسیار ممنون منظور شما فایل کانفینگ بود الان فهمیدم فقط الان من کانفینگ رو به این شکل وارد کردم



<?php
$server = 'localhost';
$username = 'root';
$password = '';
$database = 'cms2';
$Connection = mysql_connect( $server , $username , $password ) or die(mysql_error());
mysql_select_db( $database , $Connection ) or die(mysql_error());
mysql_query('SET NAMES \'utf8\'');
?>


فکر میکنم درست انجام دادم الان فیلد فارسی به شکل تاتاا شد؟
همچنین من هنگام ساخت دیتابس collation رو هم روی پرشین گذاشتم!

از شما که پاسخ میدید بسیار ممنونم واقعا لطف کردید

MMSHFE
پنج شنبه 27 بهمن 1390, 22:53 عصر
الآن ظاهراً همه چیز درسته. فقط فایلهاتون رو چک کنید که با کدگذاری UTF-8 without BOM ذخیره شده باشه. موفق باشید.

wordnet
پنج شنبه 27 بهمن 1390, 22:55 عصر
سلام

فایل صفحه عضویت با
<meta charset="utf-8">
کد شده بعد اینکه این طریقه نمایش در phpmyadmin است کلا در phpmyadmin نوشته ها فارسی میشه؟

MMSHFE
پنج شنبه 27 بهمن 1390, 23:31 عصر
نه منظورم توی ادیتور موقع Save as کردن فایلها هست.

wordnet
پنج شنبه 27 بهمن 1390, 23:42 عصر
اونم درست بود اما مجدد بررسی کردم مشکل هنوز پابرجاست! من لوکالم وامپ سرور هست تنظیمات خاصی نداره؟

MMSHFE
پنج شنبه 27 بهمن 1390, 23:52 عصر
نه تنظیمات خاصی نمیخواد. یه نکته رو هم باید دقت کنید: اطلاعاتی که قبل از تعیین Collation فارسی برای دیتابیس ثبت شده باشن، درست نمایش داده نمیشن. اگه اطلاعات رو قبلاً ثبت کردین، اونها رو حذف کرده و دوباره ایجاد کنید.

wordnet
جمعه 28 بهمن 1390, 12:18 عصر
سلام

اقا من هنوز مشکام حل نشده دیتابس هم دوباره خودم ساختم

MMSHFE
جمعه 28 بهمن 1390, 15:49 عصر
ببینید کلاً استفاده از حروف فارسی توی دیتابیس چند نکته داره که اگه رعایت کنید، مشکلی پیش نمیاد:
1- Collation دیتابیس رو utf8_bin یا utf8_persian_ci بگذارین
2- صفحه وبتون رو با کدگذاری UTF-8 without BOM ذخیره کنید
3- تگ زیر رو توی قسمت head صفحه وب بگذارین:

<meta charset="utf-8"/>
4- همیشه بعد از اتصال به MySQL و انتخاب دیتابیس، دستور زیر رو اجرا کنید:

mysql_query('SET NAMES \'utf8\'');
البته یک نکته هم باید یادتون باشه:
حالت خلاصه تگ متا که در بالا نوشتم، فقط وقتی جواب میده که اول صفحه وبتون (قبل از تگ html) این تگ رو بگذارین:

<!doctype html>
تا به مرورگر بگین که از استانداردهای HTML5 دارین استفاده میکنید. در غیر اینصورت باید تگ متا رو اینطوری بنویسید:

<meta http-equiv="content-type" content="text/html; charset=uft-8"/>
اگه موارد فوق رو رعایت نکنید، اطلاعات به درستی ثبت و نمایش داده نخواهند شد.
موفق باشید.