Android Webservices

Android Webservices بالعربية – الدرس الثالث

تحدثنا فى التدوينة السابقة Android Webservices بالعربية – الدرس الثانى عن كيفية الاتصال بملف php موضوع  فى سيرفر ما وجلب محتواه الى تطبيق الأندرويد  واليوم سنتحدث عن php و Mysql واتصال الـ php بـ Mysql كما وضحنا فى ِAndroid Webservices بالعربية – الدرس الأول أنه سيكون هناك اتصال بين ملف php وقاعدة بيانات ماى سيكوال كأحد القواعد الشائعة لتخزين البيانات والتعامل معها .

تعال فى البداية لنعرف ما هى قاعدة البيانات .

 

قواعد البيانات 

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

file

 

بالطبع تحولت مجموعة البيانات المخزنة الى ما يمكن ان نطلق عليه فوضى حتى عندما تقرأه ستجد انه متشابك وغير منظم وسىء جدا لكن الأسوء من ذلك اذا قررأت أن تقوم بتخزين البيانات فيه والتعامل معها من خلال الجافا مثلا او من خلال php ستكون كارثة كبيرة اذا قررت مثلا تحديث بيانات احد المستخدمين فالامر برمجيا يختلف تماما عن الوضع العادى حيث تذهب انت بالماوس الى المكان وتضع المؤشر ثم تبدأ بالكتابة او تحديد ما تريده ثم مسحة برمجيا انت تأمر الجافا بالأكواد أو من خلال كتابة الكود فى php الامر سيكون معقد جدا  اليس من الافضل تنظيم البيانات السابقة فى جدول ؟

table

الان تجد الامور قد اصبحت أسهل وصار الامر منظما ويمكن التعامل مع هذا الجدول بسهولة ولذلك أغلب قواعد البيانات تعتمد على الجداول مثل SQLite و Mysql التى سنشرحها اليوم .

ومن هنا ان قاعدة البيانات ببساطة هى عبارة بيانات منظمة بطريقة معينة على هيئة جداول يمكنك التعامل معها بكل سهولة وإنشاء جداول إو حذفها وإنشاء اعمدة مختلفة والتعديل على الاعمدة والصفوف داخل تلك الجداول وذلك عن طريقة لغة بسيطه وسهله جدا تسمى SQL ,والتى تستخدم نفسها داخل الاندرويد للتعامل مع SQLite Database .

قاعدة بيانات MySQL

هى عباره عن نظام قواعد بيانات ينطبق عليه الكلام السابق هنا عن قواعد البيانات وهو متواجد تقريبا فى أغلب الاستضافات والسيرفرات ويمكنك إدارته والتحكم به إما عن طريق SQL أو عن طريق واجهة أو برنامج يطلق عليه phpMyAdmin

وعند حجزك لأى استضافة مجانية أو مدفوعة سوف تجد فى لوحة تحكم الإستضافة ايقونة تخص Mysql وأيقونة تخص phpMyAdmin  سوف اقوم بالدخول الى الاستضافة المجانية التى استخدمتها المرة السابقة لرفع الملف hello لنلقى نظرة عليهما

sxcreen

وقد يختلف شكل الايقونتين السابقتين من اضافة لأخرى او يختلف الاسم قليلا لكن فى النهاية يكون واضح ويحتوى على MySQL او phpMyAdmin .

والـ phpMyAdmin هى عباره عن واجهه رسومية تمكن مستخدمى قواعد البيانات من أجراء العمليات المختلفة على قواعد البيانات من حذف وإدخال وتحديد وتحديث وذلك بشكل سهل ومبسط بدون كتابة أوامر SQL .

ويمكن من خلال لوحة تحكم الإستضافة إنشاء قاعدة بيانات جديدة ثم التحكم فيها سواء بأوامر SQL  أو من خلال phpMyAdmin .

طريقة إنشاء قاعدة بيانات MySQL على الاستضافة .

فى لوحة تحكم الاستضافة قم بالضغط على ايقونة Mysql السابقة او ما يشاببها فى استضافتك ستجد انها  تقوم بفتح صفحة جديدة تمكنك من إنشاء قاعدة بيانات mysql جديدة ولإنشاء قاعدة بيانات يجب ان تختار لها اسما وأن يكون هناك مستخدم لقاعدة البيانات هذه و باسورد لهذا المستخدم لأننا سنحتاج هذه المعلومات عند الاتصال بقاعدة البيانات من خلال الـ php فلا يستطيع اى ملف php الوصول لهذه القاعدة بدون أن يكون لديه تلك المعلومات .  createmysql

