- الرئيسية
- ما الجديد !
-
الصفحات▼
الصفحات
أهلا وسهلا بك زائرنا الكريم في منتدى دعم PBBoard الرسمي، لكي تتمكن من المشاركة ومشاهدة جميع أقسام المنتدى وكافة الميزات ، يجب عليك إنشاء حساب جديد بالتسجيل بالضغط هنا أو تسجيل الدخول اضغط هنا إذا كنت عضواً .
مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
-
موضوع مغلق
-
13-01-2016 11:49 مساءً
-
أبو العصافيرمعلومات الكاتبالأعضاءعضـو مشارك
- انضم في :
- 31-12-2014
- رقم العضوية :
- 5837
- المشاركات :
- 62
- الدولة :
- أرض الله الواسعة
- الجنس:
- قوة السمعة:
- 400
- موقعي:
- زيارة موقعي
-
السلام عليكم ورحمة الله وبركاته
قمت ولله الحمد بإستئجار إستضافة مواقع ولي رغبة ببناء موقع بسكربت PBBoard
على اي حال انا لا اريد استخدام دوال mysql العادية وخاصة انه تم الإستغناء عنها بالفعل في الإصدار PHP7
لذلك اود الإعتماد على mysqli
ولكن لاحظت عدم تعرف الإستضافة على الترميز في هذه الدوال بالكود الإعتيادي
CODEmysqli_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")
أو بالطريقة الإجرائية :
CODEmysqli_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 صباحاً
-
-
مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية14-01-2016 03:15 صباحاً [1]
-
أبو العصافيرمعلومات الكاتبالأعضاءعضـو مشارك
- انضم في :
- 31-12-2014
- رقم العضوية :
- 5837
- المشاركات :
- 62
- الدولة :
- أرض الله الواسعة
- الجنس:
- قوة السمعة:
- 400
- موقعي:
- زيارة موقعي
-
تحديث :
يمكن تغيير ترميز قراءة البيانات في المنتدى .. وذلك عبر البحث عن الكود التالي في سطر 57 :
CODE$connect = @mysqli_connect($this->host,$this->db_username,$this->db_password,$this->db_name);
وإضافة الكود التالي اسفله :
CODE$connect->set_charset("utf8");
كما يظهر بالصورة التالية :

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

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

