-
المساهمات
2951 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
6
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو ياسر مسكين
-
متى بالتحديد لا ندري، لكن قد تكون هنالك دروة في المستقبل، إلى حين ذلك توجد العديد من المقالات التي تتحدث عن برمجة الألعاب يمكنك تصفحها وقراءتها والاستفادة من المعلومات التي تحتويها من هنا: صناعة الألعاب ويمكنك أن تصبح مبرمج ألعاب من خلال تعلمك للغتي بايثون أو جافا سكريبت وتوجد مسارات لتعلم هاتين اللغتين في الأكاديمية، يمكنك تصفح هذه المقالة للفائدة:
-
من الجيد ذلك، يمكنك بعد إكمالك لمسار تعلم قواعد البيانات، يمكنك التعرف أكثر على المعارف والمعلومات التي في مقالات الأكاديمية، من هنا: قواعد البيانات. أنت لست بحاجة لحفظ كل ما تعلمته، عوضا عن ذلك يمكنك الخوض في القيام بمشاريع برمجية سواء تلك التي هي موجودة في بقية المسارات التي ستتعلمها، أو مشاريع أخرى، وستجد نفسك تطبق ما تعلمته وتسترجع المفاهيم المختلفة التي مرّت عليك في الفيديوهات السابقة. وحينما تواجه مشكلة ما يمكنك تصفح التوثيقات الرسميةك توثيقات MySQL في حالة ما كنت تتعامل معها، وفي الغالب تجد المقالات تلخص كل شيء، يمكنك العودة لها في حالة ما احتجت لها: وفي حالة ما واجهتك أية مشكلة يمكنك ترك تعليق تحت فيديو الدورة أو المسار مباشرة.
-
المشكلة التي تواجهك هي مشكلة SMTPAuthenticationError وهي تشير إلى أن اسم المستخدم وكلمة المرور التي قدمتها لبريدك الإلكتروني في ملف إعدادات Django الخاص بك غير صحيحة أو غير مصرح لها بإرسال الرسائل البريدية. لهذا تأكد من إدخال عنوان البريد الإلكتروني الصحيح وكلمة المرور لحساب Gmail الذي ترغب في استخدامه لإرسال الرسائل البريدية وسيحلّ المشكل. ويجب كذلك أن تقوم بتمكين الوصول للتطبيقات غير الآمنة في Gmail فقد قامت Google مؤخرا بتعطيل الوصول للتطبيقات غير الآمنة افتراضيا،لهذا الأمر ستحتاج إلى تمكينه لحساب Gmail الخاص بك لتكون قادرا على إرسال الرسائل البريدية من خلال Django. كما يمكنك التحقق عبر هذا الرابط من توثيق دجانغو Django email. صحيح، جوجل كانت قد قامت بإزالة ميزة الوصول إلى التطبيق الأقل أمانا، لكن يوجد حل بديل يمكنك تجربته، أولا: انتقل إلى ر حساب جوجل الخاص بك عبر هذا الرابط. ثم في قسم الأمان، انتقل إلى كلمة المرور التطبيق، مع التأكد من تفعيل التحقق الثنائي. ثم ثم قم بالذهاب إلى App Password هي موجودة في الصفحة الثانية، لكن يمكنك الوصول إليها من خلال البحث عنها في خانة البحث وستظهر لك مباشرة، ثم سيطلب منك اختيار التطبيق والجهاز الذي تريد توليد كلمة المرور التطبيق له، ثم قم بتعيينه على الموقع، وانقر على توليد. سيتم توليد كلمة مرور. ثم قم بنسخ هذه الكلمة المرور واستخدمها في إرسال الرسائل الإلكترونية.
- 3 اجابة
-
- 1
-
-
هذا الخطأ يحدث عادة عندما يكون هناك مشكلة في الحزمة المستوردة أو المصدرة في مشروع Node.js لهذا تأكد من أن ملف `package.json` مكون بشكل صحيح. يمكنك تجربة مسح ذاكرة التخزين المؤقت لـ npm بتشغيل الأمر التالي: npm cache clean --force حذف `node_modules` و `package-lock.json` لإجبار npm على إعادة تثبيت التبعيات من البداية من خلال هذين الأمرين: rm -rf node_modules rm package-lock.json بعدها يمكنك محاولة إعادة التثبيت بتشغيل: npm install كما أنصحك بتحديث كل من مدير الحزم npm و nodeJs: npm install -g npm@latest npm install -g node أو إذا كنت تستخدم yarn، يمكنك استخدام الأمر التالي: yarn global add npm yarn global add node
-
العفو، بالطبع يمكنك ذلك، في حال كانت لديك المعرفة والخبرة اللازمة لذلك، بما أنك مبرمج بلغة PHP و Mysql يمكنك إنشاؤها وإدارة المشتركين وتخزين المعلومات، ولكن يجب أن تكون لديك وسيلة ما لجلب مفاتيح فك التشفير وإرسالها إلى المشتركين، يمكن ذلك من خلال: تطبيق نظام لجلب مفاتيح فك التشفير من موفر الخدمة الخاص بك، كاستخدام واجهة برمجة تطبيقات (API) التي ستتيح لك الاتصال بموفر الخدمة وجلب المفاتيح بشكل ديناميكي. ثم يمكنك تخزين هذه المفاتيح بمجرد جلبها بشكل آمن ومشفر داخل قاعدة بيانات MySQL. بعدها يمكنك إرسال المفاتيح للمشتركين عندك عبر تطبيق نظام خاص يتيح للمشتركين طلب هذه المفاتيح، هنا يمكنني أن أقترح عليك استخدام نظام الرسائل الإلكترونية المباشرة أو البريد الإلكتروني لإرسال المفاتيح بعد طلبها من قبل المشتركين. لكن كل هذا يجب أن يتم بعد التحقق من اشتراك المستخدمين قبل إرسال المفاتيح لهم، كالتحقق من صلاحية الاشتراك والهوية والدفعات.
- 5 اجابة
-
- 1
-
-
كل من الكود الأول والثاني يجب أن يعملا بنفس الطريقة، الفرق الوحيد هو أن الكود الثاني يخزن القيمة المشفرة لكلمة المرور في متغير مؤقت قبل تعيينها إلى this.password. في الكود الأول، يتم تعيين القيمة المشفرة مباشرة إلى this.password دون تخزينها في متغير مؤقت. إذا كان الكود الأول لا يعمل، فقد يكون هناك خطأ في مكان آخر في البرنامج كما قلت لك، يمكنك استخدام أدوات التصحيح في Visual Studio Code لتحديد المشكلة، أما بالنسبة للفرق فلا يمكن معرفة ذلك مباشرة دون اطلاع على مشروعك وفحصه. قم بوضع نقطة توقف في الكود الأول. شغل البرنامج في وضع التصحيح. عندما يتوقف البرنامج عند نقطة التوقف، قم بفحص قيمة this.password والقيم الأخرى المتعلقة. استمر في تنفيذ البرنامج خطوة بخطوة لرؤية ما يحدث. إذا لم تتمكن من تحديد المشكل أرفق لي ملفات المشروع كي أطلع عليها.
- 3 اجابة
-
- 1
-
-
الكود الأول والثاني متشابهان تماما في الوظائف التي يقومان بها، الفرق الوحيد هو في الكود الثاني، حيث يتم تخزين القيمة المشفرة لكلمة المرور في متغير مؤقت (hashedPassword) قبل تعيينها إلى this.password. أما في الكود الأول، فيتم تعيين القيمة المشفرة مباشرة إلى this.password دون تخزينها في متغير مؤقت. هذا الفرق لا يؤثر على النتيجة النهائية أو وظيفة الكود. فكلاهما سيقومان بتشفير كلمة المرور بنفس الطريقة. إذا كان الكود الأول لا يقوم بتشفير كلمة المرور، فقد يكون هناك خطأ في مكان آخر في البرنامج، ربما لو تقوم بإرفاق صور توضح المشكلة كي أجيبك بشكل أفضل.
- 3 اجابة
-
- 1
-
-
توزيع سيرفرات CCCAM أو الشيرنج يعتمد على نظام التشفير الشائع في عالم البث التلفزيوني عبر الأقمار الصناعية، حيث يتم تشفير القنوات ويتم فك تشفيرها عبر الاشتراك في خدمات مثل الشيرنج، بحيث تعتمد هذه اللوحات على استخدام لغات البرمجة مثل PHP و MySQL لإدارة وتوزيع المفاتيح وإدارة الاشتراكات كما أسلفت الذكر. عمل هذه اللوحات يتباين من خلال أولا تخزين المشتركين والباقات، بحيث يتم تخزين معلومات المشتركين في قاعدة البيانات مثل اسم المستخدم وكلمة المرور وتاريخ انتهاء الاشتراك والباقة التي يشتركون فيها. ثم تتم إدارة المفاتيح والقنوات المشفرة من خلال تخزين معلومات حولها وحول مفاتيح التشفير الخاصة بها في قاعدة البيانات. فعندما يشترك المستخدم في باقة معينة، يتم توليد مفتاح تشفير جديد ويتم توزيعه له ليتمكن من فتح القنوات ضمن تلك الباقة. ثم يتم إرسال المفتاح إلى رسيفر المشترك عبر الإنترنت. هذا كله لا بد أن يتم التحقق من صحة الاتصال بين رسيفر المشترك وسيرفر التوزيع لضمان أن الاتصال آمن ومشفر. وصحيح يتم استضافة سيرفر التوزيع على خوادم افتراضية (VPS) لضمان توافره على مدار الساعة واستقراره، كما أن الاستضافة على VPS توفر قدرة أكبر على التوسع وإدارة الموارد.
- 5 اجابة
-
- 1
-
-
أنت تقصد عملية تخطي الـ Captcha، يمكن تحقيقها من خلال العديد من الطرق، مثلا باستخدام سكريبت بايثون، لكن بداية أريد التوضيح بأنك ترغب في تخطي نظام أمان تفاعلي يميز بين البشر والبوتات وهذا أمر لا شكّ أنه غير قانوني، ففي العادة تقوم بعرض مهمات سهلة على المستخمين يمكن للبشر حلها بسهولة، بينما يصعب على البوتات القيام بذلك. لكن لغرض تثقيفي تعليمي يمكنني إجابتك، أولا باستخدام سكريبت بايثون أولا نقوم باستخدام مكتبات خاصة ستساعد على هذا الأمر ك: Selenium: للتحكم في متصفح الويب. Tesseract: التعرف على النص من الصور. OpenCV: معالجة الصور. بعدها ننجز خطوات كتابة سكريبت بايثون: استيراد المكتبات المطلوبة. فتح متصفح الويب باستخدام Selenium. نقوم بتحديد موقع عنصر ال Captcha. نقوم بالتقاط صورة لعنصر Captcha. ثم معالجة الصورة باستخدام OpenCV. استخدام Tesseract للتعرف على النص في الصورة. إدخال النص في حقل Captcha. إرسال النموذج. بهذا الشكل: from selenium import webdriver from tesseract import image_to_string import cv2 # فتح متصفح الويب driver = webdriver.Chrome() # تحميل صفحة الويب driver.get("https://example.com") # تحديد موقع عنصر Captcha captcha_element = driver.find_element_by_id("captcha") # التقاط صورة لعنصر Captcha captcha_image = captcha_element.screenshot_as_png # معالجة الصورة image = cv2.imread(captcha_image) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # التعرف على النص في الصورة text = image_to_string(gray) # إدخال النص في حقل Captcha captcha_input = driver.find_element_by_id("captcha_input") captcha_input.send_keys(text) # إرسال النموذج submit_button = driver.find_element_by_id("submit") submit_button.click() # إغلاق المتصفح driver.quit() لكن في حالة ما إذا كنت تواجه مشكلة مع رموز CAPTCHA وترغب في تخطيها لذات السبب، ينبغي عليك الاتصال بمشغل الموقع أو الخدمة للحصول على المساعدة. لأن استخدام أو تطوير أدوات لتجاوز الكابتشا يمكن أن يؤدي إلى إغلاق حسابات المستخدمين وحظر الآي بي الخاص بجهازك وقد يعرضط لمشاكل أمان أخرى.
- 3 اجابة
-
- 1
-
-
بالطبع، يمكنك استخدام مكتبة تاريخ ووقت جافا المعروفة ب (`java.time`) لتغيير التاريخ فهناك عدة طرق للقيام بذلك، مثلا يمكنك القيام به بهذا الشكل: import java.time.LocalDate; public class ChangeDateExample { public static void main(String[] args) { // الحصول على تاريخ اليوم الحالي LocalDate today = LocalDate.now(); System.out.println("تاريخ اليوم قبل التغيير: " + today); // تغيير تاريخ اليوم LocalDate newDate = today.withYear(2023).withMonth(9).withDayOfMonth(15); System.out.println("تاريخ اليوم بعد التغيير: " + newDate); } } فهنا قمت بتعريف تاريخ اليوم باستخدام `()LocalDate.now`، ثم قمت بتغيير التاريخ باستخدام دوال `()withYear()`، `withMonth`، و `()withDayOfMonth`. يمكنك تصفح هذا المصدر للمزيد من المعلومات:
-
حسنا، بداية فال Print Spooler API هو واجهة برمجة التطبيقات التي يوفرها نظام التشغيل للتفاعل مع الطابعات وعمليات الطباعة، وتسمح هذه الواجهة بإضافة وإدارة الوظائف في طابعة معينة، والتحكم في الاعتبارات المطبوعة، ومراقبة حالة الطباعة، وتحديد الطابعة التي يجب استخدامها، وغير ذلك الكثير. لربط مشروعك به يمكنك استخدام لغة البرمجة التي تفضلها والتي تدعم استخدام هذه الواجهة، وبما أنك أشرت إلى استخدام Node.js فيمكنك البدء باالبحث عن وثائق الـ Print Spooler API المتوفرة لنظام التشغيل الذي تستخدمه (هذه الوثائق تحدد الوظائف والطرق المتاحة للتفاعل مع نظام الطباعة). ثم استخدام مكتبة Node.js للتفاعل مع الـ Print Spooler API مثل `child_process` لتشغيل الأوامر أو `edge` للتفاعل مع مكتبات الـ .NET الخاصة بـ Print Spooler API. يمكنك تنفيذ العمليات المطلوبة مثل إضافة وظائف طباعة، وإزالة وظائف، واستعراض حالة الطابعات، وما إلى ذلك. وبما أن عمليات الطباعة قد تأخذ وقتا، يمكنك متابعة استجابات الـ Print Spooler API واتخاذ الإجراءات المناسبة بناء على النتائج. لكن ستحتاج إلى الانتباه إلى الأمان عند التفاعل مع الـ API، حيث يجب التأكد من صحة وموثوقية البيانات المرسلة واستخدام الإجراءات الصحيحة لتفادي الهجمات أو المشاكل الأمنية المحتملة.
- 3 اجابة
-
- 1
-
-
جميل، أنصحك بمواصلة مسيرتك في التعلم وإكمال الدورة مع المدرب وإتمام المسارات الخاصة بها مع التطبيق المباشر، ستجد في نهاية الدورة مسارا خاصا بأساسيات هندسة البرمجيات أين يمكنك فهم ميكانيزمات هذا المجال، وستفهم حينها بأنه لا يمكن لديفن أن يستبدل وظيفة مهندسي البرمجيات، وأنه يمكن أن يكون مساعدا لهم. يمكنك تصفح هذه المقالات المفيدة والنقاش حولها: https://io.hsoub.com/tech/156918-أول-مهندس-برمجيات-مولد-بالذكاء-الاصطناعي-هل-سيحل-مكان-مهندسي-البرمجيات-أم-سيسهل-حياتهم
- 7 اجابة
-
- 1
-
-
الرابط لا يعمل فهو يظهر رسالة خطأ 404 وهنا قد يكون الرابط الذي قدمته خاطئا يمكنك التأكد من مراجعة الرابط بعناية وإصلاح أي أخطاء في الكتابة، ثم يمكنني مساعدتك.
- 2 اجابة
-
- 1
-
-
الذي جعل من ديفن مطوّرا خبيرا هو تزويده بأدوات البرمجة الخاصة به، فنجد أن لديه سطر أوامر ومحرّرا للشفرة ومتصفحا للويب، أي أنه يقوم بإدارة المهام وكتابة الأكواد وإصلاح المشاكل ويجمع المعلومات من الويب ويستكشف مختلف الموارد. حل المشاكل بشكل ذاتي اليوم بالنسبة للمهندسين يتطلب جهدا واستعانة بأدوات عدة، لكن ديفن في اختبار تم إجراؤه عليه واجه خطأ غير متوقع فلم يتراجع أو يستسلم وبدلا من ذلك أضاف بيانا للتصحيح وأعاد تشغيل الشفرة واستخدم سجلات الأخطاء لتشخيص المشكلة واصلاحها. أما بخصوص استبداله لوظيفة مهندسي البرمجيات فهذا برأيي أمر مستبعد وكلام مستهلك، فديفن ليس مشاركا في القيادة فهو بمثابة عامل برمجي اصطناعي بالكامل، لهذا يمكن لفرق الهندسة والتطوير تفويض المهام إليه، ممّا سيتيح للمهندسين البشر التركيز أكثر على الأعمال الإبداعية والابتكار وترك الأعمال الروتينية ل Devin.
- 7 اجابة
-
- 1
-
-
بما أن هذا هو قسم الأسئلة العامة، أرجو أن يتم طرح السؤال أسفل الفيديو في قسم الدورة المخصص بذلك، في قسم التعليقات. ليتم إجابتك بشكل واضح.
-
Express.js و Next.js هما إطاري عمل مختلفان يتم استخدامهما لأغراض مختلفة في تطوير تطبيقات الويب، كما يمكن أن يعملا بشكل متكامل، لكن بشكل تفصيلي فإن Express.js يعتبر إطار عمل للجانب الخادم (backend) في تطبيقات الويب، كما يمكن استخدامه مع أي إطار عمل أمامي مثل React أو Angular أو Vue.js وهو مناسب لبناء تطبيقات ويب تقليدية التي تتطلب تنفيذ الخوارزميات والمنطق على الخادم. أما Next.js هو إطار عمل لكلا الجانبين أي الخادم والجانب العميل (server-side rendering) في تطبيقات رياكت بحيث يقدم جربة تطوير متقدمة لتطبيقات رياكت مع دعم للتقديم الديناميكي للصفحات كتوفيره لتقنيات مثل الإعادة التلقائية للصفحة (automatic page prefetching) والتقديم الثابت (static rendering) لتحسين أداء التطبيق. كما يمكن استخدام Next.js مع أو بدون Express.js لكونه يتيح لنا بناء خوادم متكاملة بشكل داخلي. يمكنك الاطلاع على المزيد من هنا:
-
يمكنك استخدام مكتبة "Maatwebsite/Laravel-Excel" في Laravel لاستيراد ملف Excel وإنشاء المنتجات بناء على البيانات الموجودة في الملف. بداية، يمكنك أولا البدء في استرداد ملف إكسل في لارافل من خلال استخدام مكتبة maatwebsite/excel لرفع الملف عبر هذا الأمر: composer require maatwebsite/excel بعدها تقوم بإنشاء وسيط تحكم لاستقبال الملف: Route::post('/import-products', 'ProductController@import'); ثم تستطيع بعدها إعداد دالة التحكم وإضافة خاصية التحقق من أن الملف يحتوي على نفس أسماء الأعمدة مثل النموذج بالشكل التالي: public function import(Request $request) { $file = $request->file('file'); // التأكد من أن ملف إكسل يحتوي على نفس أسماء الأعمدة مثل نموذج Product. $validator = Validator::make($request->all(), [ 'file' => 'required|mimes:xlsx,xls', ]); if ($validator->fails()) { return back()->withErrors($validator); } $import = new Importer; $products = $import->import($file); // معالجة البيانات و إنشاء المنتجات... } لقراءة ملف إكسل نستخدم ()Excel::load: $excel = Excel::load($file); .للحصول على بيانات ورقة العمل نستخدم ()getSheetData: $data = $excel->getSheetData('products'); ونستخدم حلقة foreach للوصول إلى بيانات كل منتج مع التأكد من صحة البيانات: foreach ($data as $row) { // تأكد من صحة البيانات في ملف إكسل. $validator = Validator::make($row, [ 'name' => 'required|string', 'id' => 'required|integer', 'image' => 'required|string', 'quantity' => 'required|integer', ]); if ($validator->fails()) { continue; } $product = new Product; $product->name = $row['name']; $product->id = $row['id']; $product->image = $row['image']; $product->quantity = $row['quantity']; $product->save(); } ويمكنك تصفح هذه المصادر للاستفادة أكثر: وهنا نقاش حول تصدير البيانات للفائدة العامة:
-
الأسئلة الاختبارية لا نجيب عنها، لكن يمكنني مساعدتك كي تبدأ، يمكنك البدء من خلال عمل مخطط Use Case أين يبدأ التصميم بتحديد الوظائف التي سيقوم بها المستخدمون في التطبيق، ويتم ذلك من خلال مخطط Use Case الذي يوضح أنواع المستخدمين والأنشطة التي يمكنهم القيام بها. على سبيل المثال: المستخدم يمكنه طلب توصيل. المستخدم يمكنه تتبع الطلبات الحالية. المستخدم يمكنه إلغاء طلب التوصيل. بعدها يمكنك من عمل مخطط Sequence وهو ضروري لوصف تفاعل المستخدم مع التطبيق وتفاعل التطبيق مع النظام أين يوضح هذا المخطط كيفية تبادل البيانات بين الأجزاء المختلفة في التطبيق، مثل تطبيق العميل ونظام الطلبات وموفري الخدمة. بعد ذلك، يتم إنشاء مخطط Class وهو أهم من ضروري لانشاء التطبيق أين تقوم فيه بتحديد الكائنات والعلاقات بينها في التطبيق يشمل ذلك تحديد الخصائص والأساليب لكل كائن وكيفية تفاعلها مع بعضها البعض. يمكن عمل مخطط State أيضا وذلك لوصف حالات الكائنات في التطبيق وكيفية تغيرها من حالة إلى أخرى بناء على الأحداث التي تحدث. ويمكنك تصميمها باستخدام أدوات رسم خاصة لتطبيقات تحرير النماذج مثل: drawio أو Visual Paradigm. يمكنك تصفح هذه المصادر القيمة أين ستفيدك كثيرا في مرحلة عمل مخططات UML:
-
لعمل ذلك أولا يجب التسجيل في مركز المعلومات الوطني للحصول على مفتاح API الذي سيسمح لك بالوصول إلى بيانات المستخدمين عبر خدمة نفاذ ثانيا، إعداد موقع ووردبرس، من خلال تحميل وتثبيت إضافة (plugin) تتيح استخدام ال API في ووردبرس. ثالثا، ربط الخدمة بووردبرس من خلال إدخال مفتاح API الذي تحصلت عليه من مركز المعلومات الوطني في الإعدادات المناسبة في ووردبريس عادة ستجد هذا الخيار في قسم الإعدادات الخاص بالإضافة التي قمت بتثبيتها. رابعا، يمكنك استخدام ميزة إنشاء النماذج في ووردبريس أو إضافة نموذج تسجيل مستخدم جديد يدعم الاتصال بخدمة نفاذ وهنا يمكنك تصميم النموذج ليتضمن الحقول التي تريد جمع بياناتها من خدمة نفاذ مثل الاسم، رقم الجوال، والعنوان الوطني وما إلى ذلك. بعدها يمكنك برمجة النموذج للاتصال بخدمة نفاذ باستخدام الواجهة البرمجية (API) المقدمة، عبر استخدام مفتاح API الخاص بك للمصادقة وجلب بيانات المستخدم الجديد. وبعد استلام بيانات المستخدم الجديد من خدمة نفاذ، يمكنك استخدامها لإنشاء حساب جديد في موقعك التجاري، لكن يجب أولا التحقق من صحة البيانات المستلمة وتنسيقها بشكل مناسب قبل إدخالها في قاعدة البيانات لديك.
-
لإضافة مكتبة SweetAlert2 يجب أن تبدأ بتضمينها في الصفحة، يمكنك القيام بذلك عن طريق إضافة الرابط إلى الـ `<head>` في قسم الهيدر: <head> <!-- مكتبة SweetAlert2 --> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> </head> بعدها تقوم بتعديل رابط حذف الطالب في الجدول لاستدعاء دالة تقوم بعرض رسالة تأكيد باستخدام SweetAlert2. يجب أن يكون لديك سكربت خاص يقوم بإدارة عملية الحذف. بعدها تقوم بتغيير الرابط في الجدول إلى ما يلي: <td style="padding: 10px;"> <a href="#" class="btn-delete" onclick="confirmDelete(<?php echo $rows['id_std']; ?>)"> <span class="glyphicon glyphicon-trash"></span> حذف </a> </td> ثم تضيف السكربت التالي في الجزء السفلي من صفحتك لإنشاء دالة `()confirmDelete` التي تعرض رسالة تأكيد الحذف. <script> function confirmDelete(studentId) { Swal.fire({ title: 'هل أنت متأكد؟', text: "لن تتمكن من استعادة هذه البيانات!", icon: 'warning', showCancelButton: true, confirmButtonColor: '#3085d6', cancelButtonColor: '#d33', confirmButtonText: 'نعم, احذفها!' }).then((result) => { if (result.isConfirmed) { // إذا تم الضغط على زر التأكيد، يقوم بإعادة توجيه المستخدم إلى صفحة حذف الطالب window.location.href = 'delete-student.php?id=' + studentId; } }); } </script> وهذا الكود الكامل بعد التعديلات: <?php include('header.php'); ?> <!DOCTYPE html> <html lang="ar"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>عرض الطلاب</title> <!-- مكتبة SweetAlert2 --> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> </head> <body> <div class="col-md-9 pan1"> <ol class="breadcrumb" style="background-color: #fff;padding-top:8px;padding-bottom:8px;color:#000;font-size:16px;"> <li>الطلبة</li> </ol> </div> </div> <div class="row"> <div class="col-md-9 pan1"> <div class="panel" style="color:#000;"> <div class="panel-body" style="font-size:14px; padding-left:40px;padding-right:40px;padding-bottom:25px;padding-top:25px;"> <p style="margin-bottom: 20px;"> <a class="btn-add" href="add-student.php"> إضافة <span class="ion-android-add"></span></a> </p> <?php // استدعاء البيانات من قاعدة البيانات if (!isset($_GET['page'])) { $page = 1; } else { $page = (int)$_GET['page']; } $post_at_page = 10; $query_post_count = mysqli_query($con, "SELECT * FROM `std_show_adm`"); $query_count = mysqli_num_rows($query_post_count); mysqli_free_result($query_post_count); $query_count = (int)ceil($query_count / $post_at_page); if (($page > $query_count) || ($page <= 0)) { echo '<div class="alert alert-danger" role="alert">خطأ لم يتم العثور على صفحة</div>'; echo '<meta http-equiv="refresh" content="2;url=student.php" />'; } $start = ($page - 1) * $post_at_page; $end = $post_at_page; $querypost = "SELECT * FROM std_show_adm ORDER BY id_std DESC LIMIT $start,$end"; $result = mysqli_query($con, $querypost); echo '<div class="table-responsive"> <table class="table table-bordered table-hover"> <tr> <td> رقم القيد </td> <td> أسم الطالب </td> <td> التخصص </td> <td> تعديل </td> <td> حذف </td> </tr>'; while ($rows = @mysqli_fetch_array($result)) { echo '<tr> <td>' . $rows['id_std'] . ' </td> <td>' . $rows['Name_std'] . '</td> <td>' . $rows['Name_dept'] . '</td> <td style="padding: 10px;"><a href="edit-student.php?id=' . $rows['id_std'] . '" class="btn-edit"><span class="glyphicon glyphicon-pencil"></span> تعديل </a></td> <td style="padding: 10px;"><a href="#" class="btn-delete" onclick="confirmDelete(' . $rows['id_std'] . ')"><span class="glyphicon glyphicon-trash"></span> حذف </a></td> </tr>'; } echo "</table>"; ?> <nav> <ul class="pager"> <li><a href="student.php?page=<?php echo ($page - 1); ?>" style="color:#000;">الصفحة السابقة</a></li> <li><a href="student.php?page=<?php echo ($page + 1); ?>" style="color:#000;">الصفحة التالية </a></li> </ul> </nav> </div> </div> </div> </div> </body> </html>
-
إطار العمل TensorFlow يعتبر واحدا من الأطر الشهيرة والقوية في مجال تعلم الآلة والذكاء الاصطناعي ومن الممكن استخدامه من قبل المبتدئين، ولكن قد يكون هناك بعض التحديات للمبتدئين في التعامل معه بسبب مستوى تعقيده النسبي. فبما أنك مبتدئ في تعلم الآلة يمكنك البدء ببعض أطر العمل الأسهل منها للبدء بها وفهمها جيدا ك: Scikit-learn: هو إطار عمل بسيط وسهل الاستخدام لتعلم الآلة بحيث يوفر مجموعة واسعة من الخوارزميات المتوفرة ويسمح بتنفيذ العديد من العمليات الأساسية في تعلم الآلة بشكل سهل وسلس. Keras: ويعتبر Keras إطار عمل عالي المستوى يوفر واجهة برمجة التطبيقات (API) بسيطة وسهلة الاستخدام، ويمكن استخدامه لبناء النماذج بسرعة دون الحاجة إلى التعامل مع التفاصيل الداخلية للعمليات في TensorFlow. PyTorch: بالرغم من أنه يتطلب قليلا من المعرفة بالبرمجة، إلا أن PyTorch يعتبر أحد الأطر العمل الشهيرة والمناسبة للمبتدئين بحيث يتميز ببنية بسيطة ومرونة عالية، ويحظى بمجتمع نشط للمستخدمين والمساهمين. لذلك يمكنك البدء بإحدى هاته الأطر ومع مرور الوقت واكتساب المزيد من المهارات، يمكنك استكشاف وتعلم TensorFlow والاستفادة من قوته في تطبيقات تعلم الآلة والذكاء الاصطناعي، ويمكنك معرفة المزيد من المعلومات من خلال هذه المقالة:
- 5 اجابة
-
- 1
-
-
يمكن عمل ذلك مثلما تعمل العديد من تطبيقات التجارة الإلكترونية وأنظمة الحجوزات وغيرها، بحيث تستخدم العديد من مواقع الحجوزات نفس النهج لإلغاء الحجوزات غير المدفوعة في حال عدم تأكيد الدفع في فترة زمنية محددة. يمكنك استخدام نظام المهام الدورية لإلغاء الطلبيات غير المدفوعة بعد مرور فترة زمنية معينة بحيث تكون الطلبيات التي لم يتم دفعها في الوقت المناسب سيتم إلغاؤها تلقائيا، وهذا ما سيقلل من احتمالية حدوث مشاكل مثل حجز المخزون دون دفع أو تأخيرات غير مرغوب فيها. وإن كنت ترغب في تجاوز كل هذا، يمكنك إضافة طريقة دفع عبر API، فإنه يمكن أن يساعد في حل المشكلة بطريقة مختلفة. فبدلا من انتظار الفترة المحددة لإلغاء الطلبيات غير المدفوعة، يمكنك تحديث حالة الطلبية على الفور بعد نجاح عملية الدفع عبر الـ API. في هذا الحال، عندما يتم توجيه المستخدم إلى بوابة الدفع ويتم دفع الطلب، يمكنك استخدام الاستجابة المتلقاة من ال API لتحديث حالة الطلبية إلى "تم الدفع" مباشرة. هذا سيضمن أن العناصر في عربة التسوق لن تحجز إلا بعد تأكيد الدفع بنجاح. هذا الحل يحسن من تجربة المستخدم ويزيل الحاجة إلى تنفيذ مهمة مجدولة لإلغاء الطلبيات غير المدفوعة، ويعطي استجابة فورية بعد عملية الدفع الناجحة.
-
تصفحت الفيديوهات وهي تسير بشكل جيد، هل تظهر أية رسائل خطأ على مشغل الفيديو؟ في حالة لم تكن تظهر، حاول تجربة متصفح آخر، فقد تكون المشكلة متعلقة بالمتصفح الذي تستخدمه، أو يمكنك القيام بتحديث الصفحة مع حذف الكاش من خلال هذا الاختصار: Ctrl + Shift + R فبالضغط عليه سيقوم بتحديث الصفحة مع حذف الملفات المؤقتة مباشرة، عادة هذا الإجراء قد يساعد في حل المشكلات التي تنجم عن البيانات المخزنة بشكل غير صحيح. الاحتمال الآخر، وهو أن تكون المشكلة متعلقة باتصالك بالأنترنت وهذا الأمر وارد، يمكنك التحقق منه ومعاودة المحاولة. في حالة لم تنجح معك جميع الطرق، تواصل مع مركز المساعدة وسيساعدونك في حل المشكلة إذا كان الأمر متعلقا بحسابك.
-
معظم المواقع التي تعتمد على طريقة جمع النقاط والتبادل تستخدم ال API المقدم من المنصات الاجتماعية مثل فيسبوك للسماح لتطبيقها بالوصول إلى معلومات الحسابات وتنفيذ الأنشطة مثل المتابعة وإلغاء المتابعة. بحيث تقوم هذه المواقع بتوفير واجهة مستخدم تسمح للمستخدمين بتسجيل الدخول باستخدام حساباتهم على المنصات الاجتماعية، مثل فيسبوك. وعند تسجيل الدخول، يتم منح التطبيق أو الموقع إذن للوصول إلى بعض معلومات الحساب مثل اسم المستخدم والبريد الإلكتروني وقائمة المتابعين والمتابعة، باستخدام هذه المعلومات، يمكن للتطبيق التفاعل مع حسابات المستخدمين الآخرين بما في ذلك متابعة الحسابات المطلوبة لجمع النقاط، ولعمل ذلك يجب أن يقوم المستخدم ب: تسجيل الدخول: يجب على المستخدم تسجيل الدخول إلى حسابه على الموقع الذي يوفر خدمة جمع النقاط والتبادل باستخدام حسابه على منصة التواصل الاجتماعي. الموافقة على الوصول: بمجرد تسجيل الدخول، يتم عرض صفحة تأكيد تطلب الموافقة على منح التطبيق أو الموقع الوصول إلى بعض معلومات الحساب. القيام بالأنشطة المطلوبة: بعد الموافقة، يمكن للمستخدم البدء في القيام بالأنشطة المطلوبة مثل متابعة حسابات أخرى لجمع النقاط. استبدال النقاط: بعد تجميع عدد كاف من النقاط، يمكن للمستخدم استخدامها لطلب المتابعة من قبل مستخدمين آخرين. لكني لا أنصح بتاتا باستخدام هاته الطرق لزيادة المتابعين لأنها طرق لا تعكس قيمة المحتوى الهادف والنافع ولا تساهم في الترويج إليه، فهاته الطرق ليس غير آمنة فقط، بل غير أخلاقية ومخالفة لسياسات منصات التواصل الاجتماعي ويمكن أن تتسبّب في حظر الحسابات.
- 5 اجابة
-
- 1
-
-
يمكنك استخدام التوريث لإنشاء فئات فرعية من الصنف User بهذا الشكل: from django.contrib.auth.models import AbstractUser from django.db import models class User(AbstractUser): # خيارات نوع المستخدم USER_TYPE_CHOICES = ( ('vendor', 'Vendor'), ('customer', 'Customer'), ) # حقل نوع المستخدم user_type = models.CharField(max_length=20, choices=USER_TYPE_CHOICES) # فئة فرعية لبائع class Vendor(User): # خاصية خاصة بالبائع vendor_specific_property = models.CharField(max_length=100) # فئة فرعية للعميل class Customer(User): # خاصية خاصة بالعميل customer_specific_property = models.CharField(max_length=100) حيث بداية تقوم بتعريف فئة User التي تمثل المستخدم الأساسي وتحتوي على خيارات نوع المستخدم وحقل لتحديد نوع المستخدم. ثم ننشئ فئات فرعية (Vendor وCustomer) ترث من الفئة الأساسية User ونضيف الخصائص الخاصة لكل فئة. هذا الحل يسمح لنا بإنشاء مستخدمين من نوعين مختلفين (بائع وعميل) وتخصيص الخصائص الخاصة بهم بسهولة.
- 3 اجابة
-
- 1
-
