منتدى استراحات زايد

منتدى استراحات زايد (http://vb.ma7room.com/index.php)
-   منتدى أخبار المواقع والمنتديات العربية والأجنبية (http://vb.ma7room.com/forumdisplay.php?f=183)
-   -   [ دورة ] فهم البرمجة بالكلاسات الدرس الثاني ( الادخال لقاعدة البيانات ) (http://vb.ma7room.com/showthread.php?t=1414741)

محروم.كوم 03-14-2014 07:12 AM

[ دورة ] فهم البرمجة بالكلاسات الدرس الثاني ( الادخال لقاعدة البيانات )
 
بسم الله الرحمن الرحيم


الحمد لله والصلاة والسلام على سيدنا محمد علية افضل الصلاة واتم التسليم
اللهم ليسى لنا علم إلا بما علمتنا وسع علمك كل شيء سبحانك ياذا الجلال والاكرام
اللهم علمنا ماينفعنا انك قادر على كل شيء


اما بعد

السلام عليكم ورحمة الله وبركاتة
يمكنكم متابعة الدرس الاول من الرابط التالي قبل البدء بمتابعة هذا الشرح يفضل الرجوع للدرس الاول لفهم المبادئ
http://www.traidnt.net/vb/traidnt2403299/


اليوم ان شاء الله ببدأ معاكم درس 2 وهو برمجة كلاس لادخال البيانات للقاعدة. وسيتم برمجة الكلاس بحيث يكون منفصل عن ملف ادخال البيانات + سيتم استخدام كلاس mysqli وسنستخدم في الادخال
prepare
bind_param
execute

قبل البدأ وجب ان انوه ان هذا الدرس لمساعدة المبتدئين في البرمجة للتفكر اكثر في الكلاسات وطريقة عملها
فلا يخطر ببالك حاليا اني اقوم ببرمجة كلاس ادخال متعدد او التخاطب مع الكلاس للأدخال لاكثر من جدول
فهذا الشرح فقط للرقي بالمبتدئين من الاكواد الاعتيادية إلى بنية الكلاسات + التخلص من mysql

وتعويضها بداول
mysqli .



في هذه الدرس سوف نتخلص بأذن الله من الكود التالي
رمز PHP:
$add = mysql_query("insert into table() values()");


وتعويضه بـ كلاس mysqli + استخدام prepare و bind_param و execute

نتوكل على الله

اولا نقوم بإنشاء قاعدة بيانات

http://www.traidnt.net/vb/attachment...94764304-1.jpg

تابع

http://www.traidnt.net/vb/attachment...94764304-2.jpg

الخطوة 3

http://www.traidnt.net/vb/attachment...94764304-3.jpg

لا تنسى وضع id تلقائي PRIMARY KEY + AUTO_INCREMENT

او قم بزرع الكود التالي بعد انشاء القاعدة ليتم اضافة الجدول


رمز PHP:
CREATE TABLE IF NOT EXISTS `news` (
`
id` int(11) NOT NULL auto_increment,
`
title` varchar(50) NOT NULL,
`
content` text NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE=MyISAM DEFAULT CHARSET=ucs2 AUTO_INCREMENT=1 ;


----------------------------------------------

بعد انشاء قاعدة البيانات نقوم بانشاء مجلد وليكن اسمة class
داخلة نقوم بإنشاء مجلدين


http://www.traidnt.net/vb/attachment...94764304-4.jpg

نقوم بإنشاء ملف داخل مجلد cofing وليكن اسمة cofing.php

نكتب داخلة كود ملف الاتصال التالي مع تغير مايلزم
رمز PHP:
$host = "localhost"; // اسم الخادم
$dbuser = "root"; // اسم المستخدم
$dbpass = "123"; // الرقم السري للمستخدم
$dbname = "dbnews"; // اسم قاعدة البيانات


$db = new MySQLi($host,$dbuser,$dbpass,$dbname);
$db->query("SET NAMES 'utf8'");


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

رمز PHP:
$db


الذي قمنا به بتشغيل الكأئن

الان قبل برمجة الكلاس راح نكتب كود الفورم اولا نفتح ملف وليكن اسمة insert.php
ونحفظة في مجلد class
http://www.traidnt.net/vb/attachment...94764329-5.jpg

اولا نقوم بكتابة كود الفورم داخل الملف

رمز PHP:






نضيف input من نوع text واسمة c_title لنكتب فية عنوان الخبر


رمز PHP:

title :




ثم نقوم بإضافة كود من نوع textarea وباسم cont

رمز PHP:

title :
content :




وأخيرا نقوم بإضافة كود input من نوع submit وباسم add لارسال البيانات

رمز PHP:

title :
content :




ليصبح عندنا هذا الفورم

http://www.traidnt.net/vb/attachment...94764329-6.jpg

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


اوك نكمل بعد ماقمنا بعمل ملف insert.php

ننشئ ملف جديد وليكن اسمة class_insert.php

نحفظة داخل مجلد s_class
http://www.traidnt.net/vb/attachment...94764329-7.jpg

الان نقوم ببرمجة الكلاس


داخل الملف نقوم بانشاء الكود التالي لفتح بنية الكلاس

+ اسم insers للكلاس


رمز PHP:
class insers{


}


الان نقوم بتعريف المتغيرات

رمز PHP:
class insers{

// متغيرات البست
private $subm; // اسم انبت زر الارسال
private $ti; // = اسم انبت عنوان الخبر
private $co; // = اسم التكست اريا

}


نقوم بتعريف المتغيرات داخل فانكشن
الان ننشئ function داخل الكلاس وليكن اسمها insert_data

ليصبح الكود
رمز PHP:
class insers{

// متغيرات البست
private $subm; // اسم انبت زر الارسال
private $ti; // = اسم انبت عنوان الخبر
private $co; // = اسم التكست اريا
#=================


public function insert_data(){

}
// close function

}// close class


داخل الفانكشن اولا نقوم بجلب متغير الاتصال بالقاعدة اللي قلت علية انه هو المهم
بدالة global

رمز PHP:
global $db;


ثم نقوم بتعريف المتغيرات إللي كتبناها اعلى بالكلاس
اول كود وهو كود زر الارسال


رمز PHP:
$this->subm = $_POST['add']; // اسم انبت زر الارسال


اكيد عرفتو وش معنا $this في الدرس الاول إللي اعتمدنا علية من اخوي سعودي اوكي

نكمل بعدين قمنا بكتابة كود البست إللي كنت تكتبه بالبرمجة العادية وداخلة اسم input حفظ الخبر ( وبالتحديد زر الارسال )

باقي لدينا input عنوان الخبر + textarea

كود تعريف عنوان الخبر

رمز PHP:
$this->ti = $_POST['c_title']; // = اسم انبت عنوان الخبر


كود تعريف التكست اريا محتوى الخبر
رمز PHP:
$this->co = $_POST['cont']; // = اسم التكست اريا


ليصبح الكود

رمز PHP:
class insers{

// متغيرات البست
private $subm; // اسم انبت زر الارسال
private $ti; // = اسم انبت عنوان الخبر
private $co; // = اسم التكست اريا
#=================


public function insert_data(){
global
$db;
#==========================
$this->subm = $_POST['add']; // اسم انبت زر الارسال
$this->ti = $_POST['c_title']; // = اسم انبت عنوان الخبر
$this->co = $_POST['cont']; // = اسم التكست اريا
#==========================
}// close function


}// lose class


الان نكمل داخل الفانكشن نقوم بالتحقق اذا تم الضغط على زر ارسال

رمز PHP:
if(isset($this->subm)){

}


ثم نفتح if اخر داخل if الرئيسي لنتحقق من ان عنوان الخبر ليسى فارغ

رمز PHP:
if(isset($this->subm)){
if(empty(
$this->ti)){

}
}


طيب مارآيكم نقوم بإنشاء متغير جديد لرسائل الخطأ اوك ننشئ لان سوف نحتاجة بعدين لظهار الاخطأ في اي مكان نريد داخل ملف insert اللي موجود فية فورم الاضافة

اوك نقوم بإضافته اعلى مع المتغيرات وليكن اسمة return

رمز PHP:
private $return; // متغير اظهار رسائل الخطأ


لتكن لدينا هذه المتغيرات داخل بنية الكلاس

رمز PHP:
#=================
// متغيرات البست
private $subm;
private
$ti;
private
$co;
#=================
private $return; // متغير اظهار رسائل الخطأ


تنبية المتغيرات تعريفها داخل بنيت الكلاس لا احد يضع التعريف داخل الفانكشن

نكمل نضع متغير الخطا مع كتابة رسالة الخطأ
ليصبح الكود بالشكل التالي
رمز PHP:
if(isset($this->subm)){
if(empty(
$this->ti)){
$this->return = "العنوان فارغ";
}
}


نكمل نتحقق من محتوى الخبر

رمز PHP:
if(isset($this->subm)){
if(empty(
$this->ti)){
$this->return = "العنوان فارغ";
}elseif(empty(
$this->co)){
$this->return = "محتوى الخبر فارغ";
}
}


ليصبح الكود

رمز PHP:
class insers{

// متغيرات البست
private $subm; // اسم انبت زر الارسال
private $ti; // = اسم انبت عنوان الخبر
private $co; // = اسم التكست اريا
#=================
private $return; // متغير اظهار رسائل الخطأ

public function insert_data(){
global
$db;
#==========================
$this->subm = $_POST['add']; // اسم انبت زر الارسال
$this->ti = $_POST['c_title']; // = اسم انبت عنوان الخبر
$this->co = $_POST['cont']; // = اسم التكست اريا
#==========================
if(isset($this->subm)){
if(empty(
$this->ti)){
$this->return = "العنوان فارغ";
}elseif(empty(
$this->co)){
$this->return = "محتوى الخبر فارغ";
}
}



}
// close function


}// lose class


الان نقوم بوضع else

ليصبح الكود الكامل بهذا الشكل
رمز PHP:
class insers{

// متغيرات البست
private $subm; // اسم انبت زر الارسال
private $ti; // = اسم انبت عنوان الخبر
private $co; // = اسم التكست اريا
#=================
private $return; // متغير اظهار رسائل الخطأ

public function insert_data(){
global
$db;
#==========================
$this->subm = $_POST['add']; // اسم انبت زر الارسال
$this->ti = $_POST['c_title']; // = اسم انبت عنوان الخبر
$this->co = $_POST['cont']; // = اسم التكست اريا
#==========================
if(isset($this->subm)){
if(empty(
$this->ti)){
$this->return = "العنوان فارغ";
}elseif(empty(
$this->co)){
$this->return = "محتوى الخبر فارغ";
} else{
/// هنا سيتم اضافة كود الادخال لقاعدة البيانات

}// close else





}// close if post submit

}// close function
}// lose class


الان نقوم باضافة كود الادخال لقاعدة البيانات طبعا سيتم ادخال البيانات عن طريق استخدام كلاس mysqli وسنستخدم في الادخال
prepare
bind_param
execute

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

رمز PHP:
$db->query("INSERT INTO news(title,content) values('".$this->ti."','".$this->co."')");


لكن انا حبيت افيدكم بالطرق الاخرى للادخال + الحماية والحديثة

لذلك تابعوني سنقوم بأستخدام الطرق المتطورة prepare

قبل مانكتب الكود خلونا نعرف متغير لكي يفيدا في رسائل الاخطأ الاستعلام وليكن اسمة quer او اي اسم يريحك
لتكون عندنا 5 متغيرات للان وإللي هي

رمز PHP:
// متغيرات البست
private $subm;
private
$ti;
private
$co;
#=================
private $return; // متغير اظهار رسائل الخط
private $quer; // متغير لتنفيذ الاستعلا


اوك بعد مااضفنا متغير خلونا نروح داخل else ونقوم بكتابة كود الادخال

رمز PHP:
$this->quer = $db->prepare("INSERT INTO news(title,content) values(?,?)");


شرح بسيط

رمز PHP:
$this->quer


المتغير إللي عرفناه

رمز PHP:
$db


هو متغير الاتصال اللي كتبناه في ملف cofing

نكمل دالة prepare المسؤلة عن تعريف جداول قاعدة البيانات ليتم الادخال إليها
طيب لو جاء شخص وقال انا لدي اكثر من جدولين لدي 4 او 5 او 10 كيف الاستخدام يكون بهذا الشكل

رمز PHP:
$this->quer = $db->prepare("INSERT INTO news(title,content,userid,username) values(?,?,?,?)");


اضف اسم الحقل ثم اضغ علامة ؟ له يعني لو لدي 6 حقول اذا يجب ان يكون لدي 6 علامات من ؟
الاستفهام هنا تعني المدخل ولكن قبل الادخال يجب تنقيحة وتعريفة بدالة bind_param
يعني اذا لدي حقل انتجر او استرنق سوف نعرفة في الدالة
الان نضيف دالة bind_param اسفل الكود السابق

رمز PHP:
$this->quer->bind_param('ss',$this->ti,$this->co);


الشرح

رمز PHP:
$this->quer


هو المتغير اللي قمنا باضافتة وقمنا به بتشغيل دالة prepare
ثم وضعنا
رمز PHP:
->bind_param


لتشغيل الدالة

نكمل داخل الدالة وضعنا اول بارمتر يساوي ss ماهذا هذا يالغالي اختصار لنوع الحقل نوعة استرنق اي نصي طيب لو غيرة s إلى i معناة اي شيء سيضاف داخل الانبت من نوع نص الدالة ماراح تقبلة وبتحولة لرقم 0 لان i هو اختصار
لنوع انتجر ولن يحفظ إلى رقم فقط

طيب لو لدي 4 حقول اريد اضافتها 2 حقول نصية و 2 حقول انتجر رقمي

الطريقة تكون
رمز PHP:
$this->quer->bind_param('ssii',$this->ti,$this->co,$this->u,$this->uid);


اتمنا اتضحت الفكرة تنبية يجب الانتباه إلى الترتيب اذا كان الحقل الاول هو انتجر تضع i والثاني كذالك لو نصي تضع s

إلى الخ..
طبعا الترتيب تاخذه من الدالة السابقة

مثال
رمز PHP:
$this->quer = $db->prepare("INSERT INTO news(title,content,userid,username) values(?,?)");
$this->quer->bind_param('ssis',$this->ti,$this->co,$this->u,$this->uid);


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

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

رمز PHP:
class insers{

// متغيرات البست
private $subm; // اسم انبت زر الارسال
private $ti; // = اسم انبت عنوان الخبر
private $co; // = اسم التكست اريا
#=================
private $return; // متغير اظهار رسائل الخطأ

public function insert_data(){
global
$db;
#==========================
$this->subm = $_POST['add']; // اسم انبت زر الارسال
$this->ti = $_POST['c_title']; // = اسم انبت عنوان الخبر
$this->co = $_POST['cont']; // = اسم التكست اريا
#==========================
if(isset($this->subm)){
if(empty(
$this->ti)){
$this->return = "العنوان فارغ";
}elseif(empty(
$this->co)){
$this->return = "محتوى الخبر فارغ";
}
else{

$this->quer = $db->prepare("INSERT INTO news(title,content) values(?,?)");
$this->quer->bind_param('ss',$this->ti,$this->co);



}
// close else
}// close if post submit


}// close function
}// lose class



هل حتى الان ماشين تمام اتمنا شرح الداول السابقة ماشتت انتباهكم

طيب نكمل باقي لدينا دالة execute
قبل نطبق الدالة مارئيكم باضافة متغير ؟؟ ادري كثرة من المتغيرات ويمكن الاستغنا عن هذا المتغير لكن انا تعمدة اضافة المتغيرات لتفهم اكثر كيف التعامل معاها.

اجل نقوم باضافة متغير داخل الكلاس وليكن اسمة done الان لدينا 6 متغيرات
رمز PHP:
// متغيرات البست
private $subm; // اسم انبت زر الارسال
private $ti; // = اسم انبت عنوان الخبر
private $co; // = اسم التكست اريا
#=================
private $quer; // متغير لتنفيذ الاستعلام
private $return; // متغير اظهار رسائل الخطأ
private $done; // تاكيد عملية الادخال


الان نرجع لكودنا السابق ونضيف اسفلة الكود التالي

رمز PHP:
$this->done = $this->quer->execute();


وهو للتنفيذ بكذا خلصنا من كود الاضافة
طيب الان بنقوم بالتحقق هل تم اضافة البيانات


رمز PHP:
if($this->done){
$this->return ="تمت اضافة الخبر بنجاح";
}
// close if done


باقي لدينا ارجاع قيمة الدالة function بالكود التالي
رمز PHP:
return $this->return;


لماذا ارجعت قيمة
رمز PHP:
$this->return


هذا هو إللي عرفنا فية الاخطأ + هو إللي سيظهر رسالة تاكيد الاضافة

طيب اخيرا باقي لدينا اخر كود وهو كود تشغيل الكلاس
رمز PHP:
$start = new insers;


بكذا يكون كود الكلاس كامل هو

رمز PHP:
class insers{

// متغيرات البست
private $subm; // اسم انبت زر الارسال
private $ti; // = اسم انبت عنوان الخبر
private $co; // = اسم التكست اريا
#=================
private $quer; // متغير لتنفيذ الاستعلام
private $return; // متغير اظهار رسائل الخطأ
private $done; // تاكيد عملية الادخال

public function insert_data(){
global
$db;
#==========================
$this->subm = $_POST['add']; // اسم انبت زر الارسال
$this->ti = $_POST['c_title']; // = اسم انبت عنوان الخبر
$this->co = $_POST['cont']; // = اسم التكست اريا
#==========================
if(isset($this->subm)){
if(empty(
$this->ti)){
$this->return = "العنوان فارغ";
}elseif(empty(
$this->co)){
$this->return = "محتوى الخبر فارغ";
}
else{

$this->quer = $db->prepare("INSERT INTO news(title,content) values(?,?)");
$this->quer->bind_param('ss',$this->ti,$this->co);
$this->done = $this->quer->execute();

if(
$this->done){
$this->return ='';
}
// close if done

}// close else
}// close if post submit
return $this->return;
}
// close function
}// lose class
$start = new insers;


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

بنسوي انكلود للكلاس + انكلود للكوفنق وتشغيل فانكشن الموجودة بالكلاس ؟؟ وين بتقول

اكيد داخل ملف insert لسى تفتكرة الملف إللي وضعنا فية كود الفورم

نفتح ملف insert.php
http://www.traidnt.net/vb/attachment...94764329-5.jpg


ونضع داخلة كود الاستدعاء + كود تشغيل الفنكشن

رمز PHP:
include("cofing/cofing.php"); // جلب ملف الاتصال بالقاعدة
include("s_class/class_insert.php"); // جلب ملف الكلاس
echo $start->insert_data();


ليصبح الكود الكامل لملف insert هو

رمز PHP:
include("cofing/cofing.php"); // جلب ملف الاتصال بالقاعدة
include("s_class/class_insert.php"); // جلب ملف الكلاس
echo $start->insert_data();
?>


title :
content :








الان اتجة إلى ملف insert.php وقم باضافة اخبار وشف النتيجة

اخيرا وش رايكم نضيف ميتا ريفرش

رمز PHP:
$this->return .='';


عشان نتجنب الادخال المتكرر ليصبح كود الكلاس كامل

رمز PHP:
class insers{

// متغيرات البست
private $subm; // اسم انبت زر الارسال
private $ti; // = اسم انبت عنوان الخبر
private $co; // = اسم التكست اريا
#=================
private $quer; // متغير لتنفيذ الاستعلام
private $return; // متغير اظهار رسائل الخطأ
private $done; // تاكيد عملية الادخال

public function insert_data(){
global
$db;
#==========================
$this->subm = $_POST['add']; // اسم انبت زر الارسال
$this->ti = $_POST['c_title']; // = اسم انبت عنوان الخبر
$this->co = $_POST['cont']; // = اسم التكست اريا
#==========================
if(isset($this->subm)){
if(empty(
$this->ti)){
$this->return = "العنوان فارغ";
}elseif(empty(
$this->co)){
$this->return = "محتوى الخبر فارغ";
}
else{

$this->quer = $db->prepare("INSERT INTO news(title,content) values(?,?)");
$this->quer->bind_param('ss',$this->ti,$this->co);
$this->done = $this->quer->execute();

if(
$this->done){
$this->return ='تمت الاضافة بنجاح';
$this->return .='';
}
// close if done

}// close else
}// close if post submit
return $this->return;
}
// close function
}// lose class
$start = new insers;


الدرس التالي ان شاء الله الاستعلام عن البيانات
جاري اعداد الدرس
واخيرا ان اصبت من الله وحدة وان اخطأت فمن نفسي والشيطان
تمنياتي للجميع بالتوفيق ولا تنسوني من صالح دعواتكم اخوكم عبدالله


الصور المصغرة المرفقة http://www.traidnt.net/vb/attachment...4764304t-1.jpg http://www.traidnt.net/vb/attachment...4764304t-2.jpg http://www.traidnt.net/vb/attachment...4764304t-3.jpg http://www.traidnt.net/vb/attachment...4764304t-4.jpg http://www.traidnt.net/vb/attachment...4764329t-5.jpg http://www.traidnt.net/vb/attachment...4764329t-6.jpg http://www.traidnt.net/vb/attachment...4764329t-7.jpg


الساعة الآن 07:25 PM

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.5.2 TranZ By Almuhajir


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227