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

شرف الدين حفني

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

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

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

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

    2

إجابات الأسئلة

  1. إجابة شرف الدين حفني سؤال في استخدامات innerText و innerHtml ؟؟ كانت الإجابة المقبولة   
    innerText تقوم بوضع المحتوى بشكل نصي 
    innerHtml تقوم بوضع المحتوى على هيئة html
    سيتضح الأمر من خلال المثال التالي
    <!DOCTYPE html> <html> <body> <div id="test"> <button onclick='document.getElementById("test").innerText="<h1>sharaf</h1>"'>click</button> </div> </body> </html> الكود السابق سيقوم بكتابة <p>sharaf</p> حرفيًا كما هي دون معالجة  الوسوم الخاصة بالhtml بل سيقوم بكتابتها كسلسلة نصية بينما المثال التالي
    <!DOCTYPE html> <html> <body> <div id="test"> <button onclick='document.getElementById("test").innerHTML="<h1>sharaf</h1>"'>click</button> </div> </body> </html> سيقوم بكتابة sharaf ولكن سيكون حجم الخط ضخم لأنه سيقوم بمعالجة الوسم h1 حيث أنه يقوم بكتابة الشفرة ك html وليس كسلسلة نصية
  2. إجابة شرف الدين حفني سؤال في كيفيه عمل تنسيق للscrollbar كانت الإجابة المقبولة   
    يمكنك تنفيذ ذلك عبر تنسيق الselectors الذان اسمهما 
    المسؤل عن الجزء الممسوك من الscrollbar 
    و
    المسؤل عن الprogress bar الخاص بالscrollbar فعلى سبيل المثال 
    ::-webkit-scrollbar-track { box-shadow: inset 0 0 5px grey; border-radius: 10px; } ::-webkit-scrollbar-thumb { background: red; border-radius: 10px; }
    باستخدام الشفرة السابقة سيصبح لون الجزء الممسوك من الشريط أحمر وله border radius 
    بينما يكون الجزء المتبقي له shadow و border radius 
    ويوجد أيضًا selectors أخرى خاصة بال scrollbar على سبيل المثال
    ::-webkit-scrollbar مسؤل عن الcontainer الذي يحتوي على السscrollbar 
    ::-webkit-scrollbar-button المسؤل عن الأزرار الموجودة في الscrollbar 
  3. إجابة شرف الدين حفني سؤال في هل تعلم الfloat والclear مهم في css كانت الإجابة المقبولة   
    أجل , تعلم الcss بخصائصها على وجه العموم مهم, فحتى مع وجود أطر العمل والمكاتب مثل bootstrap لازلت ستحتاج إلى عمل العديد من التنسيقات بنفسك لذا من المهم أن تفهم تنسيقات وخصائص الcss جيدًا 
    وعلى وجه الخصوص فإن الخاصية float من الخاصيات المُهمة في الcss نظرًا إلى أن وظيفتها بسيطة وهي أن تقوم بجلب المحتوى في إتجاه معين, فهذا شئ شائع جدًا وقد تحتاجه في أوقات كثيرة لذا من الأفضل فهمه جيدًا , والخاصية clear تُستخدم بشكلٍ شائع جدًا مع الخاصية float لذا تعلمها أيضًا مهم كذلك, وإن كان هنالك شئ معين في تلك الخواص تواجه صعوبة فيه يُمكنك وضع سؤال جديد تسأل فيه عن الجزئية التي تواجهك صعوبة فيها
  4. إجابة شرف الدين حفني سؤال في متي يمكنني استخدام for each و متي يمكنني استخدام for of loop ؟ كانت الإجابة المقبولة   
    ال for loop بوجه عام هي أعم من الfor each
    حيث أن ال for loop  تُستخدم لتنفيذ برمجية معينة او مجموعة من الأوامر لعدد من المرات بغض النظر عن نوع البرمجية,
    بينما ال foreach تُستخدم لتنفيذ برمجية معينة على عناصر المصفوفة فهي حالة أخص من الfor loop وتُستخدم للتعامل مع المصفوفة وعمل iteration للعناصر
    أي أن ال foreach تكون أفضل في حالة التعامل مع المصفوفات بينما الfor loop هي حالة أعم على سبيل المثال الشفرة التالية من الأسهل تنفيذها بال for loop 
    function get_factorial(n) { let result = n; for (let i =1; i < n; i++) result* = i; return result; } تلك الدالة تقوم بحساب الfactorial لرقم ما فإستخدمنا الfor loop بينما إن أردنا مثلًا المرور على عناصر مصفوفة ما وطباعة كل عنصر على حدا سيكون من الأسهل والمنطقي إستخدام ال foreach كما يظهر فالمثال التالي 
    my_list = [1,2,3,4,5,6,7] my_list.forEach(e=>console.log(e))  
  5. إجابة شرف الدين حفني سؤال في كيف يمكنني اعاده تحميل الصفحه باستخدام الjavascript ؟؟ كانت الإجابة المقبولة   
    يمكنك تحقيق ذلك بإستخدام الدالة  
    location.reload() حيث تقوم تلك الدالة بإعادة تحميل الصفحة , فيمكنك إذًا إعطاء الحدث onclick للزر الدالة location.reload كما بالشكل التالي 
    <button onclick="location.reload()">click</button>  
  6. إجابة شرف الدين حفني سؤال في دورة علوم الحاسوب كانت الإجابة المقبولة   
    يمكنك التحدث مع مركز مساعدة أكاديمية حسوب وسيتم حل مشكلتك, للتواصل مع المركز إضغط هنا
  7. إجابة شرف الدين حفني سؤال في اظهار واخفاء واجهات برانامج Visual Studio Code كانت الإجابة المقبولة   
    يمكنك الضغط بزر الفأرة الأيمن على البرنامج من الأعلى وإختيار menu bar كما يتضح في الصورة المُرفقة  
    بعد ذلك سيظهر لك الشريط بالأعلى مجددًا , يمكنك حينها الضغط على veiw وإختيار Appearence ومن ثم إختيار Activity bar كما هو موضح في الصورة التالية 
     

  8. إجابة شرف الدين حفني سؤال في كيفية حل مشكلة تكرار الناتج عند الاستعلام من علاقة ربط بين عدة جداول MYSQL JOIN multiple tables كانت الإجابة المقبولة   
    تلك المشكلة تحدث بسبب علاقة الجوين كما أوضح أ.وائل ويمكنك حلها أيضًا عبر إستخدام group by لحقل يُمثل السجل مثل ال id لتكون في النهاية الجملة الإستعلامية الخاصة بك كالتالي 
    SELECT order_threads.*, thread.image , thread.name, patron.id AS patronID, patron.order_id AS patronOrderID, patron_colors.patron_id AS patron_colors_Patron_id , patron_colors.color_name AS patron_colors_color_name, patron_colors.id AS patron_colors_ID, patron_colors.color_count AS patron_colors_colorCount FROM order_threads JOIN thread ON order_threads.thread_id = thread.id JOIN patron_colors ON patron_colors.patron_id = order_threads.color_select OR patron_colors.color_name = order_threads.color_select LEFT JOIN patron ON patron.id = patron_colors.patron_id WHERE patron.order_id = order_threads.order_id AND order_threads.order_id='36'; group by id  
  9. إجابة شرف الدين حفني سؤال في ما الفرق بين الخصائص القابلةً للإحصاء enumerable properties و non-enumerable properties في JavaScript؟ كانت الإجابة المقبولة   
    الخصائص القابلة للإحصاء يمكن الحصول عليها عند مناداة الدالة Object.keys(obj)  بينما الغير قابلة للإحصاء لن تظهر, بالإضافة إلى أننا عند عبورنا على خصائص الكائن من خلال for in  لن تظهر لنا إلا الخصائص القابلة للإحصاء فقط, ويمكننا فهم الأمر بشكلٍ أكبر عبر الأمثلة التالية 
    var obj = {}; Object.defineProperty(obj, 'a', { value: 123 }); // خاصية غير قابلة للإحصاء obj.b = 4; // خاصية قابلة للإحصاء لأننا أنشأناها عبر // إسناد قيمة إلى خاصية مباشرةً console.log(Object.keys(obj))////هنا لن تظهر لنا إلا الخاصية b فقط for(key in obj) console.log(key)//هنا لن يتم طباعة أيضًا إلا الخاصية b فقط وتلك الخصائص يمكننا الإستفادة منها في عدة أمور كمثال عند محاولتنا لتحويل الكائن لديك إلى مصفوفة, يمكننا إستخدام الشفرة التالية 
    const arr = Object.keys(obj).map(key=>obj[key]) في تلك الحالة لن يتم تحويل الخواص التي ليست قابلة للإحصاء وذلك لأنها لن تظهر لنا في التابع Object.keys , لذا يُستحسن دومًا محاولة التعامل مع الخواص القابلة للإحصاء بدلًا من الغير قابلة إلا في حالة أنك أردت وضع خاصية لا تظهر في الحالات التي ذكرناها
  10. إجابة شرف الدين حفني سؤال في كيفية جلب بيانات من excel في django؟ كانت الإجابة المقبولة   
    تلك المشكلة تحدث بسبب أنك تحاول الحصول على قيمة الصف sol والذي هو في الاساس ليس قيمة وانما معادلة, لذا يجب حسابها قبل محاولة الاتيان بقيمتها, ولحساب معادلات الاكسيل برمجيًا يمكننا استخدام موديول  formulas  والذي يقوم اولا بتحميل الملف الاكسيل ومن ثم حساب معادلاته ومن ثم حفظه, والشفرة التالية مستوحاة من شفرتك بعد بعض التعديلات لتناسب استخدام الموديول 
    import pandas as pd import openpyxl import formulas xl_model = formulas.ExcelModel().loads('./MATH.XLSX').finish() xl_model.calculate() xl_model.write(dirpath='./') wb = openpyxl.load_workbook('MATH.XLSX',data_only=True) sheet1 = wb['ورقة1'] print(sheet1.cell(column=3, row=2).value) df = pd.read_excel('MATH.XLSX', sheet_name='ورقة1', usecols='A:L') number1 = df.loc[0]['number 1'] print(number1) number2 = df.loc[0]['number 2'] sol = df.loc[0]['sol'] print(df.loc[0]) نلاحظ اننا نستخدم الملف بحروف كبيرة, وهذا لان الموديول formulas يقوم بحفظ الملف بحروف كبيرة, يُرجى استبدال المسارات الموضوعة في الشفرة بالمسارات الخاصة بملفاتك
     
  11. إجابة شرف الدين حفني سؤال في لماذا يتم طباعة الخمس أصفار على هيئة صفر واحد في جافاسكريبت كانت الإجابة المقبولة   
    هذا لأنك قمت بإنشاء رقم المنتج على هيئة متغير عددي وليس على هيئة سلسلة نصية, وبالتالي من الناحية العددية فإن الصفر يساوي الصفرين يساوي الثلاث اصفار يساوي الخمسة اصفار, لان كما تعلم الصفر على اليسار ليس له قيمة وبالتالي لا يوجد فرق رياضي بين كتابة 0 او 00 او 000 , لذا لطباعة الرقم على هيئة خمسة أصفار بدلًا من صفر واحدة يمكنك تغييره إلى سلسلة نصية كالتالي 
    function product(product_name = "Unknown" , product_number = "00000") { console.log(`Laptop Name Is ${product_name} And Product Nummber Is ${product_number}`); }  
  12. إجابة شرف الدين حفني سؤال في كيفية إيقاف تنفيذ الشفرة البرمجية في جافاسكريبت كانت الإجابة المقبولة   
    مرحبًا 
    حسب فهمي للتعليمات, المقصود أن تقوم بمنع تنفيذ الشفرة البرمجية, ولكن دون مسحها
    يمكننا عمل ذلك عبر 
    إستخدام الدالة window.stop() والتي وظيفتها إيقاف تحميل باقي الصفحة عبر الexceptions , حيث عند رمي exception يتم إيقاف الشفرة البرمجية من التنفيذ  ويمكننا إلقاء exception عبر عبارة throw , كما يظهر في المثال التالي  throw new Error("sharaf"); console.log("sharaf"); document.write("hi"); في هذا المثال سيتوقف الscript عن التنفيذ بسبب إلقاء الexception وبالتالي لن تتنفذ الشفرة البرمجية.
  13. إجابة شرف الدين حفني سؤال في معنى خاصية not:last-child في css كانت الإجابة المقبولة   
    أمر  not(:last-child) معناه أن لا يتم تطبيق تلك التنسيقات على أخر عنصر, لنقم بتوضيح الأمر عبر المثال التالي 
    <p>one.</p> <p>two.</p> <p>three.</p> <p>four.</p> <style> p { background: red; } </style> في هذا المثال سيتم تطبيق خاصية background لجميع عناصر p, في حالة أردنا أن يتم تطبيق التنسيقات على العنصر الأخير فقط نقوم بكتابة 
    <p>one.</p> <p>two.</p> <p>three.</p> <p>four.</p> <style> p:last-child { background: red; } </style> أما في حالة أردنا تطبيق التنسيقات على جميع العناصر بإستثناء العنصر الأخير(كما يحدث في حالتك) نقوم بوضع الselector بداخل not كالتالي 
    <p>one.</p> <p>two.</p> <p>three.</p> <p>four.</p> <style> p:not(p:last-child) { background: red; } </style> هكذا نقوم بإخباره بأن يتم تطبيق تلك التنسيقات على الselector الموجود قبل not ولا يطبقها على الselector بداخل الnot 
  14. إجابة شرف الدين حفني سؤال في مشكلة في تدوير حواف الصورة عند استخدام border-radius 50% كانت الإجابة المقبولة   
    الخاصية border-radius:50% تجعل الصورة دائرة في حالة فقط كانت الصورة لها نفس العرض ونفس الإرتفاع , عدا ذلك تجعلها شبه دائرية, لتصبح دائرية يجب أن يكون للصورة نفس العرض والإرتفاع, على سبيل المثال يكون عرضها 200بيكسل وإرتفاعها 200 بيكسل, أو أي رقمين متساويين
  15. إجابة شرف الدين حفني سؤال في ما فائدة تنسيق inline-block كانت الإجابة المقبولة   
    خاصية inline-block تقوم بجعل العنصر inline بمعنى أنه لا يأخذ سطر جديد ولكن في نفس الوقت يأخذ خواص الblock مثل العرض والإرتفاع, حيث أن العناصر الinline يكون عرضها بقدر المحتوى بداخلها ولا يمكن وضع إرتفاع لها , عند إعطاء عنصر الخاصية inline-block يمكنك إعطاء خواص طول وإرتفاع للعنصر , إن كنت لا تحتاج مثل تلك المميزات بالتالي يمكنك إزالة الخاصية بدون مشاكل
  16. إجابة شرف الدين حفني سؤال في كيفية إنشاء الصفحات تلقائيا في HTML كانت الإجابة المقبولة   
    أنت محق ليس من المنطقي أن نقوم بإنشاء صفحة لكل منتج
    عادةً ما يحدث أننا نقوم بإستخدام أحد تقنيات تطوير الواجهات الخلفية back-end لنقوم بإنشاء قاعدة بيانات ويتم وضع فيها جميع المنتجات لدينا ومن ثم نقوم بإنشاء api وهي عبارة عن طريقة للتخاطب بين الواجهة الخلفية والواجهة الأمامية, ونقوم بإنشاء صفحة واحدة للمنتج ونقوم بإستخدام جافاسكريبت بجلب البيانات من الواجهة الخلفية إلى الواجهة الأمامية بشكل ديناميكي حسب عنوان الurl المطلوب, على سبيل المثال إن كان عنوان الurl 
    http://store/product/1 نقوم بجلب بيانات المنتج ذو المُعرف 1 إلى الصفحة , إن كان العنوان
    http://store/product/2 نقوم بجلب بيانات المنتج ذو المُعرف 2, أي نقوم بإنشاء صفحة واحدة للمنتج ونقوم بجلب المنتج بشكلٍ ديناميكي من الواجهة الخلفية
  17. إجابة شرف الدين حفني سؤال في أريد أن أضيف أوبجكت داخل أرراى ولكن عند الاضافة اريد التحقق ان كان ال id الخاص به موجود لا يضيفه مجددا . اما ان كان غير موجود فيقوم باضافته .. كيف افعل ذلك بالجافا سكريبت ؟ كانت الإجابة المقبولة   
    يمكنك تنفيذ المطلوب بالخطوات التالية
    إستخدام دالة some والتي تقوم بإرجاع true إن كانت تحتوي على القيمة المطلوبة إن قامت الدالة بإرجاع false يعني أن القيمة غير موجودة بالتالي نقوم بإضافتها ويمكن توضيح ذلك عبر الشفرة البرمجية القادمة
    const isExist = arr.some(el => el.id === new_element.id); if (!found) arr.push(new_element);  
  18. إجابة شرف الدين حفني سؤال في لماذا يفضل استخدام class بدل struct مع البيانات كبيرة الحجم لغة c# كانت الإجابة المقبولة   
    هذا لأن class من النوع reference type بينما struct من النوع value type 
    ما الفرق بينهما؟
    لنفهم الفرق نحتاج أولًا أن نفهم أنه يوجد ما يُسمى بالstack memory وال heap memory , الstack memory تمتلك مساحة أقل ولكنها أسرع في الوصول, بينما الheap memory تمتلك مساحة أكبر ولكن أبطأ في الوصول
    الstruct بما أنه value type لذا يتم تخزينه في الstack, فيتم الوصول إليه بشكلٍ سريع, ولكن إن كان حجمه كبير سيتسبب ذلك بمشاكل لأن مساحة الstack محدودة وبالتالي قد يتسبب ذلك في خطأ يُسمى stack over flow يحدث عندما يتم ملأ الstack 
    بينما الclass بما أنه من النوع reference type فلا يتم تخزينه في الstack وإنما يتم تخزينه في الheap ويتم تخزين عنوانه في الstack وذلك العنوان يكون مساحته صغيرة نسبيًا 4bytes , لذا يُفضل تخزين البيانات كبير الحجم في الclass حتى لا يتسبب ذلك بمشكلة stack over flow 
     
  19. إجابة شرف الدين حفني سؤال في معنى علامة ~ لغة C# كانت الإجابة المقبولة   
    تلك العلامة تُسمى compliment bitwise ,ما معنى ذلك؟
    إن إفترضنا لدينا الرقم الثنائي   0110110 فإن الcompliment يقوم بتحويل جميع الأصفار إلى أحاد وجميع الأحاد إلى أصفار فيصبح الرقم  1001001 
    يمكن تطبيق ذلك بنفس الطريقة على الأرقام العشرية إن إفترضنا قمنا بكتابة الشفرة التالية 
    int number = 16; int result = ~number; الرقم 16 في النظام الثنائي يساوي 10000 , إن قمنا بإستخدام المعامل ~ سيتم تحويله إلى 01111 أي يصبح المتغير result يساوي 15 
  20. إجابة شرف الدين حفني سؤال في ما المقصود بمبدأ open-closed principle كانت الإجابة المقبولة   
    مبدأ open-closed أو (مفتوح للإمتداد - مغلق للتعديل) هو ثاني مبدأ من مبادي SOLID وهي المبادئ الخمسة الأساسية لتصميم نظام كائني التوجه بشكلٍ سليم, لنفهم المبدأ من خلال المثال التالي:
    نفترض أن لدينا واجهة تُسمى Shape ويقوم بعمل implement لها أصناف مثل Square, Circle ولدينا صنف يُسمى AreaCalculator يحتوي على دالة تُسمى sum مسؤلة عن أخذ مجموعة من الأشكال وحساب مساحتها كما يتضح لنا في الشفرة التالية 
    interface ShapeInterface { public function area(); } class Square implements ShapeInterface { public int length; public function Square(int length) { this.length = length; } public function area() { return Math.pow(this.length, 2); } } class Circle implements ShapeInterface { public int radius; public function Circle(int radius) { this.radius = radius; } public function area() { return Math.pow(this.length, 2); } } class AreaCalculator { protected ShapeInterface[] shapes; public function AreaCalculator() { this.shapes = []; } public function sum() { foreach (this.shapes : shape) { if (shape instanceof Square) { area+ = Math.pow(shape.length, 2); } elseif (shape instanceof Circle) { area+ = Math.pi * Math.pow(shape.radius, 2); } } return area; } } الأن لدينا مشكلة في تلك الشفرة, إن أردنا مثلًا إضافة شكل أخر مثل المثلث أو المستطيل أو أي شكل سنحتاج إلى الرجوع والتعديل مرة أخرى في الدالة sum وهذا سيؤدي إلى شفرة برمجية أكثر تعقيدًا وأكثر عرضة للأخطاء, لذا من الأفضل أن نجعل دالة المساحة موجودة في الأصناف المتوارثة من ShapeInterface وتقوم الدالة sum بنداء الدالة المسؤلة عن المساحة مباشرةً ليُصبح الشكل النهائي لشفرتنا كالتالي 
    interface ShapeInterface { public function area(); } class Square implements ShapeInterface { public int length; public function Square(int length) { this.length = length; } public function area() { return Math.pow(this.length, 2); } } class Circle implements ShapeInterface { public int radius; public function Circle(int radius) { this.radius = radius; } public function area() { return Math.pow(this.length, 2); } } class AreaCalculator { protected ShapeInterface[] shapes; public function AreaCalculator() { this.shapes = []; } public function sum() { foreach (this.shapes : shape) { area+=shape.area(); } return area; } }  
  21. إجابة شرف الدين حفني سؤال في ما الأفضل , Eager loading أو Lazy loading في قاعدة البيانات كانت الإجابة المقبولة   
    لكلٍ منهما مميزاته وعيوبه وحالات يُفضل الإستخدام فيها 
    بالنسبة للeager loading
    ميزته أنك لا تحتاج لعمل أكثر من إستعلامة لقاعدة البيانات حيث تكتب إستعلامة واحدة تحصل فيها على البيانات جميعها عيبه أن في حالة كان هناك كثير من البيانات من الممكن أن لا تكون تحتاجها كلها وبالتالي ستشغل الذاكرة ببيانات لا فائدة لها ما الحالات التي يُفضل إستخدامه  فيها؟
    إن إفترضنا وجود علاقة one-to-many نقوم بإستخدام الeager لل many أي إن مثلًا كنا نتعامل مع علاقة مؤلف مع المقالات, وأردنا الحصول على مقالة ما , في تلك الحالة نستخدم الeager loading لنحصل معها على المؤلف
    بالنسبة للlazy loading
    ميزته أنه يقوم بجلب عدد قليل من البيانات وبالتالي يشغل مكانًا أقل في الذاكرة وفي حالة إحتجنا لباقي البيانات يمكننا الإتيان بها في وقتٍ أخر عيبه أنه في حالة كان تواجد البيانات الأخرى ضروري وأمر محتوم أننا سنقوم بجلبها فحينئذ سنكون هنا د إضطررنا إلى عمل إستعلامين إلى قاعدة البيانات وكان من الممكن إختصارهما في إستعلامة واحدة الحالات التي يُفضل إستخدامه فيها
    إن إفترضنا وجود  نفس علاقة الone-to-many التي تحدثنا عنها بالأعلى فنقوم بإستخدام الlazy من طرف الone أي إن مثلًا كنا نتعامل مع علاقة المؤلف مع المقالات ولكننا هنا نستعلم عن المؤلف, في تلك الحالة نستخدم الlazy loading حتى لا نحصل على المقالات الخاصة بالمؤلف بل نحصل على المؤلف فقط إلى حين إحتياجنا للمقالات
  22. إجابة شرف الدين حفني سؤال في لا اجد ال cookies بعد اعادة تشغيل الحاسب كانت الإجابة المقبولة   
    تلك المشكلة تحدث لك لأنك لا تقوم بتحديد عمر الcookie وبالتالي يتم تحديده بشكلٍ إفتراضي أن تنتهي مع إنتهاء الجلسة, الحل أن تقوم بتزويد الدالة بعمر الcookie كما بالمثال التالي 
    res.cookie('token', 'bla bla', { expires: new Date(Date.now() + 1000*60*60) }) بالمثال الأعلى يكون عمر الcookie ساعة, لأننا نقوم بتزويد تاريخ الإنتهاء بالmillesecond وبالتالي نقوم بكتابة 1000(أي ثانية واحدة) ونضربها في 60(لتصبح دقيقة) ونضربها في 60 لتصبح ساعة
  23. إجابة شرف الدين حفني سؤال في ايه الفرق فsequelize بين اني اجيب الassosiaction كانها property زي user.getPosts() وبين اني اكتب include ؟ كانت الإجابة المقبولة   
    الفرق أن الطريقة الأولى مثل التي في المثال 
    const user = await User.findOne({ where: { name: "Sharaf eldeen" } }); const books = await user.getBooks(); عبارة عن lazy loading أي أن يتم أولًا كتابة إستعلام للحصول على المستخدم ومن ثم نقوم في وقتٍ أخر عندما نحتاج الكتب بإرسال إستعلامة أخرى للحصول على الكتب
    بينما الطريقة الثانية كاللتي في المثال 
    const user = await User.findOne({ where: { name: "sharaf" }, include: Book }); عبارة عن Eager loading أي يتم كتابة إستعلامة واحدة فقط من خلالها نحصل على كلٍ من المُستخدم والكتب الخاصة به عن طريق الربط بإستعلامة join فلا نحتاج إلا إلى إستعلامة واحدة فقط 
  24. إجابة شرف الدين حفني سؤال في ما الطريقة المناسبة لتوليد أرقام للمنتجات في متجر الكتروني، هل أستخدم أرقام تسلسلية أم عشوائية؟ كانت الإجابة المقبولة   
    يمكنك توليد رمز uuid (Universally unique identifier) وهو عبارة عن رمز مكون من 128 بيت , مما يعني أنه إن قمنا بتوليد 10تريليون رمز سيكون إحتمالية وجود رمزين متشابهين هي 0.00006 
    ولتوليد رموز uuid في flutter يمكننا إتباع الخطوات التالية
    تثبيت مكتبة uuid  flutter pub add uuid  
    عمل import للمكتبة 
    import 'package:uuid/uuid.dart';  
    نقوم بإنشاء كائن من الصنف  uuid 
    var uuid = Uuid();  
    نقوم بعد ذلك بتوليد الرمز عبر مناداة الدالة v4 والتي تقوم بتوليد رمز من الإصدار الرابع وهو أخر إصدار موجود حاليًا للuuid ويعتبر أكثرهم أمانًا وأقلهم عرضةً للتكرار 
    uuid.v4()  
  25. إجابة شرف الدين حفني سؤال في عرض البيانات بداخل جدول باستخدام php كانت الإجابة المقبولة   
    تلك المشكلة تحدث بسبب أنك قمت بإغلاق قوس الwhile بعد إغلاق وسم table, بالإضافة أنك بدأت الحلقة قبل بدأ الوسم tbody وبالتالي يتم إغلاق الجدول وكتابة باقي الحقول خارجه, الحل أن تقوم بوضع الحلقة التكررية داخل tbody وتقوم بإغلاقها قبل إغلاق الجدول ليكون شكل الشفرة البرمجية لديك كالتالي 
    <tbody> <?php while($row=fetch_data($query)){ ?> <tr> <td><?php echo $row['FirstName'].$row['LastName'?></td> ////باقي الحقول </tr> <?php } ?> </tbody>  
×
×
  • أضف...