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

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

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

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

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

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

    2

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

  1. هذا الخطأ بسبب أن الدالة input تقوم بقراءة القيمة من المُستخدم على هيئة نص ( string) وما تحاول فعله من عمليات حسابية مثل الضرب والجمع والطرح يجب أن يتم على أرقام وليس نصوص, لذا يجب تحويل المدخلات من المُستخدم إلى أرقام ويمكن أن يتم ذلك عبر الدالة int() والتي تعمل بالشكل التالي number = int(string) والتي يمكن تطبيقها في حالتك لتصبح بالشكل التالي weight = int(input("what your weight ?")) لتصبح الشفرة البرمجية بالشكل النهائي التالي weight = int(input("your weight ? ")) tall = int(input("your tall ? ")) age = int(input("your age ? ")) BMR= 10*weight+6 *tall-5*age+5 print(BMR)
  2. برجاء الذهاب إلى قاعدة البيانات وعمل export وثم إرفاق الملف الناتج من عملية الexport
  3. أنوع الإختراقات كثيرة ولكن يمكن أن نستعرض بعضاً منها كالتالي هجمات الحرمان من الخدمة (ddos attack) : هذا الهجوم عبارة عن تكنيك يعمل على زيادة الضغط والحمل على الخادم بشكل كبير حتى يُصبح غير قادر على تلبية كل تلك الطلبات ويكون خارج الخدمة حقن قاعدة البيانات sql inejction : عبارة عن إرسال جمل إستعﻻمية إلى الخادم بهدف سرقة معلومات, التعديل على بيانات, حذف بيانات, إضافة بيانات وعادةً يتم ذلك الهجوم عبر حقن الجمل في الform حقن الإسكريبت cross site scripting : هذا التكنيك شبيه لحقن قاعدة البيانات لكنه يقوم بحقن إسكريبتات جافاسكريبت طرق الحماية بالنسبة لهجوم الحرمان من الخدمة يوجد عدة تكنيكات متبعة للحماية منه: إستخدام خوادم خارجية لخدمة الملفات الثابتة CDN حتى ﻻ يكون الحمل على الخادم كبير إجراء عملية الCapcha حتى ﻻ يستطيع احد إرسال طلبات للخادم قبل التأكد من أنه ليس روبوت ( ﻻ يقوم بهجوم ddos) بالنسبة لحقن قاعدة البيانات يمكن الحماية منه بالشكل التالي يجب بالطبع فلترة البيانات التي يدخلها المستخدم أولاً تنفيذ الجمل الإستعﻻمية من النوع prepared وهي نوع من الجمل الاستعﻻمية التي ﻻ تأخذ القيمة من المُستخدم مباشرةً وإنما تقوم أولاً بتحويلها إلى نصوص/ أرقام لضمان أن تلك القيم لا يوجد بها جمل sql فمثلاً إن قام المُستخدم بإدخال في حقل الإسم *;select * from payments سيتم ترجمة ذلك في قاعدة البيانات بدون prepared statements على الشكل التالي select * from users where name =*; select * from payments ويتم إذاً الإفصاح عن بيانات جدول الدفع ولكن باستخدام الprepared statement سيتم معاملة الجملة كلها على انها اسم المستخدم حيث تتحول لنص وليس إلى جملة استعﻻمية بالنسبة لحقن الجافاسكريبت يجب التأكد من أن القيم التي أدخلها المستخدم خالية من أي أكواد أو وسوم حيث يتم فلترتها
  4. قم بعمل export لقاعدة البيانات وقم بوضعها مع مجلد المشروع وثم إضغطهم وإرفقهم في تعليق
  5. ماهي المشكلة؟ برجاء نشر السؤال بشكل مباشر
  6. <?php $host = "localhost"; $name = "#####"; $pass = "####"; $dbname = "###"; $connection = mysqli_connect($host,$name,$pass,$dbname); mysqli_query($connection,"set character_set_server='utf8mb4_general_ci'"); mysqli_query($connection,"set names 'utf8mb4_general_ci'"); if (!$connection) { die(); } $get_news_sql = "SELECT * FROM info WHERE Country like '". $_GET['search']."'" ; $get_news_sql = mysqli_query($connection, $get_news_sql); while ($row = mysqli_fetch_array($get_news_sql)) { if(empty($row)) header("Location:\\أكتب هنا مسار صفحتك الرئيسية ") $Country =$row['Country']; $Flag= $row['Flag']; $Capital= $row['Capital']; } ?> نضعها بهذا الشكل وبالنسبة للشق الثاني بالفعل فيه خطأ , ضعه بهذا النحو $get_news_sql = "SELECT * FROM information WHERE Country like '". $_GET['search']."'"."' OR Capital like '". $_GET['search'] ;
  7. بالنسبة للشق الأول من السؤال يمكنك وضع شرط إن كانت البيانات القادمة من قاعدة البيانات فارغة فلتقم بإعادة المستخدم إلى الصفحة الرئيسية if(empty($row)) header("Location:\\أكتب هنا مسار صفحتك الرئيسية ") بالنسبة للشق الثاني من السؤال فيمكنك تنفيذ المطلوب عبر وضع حقل إضافي في قاعدة البيانات يتم فيه تخزين العواصم وتغيير الجملة الإستعﻻمية الخاصة بقاعدة البيانات لتشمل البحث عن كلاً من الدولة والعاصمة مثلاً SELECT * FROM info WHERE Country like '". $_GET['search']." ' OR Capital like '". $_GET['search']"'
  8. الرامات أو الDRAM إختصاراً ل(Dynamic ram) عبارة عن مجموعة من الخﻻيا الكهربية كل خلية تحتوي على ترانزيستور ومكثف ويتم تخزين القيمة في الخلية عبر شحنها فإما أن يكون جهد المكثف عالي فتصبح القيمة 1 أو منفض فتصبح القيمة بصفر كما في الصورة المُرفقة بالأسفل , ولكن يوجد مشكلة وهي أن المكثف ﻻ يمكنه الإحتفاظ بالطاقة لفترات طويلة حيث يتم فقدان الطاقة في المكثف عبر الزمن مما يؤدي إلى فقدان البيانات من الذاكرة وبالتالي نحتاج لحل تلك المشكلة أن نعيد شحن المكثف كل فترة, عملية الشحن تلك عندما تتم ﻻ يمكن أن يتم معها أي عمليات قراءة او كتابة من الذاكرة مما يسبب تأخراً نسبيا في البيانات ويسبب بطئاً نسبياً على العكس فإن الSRAM (static ram) تصميمها معقد أكثر من السابقة وﻻ تحتاج إلى إعادة شحنها مرة أخرى مما يؤدي إلى فرق في الأداء بينها وبين الرام الديناميكي وهذا من أهم أسباب زيادة سرعة الSRAM مقارنةً بالDRAM لماذا ﻻ نصنع الmemory من الSRAM ببساطة بسبب التصميم المعقد للSRAM وعدد الترانزيستورات (حيث يتم صنع الخلية الواحدة من 6 ترانزيستورات) فهذا يجعل تكلفته عالية جداً حوالي 100 ~ 300 ضعف ثمن الديناميك رام الرامات الإستاتيكية تحتاج لمساحة أكبر نسبياً من الديناميكية ﻻ يمكننا زيادة حجم البيانات بسهولة لأن زيادة حجم البيانات الممكن إستيعابها في الرامات الإستاتيكية يقلل من كفائتها
  9. الjwt (json web token) هي طريقة لتخزين البيانات بشكلٍ أمن حيث أنها تقوم بإستخدام البصمة الرقمية(digital signature) وهي طريقة لضمان عدم التﻻعب في محتويات الtoken مما يضمن للخادم أن الtoken ليست مزيفة وأنها صالحة للإستخدام الطريقة المتعارفة عليها في التعامل في مثل هذا السيناريو الذي وضعتها تتم كالتالي أن يقوم المُستخدم بعد تسجيل الدخول بإستﻻم token من الخادم ويقوم المُستخدم بتخزينه في كل مرة يُحاول المُستخدم إرسال الtoken يقوم الخادم بالتأكد من صﻻحيته ومن عدم التﻻعب فيه ﻻ يمكن لأحد إنشاء منشور إإﻻ عند تضمين الtoken في الheaders الخاصة بالhttp requests عند إنشاء المنشور يقوم الخادم بمعرفة مُعرف(id) صاحب المنشور عن طريق الtoken ومن ثم يقوم بتخزينه في قاعدة البيانات مع المنشور عند محاولة تعديل المنشور يقوم الخادم بالتأكد من وجود الtoken header إن لم يجده يُرسل رسالة خطأ للمُستخدم, إن وجده يتأكد إن المُعرف الموجود في الtoken هو ذاته الموجود في قاعدة البيانات للمنشور المُراد تعديله أو حذفه, إن وجد أنهم ليسوا نفس المُعرف يقوم بإرسال رسالة خطأ ويمكن البدأ في إستخدامها عبر أولا تثبيت الباكدج jsonwebtoken من npm npm install jsonwebtoken ونقوم بتشفير البيانات بالشكل التالي var privateKey = "secret"; var token = jwt.sign(userObj, privateKey); حيث نستبدل userObj بأوبجكت يُمثل بيانات المستخدم المُراد تخزينها ونستبدل الprivatekey بكلمة خاصة بك لصنع البصمة الرقمية ومن أجل التأكد من صحة الtoken عند إستقبالها من المستخدم jwt.verify(token, 'secret', function(err, decoded) { console.log("succeed"); });
  10. ﻻ يمكنك إرسال الصورة في ملف جيسون حيث أن ملفات json يمكن أن تحتوي فقط على ملفات نصية (text) , ولكن يوجد حل بديل وهو أن تقوم بتشفير الصورة عبر base64 encoding وهو تشفير يقوم بتحويل الملفات الثنائية إلى حروف وأرقام ASCII تنفيذ الشفرة عبر node js const Base64 = Buffer.from(file).toString('base64'); نقوم بعد ذلك بتضمين ذلك النص في الرد الjson الذي نرسله إلى المُستحدم إستﻻم الصورة عبر الfront end من ناحية المُستخدم نقوم بوضع تشفير الbase64 الخاص بالصورة ولكن يسبقه data:image/png;base64, مثال على إستﻻم الصور عبر react <img src={`data:image/png;base64,${this.state.image}`}/>
  11. فكرة البرنامج كالتالي تقوم بإستقبال رقم من المستخدم تقوم بعمل حلقة تكرارية من 1 حتى الرقم الذي ادخله المستخدم في كل حلقة تقوم بإضافة قيمة متغير الحلقة التكرارية مقسوم على نفسه +1 إلى متغير لتخزين القيم يدعى مثلاً sum ومن ثم تقوم بطباعته بالأسفل مُرفق شروحات للحلقات التكرارية في اكاديمية حسوب وإن كان أمرُ ما غير واضح أعلمني وسأحاول تبسيطه لك
  12. يمكنك إستخدام دالة substring_index تلك الدالة تأخذل ثﻻث معاملات, الأول هو النص, الثاني هو العﻻمة الفاصلة, الثالث رقم تقوم الدالة بإرجاع النص من بعد العﻻمة الفاصلة أو من قبل العﻻمة الفاصلة على حسب إن كان الرقم في المعامل الثالث موجب أو سالب, إن كان موجب تقوم بإرجاع ماقبل العﻻمة, إن كان سالب تقوم بإرجاع ما بعد العﻻمة فيمكنك بالتالي تنفيذ الإستعﻻمة التالية select substring_index(domain,"http://","-1") from table_name; ومن ثم في وسم الhtml تقوم بوضعه ولكن نضع قبله كلمة http:// لأنها ستكون ممسوحة ونضع النص ككل بين وسم a بهذه الطريقة سيتم إرجاع الرابط فقط دون باقي الوصف وسيكون قابلاً للنقر أيضاً
  13. من الممكن رفعه على منصة heroku نبدأ أولاً بتحميل heroku-cli وهي عبارة عن أداة تعمل في الcommand line وستجد الرابط مرفق بالأسفل بعد ذلك نقوم بتنفيذ الخطوات التالية بداخل مجلد المشروع المُراد رفعه: نقوم بالتسجيل إلى heroku عبر الأمر التالي heroku login بعد ذلك نقوم بتهيئة مستودع git git init نقوم بإنشاء مشروع على منصة heroku مع مﻻحظة إستبدال <app-name> بإسم مشروعك heroku create <app-name> نقوم بعد ذلك بتنفيذ الأمر git add . ثم نقوم بتنفيذ الأمر commit -m "first" ثم نقوم بتنفيذ تلك التغييرات إلى المشروع على منصة heroki git push heroku master وستجد في النهاية رسالة بنجاح عملية الرفع ومرفق معها رابط المشروع
  14. يمكنك أن تفعل كما قال بلال بالأعلى كما أن يمكنك أيضاً أن تقوم بجلب العنصر الخامس من خﻻل المصفوفة لديك, حيث أن الدالة mysqli_fetch_array تقوم بإرجاع مصفوفة من النتائج فيمكنك الوصول إلى العنصر الخامس بالشكل التالي $result = $mysqli->query($query); $row = $result->fetch_array(MYSQLI_NUM); var_dump($row[4]);//هكذا نصل للعنصر الخامس
  15. إذهاب إلى نافذة php my admin وقم بعمل export لقاعدة البيانات حتى أستطيع تشغيل المشروع
  16. يوجد في جهاز الحاسب الألي وحدة معالجة مركزية CPU وذاكرة mamory ويوجد ما يُسمى بالbus ال bus هي مجموعة من الموصلات أو أشباه الموصلات التي تقوم بحمل البيانات ويوجد ثﻻث أنواع control bus : والتي تقوم بإرسال الإشارات من المعالج إلى باقي وحدات الإدخال والإخراج data bus : والتي تقوم بإرسال البيانات من المعالج إلى باقي وحدات الإدخال والإخراج والعكس صحيح address bus : والتي تقوم بإرسال عناوين الذاكرة من المعالج إلى الذاكرة حتى تقوم بعد ذلك الذاكرة بإرسال تلك البيانات المُضمنة في تلك العناوين إلى المُعالج الaddress bus يتم إرسال العناوين من خﻻله على هيئة إشارات كهربية 0 أو 1 مما يعني أننا إن أردنا أن نرسل عنوان مُكون من 8 أجزاء فبالتالي سنحتاج إلى 8 بيتات أي نحتاج إلى 8 سلوك لتمر من خﻻلها الإشارة الكهربية وبالتالي إن كان لدينا 8 سلوك نستطيع القول أن أقصى عدد من البيتات نستطيع إرسالها يكون 2 مرفوعة لأس 8 وبالتالي إن كان لدينا 32 سلك فأقصى عنوان يمكننا الإشارة إليه هو 2 مرفوع لأس32 أي ما يساوي 4 جيجا , أي إن كان لدينا ذاكرة مساحتها أكبر من 4 جيجا لن نستطيع الإستفادة إلا من 4 جيجا منها فقط ولذلك تم إستخدام معمارية ال64 والتي ترمز إلى أنه يمكننا إرسال 64 بيت مما يوفر لنا إستخدام لموارد ذاكرة أكبر. إذا ماذا مقصود بالويندوز 64 بيت؟ المقصود بالويندوز 64 بيت أنه تم تصميمه ليتمكن من إستهﻻك ال64 بيت الخاصيين بعناوين الذاكرة وﻻ يمكن تشغيله إلا على معمارية تسمح بذلك المقصود بويندوز 32 بيت أو نظام تشغيل 32 بيت بوجه عام أنه تم تصميمه ليتمكن من إستهﻻك 32 بيت فقط أي 4 جيجا رام وﻻ يمكنه الوصول إلى باقي الذاكرة
  17. حسنا ارفق المجلد الخاص بالمشروع ككل وارفقه في تعليق
  18. برجاء إرفاق رسالة الخطأ التي تظهر لك عند محاولة تشغيل الكود
  19. ﻻ يوجد في هياكل البيانات أو البرمجة بوجهٍ عام الحل السحري لكل شئ, فإن الhash table له عيوب كما له مميزات عيوب جدول التجزئة (Hash table) دعنا نتفق أولاً أن التعقيد الوقتي(complexity time) ليس هو العامل الوحيد للقياس, يجب أخذ الوقت الثابت(constant time) في الحسبان أيضاً خاصتاً إن لم تكن تحتاج إلى ميزة الوصول إلى العنصر بشكلٍ سريع والتي هي ميزة الجدول الأساسية, حيث أن في كل مرة تقوم بعملية في الجدول يتم إستخدام دالة التجزئة والتي بدورها تأخذ وقتاً في التنفيذ وليس هذا الوقت بالهين. بعض العمليات ﻻ يمكنك تنفيذها بكفاءة بإستخدام الhash table مثل عمليات الترتيب وعمليات المرور عبر العناصر iteration إذاً ماذا تستخدم؟ هذا يعتمد على إحتياجك حيث أنه ﻻ يوجد هيكل بيانات معين أفضل من الأخر وإنما كل هيكل يتم إستخدامه في حالة يكون الأفضل فيها
  20. أولاً نتكلم عن الفرق بين الdata link layer و الnetwork layer تتكون الشبكات من سبع طبقات يُطلق عليهم الOSI layers سنتكلم عن ثﻻثة منهم physical layer مسؤلة عن نقل البيانات عبر الأسﻻك وتردد الموجات والأشياء الفيزيائية أو المادية بوجهٍ عام data-link layer مسؤلة عن ربط كروت الشبكة ببعضهم البعض وصنع شبكة محلية بين الأجهزة network layer: مسؤلة عن ربط الشبكات ببعض Switch الswitch ينتمي للطبقة الثانية Data-link kayer مما يعني أنه يتعامل مع كروت الشبكة (network card) أي أنه يقوم بتوجيه البيانات إستناداً على الmac address مما يعني أنه فقط يقوم بربط الأجهزة ببعضها البعض ولكن ﻻ يستطيع ربط الأجهزة ذات الشبكة الواحدة بالأجهزة في الشبكة الأخرى Router ينتمي الراوتر إلى الطبقة الثالثة Network layer مما يعني أنه يتعامل مع الشبكات, ﻻ يفهم الmac address وإنما يفهم عنوان الشبكة IP Adress مما يعني أنه ﻻ يهتم بربط الأجهزة نفسها وإنما وظيفته ربط الشبكات , مثال لدي شبكة تحتوي على خمسة أجهزة متصلين بسويتش مما يجعلهم قادرين على الإتصال ببعضهم البعض ولديك خمسة أجهزة أيضاً أخرين متصلين بسويتش أخر ويتصلون ببعضهم, لكي نجعل أجهزتي تتصل مع أجهزتك نحتاج هنا أن نقوم بربط الشبكتين سوياً بواسطة راوتر (ملحوظة ﻻ عﻻقة للراوتر الذي نتحدث هنا عن الراوتر المنزلي الموجود في المنزل المُقدم من شركات الانترنت, حيث أن الراوتر المنزلي يحتوي بداخله على أكثر من جهاز معاً راوتر, سويتش, موديم modem)
  21. subnet mask هي عملية لتجزئة الشبكة ما المقصود بتجزئة الشبكة؟ يجب أولاً أن نعلم أن عنوان الشبكة يكون به جزأ خاص بالشبكات وجزأ خاص بالأجهزة ويختلف هذا الجزأ حسب تصنيف الشبكة, فيوجد للشبكة تصنيفات : التصنيف A: ويكون من 1.0.0.1 إلى 126.255.255.254 التصنيف B: يكون من 128.1.0.1 إلى 191.255.255.254 التصنيف C: يكون من 192.0.1.1 إلى 223.255.254.254 التصنيف D: يكون من 224.0.0.0 إلى 239.255.255.255 سنأخذ مثال على الip الذي رقمه 192.168.0.0 والذي هو من التصنيف C كما تﻻحظ فإن العنوان ينقسم إلى أربع خانات, في هذا التصنيف يكون أول ثﻻث خانات محجوزين للشبكات بينما أخر خانة محجوزة للأجهزة كل خانة من تلك الخانات تُمثل 8 بيتات أي أن أقصى رقم في كل خانة هو 255 أي 256 جهاز (لأننا نأخذ رقم 0 في الحسبان) فمثلاً الشبكة التي عنوانها 192.168.1.0 تستطيع إضافة 256 جهاز من 192.168.1.0 إلى 192.168.1.255 كيف يتم كتابة الsubnet mask؟ يتم كتابة الأجزاء الخاصة بالشبكات على هيئة 8 بيتات ممتلئة (255) والأجزاء الخاصة بالأجهزة يتم كتابتها على هيئة أصفار إذا الشبكة 192.168.1.0 يكون الsubnet mask الخاص بها 255.255.255.0 الأن ماذ لو كاانت تلك الشبكة تريد فقط إضافة 8 أجهزة, هل سنترك باقي الخانات فارغة وغير مستغلة؟ هذا يُعد تضيع للموارد إذا يجب أن نعيد تجزئة تلك الشبكة لنجعل خانات الأجهزة أقل وخانات الشبكات أكثر كيف يتم التجزئة دعنا نعلم أولاً أن 255.255.255.0 هي في الأصل 1111 1111. 1111 1111. 1111 1111. 0000 0000 ولكن لتسهيل التعامل نقوم بكتابتها على الصورة الثمانية بدلاً من الصورة الثنائية, لنزيد عدد الشبكات نقوم بزيادة الخانات التي قيمتها 1 وتقليل الخانات التي قيمتها 0, فمثلاً إن كنا نريد أن نجعل عدد الأجهزة المتاحة 6 أجهزة نقوم بحساب أقرب أس للعدد 2 يعطينا 6 سنجد أن 3 يعطينا 8 ,ويوجد ععنوانين ﻻ يمكننا إستخدامهم لانهم دوماً محجوزين فإذا يعطينا 6, فهنا نترك فقط ثﻻث بيتات من أجل الأجهزة والباقي للشبكات 1111 1111. 1111 1111. 1111 1111. 1111 1000 ويتم ترجمته إلى 255.255.255.248 مما يعني توفر 8 عناوين للإستخدام والباقي من أجل الشبكات , فبهذا نقوم زدنا من عدد الشبكات وقللنا من عدد الأجهزة
  22. سيتم وضع ذات الشكل ولكن مع مراعاة التالي: يتم وضع العﻻقة بين الكائنان على هيئة معين مكتوب بداخله ما هي العﻻقة مثلاً في المثال بالأعلى العﻻقة بين الطالب والدورة أن الطالب يدرس الدورة إذات نكتب في المعين study يتم وضع الattributes خارج المستطيل الخاص بالكائن وبدلاً من ذلك يتم وضعهم على هيئة دوار مُرتبطة بالكائنات ولكن مع مراعاة أن يتم وضع خط أسفل الخاصية التي تعبر عن المفتاح الرئيسي primary key
  23. الصورة التي قمت بإرفاقها هي بالفعل erd ﻻ تحتاج لتحويل ال Entity relational diagram (erd) هو عبارة عن نموذج يُعبر عن العﻻقات بين الكائنات وبعضها البعض فمثلاً في المثال التالي في الجامعة يقوم الطالب بالإشتراك في الدورات , ويجب على الطالب أن يكون مُشتركاً في دورة واحدة على الأقل أو أكثر, وكل دورة يتم تدريسها من قِبل مُعلم واحد فقط, وبغرض ضمان جودة الدورة يقوم المُعلم بتدريس دورة واحدة فقط نفهم من النص السابق : وجود عﻻقة كثير - كثير بين الطالب والدورات عﻻقة واحد - واحد بين الدورة والمُعلم فيمكن التعبير عنها بالشكل المرفق, ويتم إعتبار ذلك الشكل erd لأنه يُعبر عن العﻻقات بين الكائنات, مثل تماماً الشكل الذي قمت انت بإرفاقه
  24. ﻻ يوجد فرق بين أن تقوم بإستخدام الbackend لتطبيق flutter أو تطبيق بلغة أخرى , ولن يفرق حتى مع تطبيق الflutter بأي لغة تم صنع الbackend حيث أن الأمر في النهاية يكون بالنسبة للتطبيق الflutter عبارة عن api يتم إرسال الطلبات لها دون معرفة التقنيات المُستخدمة حتى خلف هذا الapi , فإن عملية إختيار التقنية المُستخدمة في الbackend يتم تحديدها حسب ماهية المشروع والصفات المُتوفرة فيه وليس حسب التطبيق المُستخدم لدى العميل
×
×
  • أضف...