ولقد اخترت هنا اسم قاعدة البيانات db وسوف يكون اسمها النهائى عباره عن db_u260796562

وقمت باختيار اسم المستخدم karim وسوف يكون اسم المستخدم النهائى عباره عن karim_u260796562

وقمت باختيار باسورد 123123.

قم بالضغط على انشىء وستجد أنه تم إنشاء قاعدة البيانات

dabase

كما ذكرنا سابقا أن قاعدة البيانات عباره عن جداول والان بعد أن انشأنا قاعدة البيانات نريد ان نقوم بإنشاء جدولنا الأول ويمكننا إنشاء الجدول إما  عن طريق أمر SQL صادر من ملف php يتصل مع هذه القاعدة أو يمكننا إنشاء جدول عن طريق phpMyAdmin .

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

وسنقوم بإنشاء متغير php يقوم بإمساك كائن من mysqli يحتوى على بيانات الاتصال بالقاعدة وهى اسم القاعدة واسم المستخدم واسم السيرفر وباسورد المستخدم السابقة .

<?php
$dbname = 'u260796562_db';        // Database Name      
$dbserver = 'mysql.hostinger.ae'; // Database Server
$dbusername = 'u260796562_karim';	// Database Username 
$dbpassword = '123123'; 			 // Database Password
$dbconnect = new mysqli($dbserver, $dbusername, $dbpassword, $dbname);

وربما تلاحظ أن المتغير فى php يختلف عن المتغير فى جافا حيث عند تعريف متغير فى جاافا تقوم بتعريفه عن طريق كتابة النوع ثم اسم المتغير  اما فى php تقوم بكتابة $ ثم الاسم مباشرة بدون ذكر النوع وتقوم الـ php تلقائيا بتحديد النوع فمثلا لعمل int فى جافا اسمه number1 سيكون كالتالى

int number=1;

اما فى php سيكون

$number=1;

وفى جافا لعمل String اسمه name  = ahmed مثلا سيكون كالتالى

String name='Ahmed';

اما فى php سيكون

$name= 'Ahmed';

وفى الاندرويد مثلا اذا قمت بعمل كائن جديد وليكن من Hendiware  على سبيل المثال  سيكون الكود كالتالى :

Hendiware hendiware = new Hendiware();

أما فى php سيكون

$hendiware = new Hendiware();

وهكذا ..  لذلك الكود السابق الخاص بالاتصال بكل بساطه كان عبارة عن تعريف متغيرات لاسم السيرفر واسم القاعدة واسم المستخدم والباسورد وعمل متغير اخر يمسك الاتصال mysqli

والان بعدما اصبح لدينا ملف php  به معلومات قاعدة البيانات وقمنا بانشاء كائن  للإتصال وهو $dbconnect   سوف نقوم باضافة كود بسيط للتأكد من ان الاتصال بقاعدة بيانات mysql تم بشكل صحيح كاالاتى :

<?php
$dbname = 'u260796562_db';        // Database Name      
$dbserver = 'mysql.hostinger.ae'; // Database Server
$dbusername = 'u260796562_karim';	// Database Username 
$dbpassword = '123123'; 			 // Database Password
$dbconnect = new mysqli($dbserver, $dbusername, $dbpassword, $dbname);

if ($dbconnect->connect_error) {
    die("Connection failed: " . $dbconnect->connect_error);
}else{
	echo "Connection Success !";
}

فى الكود السابق قمنا بعمل حالة شرطية  تستدعى ميثود موجودة بكائن الـ dbconnect السابق وهى ميثود connect_error بحيث لو كان هناك خطأ فى الاتصال بقاعدة البيانات MySQL مثلا  يقوم بطباعة الخطأ وdie() فى الكود السابق هى عباره ميثود جاهزة فى php  تقوم بعرض الخطأ اذا كان هناك خطأ وتوضح هل الباسورد هو الخطأ ام السيرفر أم اسم المستخدم وهكذا .

وفى الكود السابق العلامة -> تشبه عندنا النقطة فى الجافا مثلا اذا اردت ان استدعى الـ Method الخاصة بالتحويل لـ String فى جافا يكون الكود كالتالى :

something.toString();

أما فى php لو وجدت فستكون كالتالى :

something -> to_string

 

لذا فى الكود السابق فى السطر رقم 8

