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

Mustafa Suleiman

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

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

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

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

    336

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

  1. قبل الإنتقال إلى دورة أخرى، عليك أولاً برؤية المسار الأول من الدورة حيث أن جميع المسارات الأولى متاحة لك بشكل مجاني، وتستطيع الوصول للدورات من خلال تبويب دوراتي. ويجب تحديد المسار الذي تريده قبل إختيار الدورة، وإذا كنت غير قادر على التحديد فتستطيع قراءة التالي: وقد يفيدك البدء بدورة علوم الحاسوب وأساسيات البرمجة من أجل إختيار المجال الذي تريده عن دراية وفهم. وأيضًا هل لديك الوقت الكافي للتعلم أم تريد الوظيفة في أقرب وحد، فإذا كنت تريد الوظيفة في اٌقرب وقت فعليك بتعلم المطلوب في سوق العمل وليس ما تريده، وقد تم إيضاح ذلك هنا: وبخصوص النصائح وعدد الساعات فأنصحك بالإطلاع على التالي فقد تم الإجابة بشكل وافي بخصوص ما تريده:
  2. أرجو منك طرح السؤال أسفل فيديو الدورة الخاص بالسؤال ليتم مساعدتك بشكل أفضل، وطرح الأسئلة العامة هنا.
  3. بالنسبة للمصطلحات الإنجليزية فهي قليلة ويتم الشرح بلغة عربية فصحى وتعريب ما أمكن من المصطلحات، ويجب أن تعلم أن لغة البرمجة هي اللغة الإنجليزية فأنت بحاجة إليها بلا شك فيما بعد حيث أن المستندات والشروحات المتقدمة باللغة الإنجليزية، وأيضًا عند البحث عن حل لمشكلة تواجهك ستجد أنها باللغة الإنجليزية، وتستطيع دراسة اللغة بجانب البرمجة من خلال قناة طليق أو ذي أمريكان إنجليش على اليوتيوب. وأنا أتحدث بعد الإنتهاء من الدورة، ولا تدع ذلك يحبطك لكن عليك معرفة ما أنت بحاجة إليه مجرد قدرة على القراءة والاستماع فقط في البداية، وتستطيع طرح الأسئلة هنا في أكاديمية حسوب أو حسوب I/O وسيتم الإجابة عليك ومساعدتك من قبل الجميع. وفي بداية أي دورة قد يبدوا الأمر ممل ولا يوجد الكثير من الكود، والسبب هو أنه يتم شرح الأساسيات والجانب النظري الخاص بها لكي يتم فهم الكود الذي سيتم كتابته، فحتى عند كتابة الكود ستحتاج إلى التفكير وفهم ما تريد تنفيذه قبل كتابة أي كود، ولا نهرع أبدًا لكتابة الكود بدون التفكير في الطريقة التي سنستخدمها أولاً والكود هو آخر خطوة. عليك بالإهتمام جيدًا بالأساسيات وطريقة عمل الكود وقواعد كتابته، وإذا وجدت أمر غير واضح لك تستطيع السؤال أسفل فيديو الدورة الخاص بالسؤال، وطرح الأسئلة العامة هنا في قسم أسئلة البرمجة. وبخصوص التنفيذ، فالأمر بحاجة إلى التدرج، أولاً عليك بتطبيق ما تعلمته على نماذج صغيرة من خلال إعادة تنفيذ ما شرحه المدرب بمفردك لا مجرد المشاهدة السلبية فقط، بل يجب الكتابة مع المدرب، وبعد الإنتهاء يجب إعادة التنفيذ مرة أخرى بمفردك، ولا مشكلة إذا وجدت أنك نسيت بعض الأشياء أو لم تتمكن من التنفيذ واحتجت إلى المراجعة، فذلك طبيعي وهو المطلوب من تلك الإعادة لتثبيت ما تعلمته.
  4. ستحتاج إلى إنشاء نموذج استمارة من خلال 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" بعنوان البريد الإلكتروني الذي ترغب في استلام الرسائل عليه.
  5. قبل أي شيء، لكي لا تصاب بالإحباط، لا تتعلم ما تريده ولديك شغف به، بل تعلم المطلوب في سوق العمل الذي تريد العمل به. وعليك أن تسأل نفسك سؤال بسيط، أين أريد أن أعمل وأمامك 3 خيارات (مواقع العمل الحر العربية - مواقع العمل الحر الأجنبية - الشركات في سوق العمل المحلي أو عن بُعد في الدول العربية). وعلى مواقع العمل الحر العربية ستجد أن أغلب المطلوب هو PHP ولارافيل و وورد بريس وذلك أمر طبيعي وستجد أيضًا بعض الوظائف للـ .NET وأحيانًا وظائف لـ React لكن المراد هو النسبة الأكبر من الوظائف. أما مواقع العمل الحر الأجنبية فستجد أن جميع المجالات مطلوبة لكونه سوق عالمي، وبالطبع هناك نسبة كبيرة لـ PHP ولارافيل و ووردبريس. أما الشركات في السوق المحلي وفي الدول العريية فستجد أن أغلب المطلوب هو PHP ولارافيل و ووردبريس وأيضًأ .NET. وبخصوص الواجهة الأمامية فستجد أن Angular مطلوبة وخاصًة مع إطار .NET، وأيضًا ستجد بعض الوظائف تطلب React وبعضها يطلب Vue.js ومن وجهة نظري من الأفضل تعلم React لكونها مطلوبة بنسبة أكبر وستفتح لك الكثير من الإمكانيات. وأيضًا ستجد وظائف node.js في الواجهة الخلفية لكنها تتطلب خبرة سنة أو سنتين على الأقل، ونفس الأمر بالنسبة لمطوري React ستجد مطلوب خبرة سنة أو سنتين على الأقل، بينما لو أصبحت Full-stack فستجد فرصة بخبرة أقل. وهناك أمر هام يجب أن تنتبه إليه، 80% من الوظائف المعروضة هي للشركات والأعمال الصغيرة، لذلك ستجد أن PHP ولارافيل و ووردبريس مطلوبين بكثرة. وبالطبع Next.js مطلوبة لكن ستحتاج إلى خبرة سنة أو سنتين لكي يتم قبولك في سوق العمل سواء من خلال بناء المشاريع أو على العمل على مواقع العمل الحر عليك بإلقاء نظرة على مواقع التوظيف مثل LinkedIn ومواقع العمل الحر مثل مستقل وخمسات وبعيد، وستكتشف ما هو المطلوب والخبرة المطلوبة لكل مجال أو لغة أو إطار، وسيفيدك الإطلاع على التالي:
  6. أرفق مجلد المشروع لديك بعد ضغطه لتفقد المشكلة.
  7. ما يظهر هو أنه هناك خطأ "Syntaxerror: EOL while scanning string literal" أي خطأ في تنسيق سلسلة النص في ملف معين، وبالتالي لا يمكن تنفيذ الأمر بنجاح. وربما لديك تعارض في إصدارات الحزم، حاول تثبيت الحزم من خلال أمر: npm install --legacy-peer-deps وإذا استمرت المشكلة حاول تثبيت مكتبة node-gyp بأحدث إصدار، من خلال الأمر التالي: npm i node-gyp@latest ثم إعادة تثبيت الحزم من خلال الأمر السابق الذي أخبرتك به وأيضًا حاول استخدام إصدار 16 أو 18 من node.js.
  8. عليك أولاً بتفقد هل يوجد أخطاء في الكونسول لديك؟ وفي حال عدم وجود أخطاء، فقم بتنفيذ الأمر التالي: php artisan optimize:clear وهو أمر يشمل عمليات مسح ذاكرة التخزين المؤقتة المختلفة في Laravel من خلال أمر واحد فقط. وإذا كنت تستخدم Laravel Mix أو Webpack لتجميع ملفات الفرونت إند، فعليك بإعادة تجميعها بعد التعديل ببتشغيل الأمر المناسب لتجميع الملفات، مثل npm run dev أو npm run watch. وأيضًا إعادة تشغيل الخادم وتشغيل أمر php artisan serve.
  9. ما فهمته هو أنك تريدين عرض النتائج بحسب رقم الجلوس من ملف 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.
  10. لا مشكلة في الكتابة على مجلد Windows/Temp، فهو مخصص لكي تقوم التطبيقات بكتابة الملفات المؤقتة فيه، والملفات المؤقتة هي ملفات يتم إنشاؤها بواسطة التطبيقات وتستخدم لفترة قصيرة من الزمن، ثم يتم حذفها من قبل التطبيق أو من قبل نظام التشغيل. وإذا أردت تغيير مكان الملفات المؤقتة إذا كنت تستخدم لاراجون قم بفتح ملف php.ini الخاص بتكوين PHP، ثم ابحث عن سطر يحتوي على "upload_tmp_dir" في ملف php.ini وقم بإلغاء تعليقه عن طريق إزالة علامة التعليق "#" في بداية السطر. ثم تعيين قيمة "C:/laragon/tmp" لـ "upload_tmp_dir"، ويعني ذلك أن الملفات المؤقتة التي تم رفعها ستخزن في المجلد "C:/laragon/tmp".
  11. تستطيع الاستزادة من مصادر مختلفة سواء عبر موسوعة حسوب أو الدروس والمقالات في أكاديمية حسوب، حيث يوجد قسم خاص بمقالات ودروس CSS وقسم أيضًا للغة HTML ونفس الأمر للغة جافاسكريبت. عليك بالقراءة والبحث عما تريد فهمه من المصادر السابقة، ولديك يوتيوب أيضًا فبه شروحات كثيرة أيضًا في حال كنت تريد فهم أمر معين، وتستطيع السؤال أسفل فيديو الدورة بعد البحث وسيتم شرحه لك باستفاضة مع أمثلة للتوضيح. وعليك بالبحث عن مشاريع للمبتدأين على يوتيوب ومحاولة التطبيق على ما تعلمته وذلك من خلال لغات HTML,CSS, JS وبدون استخدام أي مكتبة من أجل تقوية الأساسيات لديك والتعلم بشكل أسهل فيما بعد لكون الأساسيات لديك جيدة. وما أحاول توصيله لك، هو ألا تكتفي بأي دورة مهما كانت، عليك دائمًا بالبحث والقراءة والاستزادة والتطبيق من مصادر أخرى والسؤال بعد المحاولة والتفكير، وستجد في النقاش التالي معلومات مفيدة ومواقع للحصول على تصاميم للتطبيق على ما تعلمته.
  12. لا يوجد دورة متخصصة في الأمن السيبراني في أكاديمية حسوب، والدورة الأقرب المناسبة لك في أكاديمية حسوب هي دورة علوم الحاسوب وقد تم ذكرها لك، حيث أنك بحاجة أولاً إلى دراسة الأساسيات قبل إختيار أي مجال في البرمجة من أجل تحديد المجال على دراية وليس مجرد معلومات سطحية أو حماس زائد. أنت حاليًا في سن صغير، تستطيع تعلم ما تريد ولا علاقة بسوق العمل بإختيارك وأنا أتكلم على الشركات، فالأمر راجع للسن القانوني وهو 18وأحيانًا 20 و21 في بلدان أخرى، وأيضًا أنت بحاجة إلى شهادة جامعية للعمل في شركة وأنا أتكلم على الشركات المعروفة التي لديها قواعد ونظام. ولكن يوجد شركات أخرى وبها رواتب جيدة، تستطيع العمل بها بدون شهادة وبمهاراتك وخبرتك فقط وفي سن 18 عام لا مشكلة، فأنا أعرف أشخاص في كلية حاسبات ومعلومات ولم يتخرجوا بعد، ويعملون في شركات في السوق المحلي ولكن بالطبع بشكل غير رسمي. وهنا أنت بحاجة إلى إتخاذ قرار، هل تريد وظيفة لدعم نفسك ماديًا في الوقت الحالي؟ ففي تلك الحالة يجب تعلم المطلوب في سوق العمل لديك وليس ما تريده، وفي حال كان ما تريده مطلوب فقد يتم طلب سنوات خبرة كسنة أو سنتين كحد أدنى مثلاً، لذلك عليك بتفقد الوظائف المطلوبة في مجال البرمجة في السوق المحلي لديك والحد الأدنى للخبرة المطلوبة وقد أوضحت ذلك هنا: لكن على مواقع العمل الحر، تستطيع العمل في أي سن طالما تمتلك المهارة اللازمة لتنفيذ المشاريع المطلوبة بإحترافية، لكن في المواقع العربية لن تجد مشاريع خاصة بمجال الأمن السيبراني مطلوبة بكثرة. وهناك سؤال مماثل لسؤالك، ستجد به إجابات مفيدة لك:
  13. سأشرح لك الطريقة باستخدام خدمة 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,
  14. أرجو منك التعليق أسفل فيديو الدورة المتعلق بالسؤال لمساعدتك بشكل أفضل، وطرح الأسئلة العامة هنا في قسم أسئلة البرمجة. وبخصوص سؤالك، فهو يتعلق بإطار لارافيل، ونستخدم ذلك الكود في عملية إنشاء جدول في قاعدة البيانات باستخدام ميزات مولد الكود الخاص بلارافيل (Laravel's code generator)، لتعريف حقل 'username' كحقل نصي (string) في جدول قاعدة البيانات. وبدون معرفة المشروع أو المطلوب، فعامًة السبب هو: 1- مرونة في استخدام الحقل، فعندما تقوم بتعريف الحقل 'username' دون تحديد الخاصية unique، تستطيع استخدامه بأكثر من سجل في الجدول. قد يكون هذا مفيدًا في بعض الحالات، مثل السماح للمستخدمين بتكرار أسماء المستخدمين في حالات محددة. 2- التحقق من الحقل المميز عند الحاجة بدلاً من إجبار الحقل على أن يكون فريدًا في تعريف الجدول، وبإمكانك التحقق من فرادة القيمة المدخلة عند عملية الإدخال أو التحديث، واستخدام القيود أو التحقق من الفرادة في طبقة التطبيق أو قاعدة البيانات نفسها. 3- الحاجة إلى مزيد من الخصائصالأخرى للحقل 'username' بجانب فرادته، مثل الحد الأقصى لعدد الأحرف المسموح بها أو قواعد التحقق الأخرى، وربما من الأفضل تحديد تلك الخصائص في مكان منفصل لتحقيق أقصى قدر من المرونة وإعادة الاستخدام. أي يعتمد استخدام خاصية unique على احتياجات المشروع وتصميم قاعدة البيانات، فقد تحتاج في بعض الحالات إلى تحديد الحقل كفريد في تعريف الجدول، في حين أن في حالات أخرى يمكن التحقق من فرادة القيمة في وقت لاحق أو استخدام خصائص إضافية.
  15. لا يوجد فرق، فكلاهما يوفران لك نفس الشهادة طبقًا لقرار المجلس الأعلى للجامعات، وبالتالي الأمر يعتمد على مجموعك في ثالثة ثانوي والتنسيق الخاص بك، ولكن بالطبع الكلية أفضل من حيث مستوى الطلبة والطموح لديهم، فغالبًا في المعاهد ستجد أن أغلب من دخلها يرغب في الحصول على الشهادة فقط. وأيضًا مستوى الدراسة في الكلية أصعب من المعاهد، ووبغض النظر عن التكاليف، فالكلية تكاليفها منخفضة مقارنًة بالمعاهد التي تعتبر كل ورقة بها لها ثمن. وانتبه إلى أن معهد حاسبات ومعلومات يقبل القسم العلمي (رياضة وعلوم) للثانوية العامة وليس أدبي أو ثانوي أزهري أي مثله مثل الكلية، وأيضًا قد يختلط الأمر على البعض ويظن أن معد نظم إدارية هو نفسه معهد حاسبات ومعلومات ولكن ذلك غير صحيح، فتخصص معهد نظم إدارة هو المحاسبة.
  16. سبب المشكلة هو أن المسار الذي تحاول استخدامه فارغ، أي عدم تعيين المسار الصحيح لحفظ الصورة المرفوعة، وأنت تستخدم الدالة store() لحفظ الصورة، وتحدد المجلد "posts" وتستخدم القرص المحلي "public". وللتأكد من أن المشكلة ليست بسبب خطأ في المسار، هل تحققت من وجود المجلد "posts" في القرص المحلي "public" في مشروعك؟ وإذا كان المجلد غير موجود، فتستطيع إنشائه يدويًا. وإذا كان المجلد موجودًا ولا تزال تواجه المشكلة، فربما هناك خطأ آخر في الطريقة التي ترفع بها الصورة، ومن الأفضل التحقق من قيمة $request['image'] والتأكد من أنها صحيحة وتحتوي على الصورة المطلوبة. وربما لديك مشكلة في الكتابة إلى مجلد temp في C:\Windows\Temp عليك بالضغط بزر الفأرة الأيمن على مجلد temp ثم اختيار properties ثم ستجد خيار باسم read-only قم بإزالة العلامة ثم ok للحفظ. وأيضًا تستطيع استخدام دالة dd لمعرفة المسار كالتالي: dd($request['image']); وسيتم عرض معلومات المتغير $request['image'] بشكل مفصل، بما في ذلك المسار وأي بيانات أخرى متعلقة بالصورة.
  17. المطلوب هو إنشاء دالة تستقبل عدد الرصاصات التي يحملها البطل (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))
  18. ما فهمته هو أنك تريد منع تحديث الصفحة عند التحقق من الإجابة وعرض السؤال التالي، وذلك ممكن بالشكل التالي: أولاً عليك تجهيز ملف 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) للطلب كما هو موضح.
  19. أهلاً بك رائد وكل عام وأنت بخير، أولاً ستجد الكثير من الإجابات على أسئلتك بخصوص أكاديمية حسوب في صفحة مركز المساعدة والتي تستطيع الوصول إليها من الروابط أسفل الموقع. وبها مثلاً ستجد شرح لكيفية الوصول للدورات التي اشتركت بها، وذلك من خلال الضغط على تبويب دوراتي وستجد الدورات المشترك بها كما بالصورة: وأيضًا من نفس التبويب ستجد كل الدورات الأخرى المتاحة، وتستطيع دراسة المسار الأول من كل الدورات بشكل مجاني. وبخصوص طرح الأسئلة، فلا تقلق ستجد مساعدة من قبل الجميع هنا، ما عليك سوى طرح سؤالك أسفل الفيديو في الدورة ستجد قسم تعليقات أضف السؤال المتعلق بالفيديو أسفله، وسيتم الإجابة عليك في أسرع وقت. ولكن الأسئلة العامة الغير متعلقة بالدورة أرجو منك طرحها في قسم أسئلة البرمجة كما فعلت هنا. وستجد أيضًا في مركز المساعدة شرح لكيفية طرح السؤال والتواصل مع المدربين. وكنصيحة حاول أن تشرح ما الذي تريد فعله وما المشكلة التي واجهتك بشكل واضح أو ما وقت الفيديو الذي لديك سؤال حوله، مثال: "في الدقيقة 4.10 أريد فهم كذا أو لدي مشكلة كذا"، او ذكر رقم التمرين وهكذا. وسيتم إرشادك لحل لكيفية حل المشكلة بنفسك أولاً لكي تستفيد، ثم تفقد المشكلة وتوفير الحل إذا واجهت صعوبة. وأيضًا تستطيع تفقد مستودع المشروع والذي به الكود النهائي وستجد الرابط الخاص به في المدخل او في مقدمة المسار. وأنصحك بالإطلاع على النقاش التالي والنقاشات المرفقة به وستجد به استفادة كبيرة لك:
  20. أولاً عليك بإنشاء الإتصال بقاعدة بيانات MySQL: <?php $servername = "اسم_خادم_قاعدة_البيانات"; $username = "اسم_مستخدم"; $password = "كلمة_المرور"; $dbname = "اسم_قاعدة_البيانات"; // إنشاء الاتصال $conn = new mysqli($servername, $username, $password, $dbname); // التحقق من نجاح الاتصال if ($conn->connect_error) { die("فشل الاتصال بقاعدة البيانات: " . $conn->connect_error); } ?> ثم قم إجراء استعلام لجلب دوام كل دكتور من جدول الدوام كالتالي: <?php // استعلام لجلب دوام كل الأطباء $sql = "SELECT * FROM جدول_الدوام"; $result = $conn->query($sql); if ($result->num_rows > 0) { // عرض البيانات while ($row = $result->fetch_assoc()) { echo "اسم الدكتور: " . $row["اسم_الدكتور"] . "<br>"; echo "دوام الدكتور: " . $row["دوام_الدكتور"] . "<br>"; echo "<br>"; } } else { echo "لا توجد نتائج"; } // إغلاق الاتصال $conn->close(); ?> وبيانات قاعدة البيانات التالية "اسم_خادم_قاعدة_البيانات" و "اسم_مستخدم" و "كلمة_المرور" و "اسم_قاعدة_البيانات" عليك بتغييرها إلى قيم فعلية تتناسب مع معلومات قاعدة البيانات الخاصة بك. أيضًا تعديل "جدول_الدوام" و "اسم_الدكتور" و "دوام_الدكتور" بحسب اسم الجدول وأسماء الأعمدة الخاصة بجدول الدوام لديك. والمثال يفترض أن لديك جدول يحتوي على حقلين هما "اسم_الدكتور" و "دوام_الدكتور" لتخزين اسماء الأطباء ودوامهم على التوالي، ويتم عرض النتائج باستخدام حلقة while لعرض كل سجل من جدول الدوام.
  21. إذا كان سؤالك خاص بأحد الدورات، فأرجو منك السؤال أسفل فيديو الدورة الخاص بالسؤال، وإذا كان السؤال غير متعلق بالدورة، فعليك توضيح ما الذي تريد فعله بالضبط.
  22. تستخدم خوارزميات البحث الثنائي (Binary Search) للبحث في البيانات المرتبة، وتُنفذ تلك الخوارزميات بشكل أكثر شيوعًا في القوائم المرتبة (lists)، لكن باستطاعتك تنفيذها في القواميس (dictionaries) في لغة Python. فعند استخدام البحث الثنائي في القواميس، يتم البحث عن القيمة المطلوبة باستخدام المفتاح (key) بدلاً من الموضع (index) كما هو الحال في القوائم، ويجب أن يكون للقاموس ترتيب معين للمفاتيح لضمان عمل البحث الثنائي بشكل صحيح. ولنفترض أن لدينا مفاتيح في القاموس مرتبة تصاعديًا، فيمكن استخدام البحث الثنائي للعثور على قيمة معينة بناءً على المفتاح. وإليك مثال لتوضيح تنفيذ خوارزمية البحث الثنائي في قاموس (dictionary): def binary_search_dict(dictionary, target): keys = sorted(dictionary.keys()) # ترتيب المفاتيح بشكل صحيح left = 0 right = len(keys) - 1 while left <= right: mid = (left + right) // 2 mid_key = keys[mid] if mid_key == target: return dictionary[mid_key] elif mid_key < target: left = mid + 1 else: right = mid - 1 return None # في حالة عدم العثور على القيمة المطلوبة # مثال لاستخدام البحث الثنائي في قاموس my_dict = {'apple': 5, 'banana': 2, 'cherry': 8, 'orange': 3, 'pear': 1} result = binary_search_dict(my_dict, 'cherry') if result is not None: print("تم العثور على القيمة:", result) else: print("لم يتم العثور على القيمة") بالنسبة لسؤالك الثاني، فتستطيع تنفيذ خوارزميات البحث الثنائي في البحث عن أسماء أو أرقام، وذلك بغض النظر عن نوع البيانات المستخدمة، وتعتمد الخوارزمية على ترتيب البيانات بحيث يمكن تحديد الموضع المناسب للبحث بناءًا على القيمة المطلوبة. وانتبه إلى أن البيانات المستخدمة في البحث الثنائي يجب أن تكون مرتبة بشكل صحيح لضمان الحصول على نتائج صحيحة، فإذا تم تغيير البيانات بعد ترتيبها، فقد يؤدي ذلك إلى نتائج غير صحيحة عند استخدام البحث الثنائي. وفيما يلي مثال على تنفيذ خوارزمية البحث الثنائي للبحث عن رقم في قائمة (list): def binary_search_list(nums, target): left = 0 right = len(nums) - 1 while left <= right: mid = (left + right) // 2 mid_num = nums[mid] if mid_num == target: return mid elif mid_num < target: left = mid + 1 else: right = mid - 1 return -1 # في حالة عدم العثور على الرقم # مثال لاستخدام البحث الثنائي في قائمة my_list = [1, 3, 5, 7, 9, 11, 13, 15] index = binary_search_list(my_list, 7) if index != -1: print("تم العثور على الرقم في الموضع:", index) else: print("لم يتم العثور على الرقم") ولتوضيح الأمر سأذكر لك مثال للبحث عن اسم في قائمة (list): def binary_search_names(names, target): left = 0 right = len(names) - 1 while left <= right: mid = (left + right) // 2 mid_name = names[mid] if mid_name == target: return mid elif mid_name < target: left = mid + 1 else: right = mid - 1 return -1 # في حالة عدم العثور على الاسم # مثال لاستخدام البحث الثنائي في قائمة الأسماء name_list = ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace'] index = binary_search_names(name_list, 'David') if index != -1: print("تم العثور على الاسم في الموضع:", index) else: print("لم يتم العثور على الاسم")
  23. هناك علاقة "واحد إلى كثير" بين الجدول الأول وكل من الجدول الثاني والجدول الثالث والجدول الرابع، حيث يمكن لطالب واحد أن يرتبط بعدة سجلات في الجداول الثلاثة الأخرى، كالتالي: 1- العلاقة بين الجدول الأول والجدول الثاني: المفتاح الأساسي في الجدول الأول (كود الطالب) يعتبر مفتاح أجنبي في الجدول الثاني (كود الطالب)، وتلك العلاقة تعني أن الجدول الثاني يحتوي على معلومات الدفع والتاريخ لكل طالب. 2- العلاقة بين الجدول الأول والجدول الثالث: المفتاح الأساسي في الجدول الأول (كود الطالب) يعتبر مفتاح أجنبي في الجدول الثالث (كود الطالب)، وتعني أن الجدول الثالث يحتوي على معلومات الاختبار والتقييم لكل طالب. 3- العلاقة بين الجدول الأول والجدول الرابع: المفتاح الأساسي في الجدول الأول (كود الطالب) يعتبر مفتاح أجنبي في الجدول الرابع (كود الطالب)، أي أن الجدول الرابع يحتوي على معلومات الغياب والملاحظات لكل طالب.
×
×
  • أضف...