Android Webservices

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

فى الدرس السابق Android Webservices بالعربية – الدرس الثالث  قمنا بشرح اعداد ملف php وجعله يتصل بقاعدة بيانات MySQL قمنا بانشائها  وتأكدنا من أن الاتصال تم بنجاح وطبعنا عبارة Connection Sucess الان نريد التحكم فى قاعدة البيانات هذه والبدء فى إنشاء الجداول والبدء فى تخزين البيانات واستدعائها .

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

إنشاء جدول باستخدام phpMyAdmin

سنقوم بالدخول الى لوحة تحكم الاستضافة والضغط على ايقونة phpMyAdmin وربما سيقوم بفتح صفحة يجعلك تختار قاعدة البيانات التى تريد ادارتها إن كان هناك أكثر من قاعدة بيانات قم باختيار القاعدة التى طبقت بها الدرس السابق وستفتح لك الصفحة الرئيسية لـ phpMyAdmin على قاعدة البيانات الخاصة بك

phpmyadmin1

 

1- لوجو phpmyAdmin وتحته مجموعة ازرار للتنقل لا نستخدمها كثيرا

2- spinner يقوم بعرض الجداول لكن الان لا يوجد اى جدول لذلك هو فارغ

3- زر إنشاء ” جدول ” جديد .

4- التاب Structure وهو خاص بالهيكل اذا كان هناك جدول يمكنك ان ترى هيكله مثل االاعمدة واسم كل عمود ونوعه .

التاب SQL لتنفيذ أمر sql مباشرة على قاعدة البيانات .

التاب Export والتاب Import لتصدير واستيراد قاعدة البيانات

التاب Operations يمكنك من خلاله التحكم فى عدة اشياء مثل افراغ احد الجداول من محتوياته او اعادة تسمية قاعدة البيانات وبعض الاشياء الاخرى .

5-  منطقة انشاء جدول جديد

6- اسم الجدول

7- عدد الأعمدة فى هذا الجدول

سنقوم بإنشاء جدول جديد كتجربة وكمثال وسنسميه users ومهمة هذا الجدول ستكون حفظ والتعامل مع بيانات المستخدمين مثل اسم المستخدم ، الباسورد ، الايميل ، العنوان لذلك سيكون الجدول كالتالى :

Screen Shot 2016-01-28 at 8.22.06 PM

لاحظ ان اول عمود  اطلقنا عليه id ودائما عند انشاء اى جدول لأى اغرض سواء للـ posts او للـ users او للـ comments او اى شىء اخر دائما ما نجعل العمود الاول للـ id كما هو فى العرف البرمجى وكلمة id هى اختصار لـ identitty  أى هوية أو معرف ودائما ما يكون integer  عباره عن رقم فكل مستخدم يتم تسجيله فى جدول المستخدمين أو كل منشور يتم تسجيله فى جدول المنشورات او كل صف فى اى جدول يكون له رقم مميز يميزه عن غيره وغالبا ما نقوم بجعل عمود الـ id يدخل الرقم تلقائيا كل مرة بشكل تصاعدى فعند تسجيل اول مستخدم يحصل على رقم 1 فى عمود الـ id وعند تسجيل المستخدم الثانى يحصل على رقم 2 وهكذا ويمكننا عمل ذلك عند انشاء الجدول بتحديد أن الـ id AUTO INCREMENT  و PRIMARY KEY بالتاكيد مررت بهم اذا كنت قد ذاكرت الدروس الخاصة بـ SQLite Database

سنعود لـ phpMyAdmin ونقوم بإنشاء جدولنا الأول وسيكون عباره عن جدول لتسجيل المستخدمين وسنسميه users وسيكون عباره عن 5 اعمدة وهو الـ ID و الاسم والباسورد والعنوان والايميل

