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

ياسر مسكين

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

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

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

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

    3

كل منشورات العضو ياسر مسكين

  1. يمكنني شرح الكيفية والطريقة لمساعدتك للوصول لحل لما تريده. أولا نبدأ بتهيئة قاعدة البيانات خاصتنا، ففي حالة لم تكن لديك قم بإنشاء قاعدة بيانات جديدة (مثلا باسم school) ثم أنشئ جدول للطلبة فليكن students وليحتوي على الأعمدة اللازمة مثل id, name, email الخاص بكل طالب. الخطوة التالية هي إنشاء صفحة عرض بيانات الطلبة، تنشئ ملف PHP جديد وليكن students.php وفي هذا الملف، احرص على أن يكون هناك اتصال بقاعدة البيانات واسترجاع لبيانات الطلبة ويمكن استخدام قالب HTML بسيط لعرض البيانات في جدول ولا تنسى إضافة زر للانتقال إلى صفحة إضافة طالب جديد. هنا يجب إنشاء ملف PHP جديد لمعالجة هذه النقطة وليكن مثلا add_student.php في هذا الملف، أنشئ نموذج HTML يتيح للمستخدمين إدخال اسم الطالب والبريد الإلكتروني وحدد ليتم إرساله إلى ملف PHP آخر لمعالجة البيانات insert_student.php. ولو تلاحظ هنا فستجد أن كل ملف مترابط مع الآخر، فالآن سنحتاج لانشاء ملف آخر لمعالجة بيانات النموذج لتسمّيه مثلا insert_student.php في هذا الملف، احصل على بيانات الطالب من النموذج، واتصل بقاعدة البيانات، وأدخل البيانات في جدول الطلبة وبعد إدخالك للبيانات، يمكنك إعادة توجيه المستخدم إلى صفحة عرض البيانات أو عرض رسالة تأكيد. والأمر المهم هو أن يكون هنالك ترابط بين الصفحات ولضمان ذلك يجب إضافة الروابط اللازمة بين الصفحات والتأكد من أن زر "إضافة طالب جديد" في صفحة عرض بيانات الطلبة ينقل المستخدم إلى صفحة إضافة طالب جديد وأن نموذج إضافة طالب جديد يرسل البيانات إلى ملف المعالجة وهكذا.
  2. FastAPI يمكن اعتباره إطار عمل حديث وقوي لبناء تطبيقات الويب باستخدام لغة بايثون، أين يتميز بسرعته العالية وسهولة استخدامه، مما يجعله مناسبا للمطورين المبتدئين والمحترفين على حد سواء فهو يقوم بتبسيط عملية إنشاء واجهات برمجة التطبيقات (APIs) من خلال توفير ميزات مثل التوثيق التلقائي والتحقق من صحة البيانات بشكل تلقائي، كما أنه يدعم التطوير السريع وتساعد في بناء تطبيقات آمنة وقابلة للتوسع. وباختصار، FastAPI يجعل من السهل على المطورين إنشاء خدمات ويب قوية وفعالة بأقل جهد يمكن تصوره. من خصائصه أيضا أنه يستخدم نظام التحقق من أنواع البيانات لضمان سلامتها، ولهذا نراه يدعم مصادقة OAuth2 وJWT بشكل مدمج، أيضا هو غير متزامن، ولتبسيط المفهوم يمكن القول بأنه يدعم البرمجة غير المتزامنة باستخدام كل من async/await وآخر نقطة وهو أن هذا الإطار يتوافق مع معايير الويب ك OpenAPI (Swagger) وJSON Schema.
  3. يوجد أكثر من طريقة لرفع المشاريع على github لكن أولا يجب أن تقوم بإنشاء حساب على موقع غيتهاب من هنا: github.com بعد ذلك تقوم بتسجيل الدخول وستجد في الشريط العلوي علامة + تقوم بالضغط عليها وستظهر لك قائمة تختار منها إنشاء مستودع جديد: الأمر بسيط وسيكون سهلا في حالة اتباعك لهذه الخطوات الموضحة في هذه المقالة:
  4. وعليكم السلام، سأشرح لك كيفية استخدام هذه الواجهة لإعداد تطبيق Node.js الخاص بك لنبدأ بكل خانة على حدى: Node.js version: لاحظ أنه قد تم تحديد الإصدار 10.24.1 تلقائيا وهذا جيد إذا كان متوافقا مع مشروعك. Application mode: وهنا قد تم تعيينه على "Development" وهذا مناسب لأنك في مرحلة تطوير المشروع. Application root: هنا يجب عليك إدخال المسار الفعلي لمجلد مشروعك، بما أنّ اسم المجلد "app"، فقد يكون المسار مثل "/home/username/app" أو "C:\Users\username\app" حسب نظام التشغيل لذا قم بملئه على حسب ما لديك. Application startup file: هنا يجب تحديد الملف الرئيسي للتطبيق، عادة ما يكون "app.js" أو "index.js". Environment variables: يمكنك إضافة أي متغيرات بيئية ضرورية لمشروعك هنا. والغرض من المتغيرات البيئية هو أنها تستخدم لتخزين معلومات حساسة مثل كلمات المرور ومفاتيح API وتساعد في تكوين التطبيق لبيئات مختلفة ك (التطوير، الاختبار، الإنتاج) وتسمح بتغيير سلوك التطبيق دون تعديل الكود وهذه أمثلة عنها: PORT: لتحديد المنفذ الذي سيعمل عليه التطبيق. DATABASE_URL: لتخزين رابط قاعدة البيانات. API_KEY: لتخزين مفاتيح API لخدمات خارجية. NODE_ENV: لتحديد بيئة التشغيل (development, production). بعدها قم بالضغط على CREATE ليتم إنشاء تطبيقك.
  5. اختبار T هو اختبار يستخدم لمقارنة متوسطين لمعرفة إذا كان الفرق بينهما ذو دلالة إحصائية بالتأكيد هناك أنواع مختلفة منه، مثل اختبار العينات المستقلة (لمجموعتين مختلفتين) واختبار العينات المتزاوجة (لنفس المجموعة في أوقات مختلفة). أما ANOVA، أو تحليل التباين الأحادي، يستخدم لمقارنة متوسطات ثلاث مجموعات أو أكثر لتحديد ما إذا كان هناك فرق ذو دلالة إحصائية بينها. يمكن أن يكون ANOVA أحادي الاتجاه (لمتغير مستقل واحد) أو ثنائي الاتجاه (لمتغيرين مستقلين) أدعوك لقراءة هذه المقالة أين يستفيض كاتبها في شرح هذا المفهوم من هنا:
  6. عروض العطلة الصيفية في أكاديمية حسوب هي متاحة لجميع مشتركي أكاديمية حسوب، بحيث يمكن الحصول على دورتين بسعر دورة واحدة وعادة ما تكون في شهر جويلية وتستمر لغاية الفاتح من شهر سبتمبر، يمكنك التواصل أكثر مع الدعم وسيفيدونك بأي شيء في هذا الجانب من هنا: مركز الدعم لأكاديمية حسوب.
  7. بالطبع، يمكنك تعديل النظام ليسمح فقط لثلاثة أشخاص محددين بالدخول. وبخصوص قاعدة البيانات، نعم، ستضيف جدولا جديدا في نفس قاعدة البيانات الموجودة لديك.
  8. يمكن عمل ذلك، لكن في البداية نحتاج أولا إلى إنشاء جدول في قاعدة البيانات لتخزين معلومات المستخدمين بحيث يحتوي على معرّف فريد، اسم المستخدم وكلمة المرور المشفرة إضافة إلى صفحة تسجيل الدخول (login.php) وتحتوي على نموذج لإدخال اسم المستخدم وكلمة المرور وعند إرسال النموذج، يتم التحقق من صحة البيانات مقابل قاعدة البيانات فإذا كانت صحيحة، يتم إنشاء جلسة للمستخدم وتوجيهه إلى الصفحة المطلوبة. ولحماية الصفحات (admin.php، updata.php، Info.php)، نضيف كود التحقق من وجود جلسة مستخدم نشطة فإذا لم تكن موجودة، يتم إعادة توجيه المستخدم إلى صفحة تسجيل الدخول. وعند تسجيل الخروج نضيف صفحة لتسجيل الخروج تقوم بإنهاء الجلسة وإعادة توجيه المستخدم إلى صفحة تسجيل الدخول ولإضافة مستخدمين جدد نضيف نموذجا لإنشاء مستخدمين جدد، مع تشفير كلمة المرور قبل تخزينها في قاعدة البيانات. وهذه محاكاة لكيفية تطبيق ذلك، نضيف الكود التالي إلى ملف connect.php لإنشاء جدول المستخدمين: $sql = "CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, password VARCHAR(255) NOT NULL )"; $conn->query($sql); ثم ننشئ ملف login.php بهذا الشكل: <?php session_start(); require_once 'connect.php'; if ($_SERVER['REQUEST_METHOD'] == 'POST') { $username = $_POST['username']; $password = $_POST['password']; $stmt = $conn->prepare("SELECT id, username, password FROM users WHERE username = ?"); $stmt->bind_param("s", $username); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows == 1) { $user = $result->fetch_assoc(); if (password_verify($password, $user['password'])) { $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; header("Location: admin.php"); exit(); } else { $error = "كلمة المرور غير صحيحة"; } } else { $error = "اسم المستخدم غير موجود"; } } ?> <!DOCTYPE html> <html lang="ar"> <head> <meta charset="UTF-8"> <title>تسجيل الدخول</title> </head> <body> <h2>تسجيل الدخول</h2> <?php if (isset($error)) echo "<p style='color: red;'>$error</p>"; ?> <form method="POST"> <label for="username">اسم المستخدم:</label> <input type="text" id="username" name="username" required><br> <label for="password">كلمة المرور:</label> <input type="password" id="password" name="password" required><br> <input type="submit" value="تسجيل الدخول"> </form> </body> </html> وللحماية، يجب تعديل كل من الملفات admin.php، updata.php، و Info.php بإضافة كود التحقق التالي في بداية كل ملف: <?php session_start(); if (!isset($_SESSION['user_id'])) { header("Location: login.php"); exit(); } ?> ونهاية الجلسة ستكون بهذا الشكل: <?php session_start(); session_destroy(); header("Location: login.php"); exit(); ?> وبهذه الطريقة، سيكون لدينا تسجيل دخول آمن مع تشفير لكلمات المرور باستخدام password_hash() ويتم التحقق من تسجيل الدخول في الصفحات المحمية، ويتم تخزين معلومات المستخدم في الجلسة بعد تسجيل الدخول بنجاح.
  9. مرحبا يوسف، بما أن استفسارك متعلق بتوقيت الامتحان، وكيية سيرورته، فأنصحك بالتواصل مع مركز المساعدة وسيقومون بحلّ مشكلتك بالشكل المناسب، أتمنى إرفاق أي استفسار متعلق بهذا الجانب مباشرة في مركز المساعدة وليس هنا في قسم أسئلة البرمجة العامة.
  10. أرجو توضيح طبيعة الخطأ الذي تواجهه، وفي حالة ما كان متعلقا بدرس ضمن الدورات فلاحظ أنك ستجد أسفل فيديو الدرس في نهاية الصفحة صندوقا للتعليقات، أرجو منك طرح الأسئلة المتعلقة بالدورات هناك.
  11. بما أنك تستخدم التقنيات التي ذكرتها، فإن أيّ قاعدة من قواعد البيانات التي ذكرتها يمكن استخدامها لكن تتداخل مسألة الخبرة هنا، لذا أنصح دائما بالبدء بتعلم MySQL، فهو خيار ممتاز للمبتدئين وللتطبيقات البسيطة وصولا لتلك المتوسطة الحجم، ونظرا لسهولة التعلم والاستخدام والأداء الجيد والتوافق الواسع يمكن بعد ذلك تجربة PostgreSQL، فهو مناسب للتطبيقات المعقدة التي تتطلب ميزات متقدمة مثل الحفاظ على سلامة البيانات على مستوى السجل والأمان القوي كما أن فيها ميزة قابلية التوسع. استخدام Sequelize كطبقة تجريد يوفر سهولة الاستخدام مع JavaScript، وإمكانية إعادة الاستخدام عبر قواعد البيانات المختلفة، وتوحيد واجهة برمجة التطبيقات (API). ستجد من هنا المزيد من المعلومات التي ستفيدك إن شاء الله:
  12. نعم، يمكنك تخطي مسار أنماط التصميم مؤقتا والانتقال إلى مسار أساسيات هندسة البرمجيات، ثم العودة إلى أنماط التصميم في وقت لاحق فليست هناك حاجة لإكمال مسار أنماط التصميم قبل البدء في مسار أساسيات هندسة البرمجيات أو احترام الترتيب، حيث يمكن دراسة كل منهما بشكل مستقل. لكن احرص على العودة إليه لاحقا، فهو من أهم المفاهيم البرمجية ويوجد ترابط مهم بين أنماط التصميم وهندسة البرمجيات لا يمكن الاستغناء عنهما.
  13. حفظ الدوال بشكل كامل ليس ضروريا إذا كنت تفهمين كيفية عملها وكيفية استخدامها بشكل صحيح فالأهم هو أن تكوني قادرة على معرفة متى وأين وكيفية استخدام الدالة في سياق معين فالفهم العميق لكيفية عمل الدوال يمكن أن يكون أكثر قيمة من الحفظ الصرف، أما بالنسبة لاستعمال غوغل في الاختبار فهو حتما أمر ممنوع ولا أنصح به.
  14. تعلم الأساسيات أولا يعد أمرا أساسيا ففهم الأساسيات في HTML وCSS يمثل خطوة أولى مهمة، لهذا ينبغي أن تمتلك فكرة واضحة عن كيفية كتابة هيكل صفحة الويب باستخدام HTML وكيفية تنسيقها باستخدام CSS ثم يمكنك البدء بالتعمق في المواضيع الأساسية مثل "أساسيات لغة HTML" و"العنصر الجذر في لغة HTML". ويعدّ التعلم من خلال المشاريع أحد أفضل الطرق لفهم دروس البرمجة بشكل أعمق وعند العمل على مشاريع حقيقية، ستتعلم كيفية استخدام العناصر التقسيمية، كيفية إدراج المحتوى النصي، التعامل مع الوسائط المتعددة، وبناء النماذج بطريقة تفاعلية وفعالة. يمكنك أيضا الاستفادة من الموسوعة أو المراجع الأخرى عندما تحتاج إلى مساعدة في فهم موضوع معين أو لتعلم شيء جديد في مشروعك، مثل إضافة وسائط متعددة أو تنفيذ سكربتات معينة والعودة إليها وقت الحاجة من هنا: لغة HTML .
  15. لتحقيق شرط عرض بيانات مختلفة بناء على اختيار المتقدم للجنس في حقل select، يمكنك اتباع خطوات بسيطة: أولا، أنشئ نموذج HTML يحتوي على حقل select يتيح للمستخدم اختيار الجنس وزر إرسال لإرسال البيانات إلى ملف بامتداد PHP. وعند إرسال النموذج، يتم استقبال البيانات فيه ومعالجتها؛ حيث يتم تعيين قيمة مختلفة لحقل معين بناء على اختيار الجنس كما تريد أنت (مثلا، 10 إذا كان الجنس "ذكر" و5 إذا كان الجنس "أنثى"). بعد ذلك، يتم إدخال هذه البيانات في قاعدة البيانات. أخيرا، ولعرض البيانات، يمكنك استرجاعها من قاعدة البيانات وعرضها في جدول HTML بحيث تظهر الجنس والقيمة المحددة لكل سجل، تعمدت عدم وضع الأكواد وشرح الخطوات لك لتجربها بنفسك، فالبرمجة تحتاج منا للممارسة والتجربة ويمكنك مشاركة أكوادك وشيفراتك وفي حالة ما واجهتك أي أخطاء، صعوبات أو مشاكل سنساعدك لحلها والمضي قدما.
  16. يجب أن تعرف أنه إذا ما تم زيارة الرابط من قبل، فسيظهر باللون البنفسجي لأن هذا هو اللون المحدد للحالة :visited وهذا السلوك طبيعي ومنطقي في CSS فإذا كنت تريد التأكد من رؤية اللون الأحمر، يمكنك مسح سجل المتصفح للتأكد من أن الرابط لم يتم زيارته من قبل. يمكنك القيام بذلك عن طريق الذهاب إلى إعدادات المتصفح ومسح سجل التصفح. أما في حالة ما إذا كنت ترغب في اختبار الألوان دون الحاجة إلى مسح السجل، يمكنك تغيير الرابط إلى رابط مختلف لم يتم زيارته من قبل، أو يمكنك تعديل الـ CSS لجعل لون الحالة العادية والحالة المزارة متشابهين للتأكد من أن الرابط يظهر باللون الذي تريده.
  17. لحل مشكلة الربط بين Unity و Flutter المذكورة نقوم بالتحقق من ملف settings.gradle ونتأكد من أن settings.gradle في جذر المشروع يحتوي على الإدخال الصحيح لمشروع unityLibrary هكذا: include ':app', ':unityLibrary' project(':unityLibrary').projectDir = file('../UnityExport/unityLibrary') ثم نقوم بتحديث build.gradle الخاص بمشروع Unity من خلال فتح ملف build.gradle الخاص بمشروع unityLibrary والتأكد من أن التكوينات متوافقة مع مشروع Flutter: configurations.maybeCreate("default") configurations.default.setExtendsFrom(configurations.implementation) // Ensure these dependencies are set correctly dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.tools.build:gradle:7.3.0' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" } ولا تنس أيضا تحديث gradle.properties من خلال التأكد من أن ملف gradle.properties يحتوي على الإعدادات اللازمة التالية: android.useAndroidX=true android.enableJetifier=true ولتنفيذ أوامر Gradle التالية، في سطر الأوامر داخل مجلد مشروع Flutter، ننفذ الأوامر التالية لتنظيف وإعادة بناء المشروع: flutter pub get cd android ./gradlew clean ./gradlew build ويجب التحقق من إصدار Android Gradle Plugin (AGP) في ملفات build.gradle متوافق مع الإصدار المستخدم في Unity فإذا كنت تستخدم AGP 7.3.0، تأكد من أن التكوينات الأخرى متوافقة مع هذا الإصدار.
  18. لتثبيت VMware Workstation 17.5.2 وبرنامج UNetbootin على نظام Linux Mint، يمكنك اتباع الخطوات التالية: أولا وقبل تثبيت VMware Workstation، نتأكد من تثبيت بعض الحزم الأساسية نقوم بفتح الطرفية (Terminal) ونكتب الأوامر التالية: sudo apt update sudo apt install build-essential sudo apt install linux-headers-$(uname -r) بعدها يجب إعطاء الأذونات لملف التثبيت: cd /path/to/your/file chmod +x VMware-Workstation-Full-17.5.2-23775571.x86_64.bundle ثم نقوم بتشغيل ملف التثبيت باستخدام الطرفية: sudo ./VMware-Workstation-Full-17.5.2-23775571.x86_64.bundle ثم نتبع التعليمات التي تظهر على الشاشة لإكمال التثبيت. لتثبيت UNetbootin كذلك نتأكد من أن لدينا جميع الحزم المطلوبة: sudo apt update sudo apt install p7zip-full ثم نقوم بتنزيل UNetbootin من المصدر أو نستخدم الأمر التالي: sudo apt install unetbootin
  19. يمكننا حل المشكلة الأولى، فالشيفرة كما ترين تحتوي على عدة أخطأء، لنعدّل أولا اسم الدالة greeting إلى Greeting في السطر 25 ثم نضيف self كأول بارامتر للدالة greet داخل الكلاس بعد ذلك نتأكد من أن الدالة greeting تُطبع بشكل صحيح. يمكنك استخدام هذه الشيفرة المعدلة: # Write functions def greeting(): return 'Hello' # Call functions print(greeting()) # Import from Standard Library import datetime now = datetime.datetime.now() print(now) # Create and work with classes class Greeting: def greet(self, huda): return 'Hello ' + huda print(Greeting().greet('Amber')) # تصحيح الأخطاء في الطباعة print("Hello 'name'") print("Hello 'Huda'") وإذا كان التطبيق يتوقف بعد تحميل الملف، حاولي إعادة تشغيل التطبيق والجهاز وتأكدي من أن الملف بصيغة مدعومة وصغير الحجم. إذا استمرت المشكلة، قومي بتحديث التطبيق وامسحي ذاكرة التخزين المؤقت له.
  20. يمكنك استخدام Express.js لإنشاء خادم ويب يعرض جميع الصور الموجودة في المجلد، أولا تأكد من أنك قمت تثبيت مكتبة express باستخدام npm: npm install express ثم أنشئ ملف server.js في الجذر مشروع وضع فيه هذه الشيفرة: const express = require('express'); const fs = require('fs'); const path = require('path'); const app = express(); const port = 3000; // يمكنك تغيير هذا المنفذ كما تشاء // المسار إلى مجلد الصور const imagesFolder = path.join(__dirname, 'images'); // استخدم ميدلوير `express.static` لجعل مجلد الصور متاحًا للوصول العام app.use('/images', express.static(imagesFolder)); // قم بإنشاء نقطة نهاية لإرجاع قائمة بجميع الصور في المجلد app.get('/images-list', (req, res) => { fs.readdir(imagesFolder, (err, files) => { if (err) { return res.status(500).json({ error: 'Failed to read images directory' }); } // قم بتصفية الملفات للحصول على الصور فقط const images = files.filter(file => /\.(jpg|jpeg|png|gif)$/i.test(file)); // أرسل قائمة الصور كاستجابة JSON res.json(images); }); }); app.listen(port, () => { console.log(`Server is running on http://localhost:${port}`); }); لقد قمت بوضع تعليقات في الكود لكي يكون كل شيء واضحا بالنسبة لك. بعدها قم بإنشاء مجلد يسمى images في جذر المشروع وضع بعض الصور فيه لاختبار التطبيق، ثم شغل السيرفر: node server.js وافتح المتصفح وانتقل إلى الرابط التالي للحصول على قائمة بجميع الصور: http://localhost:3000/images-list ستظهر قائمة بالصور الموجودة في المجلد images في شكل JSON أين يمكنك استخدامها لعرض الصور في واجهة المستخدم الخاصة بك. وللوصول إلى صورة معينة بحد ذاتها، يمكنك استخدام الرابط التالي: http://localhost:3000/images/اسم_الصورة بهذه الطريقة، يمكن للمستخدمين رؤية جميع الصور المتاحة واختيار الصورة التي يريدونها.
  21. عند استخدام Redux لإدارة الحالة في تطبيقات الويب، فإنه يقوم بتخزين البيانات في الذاكرة العابرة (RAM)، وبالتالي فإن البيانات تفقد عند تحديث الصفحة. للحفاظ على البيانات حتى بعد تحديث الصفحة، يمكنك استخدام التخزين المحلي (Local Storage) أو التخزين الجلسي (Session Storage) للمتصفح، بداية قم بإضافة كود لحفظ البيانات في local storage كلما قمت بتحديث الحالة في Redux واستخدم: localStorage.setItem('key', value) لحفظ البيانات، وتأكد من تحويل البيانات إلى سلسلة نصية إذا كانت البيانات تحتوي على أنواع معقدة (مثل الأجسام أو الصفوف). store.subscribe(() => { localStorage.setItem('formData', JSON.stringify(store.getState().formData)); }); وعند بدء تشغيل التطبيق، يمكنك قراءة البيانات من local storage واستخدامها لتهيئة حالة Redux. const savedFormData = localStorage.getItem('formData'); const initialState = saved formData ? JSON.parse(savedFormData) : {}; const store = createStore(rootReducer, { formData: initialState }); ثم بعدها يمكنك استخدام البيانات المحفوظة في الحالة العامة للتطبيق، ويمكنك استخدام موصلات Redux (مثل connect في react-redux أو useSelector في الخطافات) لقراءة البيانات.
  22. قم بإضافة حقل جديد في قاعدة البيانات لتخزين تفضيلات شكل الروابط في لوحة التحكم، قم بإنشاء نموذج يسمح للمستخدمين بتحديد شكل الروابط المفضل من بينهما، ثم في ملف PHP الذي يعالج إعدادات لوحة التحكم، قم بتحديث قيمة حقل قاعدة البيانات بناء على الإدخال من نموذج لوحة التحكم وفي ملف .htaccess، قم بإضافة شرط يتحقق من قيمة حقل قاعدة البيانات لتحديد أي قاعدة إعادة كتابة يجب استخدامها كما أشرت لك في التعليق الذي سبق.
  23. أولا افتح ملف .htaccess ثم اذهب إلى لوحة التحكم الخاصة بالموقع، وافتح "مدير الملفات"، وتأكد من وجود ملف .htaccess في المجلد الجذر للموقع. وإذا لم يكن موجودا، فقط قم بإنشائه بعدها أضف القواعد التالية إلى ملف .htaccess لتحويل الروابط: RewriteEngine On # تحويل الروابط إلى شكل /category/c-رقم التصنيف.html RewriteRule ^category/c-([0-9]+)\.html$ cat.php?c=$1 [L,QSA] # أو تحويل الروابط إلى شكل /c-رقم التصنيف.html RewriteRule ^c-([0-9]+)\.html$ cat.php?c=$1 [L,QSA] ثم احفظ التغييرات في ملف .htaccess واختبر الروابط في المتصفح للتأكد من أن التحويل يعمل بشكل صحيح.
  24. توجد العديد من الطرق لكن بصفة عامة، يمكنك استخدام هذه الشيفرة ولاحظ التعليقات التي وضعتها وهي تشرح بشكل جيد دور كل سطر من البرنامج: // 1. استيراد مكتبة Axios import axios from 'axios'; // 2. تعريف الكائن JavaScript مع نفس بنية الكائن JSON في "Body => Raw" const jsonObject = { "home_page_position": "Headers", "show_in": "home" }; // 3. استخدام طريقة axios.post() لإرسال طلب POST axios.post('https://alsouq.anevex.com/app/shop-api/advertisements', jsonObject) // 4. في حالة نجاح الطلب .then(response => { // طباعة البيانات الواردة في الاستجابة على الكونسول console.log(response.data); }) // 5. في حالة وجود خطأ .catch(error => { // طباعة الخطأ على الكونسول console.error(error); }); ففي البداية نقوم باستيراد مكتبة Axios باستخدام: import axios from 'axios';. بعد ذلك، نعرّف كائنا JavaScript jsonObject بنفس بنية الكائن JSON الموجود في جزء "Body => Raw" من الصورة. ثم نستخدم طريقة axios.post() لإرسال طلب POST إلى الرابط الذي تريد وفي حالتنا https://alsouq.anevex.com/app/shop-api/advertisements. أول Argument للطريقة post() هو الرابط، وأما الثاني هو البيانات التي نريد إرسالها في جسم الطلب، وفي هذه الحالة هو الكائن jsonObject. إذا نجح الطلب، سيتم استدعاء دالة then مع استجابة الخادم ك Argument. داخل هذه الدالة، نقوم بطباعة البيانات الواردة في الاستجابة على الكونسول باستخدام console.log(response.data). إذا حدث خطأ أثناء الطلب، سيتم استدعاء دالة catch مع الخطأ ك Argument. داخل هذه الدالة، نقوم بطباعة الخطأ على الكونسول باستخدام console.error(error). عند استخدام طريقة axios.post() وتمرير الكائن jsonObject ك Argument ثانية، ستقوم Axios تلقائيا بتعيين رؤوس الطلب المناسبة (Content-Type: application/json) وترميز الكائن jsonObject كجسم الطلب.
  25. ليس كذلك، ف Google Scholar هو محرك بحث أكاديمي مجاني من Google يتيح البحث عن المقالات العلمية والأبحاث الأكاديمية والكتب والتقارير الفنية من مجموعة واسعة من المجالات العلمية بالطبع يمكن لمبرمجي الذكاء الاصطناعي استخدامه للوصول إلى أحدث الأبحاث، استكشاف الحلول لمشاكل محددة، متابعة التطورات الجديدة، والاستشهاد بالأبحاث في مشاريعهم وتقاريرهم. فمثلا يمكنك كتابة كلمات مفتاحية دقيقة تتعلق بموضوع بحثك، مثل "deep learning"، "natural language processing"، أو "AI in healthcare" وستجد مصادر مفيدة وقيمة.
×
×
  • أضف...