-
المساهمات
4908 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
61
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو محمد عاطف17
-
وعليكم السلام ورحمة الله وبركاته. أولا بالنسبة إلى أن الصور لا تظهر ذلك بسبب أنه لم يتم تنفيذ أمر ربط مجلد storage وذلك لأن الصور بداخل مجلد storage وليست public لهذا يجب تنفيذ أمر الربط ليتم وضع رابط storage بداخل مجلد public . لهذا يجب تنفيذ الأمر التالي : php artisan storage:link أما بخصوص عرض المنتجات فهناك مشكلة إما في التنسيقات أ, أنك قمت بتغير هيكل الصفحة ولهذا التنسيقات قد إختلفت . ولا أعلم ما هي هيكل الصفحة الذي كنت تستعمله مسبقا ولكن أعتقد أن المنتجات من المفترض أن تكون بداخل عنصر div والذي يحوي السمة frame-21 . ولهذا قمت بتعديلها لك . وأيضا في ملف التنسيقات سيتوجب عليك وضع الخاصية flex-wrap بقيمة wrap للعنصر frame-18 وأيضا سيتوجب عليك وضع تنسيقات للصور حتي يكون حجمها مناسب حيث إذا لم يتم وضع حجم لها ستأخذ كامل الصفحة . لذلك يجب عليك وضع السطر التالي في ملف التنسيقات في سطر 543 : flex-wrap: wrap; وإضافة تنسيقات الصور التالية في الملف أيضا : .frame-21 img { width: 100px; } وستظهر لك بالشكل التالي : إذا أردت تغير حجم الصور يمكنك تغيرها في التنسيق الصابق وزيادة حجمها ويمكنك تغير التنسيقات الأخرى كما تريد بنفسك . لقد قمت بإرفاق الملفين لك بعد التعديل . stylePS.css gallery.blade.php
-
لا داعي للشكر . وإياكم اللهم آمين . هذه مشكلة في postman بسبب أنه إذا أردنا إرسال بيانات من خلال طلب PUT أو PATCH يجب أن يتم إرسالها من خلال x-www-form-urlencoded : ولكن x-www-form-urlencoded لا تدعم إرسال ملفات ولهذا يمكننا إرسال الطلب ك POST ولكن نضيف ال _method بنوع الطلب الذي نريده سواء PUT أو PATCH و سيتم إرسال البيانات دون أى مشاكل وسيستطيع لارافل التعرف على نوع الطلب من خلال ال _method. وهذه المشكلة شائعة في Postman
- 9 اجابة
-
- 1
-
-
من الممكن أن المشكلة في postman لنحاول إرسال الطلب من نوع POST اي يجب عليكي تغير PUT إلى POST وإضافة : _method بقيمة PUT في البيانات هكذا :
- 9 اجابة
-
- 1
-
-
يرجى إستبدال $request->all() بالكود $request->validated(). أى في الجزء المشار إليه في الصورة السابقة يرجى إستبداله بالتالي : $request->validated() ويرجى أيضا محاولة طباعة السطر السابق والتاكد من أن البيانات التي يتم إرسالها من postman تصل بشكل صحيح. إذا إستمرت المشكلة يرجى إرفاق المشروع للإطلاع عليه ومساعدتكي بشكل افضل.
-
يرجى حذف السطر الذي أخبرتك بوضعه . لقد ظننت أن هذا هو ال controller وليس ال service . من المفترض أن يتم التعديل . هل قمتي بوضع المتغير $fillable في ال model الخاص بال Organizer ؟ حيث يجب وضع الأعمدة التي تريدين أن يتم تعديلها أو حفظها من خلال ال mass assignment . حيث إذا لم يتم وضع المتغير $fillable فلن يتم تعديل الأعمدة الموجودة بهذا النموذج. لذلك يجب التأكد من وجود السطر التالي في النموذج Organizer : protected $fillable = ['name','image'];
-
وعليكم السلام ورحمة الله وبركاته. أولا تحتاج أن تتعلم كيفية إستخدام إستعلام mysqldump في mysql لأخذ نسخة إحتياطية من قاعدة البيانات . حيث هذا هو الإستعلام الذي ستقوم به وكتابته في كود php ويمكنك تعلم المزيد حول كيفية إستيراد وتصدير قاعدة بيانات mysql من خلال المقال التالي : وإليك الكود التالي لفعل ذلك من خلال php : <?php // بيانات الاتصال بقاعدة البيانات $host = 'localhost'; // خادم myqsl $user = 'root'; // اسم المستخدم $pass = ''; // كلمة المرور $dbname = 'database_name'; // اسم قاعدة البيانات // تحديد اسم الملف الذي سيتم حفظ النسخة الاحتياطية فيه $backupFile = 'backup_' . $dbname . '_' . date('Y-m-d_H-i-s') . '.sql'; // إستعلام mysql الخاص بأخذ نسخة إحتياطية $command = "mysqldump --host=$host --user=$user --password=$pass $dbname > $backupFile"; // تنفيذ الأمر system($command, $output); // التأكد من أن النسخة الاحتياطية تم إنشاؤها if ($output === 0) { echo "تم إنشاء النسخة الاحتياطية بنجاح!"; } else { echo "حدث خطأ أثناء إنشاء النسخة الاحتياطية."; } ?> وإليك الإجابة التالية بتفصيل كيف تقوم بأخذ نسخة إحتياطية وحل المشكال التي من الممكن أن تواجهك : أما إذا أردت إستعادة النسخة الاحتياطية وإستيرادها إلى قاعدة بيانات لديك فيمكنك استخدام الكود التالي: <?php // بيانات الاتصال بقاعدة البيانات $host = 'localhost'; // خادم mysql $user = 'root'; // اسم المستخدم $pass = ''; // كلمة المرور $dbname = 'database_name'; // اسم قاعدة البيانات // إسم ملف النسحة الإحتياطية التي تريد إستيراده $backupFile = 'backup_2025-02-15_12-00-00.sql'; // التأكد من أن الملف موجود if (file_exists($backupFile)) { // إستعلام mysql الخاص بإستيراد النسخة الإحتياطية $command = "mysql --host=$host --user=$user --password=$pass $dbname < $backupFile"; // تنفيذ الأمر system($command, $output); // التأكد من نجاح الاستعادة if ($output === 0) { echo "تم استعادة النسخة الاحتياطية بنجاح!"; } else { echo "حدث خطأ أثناء استعادة النسخة الاحتياطية."; } } else { echo "الملف غير موجود."; } ?>
- 8 اجابة
-
- 1
-
-
وعليكم السلام ورحمة الله وبركاته. الخطأ لديكي أنكي تقومين بتعريف data كمعامل في الدالة . وتقومين بتمريرها للدالة update دون وضع البيانات بها . حيث البيانات تكون في الطلب request ولا يتم تمريرها إلى data تلقائيا. لذلك يجب في بداية الدالة كتابة السطر التالي : $data = $request->all(); وهكذا سيتم تمرير البيانات إلى المتغير data وهي البيانات التي تم إرسالها من النموذج form وهكذا ستحتوي data على البيانات الصحيحة وسيتم تمريرها إلى الدالة update . ويفضل حذف data من المعاملات الخاصة بالدالة .
-
إذا لنقم بطريقة إرسال الأحداث مع useState لأن ال localstorage تغيرها لا يؤدي إلى تحديث حالها المكونات. يرجى إستبدال ملف routes.js بالتالي : const router = (user) => createBrowserRouter([ { path: "/", element: !user ? <LoginPage /> : <Navigate to="/dashboard" /> }, { path: "/dashboard", element: user ? <DashboardLayout /> : <Navigate to="/" />, children: [ { index: true, element: <Dashboard /> }, ] } ]); export default function Router() { const [user, setUser] = useState(JSON.parse(localStorage.getItem("user"))); useEffect(() => { const handleStorageChange = () => { setUser(JSON.parse(localStorage.getItem("user"))); }; window.addEventListener('storage', handleStorageChange); return () => { window.removeEventListener('storage', handleStorageChange); }; }, []); return <RouterProvider router={router(user)} />; } والآن في ملف LoginForm.js نقوم بإرسال الحدث بعد حفظ البيانات في ال localstorage هكذا : const submitHandler = async (e) => { e.preventDefault(); mutate(formData, { onSuccess: (data) => { localStorage.setItem("user", JSON.stringify(data.user)); window.dispatchEvent(new Event("storage")); navigate("/dashboard"); } }); };
- 4 اجابة
-
- 1
-
-
الخطأ الأساسي لديك أنك تقوم بمحاولة إرفاق عنوان الصورة التي تحاول رفعها من الواجهة الأمامية وهذا خاطئ . حيث لا يجب إرسال عنوان بل يجب إرسال الملف نفسه من الواجهة الأمامية لتستطيع حفظ الملف من خلال الواجهة الخلفية. في ملف frontend\src\components\createProduct.js سطر 20 يجب إرسال ال image وليس req.file.path حيث لا يوجد ما يسمى req في الواجهة الأمامية وأيضا المتغير لم تقم بتمريره لهذا يحدث خطأ أنك تحاول إستخدام متغير req فارغ . لهذا يجب عليك إستبدال السطر بالتالي : formData.append('image', image); بعد ذلك في سطر 43 يرجى وضع الملف مباشرة وليس العنوان url هكذا : setImage(e.target.files[0]); بعد ذلك في سطر 52 يرجى إستبداله بالتالي لتظهر الصورة في النموذج form حينما تقوم برفعها : <img src={image ? URL.createObjectURL(image):""} style={{ margin: "0 auto", width: "25%" }} /> الآن تم حل مشكلة الواجهة الأمامية . توجد مشكلة في الواجهة الخلفية في ملف backend\routes\index.js حيث في سطر 26 انت تحاول إستقبال الملف بإسم file ولكنك في الواجهة الأمامية قمت بإرساله من خلال إسم image وليس file لذلك يمكنك إما تغيره هنا أو في الواجهة الأمامية . ويمكنك تغيره هنا هكذا : router.post("/create-products",upload.single("image"),isLoggedIn,productController.createProduct); اما بخصوص الإضافة إلى cart فأنت في الواجهة الأمامية تقوم بإرسال البيانات في ال headers وهذا خاطئ حيث يجب إرسالها في ال body وأنت تستقبلها من ال body في الواجهة الخلفية.وأيضا يجب أن تقوم بعمل parse للبيانات التي تقوم بإحضارها من ال localStorage . لهذا في ملف frontend\src\components\getProduct.js سطر رقم26 يرجى إستبداله بالتالي : userId: JSON.parse(localStorage.getItem("id")), وسطر 39 يجب إستبداله بالتالي : .post(ADD_TO_CART ,headers, ولقد قمت بإرفاق الملفات لك بعد التعديل . index.js createProduct.js getProduct.js
- 1 جواب
-
- 1
-
-
وعليكم السلام ورحمة الله وبركاته. إن collections هي وحدة (module) مدمجة في بايثون. توفر لك هياكل بيانات متقدمة ومحسنة مقارنة بالأنواع الأساسية مثل القوائم (list) و القواميس (dict) و المجموعات (set). وهذه الوحدة مرتبطة بشكل كبير بهياكل البيانات لأنها توفر لك نظام حاويات تخزن بها البيانات و التي ستسهل عليك التعامل مع البيانات بطرق أكثر كفاءة وفعالية. ومن هياكل البيانات التي توفرها لك : namedtuple : نستخدمها لإنشاء tuple بأسماء حقول مما يجعل الوصول إلى العناصر أكثر وضوحا بدلا من استخدام الفهرس والتعامل مع الارقام. deque : هي قائمة ذات طرفين تسمح بإضافة وحذف العناصر من البداية والنهاية بكفاءة وبسرعة دون الحاجة لإستخدام حلقات التكرار أو تغيرها يدويا. Counter : نستخدمها لحساب تكرار العناصر في قائمة أو أي كائن قابل للتكرار حيث تقوم بإنشاء قاموس مكون من المفاتيح وهي القيم الفريدة في البيانات و قيمة تلك القواميس هي عدد تكرار تلك البيانات. وإليك التوثيق الرسمي لها لمزيد من التفاصيل والدوال التي تقدمها لك : https://docs.python.org/3/library/collections.html
- 3 اجابة
-
- 1
-
-
وعليكم السلام ورحمة الله وبركاته. المشكلة الأولي أنك لا تقوم بحفظ بيانات المستخدم في localStorage عند تسجيل الدخول . ولذلك عند إعادة التوجيه إلى dashboard لا يتم العثور على user في localStorage ويتم إعادة التوجيه مرة أخرى إلى login . لهذا يجب عليك إستبدال الكود السابق بهذا الكود والذي نقوم فيه بتخزين بيانات المستخدم : const submitHandler = async (e) => { e.preventDefault(); mutate(formData, { onSuccess: (data) => { localStorage.setItem("user", JSON.stringify(data)); navigate("/dashboard"); } }); }; وتأكد من أن المتغير data هو بيانات المستخدم لديك . وإذا كانت البيانات بداخل كائن أخر بداخل data مثل data.user تأكد من حفظ data.user حينها. يجب أن يحل ذلك المشكلة إذا ظلت المشكلة أخبرني وذلك لنقوم بتجربة حل إنشاء حدث لإعادة تحديث الحالة.
- 4 اجابة
-
- 1
-
-
هل هذه هي الصفحة التي تقوم بإرسال البيانات لها ؟ إذا كان كذلك حاول طباعة البيانات في بداية الملف وأنظر هل يتم الطباعة أم لا في نافذة network وذلك لتتأكد هل يذهب الطلب بشكل صحيح أم لا . ولكن أعتقد أن المشكلة في ملف إرسال البريد . وخاصة في السطر أخير contact->send فإذا تم طباعة الجملة التي كتبتها في بداية الملف فإذا الخطأ في php-email-form.php
-
الخطأ الآن هو خطأ مختلف وهو 405 Method not allowed وهو يخبرك أن نوع الطلب هذا غير مسموح به أى أنه لا يقبل نوع POST . لذلك يجب عليك التأكد في الخادم أنك قمت بإنشاء الطلب من نوع POST أيضا وليس GET فقط .
-
هذا بسبب أنك تحاول إرسال البيانات إلى الخادم ولكنه لم يتم الوصول إلى الخادم وهذا بسبب إما أنه يوجد مشكلة لديك في الإنترنت أو أن الخادم لا يعمل . أوحدثت مشكلة أثناء تنفيذ طلبك . يرجى فتح نافذة network في أدوات المطور من خلال الضغط على CTRL + SHIFT + I وإختيار نافذة network : بعد ذلك قم بالضغط على زر send message مرة أخرى وستجد الطلب يظهر هنا ويمكنك رؤية سبب الخطأ. يرجى إرفاق صورة للطلب لديك في نافذة network مع إرفاق الكود لمساعدتك.
- 5 اجابة
-
- 1
-
-
هنا نحن في أكاديمية حسوب لا نقوم بالإجابة على أسئلة الإختبارات أو التقيمات ولكن يمكننا أن ندلك على طريقة الحل. أولا بالنسبة إلى توسيط العناصر في الشاشة فيمكنك إستخدام flexbox لتستطيع بناء عناصر متجاوبة وتوسيطها في أى حجم للشاشة ويمكنك قراءة الدرس التالي حول كيفية إستخدام flexbox : أما بخصوص المؤشر فتوجد خاصية في css تسمي caret-color يمكنك قراءة كيفية إستخدامه من خلال موسوعة حسوب على الرابط التالي : الخاصية caret-color ولتستطيع إنشاء border يحوى لونين يمكنك إستخدام الدالة linear-gradient() في css مع الخاصية border-image لتحقيق ذلك ويمكنك قراءة كيفية إستخدام تلك الخاصيتين من خلال موسوعة حسوب على الرابط التالي : الدالة linear-gradient() الخاصية border-image يمكنك محاولة حل التقيم بنفسك وإخبارنا بالكود الذي توصلت إليه .
- 1 جواب
-
- 1
-
-
ستجدين أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل.
-
لا يمكنك إستخدام متغير قبل تعريفه في أى لغة برمجة . لذلك يجب عليك نقل هذا الكود في بداية الصفحة لتستطيع إستخدامه في أى مكان بعده.
- 15 اجابة
-
- 1
-
-
أولا يجب أن نتفق أنه لا يوجد دورة ستجعلك محترفا فقط من خلال متابعة ومشاهدة الدروس فقط حيث بعد الإنتهاء من الدورة سيتوجب عليك العمل على نفسك والمذاكرة دائما خصوصا في مجال مثل الذكاء الإصطناعي وتعلم الآلة حيث يتطور هذا المجال بشكل كبير جدا وسريع. ولكن هنا في دورة الذكاء الإصطناعي لا تكتفي الأكاديمية بتدريس الأساسيات فقط بل ستقوم بتطبيقات عملية ومشاريع حقيقية والتي ستجعلك تعرف طبيعة الوظائف الحالية في المجال وأيضا تتدرب على مشاريع موجودة حقيقية . مما تؤهلك بعد الإنتهاء من الدورة أن تحصل على وظيفة شريطة أن تكون قد درست جيدا وقمت بالتطبيق العملي والتدريب على مشاريع حقيقية. ومن مميزات الدورة هنا في أكاديمية حسوب أنك يتوفر لك الوصول مدى الحياة للدورة بجميع تحديثاتها . فتقوم الأكاديمية دائما بتحديثات المسارات والأدوات بناء على سوق العمل والمتطلبات فيه . وأيضا تقوم بإضافة مسارات جديدة وغيرها مما ستساعدك في سوق العمل. ولهذا فإذا أتممت الدورة وقد فهمت الدروس وقمت بالتطبيق فعمليا أن الآن مؤهل لدخول سوق العمل كشخص متوسط أو مبتدئ ولكنك سيكون لديك الأساسيات الرئيسية والمعرفة الكافية للحصول على وظيفة ولكن كما وضحت لك سيتوجب عليك العمل والمذاكرة ومتابعة التحديثات دائما . ويمكنك مشاهدة الفيديوا التعريفي التالي عن الدورة و ما الذي ستتعلمه فيها والخبرات التي ستحصل عليها منها :
-
سؤالك لم يكن واضح قليلا إعتقد أنك تريد فقط مجموع الدول وعدد سكانها التي أكبر من شرط معين . <?php function latestitem1($select, $table, $innerjoin = null, $where = null) { global $con; $latestitems = $con->prepare("SELECT $select FROM $table $innerjoin $where"); $latestitems->execute(); $latestitem = $latestitems->fetchall(); return $latestitem; } $nations = latestitem1("nation.*", "nation", "", "", ""); $totalPopulation = 0; $numberOfCountries = count($nations); foreach ($nations as $nation) { $nationid = $nation['nationid']; $nationname = $nation['nationname']; $nationnumber = nationnumber($nationid); $totalPopulation += $nationnumber; if ($nationnumber > 200) { echo "<td>" . $nationid . "</td>"; echo "<td>" . $nationname . "</td>"; echo "<td>" . $nationnumber . "</td>"; } } echo "<td>" . $numberOfCountries . "</td>"; echo "<td>" . $totalPopulation . "</td>"; من المفترض أن هذا الكود يقوم بتنفيذ ما تريده . ويمكنك تغيره بسهولة حسب الشرط الذي تريده.
- 15 اجابة
-
- 1
-
-
هل قمت بوضع أخر سطرين الخاصين بطباعة عدد الدول و عدد السكان خارج ال foreach ؟ يجب أن تقوم بوضعهم بالخارج كما فعلت لك في الكود السابق . ويرجى ملاحظة أنه سيتم إحتساب عدد الدول فقط التي لها عدد سكان أكبر من 200 . يرجى إرفاق صورة للكود الذي لديك إذا إستمرت المشكلة.
- 15 اجابة
-
- 1
-
-
يبدوا انك وضعت الكود الخاص بتصفير المتغير بداخل foreach لهذا حدثت لك تلك المشلكة . يجب نقله بخارج حلقة for هكذا : <?php function latestitem1($select, $table, $innerjoin = null, $where = null) { global $con; $latestitems = $con->prepare("SELECT $select FROM $table $innerjoin $where"); $latestitems->execute(); $latestitem = $latestitems->fetchall(); return $latestitem; } $nations = latestitem1("nation.*", "nation", "", "", ""); $totalPopulation = 0; $numberOfCountries = 0; foreach ($nations as $nation) { $nationid = $nation['nationid']; $nationname = $nation['nationname']; $nationnumber = nationnumber($nationid); if ($nationnumber > 200) { $totalPopulation += $nationnumber; $numberOfCountries++; echo "<td>" . $nationid . "</td>"; echo "<td>" . $nationname . "</td>"; echo "<td>" . $nationnumber . "</td>"; } } echo "<td>" . $numberOfCountries . "</td>"; echo "<td>" . $totalPopulation . "</td>";
- 15 اجابة
-
- 1
-
-
يرجي إرفاق الكود كما طلبت منك . حيث لا اعلم ما هي بنية المتغيرات لديك . ولكن يجب على الفكرة أن تكون واحدة ويمكنك تطبيقها بناء على الكود الذي لديك .
- 15 اجابة
-
- 1
-
-
إذا يمكنك إنشاء متغيرين قبل الشرط if وبداخل الشرط يمكنك زيادة ذلك المتغيرين كالتالي : $totalPopulation = 0; $numberOfCountries = 0; If($nationnumber>30){ $totalPopulation += $nationnumber; $numberOfCountries++; // توليد الجدول } وهكذا في النهاية سيكون لديك المتغيرين totalPopulation والذي يحوي عدد السكان و numberOfCountries والذي يحوي عدد الدول.
- 15 اجابة
-
- 1
-
-
وعليكم السلام ورحمة الله وبركاته. هل تقصد أن الجدول الذي يتم توليده ديناميكيا يتم حفظه في قاعدة البيانات ؟ أم أين يتم توليده ؟ إذا كان يتم توليده بالكود يرجى توضيح الكود الذي تعمل به وهيكل البيانات التي لديك التي تقوم بها بإنشاء الجدول ديناميكيا . وإذا كنت تقصد أنه يتم توليده في الكود فالأمر بسيط كل ما عليك هو المرور على قائمة الدول كالتالي : function calculateTotalPopulation($countries) { $totalPopulation = 0; $numberOfCountries = count($countries); foreach ($countries as $country) { $totalPopulation += $country['Population']; } return [$numberOfCountries, $totalPopulation]; } ويمكنك تغير إسم العمود Population بإسم العمود الموجود لديك والذي يحوي عدد السكان في تلك الدولة. ويمكنك إستدعاء الدالة مباشرة وتمرير قائمة الدول . وستعيد لك قائمة بها مجموع عدد الدول و مجموع عدد السكان.
- 15 اجابة
-
- 1
-
-
وعليكم السلام ورحمة الله وبركاته. نعم عادة ما يتم استخدام ReLU في الطبقات المخفية حتى في مهام التصنيف. وذلك لأنه يعمل على إزالة القيم السالبة -أي يجعلها بصفر- ويحتفظ بالقيم الموجبة. و هذا يساعد في تسريع عملية التدريب مقارنة بوظائف التنشيط الأخرى مثل Sigmoid أو Tanh. وأيضا يساعد على تقليل مشكلة تلاشي التدرجات (Vanishing Gradients) وهو سهل الحساب لأنه يتطلب فقط مقارنة بسيطة (max(0, x)) . ولكن في الطبقة الأخيرة (Output Layer) في التصنيف لا يتم استخدام ال ReLU لأن نتائجها غير مناسبة لمخرجات التصنيف. فمثلا: إذا كان التصنيف لديك ثنائي فيفضل إستخدام Sigmoid في الطبقة الأخيرة. أما إذا كان التصنيف متعدد الفئات فيفضل استخدام Softmax للحصول على احتمالات تصنيف مفسرة. إذا تلخيص لما سبق يمكنك استخدام ال ReLU في الطبقات الخفية أثناء التدريب على مهمة التصنيف ولكن يجب عليك أن تتأكد من استخدام دوال تنشيط مناسبة في الطبقة الأخيرة مثل Sigmoid أو Softmax حسب نوع التصنيف الذي تقوم به.
- 3 اجابة
-
- 1
-