phpmyadmin create table  اضغط Go وستجد ان phpMyAdmin ينقلك لصفحة جديدة وهى صفحة تمنكنك من تحديد اسم كل عمود واختيار خصائصه  ونوع المدخلات واى خصائص اخرى

create new table

اخترنا ان يكون اسم اول عمود id  ونوعه INT اى عدد  صحيح  وقمنا بتحديده كـ PRIMARY اى مفتاح اساسى و قمنا بعمل check لـ A_I اختصار AUTO INCREMENT    مع تحديد طول الـ INT لـ 11 وهو اقصى طول للـ integer .

وباقى الاعمدة  name و password و email و address واخترنا بأن يكون نوعها VARCHAR وهى اختصار لـ Variable Character والـ VARCHAR هو نوع مناسب لـلمدخلات كال user و الـ password و email والمدخلات التى تكون عباره عن جمل بسيطه وليست نصا طويلا .

لكن لحظة .. ! لقد تذكرت انه ربما من المهم انشاء عمود جديد لتخزين تاريخ تسجيل الاعضاء به وبالتالى يوفر لى phpMyAdmin اضافة عمود جديد اثناء تسمية الاعمدة وذلك بكتابة عدد الاعمدة التى اريد اضافتها ثم الضغط على go الموجودة بالاعلى بجانب اسم الجدول  .

add colomon

ستجد أنه قد تم اضافة خانة جديدة لعمود جديد بالاسفل لتسميته وتحديد نوعه وخصائصه ساسميه registertime  واختار النوع DATETIME اى انه سيتم تسجيل الوقت والتاريخ به ثم فى Default وهى القيمة الافتراضية اخترت CURRENT_TIMESTAMP  اى ان القيمة الافتراضية لهذا الحقل هو الوقت والتاريخ الحالى فانا لن اقوم بادخال الوقت وسيقوم هو بادخال الوقت الحالى مباشرة كما سنرى

timestamp

بعدما انتهينا سنضغط على save ليتم إنشاء الجدول والاعمدة بخصائصها التى حددناها save

والان مبروك لقد تم إنشاء جدولك الاول فى قاعدة البيانات التى انشاتها فى الدرس السابق mysql table

حسنا الان لديك قاعدة بيانات وبداخلها جدول اسمه users  ونريد ان نبدأ بتخزين البيانات

لادخال البيانات يمكنك ذلك ايضا من phpMyAdmin او عن طريق أمر SQL من ملف php متصل بهذه القاعدة بالطبع من خلال phpMyAdmin ابحث عن insert بالاعلى وقم بادخال صف جديد او مستخدم جديد لجدول الـ users  اذا اردت التجربة

لكن الان سنتطرق الى الاهم وهو ادخال البيانات عن طريق ملف php باستخدام أمر SQL

تخزين البيانات فى قاعدة البيانات

سنقوم بإنشاء ملف php جديد بأى محرر نصوص سواء notebad++ او sublime او اى محرر اخر  وسنسميه insertuser.php

وسنقوم بكتابة <?php فى السطر الاول كالعادة لتعريف نوع الملف .

php file

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

حسنا php توفر لك طريقة رائعة لعدم تكرار البيانات وهى ميثود include اى تستطيع تضمين محتوى ملفى اخر فى اى ملف تريد سوف نقوم الان بعمل include للملف السابق صناعته ورفعه فى الدرس السابق وقد كان اسمه connecttomysql.php . كالتالى :

include file php

الان اصبح لدى ملف insertusers.php الحالى القدرة على الاتصال بقاعدة البيانات واستخدام البيانات الموجوده بملف connecttomysql.php وايضا استخدام كائن الاتصال والذى كان عباره عن $dbconnect

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

كالاتى :

$insertusersql="INSERT INTO users (name,password,email,adress) VALUES ('Hendiware','123123','mail@hendiware.16mb.com', 'Zagazig Egypt');"

 