وما زال العمل جاريًا في تقفي النواقص ..
-
تم تحرير المشاركة بواسطة :أبو العصافير بتاريخ:14-01-2016 03:29 صباحاً
-
-
مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية14-01-2016 03:54 صباحاً [2]
-
أبو العصافيرمعلومات الكاتبالأعضاءعضـو مشارك
- انضم في :
- 31-12-2014
- رقم العضوية :
- 5837
- المشاركات :
- 62
- الدولة :
- أرض الله الواسعة
- الجنس:
- قوة السمعة:
- 400
- موقعي:
- زيارة موقعي
-
التنصيب بالــ mysqli بعد إضافة كود الترميز السابق لا ينجح ..
يبدو انه لا يتم إستخدام كود الإتصال في ملف db_mysqli.class.php اثناء التنصيب .. لذلك تغيير الترميز فيه لا يفيد
بينما التنصيب بإستخدام mysql العادي يتم بدون مشاكل
-
-
مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية14-01-2016 08:25 صباحاً [3]
-
Solimanمعلومات الكاتبالادارة العامةPBBoard developer
- انضم في :
- 18-07-2009
- رقم العضوية :
- 1
- المشاركات :
- 13373
- الدولة :
- KSA
- الجنس:
- الدعوات:
- 55
- قوة السمعة:
- 81696
- موقعي:
- زيارة موقعي
-
بخصوص إصدار php
يفضل ان يكون مابين
CODEPHP 5.x.x >= 5.5.0
لاتجعله اعلى من ذلك حالياً متطلبات التشغيل
بالنسبة لازلت افضل اصدارات 5.3 و 5.4 فهي اكثر استقراراً واقل مشاكل حالياً وافضل استقرار بقية الأصدارت الجديدة واعتمادها رسمياً في اغلب سيرفرات الاستضافة
ومكتبة mysqli مدموجة بالكامل مع برنامج المنتدى
وفيما يخص تحويل الترميز بالكامل إلى utf-8 على هذه المكتبة
فالطريقة الافتراضية التي تعرفها انت وقد طرحت شرح لطريقة تنفيذها في قسم الدروس
هي متوافقة تماما مع مكتبة mysqli لظهور اللغة العربية بدون مشاكل ايضاً
CODEmysqli_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 ");
CODEwhile ($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 مساءً
-
-
مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية14-01-2016 11:44 مساءً [4]
-
أبو العصافيرمعلومات الكاتبالأعضاءعضـو مشارك
- انضم في :
- 31-12-2014
- رقم العضوية :
- 5837
- المشاركات :
- 62
- الدولة :
- أرض الله الواسعة
- الجنس:
- قوة السمعة:
- 400
- موقعي:
- زيارة موقعي
-
عشان اكون واضح
لو اتبعت الطريقة الرسمية والمتعارف عليها في mysqli
المنتدى يعمل بدون مشاكل ، ولكن :

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

يعني الترميز شغال بدون مشاكل
هذي هي المشكلة الأساسية .. تغيير الترميز بالأكواد ما يشتغل بــ mysqli
-
-
مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية15-01-2016 01:27 صباحاً [5]
-
أبو العصافيرمعلومات الكاتبالأعضاءعضـو مشارك
- انضم في :
- 31-12-2014
- رقم العضوية :
- 5837
- المشاركات :
- 62
- الدولة :
- أرض الله الواسعة
- الجنس:
- قوة السمعة:
- 400
- موقعي:
- زيارة موقعي
-
ولو فرضنا اني قمت بتغيير الدوال بين mysql و mysqli بتتحول الحروف إلى رموز
يعني مثلًا انصب المنتدى بدوال mysql ثم احولها لــ mysqli والناتج بيكون :

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

الإستضافة جديدة وليس فيها اي شيء خاص ، لذلك لو احببت ان اعطيك بيانات CPanel وتقوم بالتجربة بنفسك وتتأكد ان الخلل من السكربت او من الإستضافة ( لم اضعها في الملف الشخصي بسبب ان ملفات التنصيب ما زالت موجودة )
حاولت اتواصل مع شركة الإستضافة واطلب منهم تغيير الترميز او تغيير إصدار PHP
ولكن بسبب أنها إستضافة مشتركة لم يوافقوا بسبب انها ستأثر على بقية المستخدمين
-
تم تحرير المشاركة بواسطة :أبو العصافير بتاريخ:15-01-2016 04:45 صباحاً
-
-
مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية15-01-2016 09:32 صباحاً [6]
-
أبو العصافيرمعلومات الكاتبالأعضاءعضـو مشارك
- انضم في :
- 31-12-2014
- رقم العضوية :
- 5837
- المشاركات :
- 62
- الدولة :
- أرض الله الواسعة
- الجنس:
- قوة السمعة:
- 400
- موقعي:
- زيارة موقعي
-
تم تجربة دوال mysqli منفردة وكانت تعمل بدون اي مشاكل
وتم تجربة سكربت منتدى MyBB بدوال mysql و mysqli وكان يعمل بدون اي مشاكل
حتى اني قمت بالتبديل بين mysql و mysqli وقت عمل السكربت (real-time) ولم تحدث اي مشاكل للترميز او للمحتوى
وهذا يعني ان هنالك مشكلة في دوال mysqli في البرنامج pbb
ما زلت ابحث في الملفات وابحث في الدوال
واستنتجت شيء واحد
وهو انه يوجد خطأ فادح في الشرح [شرح]: إعتماد ترميز UTF-8 في المنتدى بشكل كامل
وهو ان دوال mysqli تتطلب إضافة متغير الإتصال قبل إضافة كود SQL في دالة mysqli_query وهو ما لم يتم ذكره في الموضوع
لذلك قمت بتعديل الدالة لدي وتجربتها ، لتصبح بالشكل التالي :
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'");
ولكن المفاجأة كانت :

هذا ما وجدته بعد بحث دام 8 ساعات تخللها بعض الإستراحات للتفكير في حل لها
الحل الوحيد بالنسبة لي هو استخدام دوال mysql العادية ، وانا لا امانع ذلك ، ولكن الإسغناء عنها في الإصدارات الحالية ليس بصالحي
وخاصة اني لم ابدأ العمل على الموقع لذلك اريد ان تكون البداية صحيحة مع مكتبة MySQLI او PDO
بالإضافة إلى انني مغرم بـ PBB ولا اريد استخدام اي برنامج آخر
والله اعلى واعلم-
تم تحرير المشاركة بواسطة :أبو العصافير بتاريخ:15-01-2016 09:51 صباحاً
-
-
مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية15-01-2016 01:02 مساءً [7]
-
Solimanمعلومات الكاتبالادارة العامةPBBoard developer
- انضم في :
- 18-07-2009
- رقم العضوية :
- 1
- المشاركات :
- 13373
- الدولة :
- KSA
- الجنس:
- الدعوات:
- 55
- قوة السمعة:
- 81696
- موقعي:
- زيارة موقعي
-
الله يعطيك الف عافية ،،
إن شاء الله سيتم النظر بالكلاس وحل مشكلة عدم تحويل الترميز إلى utf8 بشكل كامل على مكتبة MySQLI
يمكنك حالياً استخدام مكتبة mysql العادية مع تفعيل تحويل الترميز منذ البداية لا مشكلة لديك
وستتمكن من التغيير إلى مكتبة MySQLI مع دعم الترميز utf8 دون مشاكل قريباً
شكرا لك
-
تم تحرير المشاركة بواسطة :Soliman بتاريخ:15-01-2016 01:03 مساءً
-
-
مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية15-01-2016 11:42 مساءً [8]
-
أبو العصافيرمعلومات الكاتبالأعضاءعضـو مشارك
- انضم في :
- 31-12-2014
- رقم العضوية :
- 5837
- المشاركات :
- 62
- الدولة :
- أرض الله الواسعة
- الجنس:
- قوة السمعة:
- 400
- موقعي:
- زيارة موقعي
-
المشاركة الأصلية كتبت بواسطة: Soliman الله يعطيك الف عافية ،،
إن شاء الله سيتم النظر بالكلاس وحل مشكلة عدم تحويل الترميز إلى utf8 بشكل كامل على مكتبة MySQLI
يمكنك حالياً استخدام مكتبة mysql العادية مع تفعيل تحويل الترميز منذ البداية لا مشكلة لديك
وستتمكن من التغيير إلى مكتبة MySQLI مع دعم الترميز utf8 دون مشاكل قريباً
شكرا لك
الشكر لله أخي سليمان
والعفو
وياليتك تنشئ موضوعًا لمتابعة هذه المشكلة وتضع بها الإستنتاجات والاسباب لأني مهتم جدًا وأريد معرفة السبب وطريقة حل المشكلة للفائدة
اعتبره Progress log لهذه المشكلة
وحاليًا تم إعتماد mysql حتى إشعار آخر
-
-
-
-