يوم سوالف، في 7 أغسطس القادم

 

العودة   سوالف سوفت > قسم تطوير وبرمجة المواقع للمتقدمين > PHP
المدوّنات البحث مشاركات اليوم اجعل كافة المشاركات مقروءة

رد
 
LinkBack أدوات الموضوع
عضو فعال
تاريخ التسجيل: Aug 2005-
#1 (permalink)  
دالة extract لتعريف حقول قاعدة البيانات كمتغيرات


السلام عليكم شباب

كيف الحال؟؟

آسف عالإنقطاع عن دروس البي إتش بي

هالكم يوم إن شاء الله رح أنزل عدد جيد من الدروس

اليوم جايب لكم شرح عن دالة مفيدة في ظهرت منذ إصدارة PHP 3.0.7 وحتى الآن ..

هذي الدالة هي دالة extract وهي مفيدة بعد استخراج النتائج من قاعدة البيانات عن طريق دالة mysql_fetch_array

يعني هذي الدالة تخلي الحقول الموجودة في قاعدة البيانات على شكل متغيرات،، وكل متغير يكون باسم الحقل

يعني ناخذ مثال:

- لنفترض أن لدينا قاعدة بيانات باسم students وفيها جدول باسم students ونريد استخراج جميع المعلومات الموجودة فيها،، لنفترض أن هذه المعلومات هي username وpassword وmarks وschool وclass

سنحتاج للكود التالي لاستخراج النتائج ووضعها في متغيرات ،، لاحظوا :: متغيرات (ليست مصفوفات)..

كود PHP:
// الاتصال بقاعدة البيانات
$connect mysql_connect("localhost","root","");
$select mysql_select_db("students",$connect);

// استعلام إس كيو إل من قاعدة البيانات
$sql "SELECT * FROM students";

// تنفيذ الاستعلام في قاعدة البيانات
$result mysql_query($sql);