وكما تلاحظ ان هيكل الامر كالتالى INSERT INTO ثم اسم الجدول users ثم اسماء الاعمدة التى سنقوم بالادخال فيها بين قوسين ثم كلمة  VALUES ثم القيم التى سيتم ادخالها فى الاعمدة بنفس الترتيب بين قوسين .

 

وسوف تلاحظ فى الكود السابق اننا لم نذكر اى شىء عن العمود id أو العمود registertime لانهم سوف يتم ملئهم تلقائيا مع كل ادخال لصف جديد .

 

الان لدينا ملف php insertuser كالتالى :

sql query

 

امر sql السابق مجرد متغير كأنه String جافا بداخله شىء ما لنقوم بتنفيذه يجب استدعائه عبر كائن الـ mysql الذى صنعناه فى الدرس السابق وهو $dbconnect حيث سنقوم باستدعاء الميثود query وتمرير المتغير السابق اليها ووضعها بحالة شرطية لنعرف اذا ما نجح الاتصال ام لا كالتالى :

if($dbconnect->query($insertusersql) === TRUE ){
    echo " User Add Successfuly 🙂 " ;
}else{
    echo "OOops some thing is wrong 🙁 " ;
}

ومعنى الكود السابق انه اذا كان نتيجة تنفيذ الامر السابق true اذا فالاتصال صحيح وامر الادخال تم تنفيذه فقم بطباعة جملة User Add Successfuly  واذا فشلت عملية الادخال لاى سبب قم بطباعة جملة OOops Something is wrong

الان اصبح ملف insertuser.php كالتالى :

php file now

هل أنت متحمس للتجربة الان وادخال المستخدم الاول حسنا سأقوم برفع الملف الان للاستضافة واستدعاء الرابط ولنشاهد ماذا سيحدث  ؟

حسنا فلنجرب  معا ^ـ^

 

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

fileee

والان لنقم بالتجربة  واتمنى ان يعمل بشكل جيد هذه المرة

 

sucess

الان النتيجة مفرحة ^ـ^ تم الاتصال وتم ادخال المستخدم سوف نذهب الى  phpMyAdmin مرة اخرى لنرى قم بالضغط على users وستجد المستخدم تم تسجيله كما فى الصورة القادمة  :

 

table

 

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

 

الان قم بتعديل ملف php insertuser  وتغيرر المستخدم  باى اسم اخر وكذلك الباسورد وقم باستدعائه مرة اخرى فستجد انه تم ادخال مستخدم اخر قم بتكرير العملية وستجد انك الان تضيف المستخدمين بسهولة  من خلال ملف php .

 

 

استدعاء البيانات . 

حسنا الان قمت بتخزين بيانات وتريد أن تقوم باستدعائها .

سنقوم الان بإنشاء ملف php باسم getusers وسيتواصل مع قاعدة البيانات ويقوم بجلب البيانات من جدول users أنشىء ملف جديد وبالتأكيد سنقوم بعمل include لملف   connecttomysql.php الذى يحتوى على بيانات الاتصال بقاعدة البيانات والكائن $dbconnect الذى نستدعى ميثود query الخاصة به ونمرر لها أمر الـ SQL ليتم تنفيذه على قاعدة البيانات

getusers file

 

الان سوف نكتب أمر sql الذى سيجلب المحتوى من جدول الـ users وسنستخدم أمر الـ SELECT

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

اما الان سننشىء المتغير getuserssql  ويحتوى على الامر كالتالى :

$getuserssql="SELECT * FROM users";

وسنقوم بتنفيذه كالسابق عن طريق استدعاء الميثود query من الكائن $dbconnect لكن بما أننا نريد العودة بالناتج وليس تنفيذ الامر فقط بل نريد الـ users التى تم تحديدها لذلك سنستقبل الناتج فى متغير اخر سنسميه users$ مثلا  كالاتى :

getalluser

اذا الان نتيجة الاتصال سيمسكها المتغير $users

