أهلا وسهلا بك زائرنا الكريم في منتدى دعم PBBoard الرسمي، لكي تتمكن من المشاركة ومشاهدة جميع أقسام المنتدى وكافة الميزات ، يجب عليك إنشاء حساب جديد بالتسجيل بالضغط هنا أو تسجيل الدخول اضغط هنا إذا كنت عضواً .

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

موضوع مغلق


13-01-2016 11:49 مساءً
أبو العصافير
معلومات الكاتب
السلام عليكم ورحمة الله وبركاته



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

على اي حال انا لا اريد استخدام دوال mysql العادية وخاصة انه تم الإستغناء عنها بالفعل في الإصدار PHP7

لذلك اود الإعتماد على mysqli

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

CODE
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



والدالة بالطريقة الكائنية هي :

CODE
$mysqli->set_charset("utf8")




أو بالطريقة الإجرائية :

CODE
mysqli_set_charset($mysqli, "utf8")




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



بأي حال انا جربت دوال mysql العادية وكان الترميز يعمل بدون مشاكل

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

رغم اني جربت دوال mysqli في إستضافة hostinger وكانت تعمل بدون اي مشاكل



اعتقد والله اعلم ان استخدامي خاطئ ..

هذه هي الأكواد التي جربتها :

CODE
​/* 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 صباحاً


look/images/icons/i1.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
  14-01-2016 03:15 صباحاً   [1]
أبو العصافير
معلومات الكاتب
تحديث :

يمكن تغيير ترميز قراءة البيانات في المنتدى .. وذلك عبر البحث عن الكود التالي في سطر 57 :

CODE
$connect = @mysqli_connect($this->host,$this->db_username,$this->db_password,$this->db_name);


وإضافة الكود التالي اسفله :

CODE
​$connect->set_charset("utf8");




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

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










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

اقتبـاس ،، وصف الموضوع



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

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



والمفاجأة انه لم يحدث اي اختلاف .. مما يعني انه لا يتم استخدام هذه الدالة !

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



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

لأن المواضيع تظهر لي بالشكل التالي :



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



وما زال العمل جاريًا في تقفي النواقص .. مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية


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


look/images/icons/i1.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
  14-01-2016 03:54 صباحاً   [2]
أبو العصافير
معلومات الكاتب
التنصيب بالــ mysqli بعد إضافة كود الترميز السابق لا ينجح ..

يبدو انه لا يتم إستخدام كود الإتصال في ملف db_mysqli.class.php اثناء التنصيب .. لذلك تغيير الترميز فيه لا يفيد

بينما التنصيب بإستخدام mysql العادي يتم بدون مشاكل

look/images/icons/i1.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
  14-01-2016 08:25 صباحاً   [3]
Soliman
معلومات الكاتب
بخصوص إصدار php

يفضل ان يكون مابين

CODE
PHP 5.x.x >= 5.5.0


لاتجعله اعلى من ذلك حالياً متطلبات التشغيل

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



ومكتبة mysqli مدموجة بالكامل مع برنامج المنتدى

وفيما يخص تحويل الترميز بالكامل إلى utf-8 على هذه المكتبة

فالطريقة الافتراضية التي تعرفها انت وقد طرحت شرح لطريقة تنفيذها في قسم الدروس

هي متوافقة تماما مع مكتبة mysqli لظهور اللغة العربية بدون مشاكل ايضاً

CODE
      mysqli_query("set character_set_server='utf8'");
      mysqli_query("set names 'utf8'");



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







وبخصوص دوال الاستعلام الداخلية بالبرنامج

يفضل ان تجعلها بهذا الشكل للتوافق مع كلا المكتبتين

CODE
$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



امثلة

CODE
$PowerBB->DB->sql_query("SELECT  *   FROM " . $PowerBB->table['member'] . " WHERE usergroup = 1 ");




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




ويفضل استخدام OOP للإستعلامات الداخلية

CODE
        $SecArr             =     array();
        $SecArr['where']     =     array('id',$SubjectInfo['section']);
        $SectionInfo = $PowerBB->core->GetInfo($SecArr,'section');



لاتقم باستخدام دوال الاستعلامات بشكل مباشر

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



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



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


look/images/icons/i1.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
  14-01-2016 11:44 مساءً   [4]
أبو العصافير
معلومات الكاتب
عشان اكون واضح

لو اتبعت الطريقة الرسمية والمتعارف عليها في mysqli

المنتدى يعمل بدون مشاكل ، ولكن :

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

يعني الترميز ما تغير




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



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

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



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


look/images/icons/i1.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
  15-01-2016 01:27 صباحاً   [5]
أبو العصافير
معلومات الكاتب
ولو فرضنا اني قمت بتغيير الدوال بين mysql و mysqli بتتحول الحروف إلى رموز

يعني مثلًا انصب المنتدى بدوال mysql ثم احولها لــ mysqli والناتج بيكون :

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



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



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



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



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

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

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


look/images/icons/upload/105.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
  15-01-2016 09:32 صباحاً   [6]
أبو العصافير
معلومات الكاتب
تم تجربة دوال mysqli منفردة وكانت تعمل بدون اي مشاكل

وتم تجربة سكربت منتدى MyBB بدوال mysql و mysqli وكان يعمل بدون اي مشاكل

حتى اني قمت بالتبديل بين mysql و mysqli وقت عمل السكربت (real-time) ولم تحدث اي مشاكل للترميز او للمحتوى



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

ما زلت ابحث في الملفات وابحث في الدوال



واستنتجت شيء واحد

وهو انه يوجد خطأ فادح في الشرح [شرح]: إعتماد ترميز UTF-8 في المنتدى بشكل كامل

وهو ان دوال mysqli تتطلب إضافة متغير الإتصال قبل إضافة كود SQL في دالة mysqli_query وهو ما لم يتم ذكره في الموضوع مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية

لذلك قمت بتعديل الدالة لدي وتجربتها ، لتصبح بالشكل التالي :
CODE

$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'");


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



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





هذا ما وجدته بعد بحث دام 8 ساعات تخللها بعض الإستراحات للتفكير في حل لها

الحل الوحيد بالنسبة لي هو استخدام دوال mysql العادية ، وانا لا امانع ذلك ، ولكن الإسغناء عنها في الإصدارات الحالية ليس بصالحي

وخاصة اني لم ابدأ العمل على الموقع لذلك اريد ان تكون البداية صحيحة مع مكتبة MySQLI او PDO

بالإضافة إلى انني مغرم بـ PBB ولا اريد استخدام اي برنامج آخر

والله اعلى واعلم

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


look/images/icons/i1.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
  15-01-2016 01:02 مساءً   [7]
Soliman
معلومات الكاتب
الله يعطيك الف عافية ،،

إن شاء الله سيتم النظر بالكلاس وحل مشكلة عدم تحويل الترميز إلى utf8 بشكل كامل على مكتبة MySQLI

يمكنك حالياً استخدام مكتبة mysql العادية مع تفعيل تحويل الترميز منذ البداية لا مشكلة لديك

وستتمكن من التغيير إلى مكتبة MySQLI مع دعم الترميز utf8 دون مشاكل قريباً



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

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


look/images/icons/i1.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
  15-01-2016 11:42 مساءً   [8]
أبو العصافير
معلومات الكاتب
المشاركة الأصلية كتبت بواسطة: Soliman الله يعطيك الف عافية ،،

إن شاء الله سيتم النظر بالكلاس وحل مشكلة عدم تحويل الترميز إلى utf8 بشكل كامل على مكتبة MySQLI

يمكنك حالياً استخدام مكتبة mysql العادية مع تفعيل تحويل الترميز منذ البداية لا مشكلة لديك

وستتمكن من التغيير إلى مكتبة MySQLI مع دعم الترميز utf8 دون مشاكل قريباً



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



الشكر لله أخي سليمان

والعفو



وياليتك تنشئ موضوعًا لمتابعة هذه المشكلة وتضع بها الإستنتاجات والاسباب لأني مهتم جدًا وأريد معرفة السبب وطريقة حل المشكلة للفائدة

اعتبره Progress log لهذه المشكلة



وحاليًا تم إعتماد mysql حتى إشعار آخر مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية



الكلمات الدلالية






الساعة الآن 11:58 AM