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

محمد_عاطف

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

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

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

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

    3

كل منشورات العضو محمد_عاطف

  1. وعليكم السلام ورحمة الله وبركاته . الخطأ يخبرك بان لارافيل الاصدار 11 يحتاج الى php اصدار اكبر من 8.2 وهو ليس متوفر لديك . ويجب عليك حذف xampp ثم تثبيت اصدار يدعم php 8.2 . او يمكنك استخدام اصدار لارافيل يدعم php لديك . يمكنك معرفة اصدار php عن طريق تنفيذ الامر التالى فى cmd php -v ويمكنك معرفة اصدارات لارافيل و اصدار php لذى تدعمه من الجدول التالى
  2. الامر بسيط ان شاء الله . كل ما عليك فعله هو انشاء حقل فى جدول المستخدمين لتسجيل رقم الهاتف وجعله unique بحيث لا تتكرر القيم فيه . ناتى الان للواجهة الامامية يمكنك تعديل حقل البريد الالكترونى ليقبل بريد الكترونى او رقم هاتف ويمكنك تحقيق ذلك بالتاكد من ان القيمة التى كتبها المستخدم هى رقم ام نص فاذا كان قد قام بكتابة رقم هاتف ولا توجد اى احرف فاذا ستتاكد ان هذا رقم هاتف ويمكنك تطبيق اى جزء للتحقق من صحة البيانات وهكذا بالنسبة للبريد الالكترونى . واما بالنسبة للواجهة الخلفية فايضا يمكنك التحقق من الحقل المرسل هل هو رقم ام نص فاذا كان رقم يمكنك ارسال استعلام لقاعدة البيانات للتاكد من وجود رقم الهاتف هذا بكلمة المرور و ايضا بالنسبة للبريد الالكترونى اذا كان بريد الكترونى تقوم بارسال استعلام الى قاعدة البيانات للتاكد من وجود البريد الالكترونى هذا بكلمة المرور.
  3. اعتقد ان الخطأ هنا لقد قمت بوضع نقطة قبل كلمة img وهذا خاطئ حيث ان النقطة تدل على ان هذه الكلمة هى سمة "class" ونحن لا نريد تنفيذ على سمة بل على عنصر لذلك نحذف النقطة . والخطأ الاخر فى فى كلمة cartTap حيث تم تعريفها فى العنصر ك cartTop لذلك نقوم بتعديلها فى ملف html بالاسم الصحيح cartTap. و من فضلك يمكنك مستقبلا التعليق اسفل الدرس الذى تريد الاستفسار عنه حتى نستطيع مساعدتك بشكل افضل. ستجد صندوق التعليقات اسفل الفيديو مباشرة حيث يمكنك التعليق هناك. شكرا لك
  4. وعليكم السلام ورحمة الله وبركاته . اولا قم بالبحث عن المعلومات والاضافات الجديدة والتحسينات و حتى الاشياء التى تم الاستغناء عنها فى الاصدار الجديد. قم بمقارنة البنية الخاصة بمشروعك بالبينة الخاصة بالاصدار الحديث ومدى الاختلاف بينهما . يمكنك الان الاختيار بين التحديث للاصدار الاحدث او تظل على الاصدار الاقدم بناء على احتياجك للاضافات الجديدة ام لا وايضا هل سيتم تغير البنية الخاصة بمشروعك كاملة ام لا . اذا قررت التحديث فعليك اولا اخذ نسخة احتياطية من مشروعك القديم والافضل استخدام نظام إدارة الإصدارات git مثل github. الان يمكنك تحديث الاصدار الى الاصدار الاحدث وتثبيت وتحديث المكتبات اللازمة التى يعتمد عليها . بعد ذلك تطوير الجزء الخاص من المشروع الذى تريده ان يعتمد على احدث الاضافات فى الاصدار الجديد. اذا كان قد تم الاستغناء عن بعض الخصائص او تم استبدال اسمائها فبيجب تعديل هذا الجزء من بنية المشروع حتى يعمل جيدا لانه سيظهر لك خطأ بان هذه الاشياء قم تم هجرها والاستغناء عنها . واخيرا اذا كان مشروعك مرفوع على استضافه فتاكد من ان الاستضافة توفر لك التحديثات الاخيرة من اللغه التى يعتمد عليها الاصدار . فمثلا فى اطار laravel 11 فانه يعتمد على php 8.2 فتاكد من وجود اصدار 8 لديك على الجهاز عند التطوير وايضا توفره على الاستضافه لديك حتى لا تقوم بتطويره ونمن ثم لا يعمل على الاستضافه. والافضل اذا كان المشروع كبير و البنية الخاصة به معقده فيمكنك تجاهل التحديثات ولكن تاكد من اصلاح التحديثات الخاصة بالامان حتى لا يكون موقع معرض للهجمات .
  5. وعليكم السلام ورحمة الله وبركاته . نعم بالطبع ان كتابة تعريف الصنف (class) فى اى لغه سواء بايثون او اى لغه اخرى هو شئ جيد جدا من حيث التنظيم وسهولة القراءة والصيانه ومعالجة الاخطاء . تخيل معى انك لديك صنف يثوم باداء وظيفة محددة و يحوى على العديد من الشفرات والاسطر الكثيرة مثلا فوق الالف سطر اول اقل او اكثر . فاذا قمت بوضعه بداخل الكود الخاص بك فستجد ان الكود اصبح مشتتا ولا تعرف ان تحدد الوظائف او اكتشاف الاخطاء . واذا اردت مثلا ان تقوم بنشر هذا الصنف او ارساله الى احد حتى يقوم بالتطوير عليه او حتى استخدامه فسيجد صعوبة فى فهم الكود ولن يتمكن من فصل الاصناف او الكود من بعضها البعض . ولذلك الحل الافضل فى الاصناف الكبيرة او حتى الصغيرة التى تعتمد على بعضها فى البعض هو فصلها فى ملف منفصل وتسمية هذا الملف باسم الصنف او الوظيفة المناسبة واستدعاءه فى المكان الذى تريد انشاء كائنات من هذا الصنف
  6. مرحبا احمد . إن الدورة التى أنت مشترك بها هى دورة php بالأساس و يتم فيها شرح إطار عمل لارافيل ويتم التعمق فيه بكثرة و إنشاء عدة مشاريع من خلاله حيث أن لارافيل هو اطار العمل الأشهر القائم على php وهو متوفر بكثرة في سوق العمل سواء في الشركات او حتى العمل الحر لذلك يتم شرحه بتعمق في الدورة ويتم تحديثه دوريا حيث أن مطورين لارافيل يقومون بتطوريه وإنشاء اصدارات أحدث منه سنويا كذلك الأكاديمية هنا تواكب هذا التطور. أما بالنسبة لمسار وورد بريس فإنه يتم شرح الاساسيات فيه من حيث تطوير القوالب و تطوير و تطوير الإاضافات وأيضا إنشاء مشاريع عملية للتطبيق عليهم و بما أن وردبريس هو اطار عمل يقوم بانشاء نظام ادارة محتوى المواقع والمدونات وحتى المتاجر البسيطة فانه لن يخلو من الاساسيات التى يتم شرحها في هذا المسار في الدورة . أما بالنسبة للعمل الحر ستجد أن المطلوب بكثرة بالنسبة إلى وورد بريس فإنه سيكون إنشاء قوالب أو تطوير إضافات أو حتى تركيب قالب على الموقع واعتقد أن ما تم شرحه فى هذه الدورة سيكمنك من تنفيذ ذلك بسهولة . وأيضا ساقوم بتوصيل طلبك إلى الادارة والنظر إذا ما كان يحتاج المحتوى أى تطوير ام لا . شكرا لتفهمك وبالتوفيق ان شاء الله.
  7. اولا بالنسبة لمشكلة السلة فيجب اولا اخفاء جزء السلة عند بداية تحميل الصفحة حيث نقوم بوضع سمة تسمى hidden الى العنصر الذى يحوى السلة ونقوم باعطائه الخاصية display: none !important; هكذا. .hidden { display: none !important; } ولاظهاره عند الضغط عليه ثم اخفاءه مره اخرى نستخدم الجافاسكريبت لفعل ذلك. حيث اولا نضع لعنصر السلة id يسمى my-cart حتى نستعمله فى جافا سكريبت . والان نقوم بتعريف متغيرين الاول يحوى الزر الخاص بفتح السلة والاخر هو عنصر السلة هكذا. const cart = document.getElementById('cart-btn') const my_cart = document.getElementById('my-cart'); والان نقوم بالاستماع الى الحدث الخاص click على زر السلة و عند الضغط عليه نقوم بحذف السمة hidden اذا كانت موجودة لاظهار السلة او وضع السمة hidden اذا لم تكن موجودة وذلك لاخفائها هكذا. cart.addEventListener('click', () => { my_cart.classList.toggle('hidden'); }); والان نضع حدث click على document حتى نقوم باغلاق السلة اذا تم الضغط فى اى مكان اخر وذلك للتسهيل على المستخدم وعدم اجباره على الضغط فقط على الزر لاخفاء السلة هكذا. document.addEventListener('click',(e)=>{ if( !(e.target.id == "cart-btn") && !my_cart.classList.contains('hidden')){ my_cart.classList.add('hidden'); } }) والان نقوم باستدعاء ملف الجافاسكريبت فى ملف index.html وايضا حذف زر السلة الاخر حيث يوجد زرين فى الكود . ولقد قمت بارفاق الملفات بعد تعديلها . اما بالنسبة تسجيل الدخول فان الامر ليس بتلك السهولة حيث ما قمت به الان هو فقط برمجة الواجهة الامامية اما تسجيل الدخول فيحتاج الى جزء الواجهة الخلفية والتعامل مع قواعد البيانات . ويمكنك عمل واجهة خلفية عن طريق استخدام لغة php او javascript مع اطار عمل express و nodejs . واذا لم يكن لديك اى خلفية عن تطوير الواجهات الخلفية فانصحك اولا بمذاكرة اللغة التى تريد العمل بها بداية من الاساسيات حتى يتسنى لك انشاء اى موقع كاملا script.js style.css index.html
  8. وعليكم السلام ورحمة الله وبركاته . نعم بالفعل فان اكاديمية حسوب تقوم دائما بتحديث الدورات لتتوافق مع سوق العمل ومع احدث التقنيات التى يتم نشرها لذلك نحن مستمرون دائما بتطوير المحتوى وبالفعل انت لديك وصول مدى الحياة على الدورة بتحديثاتها . ويمكنك متابعة الدروس والاقسام الجديدة التى تم تحديثها فى الدورة لديك واذا ما واجهتك أى مشكلة فلا تتردد يمكنك السؤال عن اى شئ اسف الدرس فى الدورة .
  9. وعليكم السلام ورحمة الله وبركاته . أولا، في Laravel، يتم استخدام نظام المصادقة (Authentication) المدمج لإدارة عمليات تسجيل الدخول والتحقق من الهوية. يجب عليك اولا ان تقوم بكتابة المسارات الخاصة بتسجيل الدخول والتسجيل وتسجيل الخروج في ملف التوجيه (routes/web.php). على سبيل المثال: use App\Http\Controllers\LoginController; Route::get('login', [LoginController::class,'create'])->name('login'); Route::post('login', [LoginController::class,'login']); Route::post('logout', [LoginController::class,'logout'])->name('logout'); ويجب انشاء متحكم فى المسار الذى قمنا بكتابته Auth\LoginController وانشاء الدوال التى قمنا بتمريرها ايضا. الآن، يمكننا أن ننشئ الدالة login() داخل LoginController. حيث تقوم هذه الدالة بالتحقق من بيانات تسجيل الدخول التى يتم ارساله من المستخدم وإذا كانت صحيحة، يتم تسجيل الدخول باستخدام Auth facade المدمجة في Laravel. على سبيل المثال: use Illuminate\Support\Facades\Auth; public function login(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { // هنا نقوم بكتابة اى شئ نريده فى حالة قام المستخدم بعمل تسجيل دخول صحيح return redirect()->intended('dashboard'); } return redirect()->back()->withErrors(['email' => 'These credentials do not match our records.']); } تقوم دالة attempt() بمحاولة تسجيل الدخول باستخدام البيانات المقدمة. إذا نجحت عملية التسجيل، يتم توجيه المستخدم إلى المسار المعين في هذه الحالة 'dashboard' ، وإذا فشلت، يتم توجيه المستخدم إلى الصفحة السابقة الطلب عليها مع رسالة خطأ. اما بالنسبة للمستخدم والادمن فيمكنك اضافة حقل فى قاعدة البيانات يسمى is_admin وجعل قيمته ب 1 اذا كان ادمن و 0 اذا لم يكن ادمن. ويمكنك قراءة هذا المقالة لتفهم جيدا عن الاستيثاق جيدا . وايضا هذا الرابط لموسوعة حاسوب ويمكنك قراءة المزيد حول لارافيل هناك.
  10. نعم بالطبع سيتم ارسال رساله اليك علي البريد الالكترونى الخاص بك عند الرد عليك . ونعم بخصوص الامتحان يمكنك السؤال على مركز المساعدة وسيتم الرد على استفساركم ومساعدتكم ان شاء الله . ولا تقلق اذا كان هناك تاخير فى الرد لانه حاليا يوجد العديد من الطلاب الذين يقدمون على الاختبارات وايضا من يريدون المساعدة حيث يوجد ضغظ حاليا .
  11. اعتقد ان المشكلة لديكى فى جزء الحفظ فى قاعدة البيانات فلقد قمتى بالخطأ فى ترتيب ادخال البيانات . cur.execute("INSERT INTO products (ProductName, ExpiryDate, Ingredient) VALUES (%s, %s, %s)", (product_name, ingredient, date_value)) لاحظى انكى يجب ادخال اسم المنتج ثم تاريخ الانتهاء ثم المكونات . ولكنى قد قمتى بالتبديل بين التاريخ والمكونات. لذلك استبدلى السطر لديكى بهذا السطر . cur.execute("INSERT INTO products (ProductName, ExpiryDate, Ingredient) VALUES (%s, %s, %s)", (product_name,date_value ,ingredient)) واذا لم يحل المشكلة فاعقتد ان المشكلة لديكى فى قاعدة البيانات وللتاكد اكثر يجب ارسال رسالة الخطأ التى تظهر فى منفذ الاوامر لديكى
  12. وعليكم السلام ورحمة الله وبركاته . ان ال HTTP response status code 500 تعنى انه يوجد خطأ فى الخادم اى انه حدث مشكلة لديك فى تنفيذ الكود على الخادم . لذلك تاكد من ارسال البيانات بشكل صحيح و ان تكون الشيفرة الخاصة بحفظ البيانات صحيحة . واذا ما زالت المشكلة موجوده فيجب توفير الكود الخاص بحفظ البيانات لنرى اين توجد المشكلة ونستطيع ان نساعدك
  13. ليس تماما فان وظيقة مصمم البرمجيات مختلفة عن مطور البرمجيات فهو لا يكتب اى شيفرات هو فقط ملم بعلم التصميم مهما كانت لغة البرمجة وليست لغه معينه . ولذلك اذا لم تكن تريد ان تكون مصمم برمجيات فلا يجب تعلم المجال بشكل موسع بل يكفى تعلم الاساسيات و النظريات التى تساعدك على فى مهنة تطوير البرمجيات مثل : قواعد البيانات هياكل بيانات "Data Structure" نماذج التصميم "Design Patterns" الخوارزميات "algotherms" OOP. ولكن مع الخبرة ستجد نفسك مع الوقت ملم اكثر بتفاصيل التصميم و انشاء المعماريات ولكن فى بداية مسيرتك المهنية انصحك بعدم الغوص عميقا فى تلك المفاهيم حيث من الممكن ان تسبب لك الاحباط و الملل بل يجب ان تاخذ مسيرتك تدريجيا
  14. توجد عدة اسباب لتلك المشكلة و لنتابع الخطوات معا لنرى اين توجد المشكلة . اولا يجب اغلاق xampp تمام حيث نضغط على زر Quit فى اقصى اليمين اسفل القائمة . والان لنحاول فتح البرنامج مرة اخرى كمسؤول run as administrator ولنحاول مرة اخرى تشغيل mysql . واذا لم يعمل فمن الممكن ان المنفذ (port) 3306 مستعمل من قبل برنامج اخر . لذلك لنحاول تغير المنفذ عن طريق فتح ملف my.ini والبحث عن السطر التالى port = 3306 ونقوم بتغيره الى 3360 مثلا port = 3360 ونقوم باعادة تشغيل الخدمة مرة اخرى . ويمكنك التاكد من ان المنفذ مستعمل ام لا عن طريق الضغط على زر Netstat فى xampp وسيقوم بفتح ناقذة للمنافذ المستخدمة والتاكد من عدم استخدام المنفذ الحالى 3306 واذا لم تعمل فهل يمكنك ارسال ملف تقارير الاخطاء لنرى اين تكم المشكلة
  15. وعليكم السلام ورحمة الله وبركاته . ليس المقصود بتصميم البرمجيات هو تصميم الواجهة الامامية باستخدام html و css وjs بل هو علم كامل يقوم على عملية تحديد متطلبات البرنامج، وتخطيط هيكله من تصميم قاعدة البيانات او حتى هيكل الشيفرات ، وتصميم واجهته الرسومية، وتطوير الخوارزميات والمنطق البرمجي، بالإضافة إلى اختباره وصيانته . وان تصميم البرمجيات ليست فقط حكرا على تطبيقات الويب بل هى تشمل ايضا تطبيقات سطح المكتب او تطبيقات الهاتف وايضا الانظمة المدمجة embded systems او نظام قائم على البرمجة عموما . ووظيفة مصمم البرمجيات هى من اصعب الوظائف و تطلب مستوى متقدما فى معظم العلوم . حيث انه مطالب اولا بتحديد متطلبات العمل و انشاء خطة لتنفيذ العمل و اختباره و ايضا تصميم هيكل المشروع كاملا من بدايته الى نهايته والتاكد من ان التصميم قابل للتنفيذ وايضا للتطوير و يكون اقل تكلفة . وايضا يقوم بمتابعة سير العمل للتاكد من كل فريق يقوم بتنفيذ ما هو مطلوب
  16. وعليكم السلام ورحمة الله وبركاته . اولا اهنئك على اجتيازك لمقابلة العمل ووفقك الله فى ما هو قادم ان شاء الله . اما بالنسبة للتاخر فى الرد فلا تقلق هذا شئ طبيعى حيث يوجد العديد من الطلاب الاخرين الذين قدمو مشاريع التخرج و لهذا من الممكن ان ياتى الرد متاخرا قليلا . لذلك من فضلك لا تقلق انتظر قليلا وسيتم الرد عليك ان شاء الله واتمنى لك التوفيق.
  17. يبدو انك تستعمل powerShell بدلا من cmd وهذه مشكلة شائعه فى powerShell. يمكنك استخدام cmd لتفعيل البيئة الافتراضية او اتباع الخطوات التالية لحل المشكلة. اولا قم بفتح ال powerShell كمسؤل ثم ثم بكتابة الامر التالى . Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser واذا ما ظهرت لك اى رسالة قم بكتابة Y ثم اضغط enter . والان يمكنك تفعيل البيئة الافتراضية عن طريق الامر التالى .\venv\Scripts\activate واذا اردت منع تنفيذ ال scripts كما كان سابقا واعادة كل شئ كما كان يمكنك تنفيذ الامر التالى . Set-ExecutionPolicy Restricted
  18. اولا ان ال vs code او اى IDE لا يقوم بتنفيذ الكود بل هو فقط محرر للاكواد وما يقوم بتنفيذ الكود هو ال compiler الخاص باللغه نفسها . ثانيا ان ال escaping characters تبدا دائما بالرمز "\" backslash وليس "/" ويبدوا انك قد اخطات بكتابة "n\" لذلك الصحيح هو استبدال "n/" الى "n\" وسيعمل معك . وتاكد من حفظ الملف بعد التعديل حيث من الصورة المرفقة يبدو انك لم تقم بحفظ الملف . ويمكنك الحفظ عن طريق الضغط على CRTL + S .
  19. وعليكم السلام ورحمة الله وبركاته . لا يمكن قول أن إطار العمل django أقوى او أفضل من express.js بشكل عام، لأن لكل منهما ميزاته واستخداماته الخاصة. إطار العمل django مكتوب بلغة python ومصمم لتطوير تطبيقات الويب الشاملة بشكل سريع وفعال، مع توفير الكثير من الميزات المدمجة مثل نظام إدارة قواعد البيانات ونظام التحقق من الهوية والتوثيق. اما express.js هو إطار عمل لغة جافاسكريبت يعمل على بيئة تطوير node.js ويسمح ببناء تطبيقات الويب والخوادم بسهولة باستخدام جافاسكريبت على جانب الخادم. يتميز express.js بمرونة كبيرة وبساطة في الاستخدام، مما يجعله شائعًا لتطوير تطبيقات الويب الخفيفة والمتوسطة الحجم. ان اطار عمل django ياتى مدمجا بكثير من المميزات والخصائص مثل نظام إدارة قواعد البيانات ORM ونظام إدارة المستخدمين والتوثيق ونظام الإدارة الإدارية للموقع ويوفر الامان والحماية ضد هجمات XSS وCSRF و SQL injection. اما express.js مرن ويسمح للمطورين ببناء تطبيقات مختلفة بسهولة وسرعة حيث يتمتع بقدرته على التوسع بسهولة لمعالجة أعباء عالية من خلال نموذج غير تقليدي للمدخلات والمخرجات (non-blocking I/O) حيث لا يقوم بحجز الموارد لاشخاص فى انتظار مهمة اخرى للانتهاء بل يقوم بالانتقال لمعالجة طلب اخر وايضا توجد العديد من المكتبات التى تحتاجها وسوف تجدها متاحه وايضا لديه مجتمع كبير من المطورين.
  20. لا بأس يمكنك البدا فى اى وقت شئت ولكن يجب عليك الالتزام بمتابعة الدروس وتطبيق كل ما يتم تعلمه فى الدروس بنفسك حتى تحصل على اقصى استفادة من الدورة . المهم لك اولا هو في البداية بمذاكرة الأساسيات واللغات البرمجية التي تستخدم في تصميم وتطوير واجهات المستخدم . وبعد ذلك قم بمتابعة الدروس العملية حيث فى هذه الدروس ستقوم بالتطبيق العملى على كل ما تعلمته فى الوحدات السابقة . ويجب عليك تخصيص وقت محدد يوميا لمتابعة الدروس حتى لا تمل او تتكاسل فترى ان الوقت قد فاتك وكان من الممكن ان تفعل الكثير حينها . ولا تقلق اذا ما واجهتك اى مشكلة او احتجت اى سؤال فيمكنك السؤال اسفل كل درس فى قسم التعليقات وستجد المدربون متاحين فى جميع الاوقات ومتوفرين لمساعدتك. وهذه بعض الإجابات لطلاب اخرين ستجدها مفيدة لك.
  21. قم باستبدال الدالتين handleSubmit و handleImageChange ولا اعرف لماذا تقوم برفع الصورة مرتين حاول فقط رفعها مرة واحده باستخدام api واحد فقط const handleImageChange = (e) => { const file = e.target.files[0]; setimage(file); }; const handleSubmit = async (e) => { e.preventDefault() try { const formData = new FormData(); formData.append('name',name); formData.append('pathname',pathname); formData.append('image',image); await axios.post('https://api.wesamelnagah.com/api/maincategory', formData,{ headers: { "Content-Type": "multipart/form-data", }, }) await axios.post('https://api.wesamelnagah.com/api/uplode',formData, { headers: { "Content-Type": "multipart/form-data", }, }) setname('') setimage(null) setpath('') } catch (error) { console.log(error) } } والان من المفترض ان يتم حفظ الصورة على الخادم وفى قاعدة البيانات بشكل صحيح
  22. الخطأ هنا لديك فى كود الواجهة الامامية . قم باسبتدال الكود السابق بهذا الكود . const formData = new FormData(); formData.append('name',name); formData.append('pathname',pathname); formData.append('image',image); await axios.post('https://api.wesamelnagah.com/api/maincategory', formData,{ headers: { "Content-Type": "multipart/form-data", }, }) وتاكد من انه يتم رفع الصورة بشكل صحيح ثم اعد كتابة السطر الذى حذفته فى الخادم
  23. قم بارجاع السطر السابق كما كان سابقا هكذا. const programmes = MainCategory({name,pathname,title, image, desc}); وقم بمحاولة رفع الصورة واخبرنى هل يتم رفعها الى الخادم ام لا فى مسار public/images/ فاذا لم يتم رفعها الى الخادم فيبدو انه توجد مشكلة لديك فى الخادم .
  24. هذا السطر خطأ يجب ان يكون image:req.file.filename هكذا كما اخبرتك . قم بالذهاب الى public/images/ لديك على الخادم وتاكد من انه تم رفع الصورة بنجاح فاذا لم يتم رفع الصورة فان الكود السابق لن يعمل ويبدو انه يوجد خطأ يمنع رفع الصور مثل عدم وجود المسار السابق او خطأ اخر . لذلك المهم الان هو التاكد من ان الصورة يتم رفعها بشكل صحيح ام لا على الخادم
  25. هل تم رفع الصورة فى المسار الصحيح ؟ حيث ان المكتبة multer بعد الرفع تقوم بوضع بيانات الصورة فى req.file . وهذا الخطأ يخبرك بانه لا يوجد req.file لذلك يبدو انه لا يتم رفع الصورة .
×
×
  • أضف...