الان نريد التأكد ان المتغير $users قد حصل على النتائج فعلا او ان هناك نتائج عن الـ query لذلك سنستحدم  ميثود اسمها num_rows وهى عباره عن عدد الصفوف  الناتجة عن الـ query كالتالى

php num row android web services

 

كما ترى اننا هنا قمنا بعمل حالة شرطية اذا كان ناتج الـ query والذى يمسكه الـ users أكبر من 0 فان هذا يعنى ان هناك نتائج اما اذا كان صفر فيعنى ان هناك خطأ ما قد يكون الـ query غير صحيح أو لا يوجد users فى جدول الـ users مثلا وقم بطباعة Errror in Query

 

اذا كان هناك نتائج وتحققت حالة if اذا هناك عدد من الصفوف فى $users لذلك سنقوم بعمل loop للمرور على كل صف وطباعته كالتالى :

سنقوم باستخدام while وعمل حالة شرطية للـ loop بينما المتغير $row وهو متغير جديد يحتوى على ناتج $users->fetch_assoc وهو عباره عن صف ناتج من $users  حيث ان  الميثود fetch_assoc تقوم بجلب صف

row

بداخل كل while loop يكون لدينا المتغير $row به بيانات الصف يمكننا عمل echo وطباعتها

كالتالى

while loop echo php

 

لاحظ أن النقطة فى الكود السابق تشبه عندنا الـ + فى جافا والـ <br> هو وسم html الغرض منه البدء فى سطر جديد

والـ $row[‘xxxx’] الـ xxxxx عبارة عن اسم العمود

الان قم بحفظ الملف ورفعه واستدعاء الرابط فى المتصفح

وستجد النتائج تمت عرضها كل نتيجة فى سطر مع مسافة واحدة بين كل عمود وهذا هو سر الـ ” ” كثيرا فى الـ echo

result

الى هنا تنتهى التدوينة .

 

الواجب :

قم بعمل تطبيق أندرويد يحتوى على زر اسمه View Users واجعله يتصل بملف php getusers وطباعة الناتج فى TextView داخل الأندرويد .

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

 

ملحوظة : لم يتم التعمق فى شرح phpMyAdmin أو MySQL حيث نركز هنا فقط على الاساسيات لتستيطع اجراء اتصال واستقبال البيانات واساسيات اجراء العمليات المختلفة من ادخال وحذف وتحديد وتعديل والاتصال بالاندرويد اذا ارادت التعمق فى موضوع قواعد بيانات ماى سيكوال MySQL ننصحك بهذا الكورس MySQL Essential Training – Arabic

 

السابق
سلسلة Android Sensors بالعربية الدرس الأول
التالي
Android Webservices بالعربية – الدرس الخامس

19 تعليق

