مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية

السلام عليكم ورحمة الله وبركاته  قمت ولله الحمد بإستئجار إستضافة مواقع ولي رغبة ببناء موقع بسكربت PBBoard& ..


موضوع مغلق

الصفحة 1 من 2 < 1 2 > الأخيرة »


13-01-2016 11:49 مساء
أبو العصافير
عضـو مشارك
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 31-12-2014
رقم العضوية : 5837
المشاركات : 62
الدولة : أرض الله الواسعة
الجنس : ذكر
يتابعهم : 0
يتابعونه : 0
قوة السمعة : 400
موقعي : زيارة موقعي
اصدار المنتدى : 3.0.2
 offline 
السلام عليكم ورحمة الله وبركاته 

قمت ولله الحمد بإستئجار إستضافة مواقع ولي رغبة ببناء موقع بسكربت PBBoard 
على اي حال انا لا اريد استخدام دوال mysql العادية وخاصة انه تم الإستغناء عنها بالفعل في الإصدار PHP7 
لذلك اود الإعتماد على mysqli 
ولكن لاحظت عدم تعرف الإستضافة على الترميز في هذه الدوال بالكود الإعتيادي 
mysqli_query("set character_set_server='utf8'");
        mysqli_query("set names 'utf8'");

ولكن للأسف هذا الكود غير محبذ من PHP وقد تم ذكر ذلك هنا : 
http://php.net/manual/en/mysqli.set-charset.php

وهذا نص التنبيه : 
اقتبـاس ،،

Note:

This is the preferred way to change the charset. Using mysqli_query() to set it (such as SET NAMES utf8) is not recommended. See the MySQL character set concepts section for more information.



على العموم بعد البحث ظهر لي ان استخدم الدالة الخاصة بالترميز المذكورة هنا : 
http://php.net/manual/en/mysqli.set-charset.php

والدالة بالطريقة الكائنية هي :
$mysqli->set_charset("utf8")


أو بالطريقة الإجرائية : 
mysqli_set_charset($mysqli, "utf8")


مع مراعاة ان $mysqli هو دالة تعريف الإتصال .. 

بأي حال انا جربت دوال mysql العادية وكان الترميز يعمل بدون مشاكل
ولكن حين تجربة mysqli تغير الموضوع .. حاولت استخدام كلا الطريقتين ولكن لم تفلح 
رغم اني جربت دوال mysqli في إستضافة hostinger وكانت تعمل بدون اي مشاكل

اعتقد والله اعلم ان استخدامي خاطئ .. 
هذه هي الأكواد التي جربتها : 
​/* change character set to utf8 */
        mysqli_query("set character_set_server='utf8'");
        mysqli_query("set names 'utf8'");
        mysqli_set_charset($this->sql_connect(),"utf8");
        $this->sql_connect()->set_charset("utf8");


اعتقد ان الخطأ في $this->sql_connect()
قد لا يكون هو المتغير الصحيح .. رغم انه لا يوجد اي رسائل خطأ يتم طباعتها 

ممكن ارسل لك رابط الموقع بالرسائل الخاصة لأن ملفات التنصيب ما زالت موجودة ولا اريد ان يعبث بها بعض الزوار 
 

تحديث : 
اصدار PHP هو 5.5.30
إصدار MySQL هو 5.5.45-cll-lve

 


تم تحرير الموضوع بواسطة :أبو العصافير
بتاريخ:14-01-2016 12:05 صباحا


14-01-2016 03:15 صباحا
مشاهدة مشاركة منفردة [1]
أبو العصافير
عضـو مشارك
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 31-12-2014
رقم العضوية : 5837
المشاركات : 62
الدولة : أرض الله الواسعة
الجنس : ذكر
يتابعهم : 0
يتابعونه : 0
قوة السمعة : 400
موقعي : زيارة موقعي
اصدار المنتدى : 3.0.2
 offline 
look/images/icons/i1.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
تحديث : 
يمكن تغيير ترميز قراءة البيانات في المنتدى .. وذلك عبر البحث عن الكود التالي في سطر 57 : 
$connect = @mysqli_connect($this->host,$this->db_username,$this->db_password,$this->db_name);

وإضافة الكود التالي  اسفله : 
​$connect->set_charset("utf8");


كما يظهر بالصورة التالية : 
mkkx35

 



ولكن المشكلة اصبحت في محتوى المنتدى ، فعند ادخال البيانات ( مثل انشاء موضوع او رد ) تتحول الكلمات إلى رموز مثل 
اقتبـاس ،،
  وصف الموضوع


قمت بتحويل الدالة sql_select_db إلى تعليق 
iyzy2v

والمفاجأة انه لم يحدث اي اختلاف .. مما يعني انه لا يتم استخدام هذه الدالة ! 
أي ان كود تحويل الترميز اسفلها لا يشكل فارقًا في الأساس (إذا كان الكود غير مستخدم في كل دوال -Functions- السكربت ) 

