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

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

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


موضوع مغلق


13-01-2016 11:49 مساءً
معلومات الكاتب ▼
انضم في : 31-12-2014
رقم العضوية : 5,837
المشاركات : 62
الدولة : أرض الله الواسعة
الجنس :
قوة السمعة : 400
موقعي : زيارة موقعي
السلام عليكم ورحمة الله وبركاته

قمت ولله الحمد بإستئجار إستضافة مواقع ولي رغبة ببناء موقع بسكربت 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]
معلومات الكاتب ▼
انضم في : 31-12-2014
رقم العضوية : 5,837
المشاركات : 62
الدولة : أرض الله الواسعة
الجنس :
قوة السمعة : 400
موقعي : زيارة موقعي
تحديث :
يمكن تغيير ترميز قراءة البيانات في المنتدى .. وذلك عبر البحث عن الكود التالي في سطر 57 :
CODE
$connect = @mysqli_connect($this->host,$this->db_username,$this->db_password,$this->db_name);

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


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





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

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

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

18mc9f

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


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


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

look/images/icons/i1.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
  14-01-2016 08:25 صباحاً   [3]
معلومات الكاتب ▼
انضم في : 18-07-2009
رقم العضوية : 1
المشاركات : 12,572
الدولة : KSA
الجنس :
الدعوات : 52
قوة السمعة : 74,196
موقعي : زيارة موقعي
بخصوص إصدار 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]
معلومات الكاتب ▼
انضم في : 31-12-2014
رقم العضوية : 5,837
المشاركات : 62
الدولة : أرض الله الواسعة
الجنس :
قوة السمعة : 400
موقعي : زيارة موقعي
عشان اكون واضح
لو اتبعت الطريقة الرسمية والمتعارف عليها في mysqli
المنتدى يعمل بدون مشاكل ، ولكن :
xfwxtg
يعني الترميز ما تغير


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

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

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

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

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

20rqxwj

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

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


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


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

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

واستنتجت شيء واحد
وهو انه يوجد خطأ فادح في الشرح [شرح]: إعتماد ترميز UTF-8 في المنتدى بشكل كامل
وهو ان دوال mysqli تتطلب إضافة متغير الإتصال قبل إضافة كود SQL في دالة mysqli_query وهو ما لم يتم ذكره في الموضوع 155
لذلك قمت بتعديل الدالة لدي وتجربتها ، لتصبح بالشكل التالي :
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'");

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

168va54


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


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


look/images/icons/i1.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
  15-01-2016 01:02 مساءً   [7]
معلومات الكاتب ▼
انضم في : 18-07-2009
رقم العضوية : 1
المشاركات : 12,572
الدولة : KSA
الجنس :
الدعوات : 52
قوة السمعة : 74,196
موقعي : زيارة موقعي
الله يعطيك الف عافية ،،
إن شاء الله سيتم النظر بالكلاس وحل مشكلة عدم تحويل الترميز إلى utf8 بشكل كامل على مكتبة MySQLI
يمكنك حالياً استخدام مكتبة mysql العادية مع تفعيل تحويل الترميز منذ البداية لا مشكلة لديك
وستتمكن من التغيير إلى مكتبة MySQLI مع دعم الترميز utf8 دون مشاكل قريباً

شكرا لك smile


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


look/images/icons/i1.gif مشكلة عدم دعم الترميزات في دوال mysqli الاعتيادية
  15-01-2016 11:42 مساءً   [8]
معلومات الكاتب ▼
انضم في : 31-12-2014
رقم العضوية : 5,837
المشاركات : 62
الدولة : أرض الله الواسعة
الجنس :
قوة السمعة : 400
موقعي : زيارة موقعي
المشاركة الأصلية كتبت بواسطة: Soliman الله يعطيك الف عافية ،،
إن شاء الله سيتم النظر بالكلاس وحل مشكلة عدم تحويل الترميز إلى utf8 بشكل كامل على مكتبة MySQLI
يمكنك حالياً استخدام مكتبة mysql العادية مع تفعيل تحويل الترميز منذ البداية لا مشكلة لديك
وستتمكن من التغيير إلى مكتبة MySQLI مع دعم الترميز utf8 دون مشاكل قريباً

شكرا لك smile
الشكر لله أخي سليمان
والعفو

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

وحاليًا تم إعتماد mysql حتى إشعار آخر 157




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









الساعة الآن 04:33 AM