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

محمد_عاطف

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

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

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

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

    117

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

  1. وعليكم السلام ورحمة الله وبركاته . أولا لا أنصحك بذلك فلا يجب أن تضع partiotion واحد فقط لديك وتجعله يحوي جميع الملفات بما في ذلك نظام التشغيل . ثانيا يبدو من الصورة أنه يوجد لديك هاردين فإذا كان ال c و d فوق بعضهم وليس بجوار بعضهما البعض فلن ينفع ذلك فهذا هارد وهذا هارد أخر . أما بالنسبة للمشكلة الأساسية لديك وهي عدم ظهور خيار الحذف فهذا بسبب أن ال d لديك هو primary partitions وايضا ستجد مكتوب بجواره ملف الصفحة (page file) وهي خاصية تجعل النظام يستخدم ال partition لتوسيع الذاكرة الفعلية (RAM) عندما تكون الذاكرة المتاحة غير كافية لتشغيل التطبيقات والعمليات بشكل فعال وتسمى الذاكرة الإفتراضية (Virtual Memory) ولذلك يجب إيقاف هذه الخاصية أو نقلها ل partioion أخر حتي تستطيع حذف هذا ال partiotion ولكن لا أنصحك بفعل هذا . لذلك إذا أردت الحذف في أي حال يمكنك البحث عن كيفية إيقاف ال page file أو Virtual Memory على اليوتيوب واتبع الخطوات .
  2. وعليكم السلام ورحمة الله وبركاته . إن مجال هذه الدورة متقدم ويحتاج إلى معرفة سابقة أو أساسيات برمجية أي شخص لديه إلمام بأساسيات البرمجة وعلوم الحاسوب ، ولذلك فإن دورة علوم الحاسوب هنا في الأكاديمية هى الدورة المناسبة كبداية ، فهي ليست خاصة بمجال معين بل للتأهيل للدخول إلى مجال البرمجة عموما. ولكن أيضا في دورة الذكاء الاصطناعي تم مراعاة عدم وجود أى خبره ، حيث يتم الإفتراض أنه لا يوجد أي خبرة برمجية مسبقًا ويتم البدء من الصفر. وستجد في صفحة الدورة تلك التفاصيل أنه لا يحتاج إلى سابق معرفة : ولا مشكلة في الإشتراك بدورة الذكاء الاصطناعي مباشرة دون الإحتياج إلى دورة علوم الحاسوب ، لكنك ستأخذ وقت كثير نسبيا لكي تستوعب بعض الأمور بها ، و يجب عليك في البداية عدم تخطي شرح أى أساسيات حيث يتم البدأ بشرح الأساسيات مثل لغة بايثون و قواعد البيانات ، لذا هي بها شرح جيد للأساسيات، لكن ستحتاج إلى البحث ودراسة بعض الأمور الأخرى خارج الدورة لكي تستوعب ما يتم شرحه. وأيضا أى مجال خاص بالذكاء الإصطناعي وتعلم الآله وتحليل البيانات فهو يحتاج إلى أساسيات في الرياضيات مثل أساسيات الجبر الخطي وخلاف ذلك لذلك يفضل معرفة الأساسيات الخاصة بها ولكن كما أخبرتك أثناء الشرح في الدورة تم مراعاة ذلك . ويمكنك قراءة الإجابات التالية لمزيد من التفاصيل :
  3. وعليكم السلام ورحمة الله وبركاته . نعم بالفعل قديما يتم تخزين بيانات المستخدم في ال session كما كان يحدث في php ولكن لنشرح معا الفرق بين session وبين ال token . تعتمد فكرة الـ Sessions على تخزين حالة المستخدم (User State) على السيرفر. عندما يقوم المستخدم بتسجيل الدخول أو زيارة الموقع لأول مرة يتم إنشاء Session له تلقائيا في السيرفر، ويتم تعيين مُعرف (ID) فريد لهذه الـ Session في الخادم ويتم حفظ ال id في المتصفح في ال session ويتم إرسال ال id مع كل طلب . هذا المُعرف يتم استخدامه للتعرف على المستخدم في كل طلب يرسله إلى السيرفر، وبذلك يكون السيرفر قادراً على معرفة هوية المستخدم والتأكد من صلاحيته. على العكس تماما الـ Tokens هي عبارة عن عناصر صغيرة من المعلومات (مثل سلسلة نصية) يتم توليدها وتشفيرها من خلال السيرفر بعد عملية تسجيل الدخول بنجاح. يتم تضمين هذا الـ Token في كل طلب يقدمه المستخدم إلى السيرفر. السيرفر يقوم بفحص الـ Token للتحقق من هوية المستخدم وصلاحيته ويتأكد هل ال Token تم التلاعب به أم لا. الـ Token يحمل معلومات مثل هوية المستخدم وأي صلاحيات أو صلاحيات الوصول (Access Permissions) التي لديه. المزايا الرئيسية للاستخدام الـ Token-based: أمان : الـ Tokens يكون مشفرا لهذا من الصعب التلاعب به أو تزويره. قابلية التوزيع: يمكن توزيع الـ Tokens عبر عدة سيرفرات أو خدمات بسهولة دون الحاجة إلى مشاركة حالة الجلسة بينهم فمن الممكن أن يكون المشروع لديك على عدة سيرفرات أو خدمات لهذا ال Sessions لن تنفع. عديم الحالة (Stateless): الـ Tokens تسمح بإنشاء تطبيقات عديمة الحالة (Stateless Applications)، حيث لا يتم تخزين حالة المستخدم على السيرفر فمن الممكن أن يكون الطلب يتم إرساله من تطبيق هاتف أو حتي تطبيق سطح مكتب أو ويب. لذلك ال Token-based أفضل حاليا من حيث القدرة على توزيع المشروع على عدة سيرفرات و عدم الإعتماد على حالة سيرفر واحد وال session الخاص به.
  4. ماذا تقصد بالجدول الأول فيه جميع البيانات المستلمة ؟ هل تقصد أنه يقوم بإرجاع جميع البيانات الموجودة في قاعدة البيانات وإظهارها في هذا الجدول ؟ إذا كان كذلك فهذا ليس جيدا يجب عمل (pagination) أى صفحات للجدول حيث يتم إظهار 20 صف بحد أقصي في الجدول ويمكنه إختيار التالي أو السابق أو الذهاب لصفحة معينة وذلك أفضل شئ من حيث الأداء كما فعلت في الجدول الثاني . أما موضوع كثرة البيانات أقصد عدد الصفوف في قاعدة البيانات وهذا أيضا يعتمد على حالة الإستضافة و المواد المستخدمة . حيث سابقا كنت أعمل على مشروع وكان هناك جدول يحتوي على 400 الف صف وكان يتم عرضه بالكامل في الصفحة . كان الإسكريبت بطئ جدا وكانت الصفحة من الممكن أن تأخذ 20 إلى 30 ثانية للتحميل وبعد التحميل تجد المتصفح أصبح بطيئا جدا من كثرة البيانات فيه . ولهذا يفضل عدم إرجاع أكثر من 10-15 ألف صف مرة واحدة
  5. بالنسبة للسؤال الأول فالكود المرسل هو كود الإرسال لقاعدة البيانات . أما السؤال الثاني فأقصد كود الإستيراد من قاعدة البيانات
  6. بالنسبة للسؤال الأول فإذا أردت التحقق من الملف قبل إرسال ال form إلى الواجهة الخلفية فالأمر بسيط يمكنك إستخدام الكود التالي : <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script> function checkFileSize(event) { const file = event.target.files[0]; const fileSize = file.size; if(fileSize >= 500000) { alert('من فضلك إختر حجم ملف أقل من 500KB ') event.target.value="" } } </script> </head> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" onchange="checkFileSize(event)" required> <input type="submit" value="أضف"> </form> </body> </html> هنا أنشئنا الدالة checkFileSize والتي تقوم بالتحقق من حجم الملف وإذا كان حجم الملف أكبر من 500KB سيقوم بإظهار رساله للمستخدم بأنه لا يمكن رفع ملف أكثر من 500KB و سيقوم بحذف إختيار الملف الذى إختاره المستخدم وسيتوجب عليه إختيار ملف أخر . ولكن يجب عليك أيضا التحقق في الواجهة الخلفية حيث من الممكن أن يقوم المستخدم بإبطال عمل كود ال java script . أما بالنسبة إلى سؤال الثاني نعم فبالطبع تلك مشكلة ومن الممكن بشكل كبير أن يتوقف البرنامج عن العمل وحدوث مشاكل أو يؤدي إلى بطئ في السكريبت . ولكن هذا يعتمد علي طريقة كتابتك للكود حيث إذا قمت بإنشاء ملف في متغير وتقوم بكتابة البيانات فيه فهذا من الممكن بشكل كبير أن يؤدي لمشكلة إستهلاك جميع الموارد أو ان أقصي إستخدام للذاكرة في php يتم تخطيه وبذلك ستحصل مشاكل . وأيضا قاعدة البيانات ستكون بطيئة في إسترجاع تلك الكمية الكبيرة من البيانات .
  7. إن الأمر كله يتمحور حول ال API حيث يجب عليك : أولا تطوير API على موقعك الإلكتروني الحالي للتعامل مع عمليات إضافة المنتجات إلى السلة وإدارة السلة نفسها على الموقع الأول والذى يوجد فيه المستخدم. و يجب أن يكون لديك API تسمح بإضافة منتجات، حذف منتجات والحصول على محتويات السلة الحالية. ثانيا إنشاء API للنقل إلى الموقع الثاني: على موقعك الثاني الذي سترسل إليه البيانات قم بتطوير API لاستقبال طلبات السلة من الموقع الأول وايضا إستقبال الكود أو barcode من المستخدم والذى سيرسله لك الموقع الأول يجب أن تكون لديك API لاستقبال بيانات السلة مثل الحذف والإضافة أو التعديل وأيضا التحقق من ال code للتاكد من الأمان. و يجب أن تكون هناك عملية لنقل البيانات بشكل آمن وموثوق بين النظامين بما في ذلك استخدام البرمجيات المشفرة والاتصال عبر بروتوكول HTTPS للأمان ويفضل في الموقع الثاني الذى يستقبل الطلبات إغلاق إستقبال جميع الطلبات عدي من الدومين الخاص بالموقع الأول أو عن طريق ال IP فقط وهذا في حالة إذا كان الموقع الثاني لا يدخل عليه المستخدمين حيث هو فقط لحفظ و قراءة البيانات منه. تتبع الطلبات والتعديلات: يجب عليك تطوير واجهة المستخدم على الموقع الثاني لمتابعة حالة الطلب وتعديله حسب الحاجة بما في ذلك تحديثات الحالة وتوفير معلومات التوصيل والفاتورة.
  8. جزء ال select مختلف عن ال input حيث يجب عليك التأكد من القيمة الموجودة في قاعدة البيانات وقيمة ال option وإذا كانت متساوية نقوم بوضع خاصية selected هكذا : <select name="type" > <option value="">select type</option> <option value="img1" <?php echo ($row['type']=="img1") ? 'selected':'' ?> >img1</option> <option value="img2" <?php echo ($row['type']=="img2") ? 'selected':'' ?>>img2</option> </select> وفي المثال السابق إفترضنا أنه يوجد لدينا عمود في قاعدة البيانات يسمى type وهو يحوي قيمتين فقط إم img1 أو img2 . ونقوم بالتحقق من البيانات التي ترجع إلينا للتعديل فإذا كانت مثل قيمة ال option نضع خاصية selected لها . وبهذا ستظهر القيمة لهذا العمود في ال form
  9. أولا يجب عليك إنشاء ملف ال form كالتالي : <!DOCTYPE html> <html lang="ar"> <head> <meta charset="UTF-8"> <title>رفع الصور</title> </head> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> <label for="img1">صورة 1:</label> <input type="file" name="img1" id="img1"><br> <label for="img2">صورة 2:</label> <input type="file" name="img2" id="img2"><br> <label for="img3">صورة 3:</label> <input type="file" name="img3" id="img3"><br> <label for="img4">صورة 4:</label> <input type="file" name="img4" id="img4"><br> <label for="img5">صورة 5:</label> <input type="file" name="img5" id="img5"><br> <input type="submit" value="رفع الصور"> </form> </body> </html> بعد ذلك نقوم بإنشاء سكريبت الرفع ملف upload.php : <?php // إعدادات قاعدة البيانات $servername = "localhost"; $username = "root"; $password = ""; $dbname = "db_name"; // إنشاء اتصال بقاعدة البيانات $conn = new mysqli($servername, $username, $password, $dbname); // التحقق من نجاح الاتصال if ($conn->connect_error) { die("فشل الاتصال بقاعدة البيانات: " . $conn->connect_error); } // تحديد المجلد الذي سيتم تخزين الملفات فيه $target_dir = "img/"; // المتغير الذى يحوي مسارات الملفات لوضعها في قاعدة البيانات $path_files = []; // معالجة كل حقل من حقول الملفات for ($i = 1; $i <= 5; $i++) { if (isset($_FILES["img$i"])) { $uploadOk = 1; // تحقق من حجم الملف if ($_FILES["img$i"]["size"] > 5000000) { // 5MB كحد أقصى echo "عذراً، حجم الملف " . $_FILES["img$i"]["name"] . " كبير جداً.<br>"; $uploadOk = 0; } } } // تحقق من $uploadOk لتجنب رفع الملفات إذا كان هناك مشكلة if ($uploadOk == 0) { echo "عذراً، لم يتم رفع الملفات .<br> "; } else { for ($i = 1; $i <= 5; $i++) { $target_file = $target_dir . basename($_FILES["img$i"]["name"]); move_uploaded_file($_FILES["img$i"]["tmp_name"], $target_file); $path_files[$i] = [$target_file]; } $stmt = $conn->prepare("INSERT INTO table_name (img1,img2,img3,img4,img5) VALUES (?, ?,?,?,?)"); $stmt->bind_param("sssss", $path_files[1], $path_files[2],$path_files[3],$path_files[4],$path_files[5]); if ($stmt->execute()) { echo " تم رفع الملفات بنجاح <br> "; } else { echo "حدثت مشكلة اثناء الإضافة في قاعدة البيانات"; } } $conn->close(); وهكذا سيتم رفع جميع الملفات معا وإذا حدث خطا في ملف فلن يرفع الباقي ولن يتم الإضافة في قاعدة البيانات
  10. يمكنك إستخدام الكود التالي : <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <form action="file.php"> <input type="text" name="secret" placeholder="please enter 0000" data-secret="0000" onkeyup="check(this)"> </form> <script> function check(el){ if(el.dataset.secret == el.value) { el.closest('form').submit(); } } </script> </body> </html> لاحظ هنا أنشئنا input وقد قمنا بوضع placeholder ليخبر الشخص بإدخال الرقم 0000 ووضعنا خاصية ال data-secret لتساوي الرقم الذى نريده أن يقوم بإدخاله . وقمنا بإستماع الحدث الخاص بالضغط على الزر ومررنا له الدالة check. الآن أنشئنا الدالة check التي يتم تمرير ال input لها وتقوم بالتحقق من البيانات داخل ال input وإذا كانت مثل ما قمنا بوضعها في الخاصية data-secret فسيتم إرسال ال form تلقائيا . وهكذا يمكنك أخذ هذا الزر وو ضعه بداخل أى form مع أخذ الدالة check أيضا.
  11. السؤال غير واضح قليلا هل تقصد في الواجهة الأمامية تريد ال input أن يحوي 0000 ولا يتم تغيره ؟ في تلك الحالة يمكنك إستخدام خاصية disabled لتمنع تغيره ولكن أيضا يجب التحقق في الواجهة الخلفية فمن الممكن أن المستخدم يقوم بتغيره من أدوات المطور : <input type="text" value="0000" disabled>
  12. يمكنك تحقيق ذلك عن طريق ال cmd . قم بفتح ال cmd في المجلد الذى توجد فيه عن طريق كتابة كلمة cmd في العنوان . وبعد فتح ال cmd قم بكتابة الأمر التالي : code . وستجد أنه تم فتح المجلد في vs code
  13. وعليكم السلام ورحمة الله وبركاته : في لغة البرمجة بايثون نتستخدم كلمة pass كتعليمات فارغة حيث أن وظيفتها الأساسية هي أنها تعطي مكانا في الكود حيث يتطلب الكود وجود أكواد يجب توفيرها لكنك لا ترغب في تنفيذ أي شيء في هذه المرحلة. وهي مفيده بشكل خاص عند تخطيط الوظائف أو الفئات (Classes) أو الحلقات (Loops) والدوال (functions) . def function_to_implement_later(): pass class MyClass: def method_to_implement_later(self): pass for i in range(10): if i % 2 == 0: pass # لا تفعل شيئاً مع الأرقام الزوجية لاحظ فى المثال الأول قمنا بإنشاء دالة حاليا ولكننا لم ننشئ الكود الخاص بها فبدلا من مسحها نقوم بكتابة pass حيث إذا لم نقم بكتابة أى شئ سيحدث خطأ ولن يعمل البرنامج . وأيضا في الأصناف فمثلا من الممكن أن يرث صنف دالة من صنف أخر ويجب تعديلها أو كتابتها ولكننا لا نريد كتابتها الآن وبهذا نقوم بكتابة pass. وفي الكود الأخير في حلقة for قمنا بكتابة pass في مكان لا نريد تنفيذ شئ فيه
  14. يمكنك الضغط على open with Live server او الضغط على الزر التالي في أسف الشاشة أقصي اليسار. وتأكد من ظهورة كلمة port وبجوارها رقم ال port وهو غالبا ما يكون 5500 وبعد التشغيل يجب أن يفتح الموقع معك تلقائيا أو يمكنك زيارة الرابط التالي مباشرة : http://localhost:5500/
  15. الخطوات الأساسية اللازمة لدخول أي مجال هي غالبا تتعلق بتعلم الأساسيات وفهما قبل التخصص في مجال معين و البدأ فيه مباشرة ، وهذا لأهميتها الكبيرة في ذلك. فهي ما تساعدك على فهم الكثير من جزئيات البرمجة وتعينك على حل المشكلات وتكسبك خبرة التفكير المنطقي وتحليل وحل المشكلات. وتلك الأساسيات مثل : التفكير المنطقي الخوارزميات بعض أساسيات الرياضيات أساسيات البرمجيات هياكل البيانات ويمكنك قراءة المقال التالي لمزيد من المعلومات : وأنصحك بدراسة كورس CS50 المقدم من جامعة هارفرد أما إذا كنت مشترك هنا في دورة علوم الحاسب فهي كافية ويمكنك قراءة الأجوبة التالية حول نصائح دخول المجال وعن كورس CS50 :
  16. نعم التحديث الجديد جيد هو لم يتم التغير كثيرا هو فقط تم تغير أماكن العناصر ولكن هذا الترتيب حيث يعطيك تفاصيل اليوم كاملة أولا وواضحه وهو ما يريده المستخدم وأصبح متجاوب أكثر للشاشات المختلفة . ولكن توجد مشكلة في الحواسيب ستجد scroll bar في أسفل الصفحة لذلك أنصحك بوضع التنسيق التالي لحذفه : body { overflow-x: hidden; } وأيضا جزء الطقس ل يوما ليس أفضل شئ في الهواتف والشاشات الصغيرة حيث النصوص تكون بجوار بعض متداخلة وصغيرة ويفضل تغير تصميمها وإليك الكود التالي : .weather-slider { display: flex; flex-direction: column; } .weather-day { flex-direction: column; align-items: center; overflow: hidden; } .weather-day img { max-width: 25%; } ويمكنك وضعك الأكواد السابقة داخل media حتي يتم تطبيقها فقط على الشاشات الصغيرة لتصبح شكلها كالتالي : ويمكنك تنسيقها كما تشاء .
  17. نعم يجب حذفها ولكن هكذا لن تقوم بإعادة تحميل الصفحة لذلك هذا الكود لن يتم طباعته حيث أن هذا الكود يقرأ الرقم من الرابط وليس من قاعدة البيانات . فإذا كان هذا الكود في نفس الملف الذي فيه الرابط الذى ستقوم بحذفه إذا قم بطباعة الجملة مكانه . أما إذا كان في ملف أخر إذا يفضل وضعه في ال session هكذا : session_start(); $_SESSION['saved_id'] = mysqli_insert_id($conn); header("Location: index.php"); حيث هذا الكود يتم وضعه مكان الرابط ولاحظ أن أخر سطر يقوم بالتوجيه للملف index.php . والآن في ملف index.php نكتب التالي : session_start(); if (isset($_SESSION['saved_id'])) { echo "تم الإرسال رقم الكود المدخل هو " . $_SESSION['saved_id']; unset($_SESSION['saved_id']); } وهكذا يجب أن تحل المشكلة .
  18. إذا المشكلة ليست هنا المشكلة أنك ترسله في الرابط هنا : وهكذا يظهر لديك في الرابط . لهذا لا تقوم بإرساله في الرابط فقط قم بطباعته بعد رجوعة من قاعدة البيانات مباشرة
  19. المشكلة لديك أنك تقوم بإرسال ال form عن طريق method التي تسمى get و هذا لا يجب أن يتم حيث أن هذه الطريقة تفضل فقط في جلب البيانات حيث ستجد أن كل شئ تم إرساله في ال form تظهر في العنوان . ولكن في حال إرسال بيانات لإضافتها فأفضل شئ في ال form هو جعلها ترسل الطلب عبر post وذلك للأمان حيث لا يتم إرسال البيانات في الرابط. فتخيل لو هناك form لتسجيل مستخدم جديد وقام بكتابة كلمة مرور فستظهر في العنوان إن كانت من توع get ومن الممكن أن يرى أي شخص هذا الرمز بعدة طرق . أما في ال post فيتم إرسال البيانات في جسم الطلب ومن الصعب رؤيتها لذلك هي طريقة آمنه . لهذا في الواجهة الأمامية عند كل form قم بإضافة التالي : <form action="action.php" method="post"> لاحظ كيف أضفنا خاصية method="post" وهكذا سيتم إرسال الطلب عبر post وليس get حيث أن القيمة الإفتراضية هي get . لذلك فقط قم بإضافة method="post" في أى form لديك ترسل البيانات . وفي الواجهة الخلفية قم بتغير أى $_GET إلى $_POST . $_GET // قم بتغيرها إلى $_POST
  20. أعتقد أن البرنامج الذي تتحدث عنه من الممكن أن يكون Adobe XD (Adobe Experience Design)، وهو برنامج لتصميم واجهات المستخدم وتجربة المستخدم (UI/UX) وهو خاص بشركة Adobe . يستخدم Adobe XD لتصميم صفحات التطبيقات والمواقع بشكل بصري حيث يمكنك إضافة عناصر مثل الأيقونات وربطها بصفحات أخرى لإنشاء تجربة تفاعلية . ولكن حاليا أفضل برنامج موجود هو Figma حيث هو منتشرا كثيرا ومجاني و أفضل من حيث الإستخدام
  21. لا لن تسبب أى مشاكل فهي فقط تستخدم لتنسيق العناصر و الصفحات ولا تؤثر على الموقع في أى شئ فهي مثل ال css الذى تقوم بكتابته . لذلك يمكنك إستخدامها دون اى قلق منها إن شاء الله
  22. لنشرح أولا الكود الذى أرفقته : هذا الرمز هو عبارة عن عنصر <meta> في HTML وهو يستخدم لتعيين العرض الأولي للصفحة ومستوى التكبير الإفتراضي على الأجهزة المختلفة وهو يتكون من عدة أجزاء : <meta>: هذا العنصر يستخدم في HTML لتوفير معلومات عن الصفحة التي لا تظهر على المتصفح و للمستخدم مثل الوصف والكلمات الرئيسية (meta tags). name="viewport": هذا هو الخاصية التي تحدد نوع المعلومة التي يحتويها العنصر <meta> وهنا هو يشير إلى أننا نعرف عرض ال viewport. content="width=device-width, initial-scale=1.0": هذه هي القيم التي تحدد كيف ينبغي للمتصفح توسيع الصفحة لتلائم شاشة الجهاز حيث أن : width=device-width: يعني أن عرض الصفحة يجب أن تكون هي عرض الجهاز الذي يعرض عليه الصفحة. initial-scale=1.0: يحدد مستوى التكبير الإفتراضي للصفحة عندما يتم تحميلها. وتلخيصا للسابق فإن هذا الكود يساعد في جعل الصفحة تكون متجاوبة وتظهر بشكل صحيح على مختلف أحجام الشاشات ويجعل عرض الصفحة مثل عرض الشاشة تماما . ولكن ما تقوله بأنك تريد كود يجعل الموقع ثابت مع جميع الشاشات فهو مستحيل فلا يوجد شئ مثل هذا فإذا كان يوجد هذا الكود الذى تبحث عن فلن يكون هناك حاجة إلى التصميمات وإلى تعلم لغة css حيث هي المسؤولة عن التنسيقات . لذلك لا يوجد كود يتم تنفيذه على الموقع ليجعله ثابت بل يجب أن يكون كل موقع له التنسيقات الخاصة به فكل موقع يختلف من حيث الهيكل و العناصر . ولكن يمكنك إستخدام flex box في css فهي من أفضل الخصائص وأقواها في css لجعل العناصر متجاوبة . يمكنك قراءة الدرس التالي على موقع موسوعة حسوب عن flex box
  23. هذا يعتمد على ما الذي تقصده . هل تقصد إذا قام بإرسال بيانات لا يحق له إرسالها مرة أخري ؟ أم يحق له إرسال بيانات أكثر من مرة ولكن لا تتكرر ؟ على العموم يوجد أكثر من حل من خلال ال Session أو من خلال قاعدة البيانات . استخدام الجلسات (Sessions): عندما يتم إرسال البيانات لأول مرة من خلال الفورم قم بتخزين متغير والذى يدل على أنه تم إرسال البيانات في جلسة المستخدم. عندما يحاول المستخدم إرسال البيانات مرة أخرى تحقق إذا كانت هذه المعلومة موجودة في الجلسة؛ إذا كانت موجودة، فلا تسمح بإعادة إرسال البيانات. // في صفحة إرسال الفورم session_start(); if (isset($_SESSION['form_submitted'])) { // لا تسمح بإرسال البيانات مرة أخرى // يمكنك عرض رسالة خطأ أو إعادة توجيه المستخدم إلى صفحة أخرى } else { // معالجة البيانات هنا // ... $_SESSION['form_submitted'] = true; } استخدام من قاعدة البيانات: قم بإنشاء جدول يحوي على ال id الخاص بالمستخدم و عند إرسال البيانات تأكد هل هذا ال id موجود في الجدول أم لا إذا كان موجود فلا تقم بإضافة البيانات وإذا لم يكن موجود قم بإضافة البيانات و أيضا أضف ال id لخاص بالمستخدم في قاعدة البيانات .
  24. إن ال CSRF TOKEN يتم إرساله في ال Session من خلال لارافيل وأنت لا تقوم بإرسال ال Session في axios لذلك يحدث هذا الخطأ. أما المطورين الأخرين يرسلون ال Session لهذا لا يحدث أي خطأ لديهم . لهذا يجب إرسال ال Session والطريقة كما أخبرتك بها في الحل السابق.
  25. هل ال api يتم إرساله إلى إطار عمل Laravel ؟ الخطأ الذى يظهر هو 419 وهذا الخطأ بسبب عدم إرسال ال CSRF TOKEN إلي الخادم لذلك يجب إرسالها . وال CSRF token هو عبارة عن token يتم توليده من خلال الخادم وإرساله إلى الواجهة الأمامية في بداية الطلب حتي عندما يتم إرسال طلب post أو delete أو put وهي الطلبات التي تقوم بتعديل البيانات فيجب إرسالها حتي يتم التأكد من أن الطلب موثوق منه. ولحل تلك المشكلة يجب تضمين ال cookies في الطلب حتي يتم إرساله إلى الخادم : axios.defaults.withCredentials = true; وتوجد طريقة أخري وهي إرسال ال token عن طريق ال headers هكذا ولكن يجب عليك الحصول على ال token وهو غالبا ما يكون في الصفحة من خلال عنصر input يحوي الإسم _token : axios.post('api', { data: { // بيانات الطلب } }, { headers: { 'X-CSRF-TOKEN': 'هنا يتم وضع ال token ويفضل وضعه من خلال جافاسكريبت' } }) .then(response => { // التعامل مع الاستجابة هنا }) .catch(error => { // التعامل مع الخطأ هنا }); وهنا مكان X-CSRF-TOKEN يجب وضع ال token وهذا من خلال الحصول عليه من جافاسكريب إذا كان بداخل عنصر فيتم إستدعاء العنصر هكذا مثلا : document.getElementById('csrf').value
×
×
  • أضف...