// استخراج النتائج في مصفوفة هي row
while ($row mysql_fetch_array($result)) {
    
$username=$row[username];
    
$password=$row[password];
    
$marks=$row[marks];
    
$school=$row[school];
    
$class=$row[class];

وبذلك أصبح لدينا 5 متغيرات تحوي محتويات حقول الجدول students ..

الآن، ما رأيكم لو اختصرنا الخمسة أسطر الخاصة بتعريف المتغيرات بسطر واحد فقط ..

إذاً فلتتعرفوا إلى الدالة التالية وهي extract ..: ::

[php]
// الاتصال بقاعدة البيانات
$connect = mysql_connect("localhost","root","");
$select = mysql_select_db("students",$connect);

// استعلام إس كيو إل من قاعدة البيانات
$sql = "SELECT * FROM students";

// تنفيذ الاستعلام في قاعدة البيانات
$result = mysql_query($sql);

// استخراج النتائج في مصفوفة هي row
while ($row = mysql_fetch_array($result)) {
extract($row);
}
[/php

فلنجرب الكود التالي الآن والخاص بطباعة محتويات المتغيرات الخمسة مرتبين تحت بعض :

كود PHP:
Echo $username "<BR>" $password "<BR>" $marks "<BR>" $school "<BR>" $class
إذا جربنا الكود السابق بعد كتابة الكود الأول ثم بعد كتابة الكود الثاني نلاحظ أن الناتج واحد ..

وأن الدالة extract وفرت علينا 5 أسطر في سطر واحد ..

ماذا لو كان الجدول يحتوي على 10 حقول أو أكثر ؟؟!!

عندها ستلاحظ أهمية هذه الدالة في استخراج البيانات من قاعدة البيانات ..

فائدة أخرى لهذه الدالة في نفس المهمة ..

وهي عند استخراج البيانات من قاعدة البيانات ، فإنك ستحتاج إلى تعريف كل حقل جديد في قاعدة البيانات كلما احتجت إليه .. يعني إذا كان لديك حقلين في قاعدة البيانات وكتبت المثال الأول فإنه سوف يعرف الحقلين فقط ، وإذا قمت بعد ذلك بإنشاء حقل آخر في نفس الجدول فإن البرنامج لن يقوم بتعريف متغير خاص بالحقل الجديد .. أما باستعمال دالة extract فإن البرنامج سيقوم بشكل تلقائي بتعريف جميع حقول الجدول سواء كنت تحتاجها أم لا ، وسواء كانت قديمة أم جديدة ..!!

أرجو أن أكون قد أفدتكم في شرح هذه الدالة ..

واعذروني على التقصير ..

والسلام عليكم ورحمة الله وبركاته






__________________
أحمد أبو النصر
Junior php Developer
+20166196074
أحمد أبو النصر غير متواجد حالياً   قديم 29-12-2005, 10:41 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Nov 2005-
#2 (permalink)  

شكرا لك اخي الكريم
قمت الان بتجريبها فإستخرجت اخر صف فقط من الجدول لو مثلا اريد الصف الثالث لو فرضنا كيف منسوي






__________________
لا إله إلا الله محمد رسول الله
سورية غير متواجد حالياً   قديم 31-12-2005, 04:17 PM
رد مع اقتباس
عضو فعال جدا
تاريخ التسجيل: Jun 2003-
#3 (permalink)  

مشكور اخوي ودروس ليس في المفضلة فقط بل في الجهاز مباشرة حفظ .






__________________
إميل سعودي مجاني

htaccess بكل بساطة

الشفرة الموحدة "يونِكود"

(إن من مفاسد هذه الحضارة أنها تسمي الاحتيال ذكاءً، والانحلال حرية، و"الرذيلة فناً" والاستغلال معونة) - مصطفى السباعي
jadweb.com غير متواجد حالياً   قديم 31-12-2005, 05:05 PM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Aug 2005-
#4 (permalink)  

العفو إخواني وجزاك الله خيراً أخي jadweb.com

اخوي سورية
فعلاًُ هذا هو المقصد من هذه الدالة ......
لاستخراج كل الصفوف استخدم حلقة while
كود PHP:
while ($row mysql_fetch_array($result)) {
// commands

وشكراً لمرورك وارجو انك تستفيد






__________________
أحمد أبو النصر
Junior php Developer
+20166196074
أحمد أبو النصر غير متواجد حالياً   قديم 31-12-2005, 09:56 PM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Nov 2005-
#5 (permalink)  

جميله جدا
ياريت تستمر في دروسك






موقع روش غير متواجد حالياً   قديم 01-01-2006, 12:57 AM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Nov 2005-
#6 (permalink)  

شكرا لك على الرد وجاري التجريب ............






__________________
لا إله إلا الله محمد رسول الله
سورية غير متواجد حالياً   قديم 02-01-2006, 07:55 PM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Aug 2005-
#7 (permalink)  

العفو إخواني
وإن شاء الله يكون أعجبكم الدرس






__________________
أحمد أبو النصر
Junior php Developer
+20166196074
أحمد أبو النصر غير متواجد حالياً   قديم 03-01-2006, 01:47 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: Jun 2005-
#8 (permalink)  

رائع جداً اخي العزيز

درس ممتاز جداً بارك الله فيك

تحياتي لك






سيف جرافيكس غير متواجد حالياً   قديم 13-01-2006, 03:07 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: Sep 2003-
#9 (permalink)  

ما اقول الا جزاك الله الف خير ,,

صراحه مواضيعك والدوال ممتازه واغلبها محفوظه لدي على الجهاز ,, واصل بارك الله فيك ,,


وبالتوفيق ان شاء الله

وفي امان الله






__________________
سبحان الله وبحمده سبحان الله العظيم
الباهر غير متواجد حالياً   قديم 14-01-2006, 06:19 AM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Aug 2005-
#10 (permalink)  

اخوي سيف جرافيكس شكراً لمرورك وتعقيبك
اخوي الباهر شكراً لك أيضاً .. وجهودك في التخزين مشكورة






__________________
أحمد أبو النصر
Junior php Developer
+20166196074
أحمد أبو النصر غير متواجد حالياً   قديم 17-01-2006, 12:16 AM
رد مع اقتباس
مشرف قسم تبادل خبرات الاستضافة
تاريخ التسجيل: Jul 2001-
#11 (permalink)  

اخوي سؤال..

ليش مانستخدم $row[username] على طول بدون استخدام امر الاكستركت ؟

وشكرا






TrustWork غير متواجد حالياً   قديم 17-07-2006, 01:05 AM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Mar 2005-
#12 (permalink)  

شكرا لك اخوي sBForum

صراحه درس ممتاز بالتوفيق اخوي

تحياتي






qe9h غير متواجد حالياً   قديم 17-07-2006, 01:33 AM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Aug 2005-
#13 (permalink)  

أخ Sn3s : استخدام مصفوفة $row أو المصفوفة الأصلية التي تحتوي على النتائج من دالة mysql_fetch_array لن يعمل خارج جملة while أي بعد إغلاق القوس المتعرج } الخاص بجملة while ....

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

وشكراً لمرورك وتعقيبك يا فتى ......!

الاخ qe9h ، العفو وشكراً لمديحك .................

في النهاية .. لاحظوا تاريخ الموضوع .....! 29-12-2005 ...! اذا كان فيه فائدة فلا مانع في رفعه ، لكن اتمنى ان لا يكون ذلك يضايق الإدارة

تحياتي ،، sBForum






__________________
أحمد أبو النصر
Junior php Developer
+20166196074
أحمد أبو النصر غير متواجد حالياً   قديم 17-07-2006, 12:22 PM
رد مع اقتباس
Moderator
تاريخ التسجيل: Aug 2004-
#14 (permalink)  

sBForum رهيب

ملاحظه:
===========
شكلك تستعمل الخاصيه
error_reporting = E_ALL & ~E_NOTICE في الملف php.ini

حاول ان تبرمج والخاصيه في الوضعيه
error_reporting = E_ALL






__________________
هلابي افضل المواقع العربية تصميماً
انصح باستخدام ابونتو
hilaby غير متواجد حالياً   قديم 17-07-2006, 01:11 PM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Aug 2005-
#15 (permalink)  

أهلاً أستاذي hilaby ......

نعم في الحقيقة أستخدم E_ALL & ~E_NOTICE .. لأن السماح بأخطاء الملاحظات يتعبني مع بعض السكربتات والتجارب .... لكن سوف أقوم بالتجربة والرد إن شاء الله تعالى ..

تحياتي ، sBForum






__________________
أحمد أبو النصر
Junior php Developer
+20166196074
أحمد أبو النصر غير متواجد حالياً   قديم 17-07-2006, 06:45 PM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Aug 2005-
#16 (permalink)  

بصراحة بحثت كثيراً في كود extract لم أجد خطأ من نوع الملاحظات فيه Notice ..

عدت ونظرت إلى كود الاستخراج العادي :
كود PHP:
while ($row mysql_fetch_array($result)) { 
    
$username=$row[username]; 
    
$password=$row[password]; 
    
$marks=$row[marks]; 
    
$school=$row[school]; 
    
$class=$row[class]; 

وقد تفاجأت عندما شاهدته .. فقد شاهدت منظراً لم اعتدته سابقاً ، لكني وبعد أن اكتشفت هذا الخطأ منذ فترة أفلعت عن مثله .. لذلك أزعجني مظهره وناتجه .. هذه الأسماء ما بين القوسين .. مثل username وpassword تعتبر على أنها ثوابت .. ويتم البحث عن قيمة هذه الثوابت فلا يوجد لها قيمة ... لذلك يتولد خطأ ملاحظة Notice ... ولتفادي هذه المشكلة ، قم بوضع الأسماء داخل علامات تنصيص " و " مثل:
كود PHP:
while ($row mysql_fetch_array($result)) { 
    
$username=$row["username"];
    
$password=$row["password"];
    
$marks=$row["marks"];
    
$school=$row["school"];
    
$class=$row["class"];

أتمنى ان كان هناك أي خطأ آخر أن تقوم بتنبيهي عزيزي hilaby وبارك الله فيك ، دمت أستاذنا الكريم بخير ...

وشكراً لك ....

تحياتي ،، sBForum






__________________
أحمد أبو النصر
Junior php Developer
+20166196074
أحمد أبو النصر غير متواجد حالياً   قديم 17-07-2006, 07:04 PM
رد مع اقتباس
Moderator
تاريخ التسجيل: Aug 2004-
#17 (permalink)  

الان لا يوجد مشاكل ,, فقط توجد بعض الملاحظات في تنظيم الذاكره لانك الان تضع القيم الموجوده في المتغير row$ و نسخها الى عده متغيرات "اي يوجد نسختين من نفس القيم" ... حاول ان لا تفعل ذالك ... دائماً فكر في ان السكربت قد يستخدم في موقع عدد زواره بالملايين ... يعني حاول بقدر الامكان ان لا ترهق الذاكره العشوائيه RAM

وشكراً






__________________
هلابي افضل المواقع العربية تصميماً
انصح باستخدام ابونتو
hilaby غير متواجد حالياً   قديم 18-07-2006, 04:28 AM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Aug 2005-
#18 (permalink)  

ايوة وصلت الفكرة عزيزي hilaby ...

هل تقصد بذلك أنه يجب علينا حذف $row كاملة ؟؟ أم أن هناك طرق أكثر مناسبة ؟؟ ربما استخدام المصفوفة $row مباشرة دون التخزين في المتغيرات يكون حلاً لهذه المشكلة .... أنتظرك عزيزي ...

تحياتي، sBForum






__________________
أحمد أبو النصر
Junior php Developer
+20166196074
أحمد أبو النصر غير متواجد حالياً   قديم 18-07-2006, 03:45 PM
رد مع اقتباس
Moderator
تاريخ التسجيل: Aug 2004-
#19 (permalink)  

نعم .. فقط استخدم المصفوفه row$ مباشر دون تخزين الا اذا كانت لديك خوارزميه تجبرك ان لا فعل ذالك
و اصلا المصفوفه row$ سيحذف محتواها من ناتج الداله mysql_fetch_array عندما لا توجد اي سجل "record" جديد في الناتج و سيكون محتوى المصفوفه row$ هي NULL و لذالك يخرج من الداله while لان الدالة while تخرج من الloop عندما تكون الشرط 0 "صفر" او false او NULL

وشكراً






__________________
هلابي افضل المواقع العربية تصميماً
انصح باستخدام ابونتو
hilaby غير متواجد حالياً   قديم 19-07-2006, 04:18 AM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Aug 2005-
#20 (permalink)  

اقتباس:
المشاركة الأصلية كتبت بواسطة hilaby
نعم .. فقط استخدم المصفوفه row$ مباشر دون تخزين الا اذا كانت لديك خوارزميه تجبرك ان لا فعل ذالك
و اصلا المصفوفه row$ سيحذف محتواها من ناتج الداله mysql_fetch_array عندما لا توجد اي سجل "record" جديد في الناتج و سيكون محتوى المصفوفه row$ هي NULL و لذالك يخرج من الداله while لان الدالة while تخرج من الloop عندما تكون الشرط 0 "صفر" او false او NULL

وشكراً
غلبناك معنا أستاذ hilaby ......

بالنسبة لـ row هي نعم تحذف محتواها عند الخروج من حلقة while حيث أن هذه الحلقة يكون شرطها كما يلي:
كود PHP:
while ($row mysql_fetch_array($result)) {


لكن ما قصدته عبر هذا الدرس خلال دالة extract هو أنه بإمكانك استخدام نفس البيانات خارج حلقة while ....... مثلاً تريد الحصول على معلومات موقع مثل sitename وsiteurl ... هؤلاء ستحتاجهم خلال البرنامج في العادة ... هل يجب عليك كتابة برنامجك كله داخل while .... هذا هو الخطأ ... لذا يمكن بكل سهولة استخدام دالة extract أو تعريف متغيرات أخرى ثابتة وعادية لتصبح قابلة للاستخدام خارج حلقة while ... كما ذكرت في الدرس ... هذا مغزى الدرس كلياً ...

بالنسبة لمشاكل تنظيم الذاكرة أعتقد أنها لن تؤدي إلى أخذ حيز كبير من الذاكرة .. لكن سيتم التخلص فيما بعد من محتويات مصفوفة $row ......

صحيح، ليس من الجيد أن نقول مصفوفة row لأنه اسم متغير نحن نضعه ... لكن هذا هو الشـــــائع في ذكرها وفي التعامل مع دالة mysql_fetch_array .....

أشكرك بعمق أخي hilaby وأتمنى دائماً أن نناقش أمور البرمجة بنفس الطريقة لأننا افتقدنا روح النقاش في الآونة الأخيرة ....

تحياتي لك ولجميع هيئة أعضاء وإدارة سوالف سوفت، sBForum






__________________
أحمد أبو النصر
Junior php Developer
+20166196074
أحمد أبو النصر غير متواجد حالياً   قديم 19-07-2006, 01:47 PM
رد مع اقتباس
رد


أدوات الموضوع

تعليمات المشاركة
لا تستطيع كتابة مواضيع
لا تستطيع كتابة ردود
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

كود [IMG] متاحة
كود HTML معطلة
Trackbacks are متاحة
Pingbacks are متاحة
Refbacks are متاحة



الساعة الآن: 11:42 AM بتوقيت المملكة العربية السعودية