• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

DeaD SouL

الاعضاء المجتهدين
  • عدد المشاركات

    142
  • تاريخ الانضمام

  • تاريخ اخر زياره

السمعه بالموقع

0 عادي

عن DeaD SouL

  • الرتبة
    عضو مجتهد

طرق الإتصال

معلومات الملف الشخصي

  • الجنس ذكر
  • الدولة : /home/deadsoul
  1. عزيزي راجع التالي http://php.net/manual/en/function.simplexm...-attributes.php http://www.php.net/manual/en/domelement.getattribute.php بالتوفيق
  2. عزيزي العيافـي اتمنى التوضيح.. ماذا تقصد بالصعوبه..؟؟ شكرا لمرورك بالتوفيق
  3. نكمل اعزائي الشق الرابع وهو عمل احصائيات سريعه مازلنا في مثالنا السابق ونريد عمل احصائيات لـ مجموع الكتب المتاحه + عدد الاقسام + عدد المؤلفين + اخر كتاب تم اضافته مع بيان مؤلفه والقسم الذي ينتمي اليه الطريقة هي بالضبط مثل الاستعلام الذي سبق ان شرحته.. ولكن مع اضافه استعلامات بداخله واليكم الكود انسخ الكود$query = "SELECT DISTINCT cats.cat_name, bks.book_name, auth.author_name, (SELECT COUNT(*) FROM categories) AS total_categories, (SELECT COUNT(*) FROM books) AS total_books, (SELECT COUNT(*) FROM authors) AS total_authors FROM categories cats, books bks, authors auth WHERE cats.cat_id = bks.book_cat_id AND auth.author_id = bks.book_author_id ORDER BY bks.book_id DESCLIMIT 1" $sql = @mysql_query($query);$statics = @mysql_fetch_array($sql); echo "عدد الاقسام " . $statics['tot al_categories'] . "<br />";echo "عدد الكتب " . $statics['total_books'] . " <br />";echo "عدد المولفين " . $stati cs['total_authors'] . "<br />"; echo "اجدد كتاب تم إض 1575;فته هو " . $statics['book_name'] . "في ا 1604;قسم . $statics['cat_name'] . "&#1604;لمؤلف " . $statics['author_name'];   الجديد هنا هو (SELECT COUNT(*) FROM categories) AS total_categories, (SELECT COUNT(*) FROM books) AS total_books, (SELECT COUNT(*) FROM authors) AS total_authors وهو اننا قمنا بعمل استعلام داخل الاستعلام الرئيسي على شكل انه قيمه حيث قمنا بتسميته باسم اخترناه مثل ال total_categories و total_books و total_authors وهذا الاستعلام هو لحساب مجموع الصفوف ولكن لاحظ اني استخدمت COUNT(*) عوضا عن COUNT(col_name) والسبب ان ال COUNT(*) اسرع من الثانيه وذلك لأن الاولى وهي COUNT(*) تقوم بقراءة المعلومات التي سبق ووضعها خادم القاعده على الجدول مثل عدد الصفوف اما الثانيه.. فهي تقوم بعملية مسح على الجدول لحساب عدد الصفوف.. وبالمنطق فإن قراءة المعلومات ثم ارجاعها امر اسرع واخف ارهاقا وضغطا على خادم القاعده من عملية المسح وحساب عدد الصفوف صفا صفا.. اخيرا لاحظ SELECT DISTINCT قمت باخبار الخادم ان الاستعلام الذي اريده هو استعلام فريد.. اي ان لايقوم بتكرار البيانات المستعلم عنها.. وذلك لأني استخدمت الاستعلامات الفرعية التي سبق وشرحتها منذ لحظات انتهى.. اعتذر عن عدم شرحي للمرحلة الثانيه وهي database caching وذلك بسبب ضيق الوقت وبعض الانشغالات بالتوفيق للجميع
  4. عزيزي bastr3 اسعدني مرورك.. وشكرا على الدعوة الجميله كذلك اعتذر عن التأخير في الرد واتمنى ان تكون قرأته بتمعن :) بالتوفيق
  5. وجزاك الله كل خير شكرا لمرورك عزيزي واعتذر عن التأخير بالتوفيق
  6. السلام عليكم ورحمة الله وبركاته اعزائي ،،بالأمس رأيت موضوع كتبه ayoub henie يسأل فيه عن طريقة عمل الاقسام الفرعية ذات الدرجة الثانية.. وبسبب العطل الذي كان بالمنتدى لم استطع اضافة رد.. كما ان جميع المواضيع والردود وكل ما حصل في الامس قد تم مسحه.. وذلك نتيجة استرجاع اجدد نسخه احتياطيه (على ما اعتقد) المهم.. فقلت لنفسي بما انه لم يعد كتابة الموضوع.. فلماذا لا اطرحه كموضوع مستقل وذلك لتعم الفائده للاخوة المبتدئين بفرض انه لدينا شجرة الاقسام التالية ونريد حفظها بشكلها في القاعده الجدوع المشتركه الجدع مشترك علمي التربية الإسلاميه التربيه الاجتماعية الرياضيات الاعلاميات [*]الجدع مشترك أدبي [*]الجدع مشترك تقني [*]الاولى بكالوريا [*]الثانية بكالوريا الفكرة باختصار شديد هي ان تقوم باضافة جدول جديد في القاعده يحتوي على الاقل على 3 حقول وهم cat_child_id cat_parent_id cat_name يقصد بالحقل الاول: حقل الفرع.. اي القسم الجديد الذي تود اضافته ويقصد بالحقل الثاني: حقل الأصل.. اي القسم الذي يحتوي على اقسام فرعية بداخله واخيرا الحقل الاخير: يقصد به اسم هذا القسم اذا سيكون شكل الجدول هكذا CREATE TABLE IF NOT EXISTS `categories` ( `cat_child_id` int(11) NOT NULL auto_increment, `cat_parent_id` int(11) NOT NULL default '0', `cat_name` varchar(50) NOT NULL, PRIMARY KEY (`cat_child_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; ففي المثال السابق ستكون الاقسام الرئيسية التاليه الجدوع المشتركه ، الاولى بكالوريا ، الثانيه بكالوريا يحملون الـ cat_parent_id = 0 والسبب لأنهم هم الاصل اي الاقسام الرئيسية وكل قسم فرعي جديد تود اضافته تضع في حقل cat_parent_id الخاص به قيمة ال cat_child_id الخاص بالقسم الذي تود ان ينتمي إليه وبتطيق المثال السابق فسيكون كالتالي INSERT INTO `categories` (`cat_child_id`, `cat_parent_id`, `cat_name`) VALUES (1, 0, 'الجدوع المشتركه'), (2, 0, 'الأولى بكالوريا'), (3, 0, 'الثانية بكالوريا'), (4, 1, 'الجدع مشترك علمي'), (5, 1, 'الجدع مشترك أدبي'), (6, 1, 'الجدع مشترك تقني'), (7, 4, 'التربية الاسلاميه'), (8, 4, 'التربيه الاجتماعيه'), (9, 4, 'الرياضيات'), (10, 4, 'الاعلاميات'); وبـتتبع قيمة حقل ال cat_parent_id ستعلم القسم الذي ينتمي إليه الى أن تصل الى القسم الرئيسي فبهذه الطريقه تستطيع إضافه اقسام فرعية غير متناهية مهما نزلت ويبقى عليك كتابة مصدر الphp لكي تتمكن من الاستعلام عن الاقسام التي تود عرضها.. وهكذا بالتوفيق
  7. عزيزي انظر هنا http://www.arabteam2000-forum.com/index.php?showtopic=186415 ان شاء الله سيفيدك بالتوفيق
  8. السلام عليكم ورحمة الله وبركاته اخواني الاعزاء.. اعتذر عن الغيبه عن المنتدى.. هذا الموضوع دعوة لتبادل الخبرات قبل ان يكون درس.. وذلك لتعم الفائده على الجميع فياحبذا لو شاركنا الجميع بما يعلم اليوم لكم في جعبتي موضوع مهم يهم جميع المبرمجين.. :D كيف يمكننا ان نقلل من عدد الاستعلامات ؟ وكيف نستطيع تخفيف الضغط على القاعده ؟ فاذا ماعلمنا طريقة تقليل الاستعلامات سنخفف الضغط على القاعده بشكل كبير.. مع ذلك لن نكون قد حللنا المشكله جذريا.. ولكن نكون قد حسناها اذا فإن مشكلة الضغط القاعده ينصب بشكل جوهري ورئيسي على عدد الاستعلامات.. مقدمه: فمثلا: ان كتبنا صفحة معينة تعرض بيانات من القاعده.. ومجموع الاستعلامات كان تقريبا 15 استعلام فاذا زار هذه الصفحه 100 شخص في نفس اللحظة فإن مجموع الاستعلامات سيكون (15 استعلام * 100 زائر) والمجموع 1500 استعلام هل لك عزيزي القارئ ان تتخيل معنى 1500 استعلام؟ وما مدى الارهاق والضغط الذي تسببه الى القاعده.. لعرض نفس المحتوى لكل زائر؟ فهي ليست بالهينة بتاتا.. لذلك حسب وجه نظري المتواضعه.. أرى ان الحل يكمن في طريقتين.. لاغنى لأحدهما عن الأخرى المرحلة الأولى: هي معرفة وتطبيق الطريقة المثلى لعمل الاستعلامات (وتقليلها قدر الامكان وذلك بالبرط بين الجداول) المرحلة الثانية: هي باستخدام أصناف الذاكرة المؤقته لقاعدة البيانات - Database Caching Classes فإذا طبقنا المرحلة الأولى فسنتمكن ان شاء الله من تقليل الاستعلامات في مثالنا السابق من 15 الى 3 استعلامات (وربما اكثر او اقل باستعلام او اثنين تقريبا) فيكون المجموع بين300 الى 500 استعلام تقريبا بالمقارنة مع 1500 استعلام في مثالنا الاول.. فإنه انجاز جيد ولا بأس به اطلاقا.. ولكن مالحل اذا زاد عدد الزوار الى 500 ؟ فسيكون تقريبا 2000 استعلام (متوسط ال 3 استعلامات 5 استعلامات ، سنكون اكثر دقه بعد قليل بتطبيق المثال) فمالحل اذا..؟ الحل هو في المرحلة الثانيه.. وهي باستخدام Database caching classes اما ان تقوم انت بكتابته او تستخدم احد الاصناف الجاهزة والتي موجوده بكثرة على النت والسبب في ذلك اننا نقوم بتخزين البينات التي نقوم بجلبها بصورة متكررة من القاعده مع كل زيارة للصفحه وتخزينها في جدول مؤقت واحد. او نقوم بتخزينها في ملفات على الموقع قد تكون xml, txt, json الخ.. المهم انها تناسب مانريده وبالتالي سترى ان عدد الاستعلامات يبقى ثابت ولا يتعدى الاستعلام او الاثنين مهما زاد عدد الزوار لنتكلم عن المرحة الأولى: وهي طريقة تقليل الاستعلامات عن طريق كتابتها بالطريقة الصحيحه للربط بين الجدوال. الشق الأول: المثال الذي سنطبق عليه الاستعلامات بما ان البرمجة قريبه جدا من الرياضيات ان لم تكن هي كذلك بالفعل.. فافضل طريقه للشرح هي بتطبيق مثال بفرض ان لدينا 3 جداول الاول categories ويحتوي على cat_id cat_name cat_total_books والثاني books ويحتوي على book_id book_name book_author_id book_cat_id والثالث authors ويحتوي على author_id author_name author_total_books ملاحظة: لاحظة اني اسبقت كل حقل باسم الجدول وذلك لكي يسهل علينا عملية التمييز بين اسماء الحقول في عملية الربط ، بالاضافة الى تعيين متغيرات متميزة عن الاخرى دون الحاجه لاستخدام خاصيه AS الموجوده في ال mysql (غالبا وليس دائما) الشق الثاني: طريقة جلب البيانات من القاعده وربط الجداول ببعضها البعض الأن لنأتي لتطبيق المثال نريد عمل صفحه لعرض اخر 10 كتب فكيف يتم ذلك ؟؟ قد يقول شخص سهله.. وذلك بعمل استعلام اولي عن الكتب بالاستعلام التالي SELECT book_id, book_name FROM books LIMIT 0,10 وعندما نقوم بفرز المصفوفه نعمل استعلامين اخرين عن الاول عن اسم الكاتب SELECT cat_name FROM categories WHERE cat_id = $book_cat_id بالفعل لقد استعطت اتمام المطلوب.. ولكن انتظر هل تعلم كم استعلام فعلت؟؟ الاستعلام الاساسي = 1 وفي كل عملية فرز ( ونحن مازلنا في التكرار) نقوم بعمل استعلامين اي استعلامين * الحد الاقصى للصفوف في الاستعلام الاساسي اي 2 * 10 = 20 + الاستعلام الاساسي = 21 استعلام استعلام لكل زائر!!!! أي بفرض ان لدينا 100 زائر فسيكون 21 استعلام * 100 زائر = 2100 استعلام!!!! إرهاق بمعنى الكلمة حسنا يمكننا تنفيذها باستعلام واحد وهو الاستعلام الاساسي ونحن في عملية الفرز نقوم بتخزين معرفات الكتب في متغير واحد ونفصل بينهم بعلام الـ , ونفس الشيء بالنسبة لأسماء المؤلفين وبعد الانتهاء نقوم بعمل استعلامين الاول للكتب والثاني للمؤلفين وذلك باستخدام خاصية WHERE cat_id IN ($all_cats) هذا افضل بكثير.. حيث اننا عملنا المطلوب بـ 3 استعلامات... أي 3 استعلامات * 100 زائر = 300 استعلام.. هممم!! ولكن هل هناك طريقة افضل؟؟ قد يقول شخص نعم.. وذلك باستخدام اوامر ال JOIN وبذلك نستطيع عملها باستعلام واحد فقط... ممتاز.. وهنا سنستخدم INNER JOIN لأنها اسرع من LEFT JOIN تابع معي.. القاعده: SELECT prefix_1.field_1 , prefix_2.field_2 , prefix_3.field_3 , ... FROM table_1 prefix_1 , table_2 prefix_2 , table_3 prefix_3 , ... WHERE prefix_1.field_1 = 'something' AND prefix_2.field_4 = prefix_3.field_5 OR ... حيث ان prefix_X = اسم افتراضي نقوم نحن بتعيينه للتمييز بين الجداول التي نريد الاستعلام منها.. والاهي هو لاخبار خادم القاعده باننا نقصد الجدول الفلاني عن طريق هذا الاسم وذلك حينما نقوم بكتابة اسم الجدول بعد صيغة FROM field_Y = اسم الحقل table_Z = اسم الجدول table_1 prefix_1 اخبرنا الخادم انن نقصد بالـ prefix_1 انه تابع للجدول table_1 وبتطبيق القاعده على فرضيتنا السابقه SELECT bks.book_id , bks.book_name , cats.cat_name , athrs.author_name FROM books bks, categories cats, authors athrs WHERE bks.book_author_id = athrs.author_id AND bks.book_cat_id = cats.cat_id LIMIT 0,10 bks.book_author_id = athrs.author_id اشترطنا ان تكون قيمة معرف المؤلف الموجوده في جدول الكتب مساوية لقيمة قيمة معرف المؤلف الموجوده في جدول المؤلفين وذلك ليقوم بارجاع اسم المؤلف من جدول المؤلفين الذي سبق وحددناه عن طريق athrs.author_name bks.book_cat_id = cats.cat_id بالضبط مثل السابق ولكن تتم المقارنه لـ قيمة معرف القسم وارجاع اسمه وبذلك استطعنا جلب البيانات باستعلام واحد فقط أي 1 استعلام * 100 زائر = 100 استعلام نتيجه مرضيه جدا.. ولكننا سنواجه بعض المشاكل في حال ما اذا زاد عدد الزوار الى 1000 فسيكون عدد الاستعلامات 1000 استعلام.. وهذا ما سنقوم بمعالجته عن طريق ال Database Caching Classes وهي المرحة الثانيه ان شاء الله الشق الثالث: طريقة تحديث أكثر من جدول وأكثر من قيمة الأن، نريد نقل الكتاب صاحب المعرف رقم 3 من القسم 4 الى القسم 5 ومن المؤلف 6 الى المؤلف 7 ويترتب على ذلك ان عدد الكتب الموجوده في القسم 4 قد نقصت كتاب وزاد القسم 5 كتاب لذلك يجب تحديث العدادات الموجوده فيها وذلك بـ طرح 1 من القسم 4 وزيادة 1 الى القسم 5 وكذلك هو الحال بالنسبة لجدول المؤلفين فقد نقص المؤلف 6 كتاب وزاد المؤلف 7 كتاب لذلك علينا ايضا تحديث جدول المؤلفين بعمل التالي طرح 1 من المؤلف 6 وزيادة 1 الى المؤلف 7 فتخيل ان عملت كل ذلك باستعلامات عاديه.. فكم عدد الاستعلامات؟ 1 لتعديل القيم الموجوده في جدول الكتب 1 لانقاص 1 من جدول الاقسام 1 لزيادة 1 لجدول الاقسام 1 لانقاص واحد من جدول المؤلفين 1 لزيادة 1 لجدول المؤلفين اي قمت بعمل 5 استعلامات.. بينما يمكنك الوصول لنفس النتيجه باستعلام واحد.. تابع معي من فضلك.. فبتطبيق القاعده التاليه UPDATE table_1 prefix_1, table_2 prefix_2, table_3 prefix_3, ... SET prefix_1.field_1 = 'YOUR_DATA' , prefix_2.field_2 = 'YOUR_DATA' , prefix_3.field_3 = 'YOUR_DATA' , ... WHERE prefix_1.field_4 = 'SOMETHING' AND prefix_2.field_5 = 'SOMETHING' AND prefix_3.field_6 = 'SOMETHING' AND ... يكون شكل الاستعلام كالتالي UPDATE categories cat_new, categories cat_old, authors auth_new, authors auth_old, books bks SET bks.book_cat_id = 5 , bks.book_author_id = 7 , cat_new.cat_total_books = cat_new.cat_total_books+1 , cat_old.cat_total_books = cat_old.cat_total_books-1 , auth_new.author_total_books = auth_new.author_total_books+1 , auth_old.author_total_books = auth_old.author_total_books-1 WHERE bks.book_id = 3 AND cat_old.cat_id = 4 AND cat_new.cat_id = 5 AND auth_old.author_id = 6 AND auth_new.author_id = 7 لاحظ categories cat_new, categories cat_old, اسمينا الاول بالجديد والثاني بالقديم وذلك لكي نتمكن من تحديث عداد القسم الجديد وعداد القسم القديم.. فالجديد هو الذي حصلت به زياده.. والقديم هو ما حصل به نقصان.. وبذلك نتمكن من زيادة وطرح مانريد بما اننا استطعنا فصلهم فيكون: cat_new.cat_total_books = cat_new.cat_total_books+1 , cat_old.cat_total_books = cat_old.cat_total_books-1 , مع انهم في الواقع نفس الحقل ولكن كيف سيعلم الخادم اننا نريد انقاص واحد من القسم 4 واضافة واحد الى القسم 5؟؟ ذلك يكون بالشرط الذي وضعناه cat_old.cat_id = 4 AND cat_new.cat_id = 5 AND فعمليتا التحديث + الشرط يكونان مبنيان على الاسم الذي سبق ووضعناه امام الجدول كما فعلنا هنا اتمنى ان يكون الدرس قد افادكم قبل ان يعجبكم.. فإن كان كذلك.. فلا تبخلوا بدعوة صادقه لي ولأهلي بالتوفيق والمغفره والدرس القادم ان شاء الله سيكون عن الشق الرابع وهو عمل احصائيات لعدة جداول وقيم باستعلام واحد وبعد ذلك سأتطرق للمرحله الثانيه وهذا Database Caching بالتوفيق
  9. للاستفاده.. يمكنك زيادة الوقت كما تريد @set_time_limit(900); او عن طريق ملف الـ .httaccess <IfModule mod_php4.c> php_value max_execution_time 900 </IfModule> بالتوفيق
  10. عزيزي rewsh ان شاء الله في الاصدارة القادمه سأطور الداله dsInput لكي تتمكن من تطبيق الفلترة على جميع قيم المرسلات بالخواص التي تحددها -------------- اتمنى من الاخوة الاعضاء الذين لديهم درايه وخبرة في الثغرات ان يقوموا بتجربة الكلاس واختباره.. لكي يستفيد الجميع منه ان شاء الله بالتوفيق للجميع
  11. وانت قمة في الذوق تقبل احترامي وتحيتي بالتوفيق عزيزي
  12. عزيزي قم بتحميل اخر اصدار من كلاس dsSafer بالنسبة لاستخدامك فهو خاطئ.. الفرق بين الداله dsInput() و dsOutput() الـ dsInput هي للتعامل مع القيم المرسله من المتصفح اما عن طريق المستخدم او عن طريق وصلة اخرى مثل $_POST $_GET $_REQUEST $_SESSION $_COOKIE اي للتعامل معها وانت في صفحة ال php اما لطباعتها او حفظها في القاعدة قبل او بعد اجراء بعض العمليات عليها راجع اول مشاركه قاعدة المصفوفه: انسخ الكودarray('method1'=>'var1,var2,...var10');   مثال ان كان لدينا انسخ الكود$_POST['name']$_POST['email']$_GET['Action']$_GET['Section']   فتكون المصفوفه كالتالي انسخ الكود$myVars = array('_POST'=>'name,email','_GET'=>'Action,Section');   انسخ الكودdsSafer->dsInput($myVars, 'str');   وبذلك تكون المتغيرات التاليه قد تم تأمينها وجاهزه للتعامل معها انسخ الكود$name$email$Action$Section    مثال اخر ان اردنا طباعة اهلا بك $_GET['name'] انسخ الكود$name = $dsSafer->dsInput($_GET['name'],'str','');$name = $dsSafer->dsOutput($name,'plain');echo "اهلا بك $name";  استخدمنا في ال dsInput ال str لأننا نتوقع ان يحتوي المتغير المرسل على نص واستخدمنا '' لأننا لا نريده ان يحتوي على اي كود واستخدمنا في ال dsOutput plain لأننا نريد تجريده من اي كود.. وهذا مفيد في حال اردنا ان يتأمن المتغير من الشفرات الخطرة ويبقى محتفظا بالشفرات العاديه ويتم حفظه في القاعده او اي شيء اخر ومن ولكن عند طباعته نريد تجريده من جميع الشفرات والاكواد اما ان اردنا حفظه في القاعده انسخ الكود$name = $dsSafer->dsInput($_GET['name'],'sql','');mysql_query("....$name...");  وان اردنا جلبه من القاعده انسخ الكود$row = mysql_fetch_object(mysql_query("....."));$name = $dsSafer->dsOutput($row->name,'sql');  استخدمنا ال sql لأن المتغير قادم من القاعده وقد سبق واستخدمنا ال sql في الداله dsInput عند حفظه ان كنا قد حفظنا المتغيرات بشفراته الامنه مثلا فعلينا الاختيار بين ان نعرض النص بما يحتويه من شفرات واكواد.. ليكون الامر كالتالي انسخ الكود$name = $dsSafer->dsOutput($name,'html');  او ان نعرض النص مع الشفرات ولكن في حالة عرض مصدرها دون تنفيذها.. ليكون الامر كالتالي انسخ الكود$name = $dsSafer->dsOutput($name,'code');  او ان نجرده تماما من اي شفرات او اكواد ممكن ان يحتويها.. ليكون الامر كالتالي انسخ الكود$name = $dsSafer->dsOutput($name,'plain');  وهكذا.. بالتوفيق dsSafer_0.0.7.zip
  13. خطأ محير

    عزيزي يبدو انه سليم ولكن جرب ماقاله اخي ASDen بالتوفيق
  14. عزيزي هناك برنامج اسمه moodle خاص بنظام التعليم وبه الكثير من المميزات والاضافات.. ولكن يعيبه انه كبير جدا ومعقد نوعا ما.. جربه فان اعجبك كان بها والا ابحث عن مبرمج يبرمج لك ماتريده.. بالتوفيق