أضف تعليقا

  1. علي زهير قال:

    جزاك الله الف خير
    شرح وافي و مفصل و بطريقة جميلة و بسيطة
    في انتظار طريقة الوصول لقاعدة البيانات التي في السيرفر على الاندرويد
    و ايضا الوصول للصور الموجودة على السيرفر و تخزينها و عرضها على الاندرويد

  2. Ahmed Ali قال:

    مشكور علي الشرح الجميل دا ومنتظرين جديدكم

  3. Zualfekar قال:

    أكثر من ممتاز.. ربي يوفقك يا معلم انت..
    اذا سمحت لي سؤال… اذا كنت عامل صف واحد .. يأخذ id=1.. تمام.. طيب لنفترض قمت بحذف هذا الصف.. بالتالي ما عندي بيانات..
    طيب وبعدها قمت بإضافة صف جديد من البيانات.. هنا يظهر الid=2.. مع انو الصف الأول السابق محذوف..
    كيف ممكن أتخلص من هذه المشكلة بإعادة الترقيم من البداية؟؟
    أرجو تكون وصلت الفكرة.. وشكرا كتير 🙂 🙂 جزاكم كل خير إلهي

    1. Ahmed gamal قال:

      سؤال رفيع جدااا .. لما بعمل حذف لسجل يحتوي ع قيمه ل (id (autoincrement و لتكن مثلا 3 , و اجي اسجل بعدها بتكون قيمه ال id ده 4 مش 3 , ايه السبب ؟

      1. Hendiware قال:

        لاننا عملنا Auto Increment من خصائص الـ ID وبيكون فريد كل رقم مختلف لذلك كل اضافة تكون برقم اضافى لا يهم اذا حذفنا ام لا .

        1. Ahmed gamal قال:

          بس هوه المفروض اتحذف يعني مالوش وجود و لو سجلت تاني فاعتقد انه مافيش مشكله لو جه ID بنفس الرقم اللي اتمسح …؟

  4. AHmed قال:

    هل هذا الكود فيه خطأ هكذا

    include (‘test_con.php’);

    $getuserssql = “SELECT * FROM users”;

    $users = $dbconnect-> query($getuserssql)
    if ($users-> num_rows > 0){
    while ($row = $users->fetch_assoc()){
    echo “”.$row[‘id’].” “.$row[‘username’].” “.$row[‘password’].
    ” “.$row[‘mobile’] ;
    }
    }else {
    echo “Error”;
    }

    1. timelancer قال:

      السلام عليكم أخي الكود صحيح لكن هناك خطأ غير مقصود أزل فقط سباي بين query و $dbconnect-> و أضف الفاصلة المنقوطة فأخر ÷ذا السطر ليكون هكذا

      $users = $dbconnect->query($getuserssql);

  5. محمد عبدالواحد قال:

    السلام عليكم و رحمة الله
    جزاكم الله كل الخير على ما قدمته
    حاولت عمل البرنامج و لكن لم يظهر غير رسالة ال Connection Success !
    فقط و لم يظهر اي شيء من الجدول مع العلم انه يظهر علي المتصفح
    أرجو الرد و المساعده للفهم
    شكرا جزيلاً

  6. Mohammed Halim قال:

    ارجوا المساعده
    ظهرت الرساله Connection success و لكن يظهر ما بالجدول
    ارجوا المساعده في الكود الخاص بالتطبيق
    جزاكم الله خيرا

  7. Ali قال:

    شرح رائع شكرا لكم ، ولكن عندي استفسار : انا درست php من قبل ولكن هنا وجدت أشياء مختلفة مثلا : هنا جملة
    users -> fetch_assoc$
    rows -> num_rows$
    وغيرها مع اننا كنا نكتبها
    row = mysql_fetch_Array($result)$
    msql_num_rows()
    وغيرها
    وايضا في مثال الاتصال في الدرس الثاني ، الذي اعرف انها تكتب كذا
    $db = mysql_connect($dbHost , $dbUsername , $dbPassword) or die(mysql_error());
    @mysql_select_db($dbName)or die(mysql_error());
    وهنا وجدتها تكتب بطريقة اخرى
    ما هو السبب
    هل هذه اوامر جديدة في ال بي اتش بي
    ام هناك سبب آخر

  8. احمد السعدني قال:

    Connection Success !OOops some thing is wrong :(; ايه السبب ؟

    الكود
    query($insertusersql) === TRUE ){
    echo ” User Add Successfuly :); ” ;
    }else{
    echo “OOops some thing is wrong :(; ” ;
    }
    ياريت رد مش عارف اكمل الدرس لاخره

    1. احمد السعدني قال:

      $insertusersql=”INSERT INTO users (name,password,email,adress) VALUES (‘Saadany’,’1234′,’saadany@gmail.com’, ‘Egypt’);”;

  9. bashar قال:

    هل سنتخدم التعليمات نفسها للاتصال بملف الgetusers التي استخدمناها في الدرس السابق ؟؟استخدمتها نفسا لم تظهر البيانات في textView

اترك تعليقاً

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