للأسف اعتقد ان ترقية السكربت إلى mysqli لم يتم بالشكل الصحيح او الكامل 
لأن المواضيع تظهر لي بالشكل التالي : 

18mc9f

وما زال العمل جاريًا في تقفي النواقص ..  155
 


تم تحرير المشاركة بواسطة :أبو العصافير
بتاريخ:14-01-2016 03:29 صباحا


14-01-2016 03:54 صباحا
مشاهدة مشاركة منفردة [2]
أبو العصافير
عضـو مشارك
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 31-12-2014
رقم العضوية : 5837
المشاركات : 62
الدولة : أرض الله الواسعة
الجنس : ذكر
يتابعهم : 0
يتابعونه : 0
قوة السمعة : 400
موقعي : زيارة موقعي
اصدار المنتدى : 3.0.2
 offline 
look/images/icons/i1.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
التنصيب بالــ mysqli بعد إضافة كود الترميز السابق لا ينجح ..
يبدو انه لا يتم إستخدام كود الإتصال في ملف db_mysqli.class.php اثناء التنصيب .. لذلك تغيير الترميز فيه لا يفيد 
بينما التنصيب بإستخدام mysql العادي يتم بدون مشاكل 

14-01-2016 08:25 صباحا
مشاهدة مشاركة منفردة [3]
Soliman
PBB Management
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 18-07-2009
رقم العضوية : 1
المشاركات : 10316
الدولة : السعودية
الجنس : ذكر
تاريخ الميلاد : 6-1-1980
الدعوات : 44
يتابعهم : 12
يتابعونه : 49
قوة السمعة : 62326
موقعي : زيارة موقعي
اصدار المنتدى : 3.0.2
 offline 
look/images/icons/i1.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
بخصوص إصدار php
يفضل ان يكون مابين
PHP 5.x.x >= 5.5.0

لاتجعله اعلى من ذلك حالياً  متطلبات التشغيل
بالنسبة لازلت افضل اصدارات 5.3 و 5.4 فهي اكثر استقراراً واقل مشاكل حالياً وافضل استقرار بقية الأصدارت الجديدة واعتمادها رسمياً في اغلب سيرفرات الاستضافة

ومكتبة mysqli  مدموجة بالكامل مع برنامج المنتدى
وفيما يخص تحويل الترميز بالكامل إلى utf-8 على هذه المكتبة
فالطريقة الافتراضية التي تعرفها انت وقد طرحت شرح لطريقة تنفيذها في قسم الدروس
هي متوافقة تماما مع مكتبة mysqli لظهور اللغة العربية  بدون مشاكل ايضاً
      mysqli_query("set character_set_server='utf8'");
      mysqli_query("set names 'utf8'");

 ماهي المشكلة التي واجهتك عند اعتماد هذه الطريقة باستثناء تنبيه الأفضلية المذكور في php.net



وبخصوص دوال الاستعلام الداخلية بالبرنامج
يفضل ان تجعلها  بهذا الشكل للتوافق مع كلا المكتبتين
$PowerBB->DB->sql_query
$PowerBB->DB->sql_fetch_array
$PowerBB->DB->sql_num_rows
$PowerBB->DB->sql_fetch_assoc
$PowerBB->DB->sql_insert_id
$PowerBB->DB->sql_free_result

امثلة
$PowerBB->DB->sql_query("SELECT  *   FROM " . $PowerBB->table['member'] . " WHERE usergroup = 1 ");


while ($getstyle_row = $PowerBB->DB->sql_fetch_array($AdminUsername))
{
echo $getstyle_row['text'];
}


ويفضل استخدام OOP للإستعلامات الداخلية
        $SecArr             =     array();
        $SecArr['where']     =     array('id',$SubjectInfo['section']);
        $SectionInfo = $PowerBB->core->GetInfo($SecArr,'section');

لاتقم باستخدام دوال الاستعلامات بشكل مباشر
ولا تعدل على دوال الاتصال الاساسية في البرنامج إذا لم يكن لديك خبرة متقدمة في البرنامج وانظمته

يفضل ان تقرأ التوثيق الرسمي لبرنامج PBBoard للمبرمجين لتأخذ فكرة عامة إذا كانت خبرتك جيدة كمطور ويب

 


تم تحرير المشاركة بواسطة :Soliman
بتاريخ:14-01-2016 01:49 مساء


14-01-2016 11:44 مساء
مشاهدة مشاركة منفردة [4]
أبو العصافير
عضـو مشارك
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 31-12-2014
رقم العضوية : 5837
المشاركات : 62
الدولة : أرض الله الواسعة
الجنس : ذكر
يتابعهم : 0
يتابعونه : 0
قوة السمعة : 400
موقعي : زيارة موقعي
اصدار المنتدى : 3.0.2
 offline 
