PDA

View Full Version : سوال: مشکل در نمایش علامت سوال (؟) به جای کلمات فارسی در هنگام استخراج از دیتابیس



Ali_Sedaghat
دوشنبه 25 فروردین 1393, 10:12 صبح
با سلام خدمت دوستان
من با استفاده از کلاس new mysqli و از طریق تابع زیر به دیتابیس وصل می شم.


function db_connect()
{
$Msg_Not_Connect = 'ارتباط با بانک اطلاعاتي برقرار نشد.';
$Sql_Hostname = 'localhost';
$DB_Username = 'root';
$DB_Password = '';
$DB_Name = 'books';

$Result = new mysqli($Sql_Hostname, $DB_Username, $DB_Password, $DB_Name);
if (!$Result)
{
throw new Exception($Msg_Not_Connect);
}
else
{
return $Result;
}
}

برای به دست آوردن نام کاربرانم از تابع زیر استفاده می کنم. به طور مثال وقتی از دستورات زیر برای نمایش نام کاربران استفاده می کنم به جای کلمات فارسی علامت های سوال نمایش داده می شوند.


require_once('config.php');

$FullName_Array = Get_FullName_From_MembersTable();

for($i=0; $i<=count($FullName_Array); $i++)
{
echo $FullName_Array[$i]['name_lastname'] .'<br>';
}


//----->
function Get_FullName_From_MembersTable()
{
$Conn = db_connect();

$Query = "select * from members";
$Result = $Conn->query($Query);
if (!$Result)
return false;

if ($Result->num_rows>0)
{
$Num_Results = $Result->num_rows;
for ($i = 0; $i < $Num_Results; $i++)
{
$Temp_Array[$i] = $Result->fetch_assoc();
}

/* $Result->free();
$Conn->close(); */
return $Temp_Array;
}
else
{
/* $Result->free();
$Conn->close(); */
return $Temp_Array;
}
}

ممنون میشم اگه راهنمایی کنید.
با تقدیم احترام
صداقت

