اذهب إلى المحتوى

Mustafa Suleiman

الأعضاء
  • المساهمات

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

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    300

كل منشورات العضو Mustafa Suleiman

  1. لا أحد بإمكانه الإجابة على ذلك السؤال سوى مركز المساعدة الخاص بأكاديمية حسوب، عليك بالتحدث إليهم والسؤال. وإذا كان هناك تساؤل لديك حول العروض والخصومات، فقد تم توضيح الأمر هنا:
  2. اسمح لي بنصحك بالتالي، كثرة الأسئلة وتشتيت نفسك ستعيقك عن تعلم أي مجال، وكل ما تحتاجه هو تعلم أساسيات البرمجة وعلوم الحاسب، ثم اختر المجال الذي تريد التخصص به واتبع مسار تعليمي لمدة 6 أشهر ولا تحيد عنه. أي كل ما تحتاجه هو أن تبدأ فقط وستتضح لك كافة الأمور، وستجد نفسك قادر على التحديد والإختيار. وبخصوص سؤالك، لن يتم إختراق جهازك وأنت تعمل على مشروع ما، وما يعرض جهازك للإختراق بالفعل هو استخدام برامج مكركة بدون أي وعي لمخاطر ذلك، وأيضًا عدم وجود وعي أمني عند تصفح الإنترنت والتحميل منه بدون دراية. وعند نشر المشروع على الإنترنت عليك بتوفير الحماية اللازمة لحماية البيانات الحساسة، وستتعلم ذلك عند تعلم مجال الويب، في الوقت المناسب لذلك.
  3. وظيفة lambda في Python تستخدم لإنشاء وظائف مجهولة (anonymous functions)، وتسمح لك بتعريف وظيفة صغيرة دون الحاجة إلى تسميتها بشكل صريح، وتستخدم lambda في السياقات التي تحتاج فيها إلى وظيفة بسيطة وقصيرة. وبخصوص الزر الذي تستخدمه في واجهة البرنامج، تحتاج إلى تعيين دالة (function) للقيام بإجراء معين عند النقر على الزر، وباستخدام lambda، يتم تعريف دالة مجهولة بشكل فوري لتنفيذ الأمر الذي ترغب فيه عند النقر على الزر. بالنسبة للخطأ (TypeError: 'list' object is not callable)، فهناك تعارض في تسمية المتغيرات. وفي الكود الأول لديك، قمت بتسمية المتغير الذي يحمل قائمة القيم بنفس اسم الوظيفة column_values، وبالتالي، عند استدعاء الوظيفة للمرة الثانية، يتم تجاوز الدالة واستدعاء القائمة نفسها، وهذا هو سبب ظهور الخطأ. أي عليك بتغيير اسم المتغير الذي يحمل القائمة إلى اسم مختلف مثلاً تغييره إلى column_values_list كما يلي: class book_E: def __init__(self, BATH): self.BATH = BATH self.workbook = load_workbook(BATH) self.sheet = self.workbook.active def column_values(self): # استخراج قيم العمود الأول من ورقة العمل وتخزينها في قائمة: self.column_values_list = [cell.value for cell in self.sheet['A']] return self.column_values_list ثم في الكود الذي يعرض واجهة البرنامج، استخدم الدالة COLS_V مباشرة بدون استدعاء print: def COLS_V(BOOK1): B = BOOK1.column_values() print(B)
  4. في البداية عليك بتصميم واجهة التطبيق ثم إختيار لغة البرمجة وإطار العمل لبرمجته، فإذا كنت تريد خفض التكلفة، فأنصحك ببرمجته عن طريق Flutter أو React Native. وسيتعين عليك تنفيذ نظام برمجي للحسابات الشخصية يسمح للأعضاء بإنشاء حسابات شخصية وإدارة بياناتهم الشخصية والمعاملات المالية، وأيضًا تنفيذ نظام يتيح للأعضاء إضافة كتب للبيع، وتعديل التفاصيل، وتحديد السعر وحالة الكتاب (مثل جديد أو مستعمل)، وإزالة الكتب التي تم بيعها. بعد ذلك تأتي مرحلة إختيار بوابات دفع مثل Stripe أو PayPal لتسهيل عمليات الدفع، وعندما يقوم عضو بشراء كتاب من آخر، يتم توجيهه لإجراء عملية الدفع عبر البوابة المحددة، وبعد تأكيد الدفع، تستطيع استخدام واجهات برمجة التطبيقات (API) المقدمة من البوابة لإجراء عملية التحويل من حساب التاجر إلى حساب الكاتب، وبالإمكان الإعتماد على المعاملات المالية الوهمية في حساب الكاتب في التطبيق لتتبع الأموال التي يتم تحصيلها بصورة منفصلة عن حساب التاجر. وهناك عامل آخر وهو تحصيل نسبة معينة من المبلغ المدفوع كعمولة للموقع، عن طريق تنفيذ نظام يحتسب هذه العمولة تلقائيًا ويحولها إلى حساب الموقع. وعليك بإنشاء دراسة جدوى للمشروع والطلب المتوقع والتكاليف مقابل العائد ولا تتوقع عائد من أي مشروع على الإنترنت إلا بعد مرور فترة سنة على الأقل.
  5. المشكلة تكمن في الطريقة التي تقوم بها بتعيين الدالة المرتبطة بزر الطباعة (b1) في واجهة البرنامج، ويجب أن تقوم بتمرير الدالة نفسها بدون استدعاءها فورًا. وباستطاعتك استخدام وظيفة lambda لتعيين الدالة كوظيفة منفصلة بدون استدعائها فورًا، وإليك الكود: b1 = ttk.Button(widgets_frame, text="print", bootstyle=("info", "outline"), command=lambda: COLS_V(BOOK1)) باستخدام lambda، سيتم تمرير الدالة COLS_V(BOOK1) نفسها كوظيفة مستقلة إلى الزر، ولن تستدعى فورًا عند تشغيل البرنامج. وعليك أيضًا تصحيح خطأ آخر في الدالة sheet_Names و COLS_V، وفي الدالة sheet_Names يجب أن تقوم بإرجاع A بدلاً من q. وفي الدالة COLS_V يجب أن تقوم بطباعة B بدلاً من q، وإليك الكود بعد التعديل: def sheet_Names(BOOK1): A = BOOK1.workbook.sheetnames return A def COLS_V(BOOK1): B = BOOK1.column_values() print(B) وبعد التعديل من المفترض أن تستدعى الدالة COLS_V(BOOK1) فقط عند النقر على زر "print" في واجهة البرنامج.
  6. لبرمجة تطبيقات iPhone بشكل Native، فمن الضروري أن تتعلم لغة Swift، حيث أن لغة Swift هي لغة برمجة مطورة من قِبل Apple وتستخدم لتطوير تطبيقات iOS وMac. أما لغة Dart، على الجانب الآخر، هي لغة برمجة تستخدم بشكل رئيسي في إطار عمل Flutter الذي يستخدم لتطوير تطبيقات متعددة المنصات، وإذا كان هدفك تطوير تطبيقات لنظام Apple بشكل حصري، فمن الأفضل التركيز على تعلم لغة Swift. وبخصوص الـ API فعليك بتعلم الواجهة الخلفية Back-End لتتمكن من إنشاء API ولكن ذلك ليس ضروري، فيمكنك استخدام منصة مثل Firebase كواجهة خلفية لتطبيقك، وقد أوضحت لك ذلك هنا: وبخصوص تطوير تطبيقات الهاتف والحيرة في إختيار اللغة المناسبة أو الإطار، فأنصحك بقراءة التالي:
  7. السؤال غير واضح، لكن بالطبع تريد استخدام لغة الاستعلام المهيكلة (SQL) لاستخراج الحرف الأول من اسم الوظيفة ووضعه بين قوسين في نتائج الاستعلام، وهناك العديد من قواعد البيانات المختلفة التي تدعم SQL، مثل MySQL و PostgreSQL و SQL Server وغيرها. وفيما يلي مثال لكيفية تنفيذ ذلك باستخدام جملة SQL: SELECT CONCAT('(', SUBSTRING(occupation, 1, 1), ')') AS first_letter FROM your_table_name; وتأكد من استبدال your_table_name بالاسم الصحيح للجدول الذي يحتوي على الأسماء والوظائف، حيث أن الاستعلام سيستخرج الحرف الأول من الوظيفة في كل سجل ويضعه بين قوسين في عمود يسمى "first_letter" في النتائج.
  8. عليك بتفهم، أنك بحاجة إلى فهم ما يتم شرحه وليس حفظه وبالطبع هناك ما يجب تذكره، لكن ليس كل ما يتم شرحه، ومن خلال الفهم ستتمكن من تنفيذ ما تريده والتعديل على الكود والبحث عن حل لمشكلة تواجهك أيضًا. والتطبيق هو العامل الأهم للاستفادة من أي دورة، فإذا قمت بمشاهدة الدروس فقط فلن تتعلم البرمجة، وإذا قمت بالتطبيق مرة واحدة فقط مع المدرب ستتعلم بنسبة 50% مثلاً، لكن إذا أردت الاستفادة حقًا، عليك بكتابة الكود مع المدرب ومرن يديك وعقلك على كتابة الكود بشكله الصحيح. ثم قم بتنفيذ التمرين أو إعادة ما قام به المدرب بمفردك، ولا مشكلة إذا كان مختلف أو الكود ليس بأفضل جودة ممكنة، طالما أنه يعمل فذلك هو المطلوب في البداية، لكن بالطبع تعلم الطريقة الصحيحة لكتابة الكود فيجب معرفة ذلك. وإذا واجهتك مشكلة عليك بتفقد أولاً هل أخطأت في الأساسيات مثل كتابة حرف بصورة غير صحيحة أو كتابة المسار بشكل غير صحيح، أو لم أقم باستيراد الملف وهكذا، ثم بعد ذلك ابحث عن حل للمشكلة على جوجل فإن لم تجد ابحث على يوتيوب. وقسم المشكلة إلى أجزاء صغيرة ثم أجزاء أصغر وهكذا، واتبع تلك الطريقة أيضًا عند تنفيذ مشروع. وقد شرحت بالتفصيل في النقاشات التالية كيف تستفيد من الدورات والدراسة بالشكل الصحيح، أرجو منك قراءتها: صعوبات البرمجة للمبتدئين
  9. عادةً، تستخدم واجهات برمجة التطبيقات (APIs) المقدمة من مزودي خدمات الدفع لتسهيل هذه العملية، وتستطيع تضمين واجهة برمجة التطبيقات المقدمة من بوابة الدفع داخل تطبيقك وتتفاعل معها لإجراء عمليات الدفع. وعند استخدام بوابة الدفع داخل التطبيق، بإمكان المستخدمين إدخال تفاصيل الدفع (مثل بيانات البطاقة الائتمانية أو طرق الدفع الأخرى) مباشرة في التطبيق نفسه، دون الحاجة إلى توجيههم إلى صفحة خارجية لإتمام العملية. وتستطيع الاستعانة بخدمات مشهورة مثل Stripe وBraintree وPayPal وغيرها من بوابات الدفع لتحقيق هذه الوظيفة، ويجب النظر في الوثائق والتوجيهات المقدمة من مزود البوابة لمعرفة كيفية تنفيذ هذه العملية بالتفصيل داخل تطبيقك. وإليك نقاش به الكثير من المعلومات حول بوابات الدفع المتوفرة: ما هي أفضل بوابات دفع في المنطقة العربية وتكلفة كل منها وما هي أرخص بوابة دفع؟
  10. عند الرغبة في استخدام تقنية معينة، يجب المفاضلة بين المزايا والعيوب التي تأتي بها، حيث تُستخدم تقنية تجميع الاتصالات (Connection Pooling) في برمجة الحواسيب لإدارة مجموعة من اتصالات قاعدة البيانات يمكن إعادة استخدامها من قبل العملاء أو التطبيقات المختلفة. بدلاً من إنشاء اتصال جديد بقاعدة البيانات في كل مرة يحتاج فيها العميل إلى التفاعل مع قاعدة البيانات، وتسمح تجميع الاتصالات باستخدام الاتصالات الحالية، مما يؤدي إلى تحسين الأداء والكفاءة. وإليك بعض فوائد استخدام تجميع الاتصالات: 1- إنشاء اتصال جديد بقاعدة البيانات يستغرق وقتًا طويلاً، حيث يتضمن تكاليف الشبكة والمصادقة. بواسطة تجميع الاتصالات، يتم إنشاء الاتصالات مسبقًا ويتم الاحتفاظ بها في مجموعة جاهزة لإعادة الاستخدام من قبل العملاء المختلفين، مما،يقلل ذلك من تكلفة إنشاء وإغلاق الاتصالات، مما يؤدي إلى تحسين استخدام الموارد. 2- إعادة استخدام الاتصالات الحالية يحل محل الحاجة إلى إنشاء اتصال جديد لكل عملية في قاعدة البيانات، مما يؤدي إلى زمن استجابة أسرع، ويتم تجنب تكاليف الاتصال مثل تأخير الشبكة وعملية المصادقة، مما يتيح للتطبيقات تنفيذ استعلامات قاعدة البيانات بكفاءة أعلى. 3- يتيح تجميع الاتصالات استخدام الموارد الخاصة باتصال قاعدة البيانات بكفاءة، مما يسمح للعملاء أو التطبيقات المختلفة بمشاركة عدد محدود من الاتصالات، ويساعد ذلك في إدارة الأحمال العالية ويضمن عدم استنفاد الاتصالات، مما يعزز قابلية توسع النظام. 4- يوفر تجميع الاتصالات آليات مدمجة لإدارة الاتصالات، مثل التحقق من الاتصال، وانتهاء الصلاحية للاتصالات الخاملة، وإعادة تدوير الاتصالات التي قد تكون غير صالحة أو تسبب مشاكل، وتضمن تلك الميزات أن الاتصالات في حالة صحية، وتمنع الاتصالات من البقاء خاملة لفترات طويلة، وتعيد استخدام الاتصالات التي قد تكون قديمة أو تسبب مشاكل. وعلى الرغم من فوائدها، إلا أنه هناك سلبيات في تجميع الاتصالات أيضًا: 1- تحتوي مجموعات الاتصال على حد أقصى لعدد الاتصالات التي يمكن أن تحتويها، فإذا تجاوز عدد العملاء المتزامنين هذا الحد الأقصى، قد يكون من الضروري إنشاء اتصالات جديدة، مما يؤثر على الأداء. يُعد تكوين حجم مجموعة الاتصال بشكل صحيح مهمًا لضمان الأداء المثلى وتجنب التضارب في استخدام الموارد. 2- يتطلب الاحتفاظ بمجموعة من الاتصالات موارد ذاكرة على خادم التطبيق، فإذا تم تعيين حجم المجموعة بشكل كبير جدًا، فقد يستهلك ذلك ذاكرة زائدة، مما قد يؤثر على الأداء العام للنظام، وإيجاد التوازن المناسب بين حجم المجموعة والموارد المتاحة في النظام أمر مهم. 3- في بعض الحالات، يمكن أن تصبح الاتصالات في المجموعة قديمة أو مفصولة بسبب مشاكل في الشبكة أو إعادة تشغيل خادم قاعدة البيانات أو أسباب أخرى، ويجب أن تتضمن آليات تجميع الاتصالات عمليات التحقق والاختبار للتأكد من صحة الاتصالات قبل إعادة استخدامها، وإلا، قد يؤدي استخدام الاتصالات القديمة إلى حدوث أخطاء وسلوك غير متوقع.
  11. قمت برفع مجلد node_modules وهو يحتوي على كافة الحزم الخاصة بالمشروع، وهو أمر غير صحيح، لذلك عليك بإضافة ملف .gitignore لمجلد المشروع لديك ولذلك رفع الكود المصدري فقط وتجاهل مجلدات مثل node_modules وdist وbuild. وقد شرحت ذلك هنا: وبعد تطبيق الشرح السابق، عليك بحذف المستودع وإعادة رفع المشروع من جديد وإليك طريقة حذف المستودع: وإليك طريقة رفع المشروع على GitHub pages أو استضافة مجانية مثل Netlify: ونصيحتي إليك هي برفع مجلد build أو dist على فرع منفصل داخل المستودع ثم استخدامه في GitHub pages أي أنشيء مستودع داخل المجلد ثم قم برفع محتوياته إلى فرع منفصل. أو بطريقة أسهل استخدم Netlify وستقوم برفع مجلد build مباشرًة إلى الاستضافة:
  12. عند مواجهة رسالة الخطأ "Expected Expression" عند كتابة else في برنامج Python، فربما المحتمل هناك خطأ في بنية الشرط الذي يسبق else، وعند استخدام else، يجب أن يتم توفير شرط متبوعًا بالكلمة المفتاحية if أو شرط آخر. وإليك بعض الأمثلة على استخدام else بشكل صحيح: المثال الأول: x = 5 if x > 10: print("x is greater than 10") else: print("x is not greater than 10") المثال الثاني: grade = 80 if grade >= 90: print("Excellent") elif grade >= 70: print("Good") else: print("Failed") وتأكد من أن هناك شرطًا سليمًا قبل else.
  13. حاول التثبيت من خلال إنشاء بيئة إفتراضية كالتالي: python -m venv myenv ثم تفعيل البيئة الإفتراضية: venv\Scripts\activate ثم تثبيت المكتبات: pip install pandas openpyxl وإذا استمرت المشكلة، فانتبه إلى عند استخدام أمر pip install لتثبيت مكتبة ما باستخدام PIP، يكون لديه قيمة افتراضية للوقت المسموح به لعملية التنزيل والتثبيت وهي 15 ثانية. ونظرًا لأن مكتبة pandas حجمها كبير نسبيًا بحجم 10 ميجابايت وتعتمد على مكتبة numpy بحجم 20 ميجابايت والتي قد تكون مطلوبة إذا لم تكن مثبتة بالفعل، فقد يستغرق التنزيل والتثبيت وقتًا طويلاً إذا كان الإنترنت ضعيف. وإذا كانت لديك اتصال بالشبكة بطيء أو تحتاج إلى زيادة الوقت المسموح به لـ PIP لإكمال عملية التثبيت، بتعيين قيمة زمنية أطول لـ PIP عن طريق تمرير معامل --timeout مع القيمة المطلوبة. وإليك أمر تعيين الوقت إلى 1000 ثانية (حوالي 16 دقيقة): pip --timeout=1000 install pandas وسيتم إنتظار عملية التحميل والتثبيت لمدة أطول.
  14. مرحبًا بك في أي وقت، وبخصوص العروض، فيتم توفير عروض كل فترة وخاصًة في المناسبات، وأيضًا في بعض الأحيان توجد كوبونات خصم ولكن ليس دائمًا، لذلك عليك بالتحدث لمركز المساعدة الخاصة بأكاديمية حسوب والسؤال عن توافرها أم لا. وقد وضحت سابقًا أوقات العروض التي غالبًا يتم توفير خصومات بها:
  15. الخاصية innerHtml تكتب بالشكل التالي innerHTML لذلك عليك تعديلها، والأفضل هو innerText. وأيضًا عليك بالتأكد من عدم وجود أخطاء في الكونسول عند الضغط على الزر، وتأكد من أنك قمت ربط ملف الجافاسكريبت بشكل صيح، وأيضًا كتابة اسمه بشكل صحيح وانتبه إلى الحرف الصغيرة والكبيرة وكتابتها كما هي، وأيضًا كتابة المسار إلى الملف بشكل صحيح. ويتم استيراد ملف جافاسكريبت في HTML بالشكل التالي: <script src="index.js"></script> وإذا كان في مجلد آخر باسم js مثلاً وليس بجانب ملف html مباشرًة فعليك بكتابة المسار كالتالي: <script src="js/index.js"></script>
  16. أرجو منك توضيح السؤال وذكر ما تريد فعله بالضبط، وبخصوص الكود: ربما هناك خطأ في اسم المتغير BATH في الدالة __init__. ربما تقصد PATH بدلاً من BATH. أيضًا تحقق من المرجع إلى قائمة self.column_values في دالة X، حيث يجب عليك استدعاء دالة W قبل استخدام self.column_values في دالة X. وهناك خطأ في الرجوع من دالة X، ويجب عليك إرجاع قيمة self.column_values بدلاً من تعديل قيمة self.A. from openpyxl import load_workbook class W_book: def __init__(self, PATH, A): self.PATH = PATH self.A = A def W(self): self.workbook = load_workbook(self.PATH) self.sheet = self.workbook.active self.column_values = [cell.value for cell in self.sheet['A']] def X(self): self.W() # استدعاء الدالة W للحصول على القيم المطلوبة return self.column_values وبخصوص التعديل الذي قمت به: فلا يوجد خطأ في استدعاء الدالة X وتعيين قيمة m، والحروف الكبيرة والصغيرة تعتبر مختلفة في لغة Python، لذا يجب أن تتأكد من استخدام الأحرف الكبيرة والصغيرة بشكل صحيح في أسماء المتغيرات والدوال، بالشكل التالي: a = W_book('d:\abc.xlsx', 'g1') a.X() m = a.A وتأكد أنك تقوم بتمرير القيمة 'g1' كسلسلة نصية وتقوم بإستدعاء الدالة X بحرف كبير a.X()، ثم تعيين قيمة m إلى a.A بدلاً من g1.
  17. عليك بتعلم كيف تقوم بعمل Debugging من خلال أدوات المطور في جوجل كروم مثلاً، وكما شرح لك عمر، قام هو هو بتفقد التنسيقات والكلاسات الخاصة بالعناصر من خلال المتصفح، وربط بينها وبين التنسيقات الخاصة بالعنصر الأب. وقام بتجربة تعديل التنسيق بوضع خواص CSS على العنصر من خلال المتصفح، وذلك أسرع بمراحل بدلاً من التعديل على الكود ثم النظر إلى المتصفح مرة أخرى، بل عليك التجربة داخل المتصفح نفسه من خلال أدوات المطور، وكيف تفعل ذلك؟ عليك بمشاهدة الفيديو التالي وأيضًا قراءة التعليقات، وستتعلم كيف تستخدم أداة المطور في جوجل كروم:
  18. تستطيع الوصول إلى المتغير a في دالة S_Names() عن طريق تمريره كوسيطة إلى الدالة. def S_Names(a): q = a.workbook.sheetnames print(q) return q ثم استدعاء الدالة S_Names() وتمرير المتغير a إليها لاستخراج أسماء أوراق العمل. S_Names(a)
  19. هناك بعض التعديلات التي يجب إجراؤها كالتالي: في الدالة __init__ التي تم إنشاؤها في الـ class W_book، يجب تعيين قيمة المتغيرات workbook و sheet إلى القيم التي يتم تمريرها إلى الـ constructor، وذلك باستخدام self للإشارة إلى المتغيرات الخاصة بالـ class. كما يجب تحميل الملف باستخدام load_workbook داخل الـ constructor. from openpyxl import load_workbook class W_book: def __init__(self, BATH): self.BATH = BATH self.workbook = load_workbook(BATH) self.sheet = self.workbook.active وعند استدعاء الكلاس من صفحة البرنامج، بإمكانك تمرير مسار الملف إلى الـ constructor لإنشاء كائن الـ class وتعيينه للمتغير a، كمثال: from cls1 import W_book a = W_book('D:\ABC.xlsx') الآن تستطيع الوصول إلى المتغيرات workbook و sheet باستخدام a.workbook و a.sheet على التوالي في باقي الأكواد، مثلاً، إذا كنت ترغب في سحب القيم من الأعمدة والصفوف، باستطاعتك استخدام a.sheet['A1'].value للوصول إلى قيمة الخلية A1.
  20. السبب الأساسي هو طريقة عمل دالة setTimeout في جافا سكريبت. فعند تنفيذ الحلقة for، يتم تكرار دالة setTimeout في كل تكرار بحيث تقوم بتعيين دالة لتنفيذها بعد فترة زمنية محددة، وهي 3 ثوانٍ في الكود. ولكن، تكون قيمة i قد اكتمل تنفيذها قبل أن تنفذ دالة setTimeout المعطاة، مما يعني أن جميع تكرارات الحلقة for ستكون قد اكتملت بسرعة في غضون فترة زمنية صغيرة، بحيث تكون قيمة i قد وصلت إلى القيمة 5. وعندما يحين الوقت لتنفيذ الدوال التي تم تعيينها في setTimeout، فإن قيمة i الحالية هي القيمة الأخيرة (5) في كل حالة، وبالتالي، سيتم طباعة "hi" خمس مرات في الوقت نفسه بعد انتهاء فترة الانتظار البالغة 3 ثوانٍ. والصحيح هو كتابة الكود كالتالي بوضع قيمة إنتظار بناءًا على قيمة i: for (let i = 0; i < 5; i++) { setTimeout(function() { console.log('hi: ' + i ); }, 1000 * (i + 1)); }
  21. أولاً عليك إنشاء اتصال بقاعدة البيانات باستخدام معلومات الاتصال الصحيحة: <?php $servername = "اسم_خادم_قاعدة_البيانات"; $username = "اسم_مستخدم_قاعدة_البيانات"; $password = "كلمة_مرور_قاعدة_البيانات"; $dbname = "اسم_قاعدة_البيانات"; // إنشاء الاتصال $conn = new mysqli($servername, $username, $password, $dbname); // التحقق من نجاح الاتصال if ($conn->connect_error) { die("فشل الاتصال بقاعدة البيانات: " . $conn->connect_error); } ?> بعد إنشاء الاتصال بقاعدة البيانات، تستطيعي استعمال استعلام SQL لاسترداد المرضى المسجلين عند الدكتور المعين. ولنفترض أن لديك معرّفًا فريدًا لكل دكتور في قاعدة البيانات، فستحتاج إلى استخدام هذا المعرّف لاسترداد المرضى المتعلقين به، وقومي بإضافة الكود التالي لاستعلام SQL لاسترداد المرضى: <?php $doctor_id = $_SESSION['doctor_id']; // تحصل على معرف الدكتور من جلسة الدخول // استعلام SQL لاسترداد المرضى المسجلين عند الدكتور المعين $sql = "SELECT * FROM المرضى WHERE doctor_id = $doctor_id"; $result = $conn->query($sql); if ($result->num_rows > 0) { // يوجد مرضى مسجلين عند الدكتور while ($row = $result->fetch_assoc()) { // قم بعرض بيانات المرضى هنا echo "اسم المريض: " . $row["اسم_المريض"] . "<br>"; echo "رقم الهوية: " . $row["رقم_الهوية"] . "<br>"; // وهكذا... } } else { // لا يوجد مرضى مسجلين عند الدكتور echo "لا يوجد مرضى مسجلين عندك حاليًا."; } // إغلاق الاتصال بقاعدة البيانات $conn->close(); ?> وانتبهي إلى أنه يجب أن يتم تغيير اسم الجدول "المرضى" وأسماء الأعمدة وأيضًا استخدام المتغير المناسب لمعرف الدكتور في قاعدة البيانات، كما يجب أن يكون لديك جلسة لتتتبع معرف الدكتور بعد تسجيل الدخول وقبل عرض الصفحة الخاصة بالدكتور.
  22. اعلم أن أي مسار تعليمي مثل مسار تعلم تطوير مواقع الويب، سيستغرق منك 6 أشهر للدراسة بشكل سليم في حال اتبعت مسار تعليمي جيد. لذلك عليك يجب أن تعلم أن تعلم أساسيات البرمجة من خلال لغة مثل C++ يستغرق وقت بالتأكيد، فإذا كان هناك وقت متاح أمامك فتعلم أولاً أساسيات البرمجة من خلال C++، وإذا كان الأمر صعب عليك وتجده معقد بالرغم من المحاولة للفهم والتطبيق، فتعلم بايثون في تلك الحالة. ثم انتقل إلى تعلم مسار الويب وبالطبع اللغات الأساسية هي HTML, CSS, JS وستجد على اليوتيوب الكثير من الدورات، أو بإمكانك إلقاء نظرة على دورة تطوير الويب باستخدام جافاسكريبت في أكاديمية حسوب. وبإمكانك تعلم أساسيات css و html من خلال دورة تطوير واجهات المستخدم في الأكاديمية، حيث أن المسار الأول من كل الدورات متاح لك بشكل مجاني، وبذلك ستتعلم HTML, CSS, JS بالإضافة إلى React و React Native و Electron.js. ونيصحتي إليك هي ألا تتعلم الخوارزميات وهياكل البيانات في البداية، بل الأفضل تعلمها بعد أن تقوم بإنشاء مشروع كبير والعودة لتعلمها وستجد أن لها فائدة فعلاً وستفهم أهميتها. ولكن ما عليك تعلمه هو أساسيات علوم الحاسب، مثل كيف يعمل الويب وأساسيات HTTP ومكونات الحاسوب مثل كيف يتم ترجمة الكود وكيف يتم معالجته من قبل المعالج والرامات والنظام. وبخصوص االواجهة الخلفية، فهى واحدة سواء للموقع أو تطبيق الهاتف، وعندما تتعلم الواجهة الخلفية ستفهم ما معنى أن تقوم بإنشاء API وترسل بيانات وتستقبل بيانات أو حذف وتحديث البيانات فيما يعرف باسم CRUD. وأنصحك بقراءة التالي:
  23. كلا المجالين، تعلم الآلة وتحليل البيانات، لهما ارتباط وثيق ببعضهما البعض ويمكن أن يتعاونا في مجالات عديدة، ف في مجال تعلم الآلة، تستخدم البيانات لتدريب النماذج وتطوير الخوارزميات التي تستخدم لتحليل البيانات واستخراج المعلومات القيمة منها. ولذلك عليك بتحديد المجال الذي تريده. وبالنسبة لفرص العمل لمحللي البيانات على مواقع العمل الحر أو عن بُعد، فالمجال يشهد نموًا كبيرًا وزيادة في الطلب على المحللين الماهرين، وهناك العديد من المنصات والمواقع التي توفر فرص عمل لمحللي البيانات على مستوى العالم في المواقع الأجنبية أو تفقد الوظائف على LinkedIn فستجد وظائف خاصة بتعلم الآلة وتحليل البيانات. انواع الوظائف في مجال تحليل البيانات
  24. الأمر يتطلب مبرمج للإطلاع على موقعك وتنفيذ ما تريده، وإذا كنت تريد إضافة ميزة المحادثة لموقعك فتستطيع ذلك عن طريق خدمات مثل Tawk.to وLiveChat وIntercom، أو إضافة زر لمحادثتك مباشرًة على واتساب أو فيسبوك ماسنجر.
  25. حاول استخدام المتغيرات StringVar المستقلة لتخزين القيم وتحديثها في جميع الأماكن المرتبطة بها. import tkinter as tk from tkinter import ttk def update_dropdown_values(): new_values = ["New Option 1", "New Option 2", "New Option 3"] selected_value.set("") # إعادة تعيين القيمة المحددة dropdown['values'] = new_values root = tk.Tk() selected_value = tk.StringVar(root) dropdown = ttk.Combobox(root, textvariable=selected_value, values=["Option 1", "Option 2", "Option 3"]) dropdown.pack() update_button = tk.Button(root, text="تحديث القائمة", command=update_dropdown_values) update_button.pack() root.mainloop() إنشاء متغير selected_value باستخدام StringVar لتخزين القيمة المحددة في القائمة المنسدلة، وعند تحديث قيمة القائمة، نقوم بإعادة تعيين القيمة المحددة باستخدام selected_value.set("") لضمان عدم وجود قيمة غير صحيحة محددة بعد تغيير القائمة. وتستطيع استخدام متغير selected_value في جميع القوائم المنسدلة المرتبطة به، وسيتم تحديث قيم القوائم المنسدلة تلقائيًا عند استدعاء الدالة update_dropdown_values التي تقوم بتحديث قيم القائمة.
×
×
  • أضف...