look/images/icons/i1.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
عشان اكون واضح 
لو اتبعت الطريقة الرسمية والمتعارف عليها في mysqli
المنتدى يعمل بدون مشاكل ، ولكن :
xfwxtg
يعني الترميز ما تغير
 

وهذه الطريقة العادية والمتعارف عليها في mysql القديمة 

2sadtv4
يعني الترميز شغال بدون مشاكل 

هذي هي المشكلة الأساسية .. تغيير الترميز بالأكواد ما يشتغل بــ mysqli 
 

15-01-2016 01:27 صباحا
مشاهدة مشاركة منفردة [5]
أبو العصافير
عضـو مشارك
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 31-12-2014
رقم العضوية : 5837
المشاركات : 62
الدولة : أرض الله الواسعة
الجنس : ذكر
يتابعهم : 0
يتابعونه : 0
قوة السمعة : 400
موقعي : زيارة موقعي
اصدار المنتدى : 3.0.2
 offline 
look/images/icons/i1.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
ولو فرضنا اني قمت بتغيير الدوال بين mysql و mysqli بتتحول الحروف إلى رموز 
يعني مثلًا انصب المنتدى بدوال mysql ثم احولها لــ mysqli والناتج بيكون : 
34gsn4p

بتلاحظ ان اسم العضوية واسم الموضوع بالعربي ولكن هذا بسبب الكاش في المنتدى ولكن لو دخلت للموضوع سيكون بهذا الشكل 

20rqxwj

الإستضافة جديدة وليس فيها اي شيء خاص ، لذلك لو احببت ان اعطيك بيانات CPanel وتقوم بالتجربة بنفسك وتتأكد ان الخلل من السكربت او من الإستضافة ( لم اضعها في الملف الشخصي بسبب ان ملفات التنصيب ما زالت موجودة ) 

حاولت اتواصل مع شركة الإستضافة واطلب منهم تغيير الترميز او تغيير إصدار PHP 
ولكن بسبب أنها إستضافة مشتركة لم يوافقوا بسبب انها ستأثر على بقية المستخدمين 


تم تحرير المشاركة بواسطة :أبو العصافير
بتاريخ:15-01-2016 04:45 صباحا


15-01-2016 09:32 صباحا
مشاهدة مشاركة منفردة [6]
أبو العصافير
عضـو مشارك
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 31-12-2014
رقم العضوية : 5837
المشاركات : 62
الدولة : أرض الله الواسعة
الجنس : ذكر
يتابعهم : 0
يتابعونه : 0
قوة السمعة : 400
موقعي : زيارة موقعي
اصدار المنتدى : 3.0.2
 offline 
look/images/icons/upload/105.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
تم تجربة دوال mysqli منفردة وكانت تعمل بدون اي مشاكل 
وتم تجربة سكربت منتدى MyBB بدوال mysql و mysqli وكان يعمل بدون اي مشاكل 
حتى اني قمت بالتبديل بين mysql و mysqli وقت عمل السكربت (real-time) ولم تحدث اي مشاكل للترميز او للمحتوى

وهذا يعني ان هنالك مشكلة في دوال mysqli في البرنامج pbb
ما زلت ابحث في الملفات وابحث في الدوال 

واستنتجت شيء واحد 
وهو انه يوجد خطأ فادح في الشرح [شرح]: إعتماد ترميز UTF-8 في المنتدى بشكل كامل
وهو ان دوال mysqli تتطلب إضافة متغير الإتصال قبل إضافة كود SQL في دالة mysqli_query وهو ما لم يتم ذكره في الموضوع  155
لذلك قمت بتعديل الدالة لدي وتجربتها ، لتصبح بالشكل التالي :

$connect = @mysqli_connect($this->host,$this->db_username,$this->db_password,$this->db_name);
mysqli_query($connect,"set character_set_server='utf8'");
mysqli_query($connect,"set names 'utf8'");

ولكن المفاجأة كانت :

168va54


هذا ما وجدته بعد بحث دام 8 ساعات تخللها بعض الإستراحات للتفكير في حل لها 
الحل الوحيد بالنسبة لي هو استخدام دوال mysql العادية ، وانا لا امانع ذلك ، ولكن الإسغناء عنها في الإصدارات الحالية ليس بصالحي
وخاصة اني لم ابدأ العمل على الموقع لذلك اريد ان تكون البداية صحيحة مع مكتبة MySQLI او PDO 
بالإضافة إلى انني مغرم بـ PBB ولا اريد استخدام اي برنامج آخر 
والله اعلى واعلم 


تم تحرير المشاركة بواسطة :أبو العصافير
بتاريخ:15-01-2016 09:51 صباحا



الصفحة 1 من 2 < 1 2 > الأخيرة »


الكلمات الدلالية
مشكلة ، الترميزات ، دوال ، mysqli ، الاعتيادية ،







الساعة الآن 08:45 صباحا