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

Mustafa Suleiman

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

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

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

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

    365

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

  1. سأوضح لك الخطوات اللازمة لذلك، وتستطيعي محاولة تنفيذ المطلوب وعرض الكود في حال واجهتك مشكلة. أولاً عليك إنشاء صفحة تسجيل الدخول (login.php) التي تحتوي على نموذج لإدخال اسم المستخدم وكلمة المرور. ثم بعد تقديم النموذج، قومي بالتحقق من صحة بيانات تسجيل الدخول في ملف PHP الخاص بمعالجة النموذج (process_login.php) باستخدام استعلام SQL للتحقق من وجود اسم المستخدم وكلمة المرور المقدمة في جدول المستخدمين. وإذا تم التحقق من صحة بيانات تسجيل الدخول بنجاح، عليك بجلب نوع المستخدم المتناسب من قاعدة البيانات باستخدام استعلام SQL وإنشاء جداول منفصلة لكل فئة من المستخدمين (أطباء، ممرضين، مرضى) وتخزين بياناتهم فيها. استنادًا إلى نوع المستخدم، تستطيعي توجيه المستخدم إلى صفحة مخصصة لكل فئة بالإعتماد على الدالة header() في PHP لإعادة توجيه المستخدم إلى الصفحة المطلوبة، على ومثلاً إذا كان المستخدم طبيبًا، فبإمكانك توجيهه إلى صفحة الأطباء (doctors.php). وفي صفحات الأطباء والممرضين والمرضى، يتم عرض البيانات المناسبة من قاعدة البيانات باستخدام استعلامات SQL المناسبة وجلب البيانات وعرضها في الصفحة وفقًا لتصميمك.
  2. في الوقت الحالي، دورات أكاديمية حسوب مدفوعة وهي غير مجانية لكون الدورة تم إعدادها بعناية واستغرقت الكثير من الوقت من قبل فريق عمل لإخراجها بجودة تستحق وتليق بمشتركي أكاديمية حسوب من خلال 416 فيديو لشرح أساسيات بايثون والتطبيق عليها ثم إطار العمل جانغو Django وFlask وتطوير تطبيقات أودو Odoo وأيضًا تحليل البيانات وأساسيات تعلم الآلة Machine Learning. في بعض الأوقات يوجد خصومات في المناسبات مثل شهر رمضان والجمعة البيضاء، وكوبونات في أوقات متفرقة من العام، تستطيع سؤال مركز المساعدة عن وجود خصومات حاليًا أم لا. وبخصوص لغة بايثون هناك دروس ومقالات في موسوعة حسوب وأكاديمية حسوب وأيضًا كتابة لتعلم بايثون: دروس بايثون في أكاديمية حسوب شرح لغة بايثون Python في موسوعة حسوب
  3. لا مشكلة في ذلك، وفي العمل يتعين عليك استخدام كل الأدوات التي من شأنها تسريع وتيرة عملك وتحقيق إنتاجية أفضل وتوفير الوقت للجزء المعقد من المشروع، بينما المهام المتكررة أو السهلة نستخدم أدوات مساعدة لتنفيذها، وإن لم تقم باستخدامها ستجد أن زملائك أفضل إنتاجية منك ومن الممكن أن يتم استبدالك. لكن في حال أنك ما زلت تتعلم البرمجة، فذلك من ِشأنه أن يضرك وتظن أنه يفيدك، عليك بكتابة الكود بيديك والتفكير طويلاً عن حلول والبحث واكتشاف المصادر والقراءة من هنا وهنا وتجميع آراء مختلفة، حتى لو كان الكود الخاص بك سيء لكنه يعمل وهو المطلوب في البداية لتكوين مهارة التفكير المنطقي لديك والقدرة على استخدام معرفتك البرمجية في حل المشاكل وتنفيذ المشاريع. ولكن باستخدام أدوات الذكاء الاصطناعي في بداية تعلمك، فاسمح لي بقول أنك ستصبح Code monkey حتى لو كنت تفهم الكود فأنت لم تفكر في حل المشكلة بل سيتم تدريب عقلك على الإتجاه مباشرًة للبحث عن حل جاهز ونسخه دون التمعن فيه كثيرًا بل قراءة الشرح ونسخ الكود فقط. عليك بترك ذلك كأخر ملاذ لك، والتفكير أولاً في حل للمشكلة وتقسيمها لأجزاء صغيرة ثم محاولة التطبيق، ثم البحث عن كيفية تنفيذ أمر أو حل لمشكلة ما، وهكذا لحين أن تصل لحل. وبعد أن تتمكن من تعلم البرمجة والتطبيق على أكثر من مشروع وإنهاء المسار البرمجي Roadmap للمجال الذي اخترته، هنا تستطيع الإعتماد على أدوات الذكاء الاصطناعي. فستصبح قادر على التفريق بين الصحيح والخطأ وتوجيه الذكاء الاصطناعي لتنفيذ ما تريد والتصحيح له أيضًا فهو يخطيء في أحيان كثيرة ويجب استخدامه بدراية. وستجد أن إنتاجيتك بمستوى مختلف، وأيضًا هناك copilot في vscode لكن مشكلته أنه غير مجاني. وببساطة نصيحتي إليك هي بالتركيز على الأساسيات ولغة البرمجة الأولى لك، حتى تصبح قادر على التحكم في أدوات الذكاء الاصطناعي وتوجيهها لا أن توجهك هي.
  4. أولاً كل المصفوفات هي قائمة list ولكن يختلف العمق بناءًا على وجود مصفوفات أخرى داخل القائمة. إذا كنت تقصد في لغة بايثون فالفرق كالتالي: 1- المصفوفات الأحادية (Unidimensional Arrays) تعرف أيضًا باسم قوائم (Lists). مكونة من مجموعة مرتبة من العناصر في صف واحد فقط. يتم الوصول إلى العناصر بواسطة مؤشر يشير إلى الموضع الذي تمثله العناصر في القائمة. مثال: my_list = [1, 2, 3, 4, 5] print(my_list[0]) # العنصر في الموضع الأول، الناتج: 1 print(my_list[2]) # العنصر في الموضع الثالث، الناتج: 3 مؤشر (index) يشير إلى الموضع الذي ترغب في الوصول إليه. 2- المصفوفات الثنائية (Bidimensional Arrays) تُعرف باسم المصفوفات ذات البُعدين (2D Arrays) أو الجداول (Tables). تتكون من صفوف وأعمدة، حيث تحتوي على مجموعة من العناصر المترابطة في صفوف وأعمدة. نستطيع أن نصل العناصر باستخدام مؤشرين يُحددان الموقع الذي تتواجد فيه العناصر في الجدول. مثال: my_table = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(my_table[0][0]) # العنصر في الموضع (0, 0)، الناتج: 1 print(my_table[1][2]) # العنصر في الموضع (1, 2)، الناتج: 6 نستخدم اثنين من المؤشرات، الأول يحدد الموضع في الصفوف (رقم الـ array) والثاني يحدد الموضع في الأعمدة (مكانه في الـ array). 3- المصفوفات الثلاثية (Tridimensional Arrays) يطلق عليها المصفوفات ذات الأبعاد الثلاث (3D Arrays). تتكون من مجموعة من العناصر المترابطة في صفوف وأعمدة وعمق. نصل إلى العناصر باستخدام ثلاثة مؤشرات تحدد الموقع الذي تتواجد فيه العناصر في المصفوفة الثلاثية. مثال: my_3d_array = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]] print(my_3d_array[0][0][0]) # العنصر في الموضع (0, 0, 0)، الناتج: 1 print(my_3d_array[1][0][1]) # العنصر في الموضع (1, 0, 1)، الناتج: 6 تستخدم ثلاثة مؤشرات، الأول يحدد الموضع في الصفوف، الثاني يحدد الموضع في الأعمدة، والثالث يحدد الموضع في العمق. بمعنى: my_3d_array[1] تشير إلى العنصر في المؤشر 1 في المصفوفة الثلاثية. هنا، أي المصفوفة: [[5, 6], [7, 8]] my_3d_array[1][0] تعني العنصر في المؤشر 0 في المصفوفة [[5, 6], [7, 8]] بمعنى المصفوفة: [5, 6] my_3d_array[1][0][1] وهنا نعني العنصر في المؤشر 1 في المصفوفة: [5, 6] أي أنه يشير إلى العنصر 6.
  5. قبل الإنتقال إلى دورة أخرى، عليك أولاً برؤية المسار الأول من الدورة حيث أن جميع المسارات الأولى متاحة لك بشكل مجاني، وتستطيع الوصول للدورات من خلال تبويب دوراتي. ويجب تحديد المسار الذي تريده قبل إختيار الدورة، وإذا كنت غير قادر على التحديد فتستطيع قراءة التالي: وقد يفيدك البدء بدورة علوم الحاسوب وأساسيات البرمجة من أجل إختيار المجال الذي تريده عن دراية وفهم. وأيضًا هل لديك الوقت الكافي للتعلم أم تريد الوظيفة في أقرب وحد، فإذا كنت تريد الوظيفة في اٌقرب وقت فعليك بتعلم المطلوب في سوق العمل وليس ما تريده، وقد تم إيضاح ذلك هنا: وبخصوص النصائح وعدد الساعات فأنصحك بالإطلاع على التالي فقد تم الإجابة بشكل وافي بخصوص ما تريده:
  6. أرجو منك طرح السؤال أسفل فيديو الدورة الخاص بالسؤال ليتم مساعدتك بشكل أفضل، وطرح الأسئلة العامة هنا.
  7. بالنسبة للمصطلحات الإنجليزية فهي قليلة ويتم الشرح بلغة عربية فصحى وتعريب ما أمكن من المصطلحات، ويجب أن تعلم أن لغة البرمجة هي اللغة الإنجليزية فأنت بحاجة إليها بلا شك فيما بعد حيث أن المستندات والشروحات المتقدمة باللغة الإنجليزية، وأيضًا عند البحث عن حل لمشكلة تواجهك ستجد أنها باللغة الإنجليزية، وتستطيع دراسة اللغة بجانب البرمجة من خلال قناة طليق أو ذي أمريكان إنجليش على اليوتيوب. وأنا أتحدث بعد الإنتهاء من الدورة، ولا تدع ذلك يحبطك لكن عليك معرفة ما أنت بحاجة إليه مجرد قدرة على القراءة والاستماع فقط في البداية، وتستطيع طرح الأسئلة هنا في أكاديمية حسوب أو حسوب I/O وسيتم الإجابة عليك ومساعدتك من قبل الجميع. وفي بداية أي دورة قد يبدوا الأمر ممل ولا يوجد الكثير من الكود، والسبب هو أنه يتم شرح الأساسيات والجانب النظري الخاص بها لكي يتم فهم الكود الذي سيتم كتابته، فحتى عند كتابة الكود ستحتاج إلى التفكير وفهم ما تريد تنفيذه قبل كتابة أي كود، ولا نهرع أبدًا لكتابة الكود بدون التفكير في الطريقة التي سنستخدمها أولاً والكود هو آخر خطوة. عليك بالإهتمام جيدًا بالأساسيات وطريقة عمل الكود وقواعد كتابته، وإذا وجدت أمر غير واضح لك تستطيع السؤال أسفل فيديو الدورة الخاص بالسؤال، وطرح الأسئلة العامة هنا في قسم أسئلة البرمجة. وبخصوص التنفيذ، فالأمر بحاجة إلى التدرج، أولاً عليك بتطبيق ما تعلمته على نماذج صغيرة من خلال إعادة تنفيذ ما شرحه المدرب بمفردك لا مجرد المشاهدة السلبية فقط، بل يجب الكتابة مع المدرب، وبعد الإنتهاء يجب إعادة التنفيذ مرة أخرى بمفردك، ولا مشكلة إذا وجدت أنك نسيت بعض الأشياء أو لم تتمكن من التنفيذ واحتجت إلى المراجعة، فذلك طبيعي وهو المطلوب من تلك الإعادة لتثبيت ما تعلمته.
  8. ستحتاج إلى إنشاء نموذج استمارة من خلال HTML ثم استخدام JS من أجل إرسال البيانات إلى الخادم سواء كان ذلك الخادم بلغة PHP أو JS في بيئة Node.js. وإليك مثال للنموذج وكود إرسال البيانات لخادم بلغة PHP: <center> <form id="myForm"> <br> <input id="email" type="email" name="email" placeholder="Enter email" required><br> <br> <input id="pass" type="password" name="password" placeholder="Enter Password" required><br> <br> <input id="button" type="submit" value="Submit"> </form> <script> document.getElementById("myForm").addEventListener("submit", async function(event) { event.preventDefault(); // يمنع إعادة تحميل الصفحة بعد النقر على زر الإرسال // احصل على قيمة الحقول const email = document.getElementById("email").value; const password = document.getElementById("pass").value; try { // قم بإرسال البيانات إلى الخادم باستخدام fetch و async/await const response = await fetch("send_email.php", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: `email=${encodeURIComponent(email)}&password=${encodeURIComponent(password)}` }); if (response.ok) { // تم إرسال البيانات بنجاح console.log("Data sent successfully"); // يمكنك إضافة رسالة تأكيد هنا } else { throw new Error("Failed to send data"); } } catch (error) { console.error(error); // يمكنك إضافة رسالة خطأ هنا } }); </script> </center> والآن، على الجانب الخادم (Server-Side)، عليك بإنشاء ملف PHP جديد يسمى "send_email.php" (أو أي اسم آخر تفضله)، ثم بوضع الكود التالي لمعالجة البيانات وإرسالها إلى البريد الإلكتروني: <?php if ($_SERVER["REQUEST_METHOD"] === "POST") { // استقبال البيانات من النموذج $email = $_POST["email"]; $password = $_POST["password"]; // تهيئة الرسالة البريدية $to = "your_email@example.com"; // البريد الإلكتروني الذي ستستلم عليه الرسالة $subject = "New Form Submission"; $message = "Email: " . $email . "\n" . "Password: " . $password; $headers = "From: your_email@example.com"; // البريد الإلكتروني الذي سيظهر في حقل المرسل // إرسال البريد الإلكتروني if (mail($to, $subject, $message, $headers)) { // تم إرسال البريد بنجاح echo "Email sent successfully"; } else { // حدث خطأ أثناء إرسال البريد echo "Failed to send email"; } } ?> مع استبدال "your_email@example.com" بعنوان البريد الإلكتروني الذي ترغب في استلام الرسائل عليه.
  9. قبل أي شيء، لكي لا تصاب بالإحباط، لا تتعلم ما تريده ولديك شغف به، بل تعلم المطلوب في سوق العمل الذي تريد العمل به. وعليك أن تسأل نفسك سؤال بسيط، أين أريد أن أعمل وأمامك 3 خيارات (مواقع العمل الحر العربية - مواقع العمل الحر الأجنبية - الشركات في سوق العمل المحلي أو عن بُعد في الدول العربية). وعلى مواقع العمل الحر العربية ستجد أن أغلب المطلوب هو PHP ولارافيل و وورد بريس وذلك أمر طبيعي وستجد أيضًا بعض الوظائف للـ .NET وأحيانًا وظائف لـ React لكن المراد هو النسبة الأكبر من الوظائف. أما مواقع العمل الحر الأجنبية فستجد أن جميع المجالات مطلوبة لكونه سوق عالمي، وبالطبع هناك نسبة كبيرة لـ PHP ولارافيل و ووردبريس. أما الشركات في السوق المحلي وفي الدول العريية فستجد أن أغلب المطلوب هو PHP ولارافيل و ووردبريس وأيضًأ .NET. وبخصوص الواجهة الأمامية فستجد أن Angular مطلوبة وخاصًة مع إطار .NET، وأيضًا ستجد بعض الوظائف تطلب React وبعضها يطلب Vue.js ومن وجهة نظري من الأفضل تعلم React لكونها مطلوبة بنسبة أكبر وستفتح لك الكثير من الإمكانيات. وأيضًا ستجد وظائف node.js في الواجهة الخلفية لكنها تتطلب خبرة سنة أو سنتين على الأقل، ونفس الأمر بالنسبة لمطوري React ستجد مطلوب خبرة سنة أو سنتين على الأقل، بينما لو أصبحت Full-stack فستجد فرصة بخبرة أقل. وهناك أمر هام يجب أن تنتبه إليه، 80% من الوظائف المعروضة هي للشركات والأعمال الصغيرة، لذلك ستجد أن PHP ولارافيل و ووردبريس مطلوبين بكثرة. وبالطبع Next.js مطلوبة لكن ستحتاج إلى خبرة سنة أو سنتين لكي يتم قبولك في سوق العمل سواء من خلال بناء المشاريع أو على العمل على مواقع العمل الحر عليك بإلقاء نظرة على مواقع التوظيف مثل LinkedIn ومواقع العمل الحر مثل مستقل وخمسات وبعيد، وستكتشف ما هو المطلوب والخبرة المطلوبة لكل مجال أو لغة أو إطار، وسيفيدك الإطلاع على التالي:
  10. أرفق مجلد المشروع لديك بعد ضغطه لتفقد المشكلة.
  11. ما يظهر هو أنه هناك خطأ "Syntaxerror: EOL while scanning string literal" أي خطأ في تنسيق سلسلة النص في ملف معين، وبالتالي لا يمكن تنفيذ الأمر بنجاح. وربما لديك تعارض في إصدارات الحزم، حاول تثبيت الحزم من خلال أمر: npm install --legacy-peer-deps وإذا استمرت المشكلة حاول تثبيت مكتبة node-gyp بأحدث إصدار، من خلال الأمر التالي: npm i node-gyp@latest ثم إعادة تثبيت الحزم من خلال الأمر السابق الذي أخبرتك به وأيضًا حاول استخدام إصدار 16 أو 18 من node.js.
  12. عليك أولاً بتفقد هل يوجد أخطاء في الكونسول لديك؟ وفي حال عدم وجود أخطاء، فقم بتنفيذ الأمر التالي: php artisan optimize:clear وهو أمر يشمل عمليات مسح ذاكرة التخزين المؤقتة المختلفة في Laravel من خلال أمر واحد فقط. وإذا كنت تستخدم Laravel Mix أو Webpack لتجميع ملفات الفرونت إند، فعليك بإعادة تجميعها بعد التعديل ببتشغيل الأمر المناسب لتجميع الملفات، مثل npm run dev أو npm run watch. وأيضًا إعادة تشغيل الخادم وتشغيل أمر php artisan serve.
  13. ما فهمته هو أنك تريدين عرض النتائج بحسب رقم الجلوس من ملف Excel في موقع الويب باستخدام JavaScript، ولفعل ذلك يلزم استخدام مكتبة تعامل مع ملفات Excel مثل xlsx أو exceljs. وإليك مثال: أولاً عليك تضمين مكتبة xlsx في صفحة HTML كالتالي: <script src="https://unpkg.com/xlsx/dist/xlsx.full.min.js"></script> ثم إنشاء واجهة مستخدم بسيطة لإدخال رقم الجلوس وزر البحث في ملف HTML أيضًا: <input type="text" id="seatNumber" placeholder="رقم الجلوس"> <button onclick="searchResult()">ابحث</button> وإضافة وظيفة searchResult() إلى النص البرمجي للصفحة للقيام بالبحث وعرض النتيجة: const searchResult = async () => { const seatNumber = document.getElementById('seatNumber').value; try { const response = await fetch('path/to/your/excel/file.xlsx'); const arrayBuffer = await response.arrayBuffer(); const data = new Uint8Array(arrayBuffer); const workbook = XLSX.read(data, { type: 'array' }); // قم بقراءة ورقة العمل الأولى const worksheet = workbook.Sheets[workbook.SheetNames[0]]; // حول البيانات إلى كائن JSON const jsonData = XLSX.utils.sheet_to_json(worksheet); // البحث عن رقم الجلوس const result = jsonData.find(row => row['رقم الجلوس'] === seatNumber); // عرض النتيجة if (result) { alert('تم العثور على الجلوس!'); console.log(result); } else { alert('لم يتم العثور على الجلوس!'); } } catch (error) { console.error(error); } }; ولكي يعمل السكريبت عليك بتضمينه بعد استيراد مكتبة XLSX كالتالي: <script src="https://unpkg.com/xlsx/dist/xlsx.full.min.js"></script> <script defer src="index.js"></script> وقمت باستخدام خاصية defer من أجل ضمان تشغيل السكريبت بعد تحميل عناصر HTML.
  14. لا مشكلة في الكتابة على مجلد Windows/Temp، فهو مخصص لكي تقوم التطبيقات بكتابة الملفات المؤقتة فيه، والملفات المؤقتة هي ملفات يتم إنشاؤها بواسطة التطبيقات وتستخدم لفترة قصيرة من الزمن، ثم يتم حذفها من قبل التطبيق أو من قبل نظام التشغيل. وإذا أردت تغيير مكان الملفات المؤقتة إذا كنت تستخدم لاراجون قم بفتح ملف php.ini الخاص بتكوين PHP، ثم ابحث عن سطر يحتوي على "upload_tmp_dir" في ملف php.ini وقم بإلغاء تعليقه عن طريق إزالة علامة التعليق "#" في بداية السطر. ثم تعيين قيمة "C:/laragon/tmp" لـ "upload_tmp_dir"، ويعني ذلك أن الملفات المؤقتة التي تم رفعها ستخزن في المجلد "C:/laragon/tmp".
  15. بالطبع ما هو سؤالك؟
  16. تستطيع الاستزادة من مصادر مختلفة سواء عبر موسوعة حسوب أو الدروس والمقالات في أكاديمية حسوب، حيث يوجد قسم خاص بمقالات ودروس CSS وقسم أيضًا للغة HTML ونفس الأمر للغة جافاسكريبت. عليك بالقراءة والبحث عما تريد فهمه من المصادر السابقة، ولديك يوتيوب أيضًا فبه شروحات كثيرة أيضًا في حال كنت تريد فهم أمر معين، وتستطيع السؤال أسفل فيديو الدورة بعد البحث وسيتم شرحه لك باستفاضة مع أمثلة للتوضيح. وعليك بالبحث عن مشاريع للمبتدأين على يوتيوب ومحاولة التطبيق على ما تعلمته وذلك من خلال لغات HTML,CSS, JS وبدون استخدام أي مكتبة من أجل تقوية الأساسيات لديك والتعلم بشكل أسهل فيما بعد لكون الأساسيات لديك جيدة. وما أحاول توصيله لك، هو ألا تكتفي بأي دورة مهما كانت، عليك دائمًا بالبحث والقراءة والاستزادة والتطبيق من مصادر أخرى والسؤال بعد المحاولة والتفكير، وستجد في النقاش التالي معلومات مفيدة ومواقع للحصول على تصاميم للتطبيق على ما تعلمته.
  17. لا يوجد دورة متخصصة في الأمن السيبراني في أكاديمية حسوب، والدورة الأقرب المناسبة لك في أكاديمية حسوب هي دورة علوم الحاسوب وقد تم ذكرها لك، حيث أنك بحاجة أولاً إلى دراسة الأساسيات قبل إختيار أي مجال في البرمجة من أجل تحديد المجال على دراية وليس مجرد معلومات سطحية أو حماس زائد. أنت حاليًا في سن صغير، تستطيع تعلم ما تريد ولا علاقة بسوق العمل بإختيارك وأنا أتكلم على الشركات، فالأمر راجع للسن القانوني وهو 18وأحيانًا 20 و21 في بلدان أخرى، وأيضًا أنت بحاجة إلى شهادة جامعية للعمل في شركة وأنا أتكلم على الشركات المعروفة التي لديها قواعد ونظام. ولكن يوجد شركات أخرى وبها رواتب جيدة، تستطيع العمل بها بدون شهادة وبمهاراتك وخبرتك فقط وفي سن 18 عام لا مشكلة، فأنا أعرف أشخاص في كلية حاسبات ومعلومات ولم يتخرجوا بعد، ويعملون في شركات في السوق المحلي ولكن بالطبع بشكل غير رسمي. وهنا أنت بحاجة إلى إتخاذ قرار، هل تريد وظيفة لدعم نفسك ماديًا في الوقت الحالي؟ ففي تلك الحالة يجب تعلم المطلوب في سوق العمل لديك وليس ما تريده، وفي حال كان ما تريده مطلوب فقد يتم طلب سنوات خبرة كسنة أو سنتين كحد أدنى مثلاً، لذلك عليك بتفقد الوظائف المطلوبة في مجال البرمجة في السوق المحلي لديك والحد الأدنى للخبرة المطلوبة وقد أوضحت ذلك هنا: لكن على مواقع العمل الحر، تستطيع العمل في أي سن طالما تمتلك المهارة اللازمة لتنفيذ المشاريع المطلوبة بإحترافية، لكن في المواقع العربية لن تجد مشاريع خاصة بمجال الأمن السيبراني مطلوبة بكثرة. وهناك سؤال مماثل لسؤالك، ستجد به إجابات مفيدة لك:
  18. سأشرح لك الطريقة باستخدام خدمة Firebase Cloud Messaging (FCM) بدلاً من خدمة Pusher. أولاً عليك تثبيت مكتبة FCM في مشروع Laravel، وتتوفر حزمة مثل "brozot/laravel-fcm" للقيام بذلك عن طريق تشغيل الأمر التالي: composer require brozot/laravel-fcm بمجرد تثبيت الحزمة، قم بتعديل ملف .env الخاص بتطبيق Laravel لتعيين الإعدادات الخاصة بـ FCM، ثم إضافة معلمة FCM_SERVER_KEY واستخدم قيمة مفتاح الخادم الخاص بك كقيمة لها. FCM_SERVER_KEY=YOUR_FCM_SERVER_KEY ثم تعديل ملف config/broadcasting.php لتكوين خادم البث الخاص بك بتعيين قيمة driver إلى 'fcm' واستبدل قيم المعلمات الأخرى بما يتناسب مع احتياجاتك، وهناك معلمات مثل fcm_options و log_enabled و http_options التي يمكنك ضبطها كما تشاء، كالتالي: 'fcm' => [ 'driver' => 'fcm', 'log_enabled' => true, 'http_options' => [ // تعديل هذه القيم حسب احتياجاتك 'timeout' => 30, 'proxy' => null, ], 'fcm_options' => [ // تعديل هذه القيم حسب احتياجاتك 'priority' => 'normal', 'time_to_live' => 60, ], ], والآن حددد FCM كقيمة لمفتاح BROADCAST_DRIVER في ملف .env لديك عن طريق إضافة السطر التالي: BROADCAST_DRIVER=fcm وأخيرًا تحديث ملف config/app.php لاستخدام مزود الخدمة المناسب، وإضافة السطر التالي إلى مصفوفة providers: Brozot\LaravelFcm\LaravelFcmServiceProvider::class,
  19. أرجو منك التعليق أسفل فيديو الدورة المتعلق بالسؤال لمساعدتك بشكل أفضل، وطرح الأسئلة العامة هنا في قسم أسئلة البرمجة. وبخصوص سؤالك، فهو يتعلق بإطار لارافيل، ونستخدم ذلك الكود في عملية إنشاء جدول في قاعدة البيانات باستخدام ميزات مولد الكود الخاص بلارافيل (Laravel's code generator)، لتعريف حقل 'username' كحقل نصي (string) في جدول قاعدة البيانات. وبدون معرفة المشروع أو المطلوب، فعامًة السبب هو: 1- مرونة في استخدام الحقل، فعندما تقوم بتعريف الحقل 'username' دون تحديد الخاصية unique، تستطيع استخدامه بأكثر من سجل في الجدول. قد يكون هذا مفيدًا في بعض الحالات، مثل السماح للمستخدمين بتكرار أسماء المستخدمين في حالات محددة. 2- التحقق من الحقل المميز عند الحاجة بدلاً من إجبار الحقل على أن يكون فريدًا في تعريف الجدول، وبإمكانك التحقق من فرادة القيمة المدخلة عند عملية الإدخال أو التحديث، واستخدام القيود أو التحقق من الفرادة في طبقة التطبيق أو قاعدة البيانات نفسها. 3- الحاجة إلى مزيد من الخصائصالأخرى للحقل 'username' بجانب فرادته، مثل الحد الأقصى لعدد الأحرف المسموح بها أو قواعد التحقق الأخرى، وربما من الأفضل تحديد تلك الخصائص في مكان منفصل لتحقيق أقصى قدر من المرونة وإعادة الاستخدام. أي يعتمد استخدام خاصية unique على احتياجات المشروع وتصميم قاعدة البيانات، فقد تحتاج في بعض الحالات إلى تحديد الحقل كفريد في تعريف الجدول، في حين أن في حالات أخرى يمكن التحقق من فرادة القيمة في وقت لاحق أو استخدام خصائص إضافية.
  20. لا يوجد فرق، فكلاهما يوفران لك نفس الشهادة طبقًا لقرار المجلس الأعلى للجامعات، وبالتالي الأمر يعتمد على مجموعك في ثالثة ثانوي والتنسيق الخاص بك، ولكن بالطبع الكلية أفضل من حيث مستوى الطلبة والطموح لديهم، فغالبًا في المعاهد ستجد أن أغلب من دخلها يرغب في الحصول على الشهادة فقط. وأيضًا مستوى الدراسة في الكلية أصعب من المعاهد، ووبغض النظر عن التكاليف، فالكلية تكاليفها منخفضة مقارنًة بالمعاهد التي تعتبر كل ورقة بها لها ثمن. وانتبه إلى أن معهد حاسبات ومعلومات يقبل القسم العلمي (رياضة وعلوم) للثانوية العامة وليس أدبي أو ثانوي أزهري أي مثله مثل الكلية، وأيضًا قد يختلط الأمر على البعض ويظن أن معد نظم إدارية هو نفسه معهد حاسبات ومعلومات ولكن ذلك غير صحيح، فتخصص معهد نظم إدارة هو المحاسبة.
  21. سبب المشكلة هو أن المسار الذي تحاول استخدامه فارغ، أي عدم تعيين المسار الصحيح لحفظ الصورة المرفوعة، وأنت تستخدم الدالة store() لحفظ الصورة، وتحدد المجلد "posts" وتستخدم القرص المحلي "public". وللتأكد من أن المشكلة ليست بسبب خطأ في المسار، هل تحققت من وجود المجلد "posts" في القرص المحلي "public" في مشروعك؟ وإذا كان المجلد غير موجود، فتستطيع إنشائه يدويًا. وإذا كان المجلد موجودًا ولا تزال تواجه المشكلة، فربما هناك خطأ آخر في الطريقة التي ترفع بها الصورة، ومن الأفضل التحقق من قيمة $request['image'] والتأكد من أنها صحيحة وتحتوي على الصورة المطلوبة. وربما لديك مشكلة في الكتابة إلى مجلد temp في C:\Windows\Temp عليك بالضغط بزر الفأرة الأيمن على مجلد temp ثم اختيار properties ثم ستجد خيار باسم read-only قم بإزالة العلامة ثم ok للحفظ. وأيضًا تستطيع استخدام دالة dd لمعرفة المسار كالتالي: dd($request['image']); وسيتم عرض معلومات المتغير $request['image'] بشكل مفصل، بما في ذلك المسار وأي بيانات أخرى متعلقة بالصورة.
  22. المطلوب هو إنشاء دالة تستقبل عدد الرصاصات التي يحملها البطل (bullets) وعدد التنانين المحيطة بالقلعة (dragons)، وتقوم بإرجاع قيمة True إذا كان البطل قادرًا على الفوز على جميع التنانين والبقاء على قيد الحياة، وإلا فإنها ترجع قيمة False. والكود لديك لا يحقق الشروط المطلوبة لحل السؤال بشكل صحيح، فأنت نفذت الشرط (bullets >= 2) ولكنك لم تقدم الشرط الثاني (dragons == 2) بشكل صحيح. وبناءًا على المطلوب، ليس هناك حاجة محددة لعدد الرصاص المطلوب أن يكون 2 فقط، بل يمكن أن يكون أي عدد من الرصاصات المتاحة، أيضًا يجب أن تكون قادرًا على معالجة عدد أكبر من 2 تنين. أي تعديل الكود ليصبح كالتالي: def can_defeat_dragons(num_dragons, num_bullets): return num_dragons <= num_bullets // 2 وباستدعاء الدالة can_defeat_dragons(4, 8 ), سترجع القيمة True لأن البطل يحمل 8 رصاصات وهناك 4 تنانين، وبما أن 8 // 2 = 4، فإن الشرط يتحقق ويمكن للبطل الفوز على جميع التنانين، كالتالي: print(can_defeat_dragons(4, 8))
  23. ما فهمته هو أنك تريد منع تحديث الصفحة عند التحقق من الإجابة وعرض السؤال التالي، وذلك ممكن بالشكل التالي: أولاً عليك تجهيز ملف PHP الذي يقوم بالتحقق من الإجابة وجلب السؤال التالي، ويجب أن يكون الملف قادرًا على استقبال طلبات AJAX وإرجاع البيانات في تنسيق مناسب مثل JSON. وفي صفحة الويب الخاصة بك، قم بإنشاء وظيفة JavaScript لإرسال طلب AJAX إلى الملف PHP والتحقق من الإجابة. وهناك مكتبات مثل Axios أو jQuery لتبسيط عملية إرسال الطلب AJAX. مثلاً لو استخدمنا jQuery سيكون الكود لديك بالشكل التالي: $.ajax({ url: 'تعيين-المسار-إلى-ملف-ال-PHP.php', method: 'POST', data: { إجابة: الإجابة_المدخلة }, dataType: 'json', success: function(response) { // هنا يمكنك التعامل مع الاستجابة المستلمة من الملف PHP // على سبيل المثال، يمكنك التحقق من صحة الإجابة وإظهار رسالة للمستخدم أو إظهار السؤال التالي }, error: function() { // في حالة حدوث خطأ أثناء إرسال الطلب } }); وعليك استبدال 'تعيين-المسار-إلى-ملف-ال-PHP.php' بالمسار الصحيح إلى ملف PHP الذي يقوم بالتحقق من الإجابة وجلب السؤال التالي، و'الإجابة_المدخلة' تمثل الإجابة التي يقوم المستخدم بإدخالها. ثم في ملف PHP، قم بمعالجة الطلب الوارد وتنفيذ العمليات المطلوبة، وتستطيع التحقق من الإجابة المدخلة والقيام بأي عمليات أخرى مثل استعلام قاعدة البيانات واسترداد السؤال التالي، ثم، قم بإرجاع البيانات في تنسيق JSON. وباستطاعتك استخدام الدالة json_encode() في PHP لتحويل بياناتك إلى تنسيق JSON كالتالي: // قم بمعالجة البيانات وجلب السؤال التالي $nextQuestion = // احصل على السؤال التالي من قاعدة البيانات أو من أي مصدر آخر // قم بتشكيل البيانات في صيغة JSON $response = array('question' => $nextQuestion); echo json_encode($response); وستعمل دالة json_encode() على تحويل المصفوفة $response إلى صيغة JSON وإرجاعها للواجهة. وعندما تستقبل الاستجابة في وظيفة success في الجزء الخاص بالJavaScript، بإمكانك التحقق من البيانات المستلمة والتعامل معها وفقًا لمتطلبات التطبيق لديك، وتحديث الواجهة لعرض السؤال التالي أو عرض رسالة للمستخدم بناءًا على البيانات المستلمة. أي في الواجهة سيكون لديك كود JavaScript يشبه التالي: success: function(response) { // هنا يمكنك التعامل مع الاستجابة المستلمة من الملف PHP // على سبيل المثال، يمكنك التحقق من صحة الإجابة وإظهار رسالة للمستخدم أو إظهار السؤال التالي if (response.question) { // عرض السؤال التالي } else { // عرض رسالة للمستخدم } } وذلك في حالة استخدام jQuery أما إذا أردت استخدام جافاسكريبت النقية بدون مكتبة، فسيكون الكود كالتالي: async function fetchData() { try { const response = await fetch('تعيين-المسار-إلى-ملف-ال-PHP.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ إجابة: الإجابة_المدخلة }) }); if (response.ok) { const data = await response.json(); // هنا يمكنك التعامل مع البيانات المستلمة if (data.question) { // عرض السؤال التالي } else { // عرض رسالة للمستخدم } } else { // في حالة حدوث خطأ في الاستجابة throw new Error('حدث خطأ أثناء استدعاء الخادم'); } } catch (error) { // في حالة حدوث خطأ أثناء الطلب console.error(error); } } fetchData(); حيث تستخدم fetch لإجراء طلب POST إلى الملف PHP المحدد، وتعيين رأس المحتوى لـ 'application/json' لإرسال بيانات الطلب في تنسيق JSON باستخدام JSON.stringify(). وبعد الحصول على الاستجابة من الخادم، نتحقق من صحة الاستجابة (response.ok) وفحصها باستخدام response.json() لتحويل الاستجابة إلى كائن JSON. أما في حالة حدوث أخطاء، ستتم معالجتها في قسم الـ catch، ومن خلالها تستطيع تنفيذ الإجراءات المناسبة مثل عرض رسالة الخطأ أو تسجيلها في وحدة التحكم. أما في حالة استخدام مكتبة Axios فسيكون الكود كالتالي: import axios from 'axios'; async function fetchData() { try { const response = await axios.post('تعيين-المسار-إلى-ملف-ال-PHP.php', { إجابة: الإجابة_المدخلة }); // هنا يمكنك التعامل مع البيانات المستلمة if (response.data.question) { // عرض السؤال التالي } else { // عرض رسالة للمستخدم } } catch (error) { // في حالة حدوث خطأ أثناء الطلب console.error(error); } } fetchData(); أولاً استيراد Axios في الكود باستخدام import، ثم استخدام axios.post لإرسال طلب POST إلى الملف PHP المحدد، وتمرير البيانات في الجسم (body) للطلب كما هو موضح.
  24. أهلاً بك رائد وكل عام وأنت بخير، أولاً ستجد الكثير من الإجابات على أسئلتك بخصوص أكاديمية حسوب في صفحة مركز المساعدة والتي تستطيع الوصول إليها من الروابط أسفل الموقع. وبها مثلاً ستجد شرح لكيفية الوصول للدورات التي اشتركت بها، وذلك من خلال الضغط على تبويب دوراتي وستجد الدورات المشترك بها كما بالصورة: وأيضًا من نفس التبويب ستجد كل الدورات الأخرى المتاحة، وتستطيع دراسة المسار الأول من كل الدورات بشكل مجاني. وبخصوص طرح الأسئلة، فلا تقلق ستجد مساعدة من قبل الجميع هنا، ما عليك سوى طرح سؤالك أسفل الفيديو في الدورة ستجد قسم تعليقات أضف السؤال المتعلق بالفيديو أسفله، وسيتم الإجابة عليك في أسرع وقت. ولكن الأسئلة العامة الغير متعلقة بالدورة أرجو منك طرحها في قسم أسئلة البرمجة كما فعلت هنا. وستجد أيضًا في مركز المساعدة شرح لكيفية طرح السؤال والتواصل مع المدربين. وكنصيحة حاول أن تشرح ما الذي تريد فعله وما المشكلة التي واجهتك بشكل واضح أو ما وقت الفيديو الذي لديك سؤال حوله، مثال: "في الدقيقة 4.10 أريد فهم كذا أو لدي مشكلة كذا"، او ذكر رقم التمرين وهكذا. وسيتم إرشادك لحل لكيفية حل المشكلة بنفسك أولاً لكي تستفيد، ثم تفقد المشكلة وتوفير الحل إذا واجهت صعوبة. وأيضًا تستطيع تفقد مستودع المشروع والذي به الكود النهائي وستجد الرابط الخاص به في المدخل او في مقدمة المسار. وأنصحك بالإطلاع على النقاش التالي والنقاشات المرفقة به وستجد به استفادة كبيرة لك:
×
×
  • أضف...