MMSHFE
دوشنبه 25 فروردین 1393, 11:13 صبح
به تاپیک پرسشهای تکراری (http://barnamenevis.org/showthread.php?356992-%D9%BE%D8%B1%D8%B3%D8%B4%D9%87%D8%A7%DB%8C-%D8%AA%DA%A9%D8%B1%D8%A7%D8%B1%DB%8C) مراجعه کنید.

Ali_Sedaghat
دوشنبه 25 فروردین 1393, 12:27 عصر
من کد کامل رو در این جا می گذارم.
شاید در کدهای من اشکالی وجود داشته باشه که من ازش سر در نمیارم.
تعداد فایل های من شامل 3 فایل است.
فایل اول: ارتباط با دیتابیس به نام config.php


<?php

function db_connect()
{
$Msg_Not_Connect = 'ارتباط با بانک اطلاعاتي برقرار نشد.';
$Sql_Hostname = 'localhost';
$DB_Username = 'root';
$DB_Password = '';
$DB_Name = 'books';

$Result = new mysqli($Sql_Hostname, $DB_Username, $DB_Password, $DB_Name);
if (!$Result)
{
throw new Exception($Msg_Not_Connect);
}
else
{
return $Result;
}
}

?>

فایل دوم: توابع مورد نیاز به نام function.php


<?php
require_once('config.php');

//----->
function Main_Page()
{
?>
<form method="POST" action="index.php">
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" dir="rtl">
<tr>
<td width="40%" dir="rtl">
<p dir="rtl" align="center">شماره کتاب:
<input type="text" name="txt_book_id" dir="rtl" size="5" /></p>
<p dir="rtl" align="center">
<input type="submit" value="ارسال" name="sub_book_id"></p>
</td>
<td width="73%" dir="rtl">
&nbsp;</td>
</tr>
</table>
</form>
<?php
}

//----->
function Book_Details($Book_ID)
{
$BookName_Array = Get_BookName_From_BooksTable($Book_ID);
$User_ID = $BookName_Array[0]['user_id'];
$FullName_Array = Get_FullName_From_MembersTable($User_ID);

?>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" dir="rtl">
<tr>
<td width="40%" dir="rtl">
<p dir="rtl">نام کتاب: <?php echo $BookName_Array[0]['book_name'];?></p>
</td>
<td width="60%" dir="rtl">
<p dir="rtl">نام تحويل گيرنده: <?php echo $FullName_Array[0]['name_lastname'];?> فرم
<p dir="rtl">تاريخ دريافت کتاب: <?php echo $BookName_Array[0]['receive_date'];?> فرم
</td>
</tr>
</table>
<?php
}

//---->
function Get_BookName_From_BooksTable($Book_ID)
{
$Conn = db_connect();
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');

$Query = "select * from books where book_id='$Book_ID'";
$Result = $Conn->query($Query);
if (!$Result)
return false;

if ($Result->num_rows>0)
{
$Num_Results = $Result->num_rows;
for ($i = 0; $i < $Num_Results; $i++)
{
$Temp_Array[$i] = $Result->fetch_assoc();
}

/* $Result->free();
$Conn->close(); */
return $Temp_Array;
}
else
{
/* $Result->free();
$Conn->close(); */
return $Temp_Array;
}
}

//---->
function Get_FullName_From_MembersTable($User_ID)
{
$Conn = db_connect();
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');

$Query = "select * from members where member_id='$User_ID'";
$Result = $Conn->query($Query);
if (!$Result)
return false;

if ($Result->num_rows>0)
{
$Num_Results = $Result->num_rows;
for ($i = 0; $i < $Num_Results; $i++)
{
$Temp_Array[$i] = $Result->fetch_assoc();
}

/* $Result->free();
$Conn->close(); */
return $Temp_Array;
}
else
{
/* $Result->free();
$Conn->close(); */
return $Temp_Array;
}
}

?>

فایل سوم: فایل اصلی یا ایندکس اصلی به نام index.php


<html>
<head>
<meta http-equiv="Content-Language" content="fa">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>اطلاعات کتاب</title>
</head>
<body style="font-family: Tahoma; font-size: 10pt">

<?php

require_once('function.php');

$Book_ID = $_POST['txt_book_id'];

if ($Book_ID != '' && $Book_ID > 0)
{
Book_Details($Book_ID);
exit;
}
else
{
Main_Page();
exit;
}

?>

</body>
</html>

امیدوارم کسی بتونه راهنمایی کنه.
با تقدیم احترام
صداقت

id1385
دوشنبه 25 فروردین 1393, 12:41 عصر
با سلام
اول از همه شما باید فایل خود را با انکودینگ encoding utf-8 without bom ذخیره نمایید.
در هدر خود حتماً خروجی را utf-8 بگیرید


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

و اگر html5 بود به اینصورت


<meta charset="utf-8" />

در قسمت پایگاه داده هم حتماً باید جدول خود را قسمت Collation را به صورت utf8_general_ci و یا utf8_persian_ci قراردهید.

Ali_Sedaghat
دوشنبه 25 فروردین 1393, 12:48 عصر
با سلام
اول از همه شما باید فایل خود را با انکودینگ encoding utf-8 without bom ذخیره نمایید.
در هدر خود حتماً خروجی را utf-8 بگیرید


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

و اگر html5 بود به اینصورت


<meta charset="utf-8" />

در قسمت پایگاه داده هم حتماً باید جدول خود را قسمت Collation را به صورت utf8_general_ci و یا utf8_persian_ci قراردهید.



ممنون از پاسخ تون.
من دیتابیس رو چک کردم. دو جدولی که ازش استفاده می کنم به این صورت هست: utf8_persian_ci
بعد هم اون متا تگ هاتون رو هم در فایل اصلیم قرار دادم. باز هم همون مشکل هست. یعنی به جای نام کتاب و نام تحویل گیرنده چند تا علامت سوال میاد.

Ali_Sedaghat
دوشنبه 25 فروردین 1393, 13:16 عصر
سلام
مشکلم حل شد.
من باید کد زیر رو بعد از ارتباط با دیتابیس قرار می دادم.


$Conn = db_connect();
$Conn->query("set names utf8");

با تشکر از کاربر گرامی tanha921 از تاپیکی که ایجاد کرده بودند.


http://barnamenevis.org/showthread.php?443672

و با تشکر از تمام دوستانی که زحمت خواندن تاپیک من رو کشیده و به اون جواب دادند.