if ($dbconnect->connect_error) {

عباره عن اذا حدث خطأ  ثم نتابع ونقول استخدم الميثود die وهى تجعل الـ php يتوقف عن تنفيذ باقى الأوامر  واطبع لنا الخطأ وإن لم يحدث خطأ قم بطباعة Connection Success

الان قم برفع ملف php الى الاستضافة وقم بمناداة الرابط من خلال المتصفح

وستجد النتيجة أن ملف الـ php قام الان بالاتصال بقاعدة البيانات بنجاح

re

 

 

قم بالعبث ببعض البيانات فى ملف php كتغيير الباسورد ثم رفع الملف مرة اخرى واستدعاؤه فى المتصفح وستجد أن هناك خطأ يظهر ناتج عن الدالة die والتى تكون تمت منادتها بسبب خطأ فى الاتصال

 

الان اصبحت قادرا على جعل ملف php يتصل بـ mysql وتعرف ان نجح الاتصال أم لا

 

الواجب 😀

قم بعمل تطبيق بسيط يتصل بملف  php الذى قمت بانشاءه  فى هذا الدرس  الذى يتصل بالماى سيكوال ويجلب حالة الاتصال ويعرضه داخل TextView أو Toast  هل هو ناجح أم لا وشاركنا سكرين شوت فى التعليقات من النتيجة  .

 

لو كان لديك اى سؤال  متعلق بـ php أو MySQL  او تريد اى استفسار اخر يخص هذا الموضوع  قم بسؤاله فى تعليق  صديقنا كريم ( مبرمج php )  يتابع الموضوع وجاهز للرد على اسئلتكم 😉 .

فى التدوينة القادمة سنتحدث عن كيفية عمل جدول فى ماى سيكوال وكيفية ارسال البيانات من ملف php وتخزينها فى ماى سيكوال وكذلك كيفية استدعاؤها ..

السابق
Android Webservices بالعربية – الدرس الثانى
التالي
سلسلة Android Sensors بالعربية الدرس الأول

33 تعليق

أضف تعليقا

  1. Elmehdi قال:

    هل فعلا Php بهذه البساطة ؟
    أسلوب جميل بارك الله فيكم ننتظر منكم الجديد و الأفظل !!!

    1. نعم هي لغه جميلة وكبيرة وسهلة 🙂

  2. ahmed قال:

    اخي ماذا عن Json ???

    1. نقوم فى الاول باستخدام الكود php ونرجع النتائج بشكل Json باستخدام داله json_encode لكي يقرأه التطبيق .. تقريبا هذا الشرح القادم ان شاء الله 🙂

      1. Asjad قال:

        ضروري استخدم ال json ؟؟
        وهل يوجد طرق اخرى؟؟

  3. ahmad قال:

    انا من عشاق JAVA وعملت مشروع ادارة فنادق عليها وربطته ب Mysql هل اكمل ب جافا
    انا اطور نفسي ب لغات اخرى مثل vb.net و php
    هل جافا في الاندرويد مشابه ل جافا الاساسية في برامج مثل نت بينز

    1. Hendiware قال:

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

  4. خالد قال:

    شكراً لك عالمجهود الجبار, ولكن عندي ملاحظة اخي انت تكتب الدالة echo بدون اقواس () ولهذا فلن تطبع شئ ومن يطبق لن يحصل على نتيجة من السيرفر والصحيح ان تكتب
    echo (“Connection Success !”)
    اشكرك عالشرح المذهل

    1. Hendiware قال:

      مرحبا خالد
      هل جربت كتابة echo “something” ; ولم تعمل ؟

      1. خالد قال:

        أنا لما كتبتها بدون اقواس لم تعمل عندي فلما اضفت الاقواس عملت بشكل صحيح وما اعرف اش السبب ,, ولكن لما اطلعت على مستندات اللغة وجدت انه ممكن كتابتها بدون اقواس فأعتذر عن تعليقي.

    2. Basem Nasr قال:

      مش شرط وجود اقواص اخي خالد

  5. eslamgamal قال:

    نرجوا منكم تكثيف الدروس في webservices

  6. Mahmoud Abdelwahab قال:

    ايوا بقى ايه الحﻻوه دى :v
    شرح جاااامد ^^

  7. Zualfekar قال:

    شباب.. لو سمحتو.. هلا بقدر أعمل أكتر من قاعدة بيانات بنفس السيرفر؟؟
    لان عملت قاعدة بيانات جديدة غير يلي بالدرس.. وع نفس السيرفر ورفعت ملف الphp ومع هيك عطاني خطأ..
    شو الحل لو سمحتو؟
    وشكرا <3 <3 <3 <3

    1. Zualfekar قال:

      وسؤال تاني لو سمحتو.. هلا الترتيب مهم ضمن الأقواس في تعليمة الـ new mysqli؟؟ يعني يأتي السيرفر أولا ثم اسم المستخدم وهكذا..

      1. Hendiware قال:

        بالتأكيد الترتيب مهم جدا . بدون الترتيب تكون البيانات خاطئة ولا يتم الاتصال

    2. Hendiware قال:

      أكيد بتقدر بس قاعدة البيانات الجديدة لها اسم جديد ولها اسم مستخدم جديد وبالتالى يجب عمل ملف php جديد للاتصال يحتوى على البيانات الجديدة .

  8. noor قال:

    مذهل 🙂
    الله يجزيكم كل خير

  9. Ali Hassan قال:

    connect_error)
    {
    die(“connection failed:”.$dbconnect->connect_error);
    }
    else{
    echo “connection success”;
    }
    ?>
    يا ترى اين الخطأ … علما بأن المعلومات اسم المستخدم واسم قاعدة البايانات والباسوورد والسيرفر صحيحه

    1. Ali Hassan قال:

      connect_error)
      {
      die(“connection failed:”.$dbconnect->connect_error);
      }
      else{
      echo “connection success”;
      }
      ?>

  10. أحمد قال:

    السلام عليكم ورحمة الله وبركاتة
    ارجو المساعدة
    انا لدي دوال على الويب سيرفس
    فية دالة فيها بيانات موظف على الويب سيرفس .
    انا اريد ربط الويب سيرفس من خلال تطبيق على الجوال من خلال هذا التطبيق نريد استعاد بيانات الموظف من خلال رقم الهاتف فقط \
    كيف اعمل التطبيق للجوال وكيف اربط مع الويب سيرفس

    1. Hendiware قال:

      مرحبا يا أحمد ستجد على اليسار فى الموقع صورة مكتوب علهيا تحتاج المساعدة قم بالدخول على الجروب ووضع سؤالك

  11. عبدالله قال:

    مش عارف الاقى الحته بتاع قم بانشاء قواعد البيانات على موقع hostinger ؟؟؟؟؟؟؟!

  12. rasheed قال:

    مرحبا السلام عليكم . شكرا على مجهود جبار. لكن عندي سوال
    انا عملت استضافة من موقع hostingar وعملت ملف php لاكن لا اعرف كيف ارفع للاستضافة وابحث عنه في مصتفح كيف ارفعه دورس كثير ما لقيت ابدا وشكرا

  13. ي قال:

    مرررررررره الدرووس واضحه وممتعه . شكرا من القلب
    الله ينفع فيكم الامه

  14. Mariam قال:

    رااائع .. شكرا لكم

  15. ali alaraby قال:

    Warning: mysqli::mysqli() [mysqli.mysqli]: (HY000/1130): Host ‘31.170.160.91’ is not allowed to connect to this MySQL server in /home/a4209105/public_html/connect.php on line 7

    Connection Success !
    ده اللي ظهر ليا لما رفعت ملف ال php بس مش عارف ايه ال warning ده
    connect_error) {
    die(“Connection failed: ” . $dbconnect->connect_error);
    }else{
    echo “Connection Success !”;
    }
    ?>

    وده كود ال php

  16. ali alaraby قال:

    عفوا اكتشفت الخطا كان خطا بالكود
    جزيل الشكر علي جهدكم معنا استفدت كتير فعلا

  17. Mostafa قال:

    احاول الوصول لحل الواجب لا استطيع هل من الممكن شرح طريقة تنفيذه ؟

  18. طلب منا كود ادخال البيانات الي قاعدة البيانات php my adminوربط مع الجافا اسكربت

  19. Abdalalh J.Murad قال:

    شكرا كتير على الشرح الرائع

  20. bakryko قال:

    جزاكم الله خيرا فعلا الموضوع كان عامل لي هاجس

  21. bakryko قال:

    شباب انا تواجهني مشكلهم اقدر اختبر اتصال ملف ال php ب الداتا بيز ارجو المساعده يظهر لي الخطا دا
    Warning: mysqli::__construct(): (HY000/2002): Connection refused in /storage/ssd5/476/7503476/public_html/mydb.php on line 7
    Connection failed: Connection refused

اترك تعليقاً

This site uses Akismet to reduce spam. Learn how your comment data is processed.