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

Adnane Kadri

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

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

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

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

    52

كل منشورات العضو Adnane Kadri

  1. بدون تشخيص كامل للخطأ، لن يمكن الحسم في موضوع حله بطبيعة الحال. جرب افتح الصفحة عن طريق متصفح آخر او عن طريق جهاز حاسوب. او قم مثلا بتنزيل محتوى الملف وفتحه عن طريق محرر اكواد.
  2. الفكرة ليست في الاستضافة، فرسالة الخطأ هنا تنتجها احد ملفات الخادم او واجهته الخلفية. وستستمر نفس الرسالة بالظهور رغم نقل الاستضافة في حالة عدم حل هاته المشكلة. هل يمكنك التقاط صورة لما يحدث عند محاولتك فتح ملف laravel.log؟
  3. هل تواجه مشكلة بفتح الملف الكائن بالمسار المشار اليه؟ storage/logs/laravel.log
  4. هل تستخدم FTP لادارة الملفات على الخادم ام مستعرض الملفات في الاستضافة؟
  5. هل تمتلك وصول ssh الى الخادم الخاص بك؟ قد يحدث هذا بسبب احتفاظ التخزين المؤقت بملف الاعداد env. وعدم التقاطه اي تحديثات تمت به. في مثل هاته الحالة ستحتاج محو التخزين المؤقت لملف الاعداد، قد يكون وصول ssh ضروريا لتنفيذ الامر: php artisan cache:clear على كل، يحتفظ لارافيل بنسخة من رسالة الخطأ في ملف laravel.log الكائن بالمسار: storage/logs يمكنك استعراض رسالة الخطأ دون تفعيل وضع التصحيح عن طريق المشار اليه سابقا.
  6. لا يمكن تشخيص المشكلة الا بعد تمكين وضع التصحيح Debug mode لفهم المشكلة ومن ثم العمل على حلها. فالخطأ 500 يعني مشكلة بالخادم وفقط. بدون أي تفاصيل اضافية. اظن ان التطبيق مبني على لارافيل، يمكنك تمكين هذا الوضع عن طريق: فتح ملف env. الكائن بمجلد المشروع على الاستضافة. البحث عن السطر APP_DEBUG=false تعديله ليصبح APP_DEBUG=true حفظ الملف واعادة تحديث الصفحة على المتصفح ستظهر الآن رسالة خطأ مرفقة بتفاصيل المشكلة. يمكن انطلاقا من عليها العمل على حل المشكلة، في حالة التعذر يرجى ارفاقها للنظر فيها.
  7. نعم بالتأكيد، او قم باتخاذ المنحى الثاني، وهو حقن قيمة name في متغير جافاسكربت عام. او كفكرة عملية اخرى، قم بحقن القيمة في وسم meta داخل عنصر head بدل وسم عادي. فهاته البيانات في الأخير هي بيانات وصفية.
  8. حاول حقن قيمة auth()->user()->name في متغير عام او في وسم ثم قم عن طريق React بقراءته واسناده للحقل المعني، <div id="user-name">{{ auth()->user()->name }}</div> <div id="profile"></div> let userName = document.querySelector('#user-name').textContent const Profile = ()=> ( <form action="/home" method="POST"> @csrf <input type="text" value="{userName}" /> <button type="submit">save</button> </form> ) نفس الشيء بالنسبة لحقل csrf، لن يعمل. حاول مقاربة نفس الطريقة في انشاء الحقل csrf.
  9. من غير المقترح ان يتم حفظ صورة او ملف الى قاعدة البيانات بشكل مباشر، فهاته الملفات هي متواجدة بصيغة ثنائية binary، يجب اعتبار هاته النقطة في تخزينها، مثال: الحقل الموافق يجب ان يكون BLOB او LONGBLOB ليمكنه تخزين ذلك. الأصح هو ان يتم تخزين هاته الصور والملفات الى قرص التخزين الخاص بخادمك وحفظ مسارات هاته الملفات الى قواعد البيانات، او كفكرة اخرى، تشفير هاته الملفات بصيغة base64 وخزنها في قاعدة البيانات كسلسلة نصية. ما تقوم به في الشيفرة المرفقة غير واضح جيدا، لا يبدوا منطقيا المرور على كامل معاملات POST وارفاقها الى السلسلة data مثلا: foreach($_POST as $k =>$v){ if(!in_array($k,array('id')) && !is_array($_POST[$k])){ if(!is_numeric($v)) $v = $this->conn->real_escape_string($v); if(!empty($data)) $data .=","; $data .= " `{$k}`='{$v}' "; } } هذا بجانب ان الكثير من الاكواد تحتاج الاختصار والتبسيط اكثر.
  10. هل رسالة الخطأ التي تظهر هي رسالة مخصصة أم انه يتم رمي PHP exception عند محاولتك حفظ ملف او صورة؟
  11. تقريبا نعم، فالدورة تأسيسية وتأهيلية للعمل في أي وظيفة تختص بعلوم الحاسب بمجمله: محلل أمن معلومات أو مسؤول قاعدة بيانات، محلل نظم او مهندس شبكات. مطور برامج او مطور ويب او ايا كان. كل هاته الوظائف تندرج تحت علوم الحاسب، فهي توظف مفاهيم هذا العلم وتحتاج لأسسه بشكل أو بآخر. وكذلك العاملين في المجال. ستجد بنهاية الدورة ان لديك معرفة تأسيسية بمختلف المجالات، أظن انه يمكنك مع القليل من التخصصية او الاطلاع على مجال العمل الذي تريد ان تنشط فيه ان تكون مؤهلا للانطلاق في العمل.
  12. أظن أن هذا السؤال يحتاج أن يتقسم الى أسئلة اخرى أدق للاجابة عليه بشكل تفصيلي، فعلى سبيل المثال: ما الذي تريد أن تعمله بشكل أساسي؟ ما مدى معرفتك المسبقة بمجال العمل الذي تريد أن تنشط فيه؟ وما الى ذلك، الدورة بشكل عام تحتوي المسارات التالية: مدخل الى علوم الحاسوب أساسيات البرمجة، بلغة جافاسكربت كمثال أنظمة التشغيل ونظام لينكس قواعد البيانات عالم الويب البرمجة كائنية التوجه، بلغة بايثون كمثال الخوارزميات وبنى المعطيات أنماط التصميم أساسيات هندسة البرمجيات هاته المواضيع تكتسبك مجموعة من المعارف المتقدمة بخصوص علوم الحاسوب بالمجمل، والتي يستعملها ويحتاجها كل من ينشط في مجال تطوير البرمجيات وعلوم الحاسب. فهي تغطي مجموعة من المعارف التي يمكنك الاستعانة بها في العمل في مجالات مختلف. فهي حجر الأساس للمجال ككل. أما ان كنت تريد التخصص في مجال معين على وجه التحديد فيمكنك الاختيار بين مختلف الدورات المتخصصة الأخرى: دورة تطوير واجهات المستخدم للتخرج والعمل كمطور واجهات استخدام دورة تطوير التطبيقات بلغة بايثون للتخرج والعمل كمطور بايثون دورة تطوير التطبيقات باستخدام لغة جافاسكربت للتخرج والعمل كمطور جافاسكربت دورة تطوير التطبيقات باستخدام لغة PHP للتخرج والعمل كمطور نظم خلفية باستخدام لغة PHP دورة تطوير التطبيقات باستخدام Ruby للتخرج والعمل كمطور نظم خلفية باستخدام لغة Ruby
  13. مضمون الدورة هو هذا الموضوع أساسا، فهي تنطلق بك من أساسيات لغة PHP وقواعد البيانات في MySQL الى أساسيات اطار عمل Laravel والذي يتبع بسلسلة من المسارات التطبيقية التي تتناول هذا المفهوم بشكل أساسي. تمكنك هاته الدورة من ان تصبح مطور نظم خلفية بلغة PHP. سيمكنك بعد ذلك تجهيز موقعك المكتوب بلغات الواجهة الأمامية وبناء واجهته الخلفية بلغة PHP. اعرف أكثر عن الدورة من هنا.
  14. استعمل العبارة LIMIT مع ترتيب النتائج بشكل تنازلي بحسب المعرف ID: SELECT * FROM users ORDER BY id DESC LIMIT 5; مجموعة مقالات SQL دليل SQL بحسب توثيق حسوب
  15. يبدوا أن ملف app.py لديك محتوى في مجلد Taskaty آخر هو غير المجلد الحاوي للمشروع. جرب تنفيذ الامر: python Taskaty/app.py أو: cd Taskaty python app.py الحظ المسار الذي تحاول فيه تنفيذ الامر: يجب أن يوافق هذا وجهة الملف المستهدف:
  16. يمكنك ايضا الاستعانة بالتابع push لذات الغرض: this.props.history.push("/"); فيكون بعد التأكد من نجاح تسجيل الدخول مثلا كالتالي: .then(response => response.json()) .then(data => { if(data.status == 200){ this.props.history.push("/"); } })
  17. ما المشكلة التي تواجهها تحديدا؟ حاول نشر سؤال في قسم الأسئلة والأجوبة > أسئلة البرمجة وسيحاول المدربون والمشرفون على الأكاديمية مساعدتك.
  18. يوافق هذا الاختصار المرافق لاضافة سطر تعليق في VS code وهو Add line comment. قم بالضغط على ايقونة الاعدادات في الشريط الجانبي واضغط keyboard shortcuts من القائمة التي تظهر، ابحث عن Add line comment، الاختصار الظاهر هو المقصود. وهو في الغالب ctrl + k ctrl + c : قم اولا بتحديد الأسطر المراد تعليقها. ثم قم بالضغط تباعا على CTRL + k و CTRL + c. بالطبع يمكنك تخيصيص هذا الاختصار في VS code ايضا، من ذات القائمة السابقة قم بالضغط على رمز التعديل واضف الاختصار الذي يناسبك.
  19. يمكنك الغاء تفعيل وضع التصحيح debug mode من اعدادات PHP. من ملف الاعداد php.ini قم بتعديل الاسطر المعنية لتصبح كـ: display_startup_errors = Off display_errors = Off html_errors = Off أو قم بذلك عن طريق الاستعانة الوظيفة display_errors: display_errors(false);
  20. أرشح استعمال مكتبة axios فهي الأكثر شيوعا، كما أن تطبيق لارافيل جاهز يأتي معها بشكل عادي. يمكنك البدء في استيراد الوحدة axios واستعمالها بشكل مباشر: ملف app.js مثلا: import axios from 'axios' axios.get('path/to/target') .then(response => console.log(response)) .catch(error => console.log(error)) تأكدي بالطبع من تحزيم الملف عن طريق npm i و npm run dev.
  21. يوجد العديد من مكتبات الجافاسكربت التي تتولى مثل هاته العمليات، تسمى مكتبات عميل HTTP منها: مكتبة Axios-http مكتبة Node-fetch مكتبة Got مكتبة Needle يوجد حتى واجهة التطبيقات البرمجية المدمجة في جافاسكربت، واجهة fetch يمكن ايضا التعامل مع Ajax عن طريق الواجهة التي توفرها مكتبة jQuery
  22. وضع اكواد ذات مهام مختلفة ضمن نفس المجال شيء غير مقترح ابدا، حاول كشيء من التنظيم فقط فصل كل هاته المكونات واجعلها في ملف أو وظيفة منفصلة وهذا من اوجه تطبيق مبدأ يسمى بمبدأ فصل المهام Seperating of concerns. حاول ايضا الحفاظ على احتواء كل منها على مهمة واحدة يمكن التعبير عنها، وذلك كتطبيق لمبدأ المسؤولية الواحدة Single responsibility principle. أيضا لتلافي مشكلة التكرار حاول استخلاص المتشابه بينها واجعل المختلف متغيرا variables، الآن سيمكن تنظيم هاته العملية عن طريق دالة تقوم بأخذ المختلف وتستقبله كمعاملات ثم تحقنه تباعا في اماكن الاختلاف. ما تقوم به غير واضح جيدا، ولكن عموما، أظن انك تأخذ قيم قديمة ثم تعاود ادراجها بقواعد البيانات كطريقة لنسخ البيانات وانشاء صف جديد انطلاقا من آخر موجود بالفعل. حاول وصف دالة تستوفي نفس الشروط السابقة.
  23. مشكلتك تفتقر لتفاصيل أكثر، كيف تقوم بعرض هاته الصلاحيات مثلا؟ هل تقوم بالاستعلام عنها من قواعد البيانات؟ ان كان نعم، يفترض ان يكون هنالك علاقة ما بين المستخدم كنموذج بيانات والصلاحية كنموذج بيانات آخر. (عمود أجنبي foreign key يميز المستخدم في جدول الصلاحيات مثلا)، بعد هذا سيتحكم في طريقة عرض الصلاحية امتلاك المستخدم لصلاحية بنفس الاسم ونفس المعرف الخاص بالمستخدم في جدول الصلاحيات. نفس الشيء بالنسبة للمشكلة الثانية، يرجى ارفاق الشيفرة التي تظن انها مسؤولة عن المشكلة.
  24. يمكنك تطبيق هاته المقاربة عن طريق: انشاء جدول يعبر عن انموذج بيانات الدور Role وليكن باسم roles، يمتلك الخاصية permissions، فيكون مشابها لـ: const Role = new mongoose.Schema({ role: { type: String, default: "user", unique: true }, permissions: { type: [String] } }) طبعا سيحتاج انموذج بيانات المستخدم هو الآخر تمثيلا للدور كأحد خصائصه او اعمدته فيكون انموذج بيانات المستخدم User كـ: const User = new mongoose.Schema({ username: { type: String, required: true, unique: true }, password: { type: String, required: true }, role: { type: String, default: 'user' }, الآن لن نحتاج الا انشاء الادوار اللازمة وارفاقها بالأذونات المناسبة. وأخيرا، سنحتاج التحقق من امتلاك المستخدم [لدور معين] ثم [لصلاحية معينة] قبل القيام بالأكشن المعنية عن طريق استعلامات Mongo العادية أو ايا كان ما تستخدميه في قواعد البيانات. ولما لا، تنظيم العملية أكثر عن طريق جعلها كطبقة وسيطة Middleware.
×
×
  • أضف...