مصطلح الأمان على الشبكة العنكبوتية هو شيء نسبي وليس مطلق. والسبب يكمن في عيوب التركيب التقني من جهة وفي التطور في أبتكار أساليب جديدة للولوج مع تقدم الزمن فضلاً عن سياسة مزود الخدمة في التعامل مع بيانات المستخدمين. ينطبق هذا الكلام على الشبكات اللامركزية مثل المركزية ولك أن تتذكر تسريب 20% من بيانات مستخدمين فيسبوك في عام 2021.. بصورة عامة تطبيق Mastodon مثلاً ليس أقل أماناً من أي تطبيق مناظر سواء كان تويتر أو فيسبوك وعلى كافة المستويات مثل social
1
إذا وضعت لكل مشترك قاعدة بيانات منفصلة فربما في هذه الحالة سيكون عليك إستقبال طلبات الإشتراك والموافقة عليها manually ومن ثم الشروع بإنشاء قاعدة بيانات ذات الصلة بالمشترك، وبالتالي ماذا لو اصبح لديك ١٠٠ الف مشترك؟ كيف ستتعامل مع الأمر؟ طالما أنه يمكنك إحتواء جميع المميزات المطروحة في تطبيقك في schema واحدة في قاعدة البيانات لذا سيكون من السهل متابعة كل المشتركين والمعالجة من لوحة أدمن واحدة مرتبطة بقاعدة البيانات.
لاحظ أنك تقوم بجمع قيم الطلاب في المصفوفة students مع وجود مسافة space تسبق قيمة userAdd students.push(` ${userAdd}`) ولهذا في السطر 15 حيث توجد الجملة الشرطية if فإن جملة التحقق تقوم بالبحث عن قيمة userRem في المصفوفة students فإذا كنت تقوم بإدخال إسم الطالب الذي تريد حذفه في الحقل ذو المعرف rInput بدون تلك المسافة space التي تسبق الإسم فإن الجملة الشرطية لن تتحقق ولن يتم تنفيذ الكود في جسم if أي لن يتم حذف الطالب من المصفوفة سالفة الذكر
يمكنك إستعمال الدالة المساعدة array_search حيث تقوم بالبحث عن القيمة المدخلة في مصفوفة مسبقة التعريف كما في سؤالك. لاحظ المثال التالي <?php $parent_domain = $_SERVER['HTTP_REFERER']; $domains=array("domain1"=>"domain1.com","domain2"=>"domain2.com","domain3"=>"domain3.com"); // في مصفوفة domains نضع ال if( array_search($parent_domain,$domains)){ // نبحث هل القيمة الواردة موجودة echo "allowed"; // allowed هنا تحقق الشرط فتطبع العبارة } ?>
قبل كل شيء تحتاج javascript للقيام بهذه المهمة حيث أن php ليس معنية بهذا التخصص, وتستطيع الحصول السطر المقصود في سؤالك ببساطة من خلال قيمة المعرف id المسندة إليه وكما يلي let myTr= document.getElementById("a2") أيضا يمكنك الوصول مباشرة الى الخلية التي تحتوي على النص "أياكس أمستردام" يمكنك ذلك بسطر برمجي واحد من خلال الselector المناسب كما يلي document.querySelectorAll("#a2 td.team")[1] لاحظ أن الدالة querySelectorAll تبحث عن جميع العناصر التي توافق الselector المستخدم أي أنها تعيد لك مصفوفة من العناصر وفي حالة
بما أنك تبحث عن قاعدة بيانات لا تحتاج خادم أي serverless ومن النوع nosql يمكن إستخدام Amazon DynamoDB وهي قاعدة بيانات عالية الكفاءة وتستطيع إستخدامها مع electron وإدراجها مع المشروع ولكن عليك إتباع إرشادات electron لوضعها في مسار قابل للقراءة والتعديل. أو يمكنك وضعها بشكل منفصل وفي هذه الحالة وبعد أن تقوم بعمل package لتطبيق electron يمكنك عمل حزمة installation من خلال إستعمال أي packager مثل winrar تضع فيه قاعدة البيانات مع التطبيق وتبرمج التثبيت لكل منهما في مكانه الصحيح
يعتمد الأمر كثيراً على نوع المتصفح الذي تستعمله وإصداره وبالتأكيد النظام التشغيلي الذي تعمل عليه. أنت لم تحدد هل تظهر المشكلة على ios أم android وماهي المتصفحات التي قمت بتجربة التطبيق عليها. بصورة عامة يمكنك تجربة تجاهل الشكل الإفتراضي للعنصر المستهدف من خلال css وتستطيع وضع التنسيق المناسب للشكل الذي تريد الوصول له. input[type=date]{ -webkit-appearance: none; ... }
ال event المسمى onSubmit مخصص للعنصر form وغير متاح للعنصر button. بدلاً من ذلك يوجد onClick لنضعه على button. وهذا كله أبعد من react حيث أن منصة react مبينة على JavaScript التي تتضمن كل من الevents سالفي الذكر. يمكننا الإستفادة من onSubmit مثلاً إذا كنت تريد إرسال البيانات asynchronously في تعطيل الإجراء الإفتراضي لform (وهو إرسال مدخلاته مباشرة الى الخادم) ومن ثم معالجة البيانات قبل إرسالها على سبيل المثال أو في حالة عمل validation للمدخلات قبل إرسالها. ... const submitHandler=
توجد العديد من اللغات البرمجية ويتم إختراع المزيد على الدوام ذلك أن الغرض الرئيسي لإستعمال البرمجة هو لحل مشكلات التقنية وإعطاء المطور developer والمستخدم النهائي end user تجربة غنية ونظراً لتطور التكنولوجيا المستمر وتغيير حاجات سوق العمل يتم بناء اللغات بمميزات معينة لتحل مشكلات بعينها. قد يبدو لك تشابه اللغات من خلال الsyntax أي طريقة الكتابة وربما تجد خواص مشتركة بين مجموعة من اللغات لكن في الحقيقة هناك خواص فريدة لكل لغة تميزها عن نظيراتها . مثلاً تستخدم لغة php
أفترض من كلامك أنك تتحدث عن صفحة ويب. بالتالي لأنجاز ماتريد تحتاج التلاعب بالمحتوى من خلال جافاسكربت وبمساعدة خصائص css. هنا أضع مثالاً عاماً يمكنك إسقاطه على حالتك بتصرف منك. يتضمن المثال تحميل مجموعة من الصور في صفحة يظهر فيها للمستخدم عبارة الإنتظار لحين انتهاء تحميل الصور حتى تختفي العبارة وتظهر الصور التي تم تحميلها من خادم خارجي. <html> <head> <style> /* عند فتح الصفحة من قبل المستخدم تكون عبارة جاري التحميل ظاهرة */ .loading{ display: block; } .container{ display:
يوجد في جافاسكربت events مثل onDragStart, onDragOver للتحكم في حركة العنصر أو الملف أثناء سحبه وأفلاته ويتم السحب بالماوس بالضغط المستمر على العنصر أثناء السحب لحين إفلاته في منطقة إلإسقاط, لاحظ المثال التالي: <html> <head> <script> function allowDrop(ev) { ev.preventDefault();// تعطيل التصرف الأفتراضي لهذا الحدث } function drag(ev) { ev.dataTransfer.setData("text", ev.target.id); // هنا وعند بدء السحب نقوم بحفظ معرف العنصر بإسم ما } function drop(ev) { // نستلم الملف عند إسقاطه ev.preventDefault(); // تعطيل التصرف الأفتراضي لهذا الحدث var data
يمكنك التحكم بالعناصر التي لا تستجيب تلقائياً لتغير إتجاه الصفحة بأكثر من إستراتيجية سواء كان إختيارك أسلوب معين في كتابة css أو من خلال التعديل على خصائص تلك العناصر بإستعمال javascript (في حالتك React). أن إستعمالك ل flex في css قد يساعدك كثيراً في مثل هذه المشكلات. لاحظ المثال التالي .container{ display:flex; flex-direction:row; /* العرض بهيئة صف */ justify-content:flex-start /* يقوم هذا السطر بسحب العناصر بإتجاه الصفحة الحالي سواء يمين أو يسار*/ } أيضا يمكنك إستعمال خصائص العناصر class و