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

علي عبد محسن

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

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

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

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

    4

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

  1. كما ذكرنا في الأجابة الأصلية يمكنك تغيير ما يلزم تغييره وفقاً لمتطلباتك. حاول تغيير الإتصال بإستخدام pdo كما يلي وعندما تواجه مشكلة يمكنك البحث عن الخطأ في google أولاً فأن تعذر عليك الحل سنساعدك بكل سرور. try { $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Connected successfully"; } catch(PDOException $e) { echo "Connection failed: " . $e->getMessage(); }
  2. يعتمد الأمر على ما تستخدمه من أدوات برمجية ونظام تشغيلي.يمكنك نسخ الخطأ الى google لتفهم أكثر. إذا كنت تستعمل linux قم بتثبيت الحزمة المطلوبة كما يلي. sudo apt install php-mysqli
  3. بما أن الحل المطلوب يجب أن يكون بلغة php يمكنك إستعمال الكود التالي لتحقيق المطلوب شرط أن تكون صيغة الملف الذي تم تصديره من قاعدة البيانات الأصلية هي sql. يمكنك تغيير ما يلزم تغييره وفقاً لمتطلباتك مع الحفاظ على نفس طريقة العمل وكما يلي <?php // مسار الملف $filename = 'name.sql'; // MySQL host $mysql_host = 'localhost'; // عنوان المضيف // MySQL username $mysql_username = 'root'; // اسم المستخدم // MySQL password $mysql_password = ''; // كلمة المرور // Database name $mysql_database = 'database_name'; // قاعدة البيانات التي تريد إستيراد الملف لها // Connect to MySQL server mysql_connect($mysql_host, $mysql_username, $mysql_password) or die('Error connecting to MySQL server: ' . mysql_error()); // الإتصال بقاعدة البيانات واختيارها mysql_select_db($mysql_database) or die('Error selecting MySQL database: ' . mysql_error()); // ننشئ متغير لخزن الجملة المراد تنفيذها $templine = ''; // Read in entire file $lines = file($filename); // sql نقرأ // Loop through each line foreach ($lines as $line) // نقوم بعمل حلقة تكرار للمرور على جميع السطور { if (substr($line, 0, 2) == '--' || $line == '') // نتجاهل التعليقات continue; $templine .= $line; // نسند السطر قيد المعالجة الى المتغير المنشأ مسبقاً if (substr(trim($line), -1, 1) == ';') // نحدد فيما إذا كانت نهاية سطر من خلال الفاصلة المنقوطة { // نقوم بتنفيذ السطر mysql_query($templine) or print('Error performing query \'<strong>' . $templine . '\': ' . mysql_error() . '<br /><br />'); // بعد غنتهاء التنفيذ نعيد قيمة المتغير الى حالته الأصلية ليكون جاهزاً للسطر القادم $templine = ''; } } echo "Tables imported successfully"; ?>
  4. يمكن عمل animation لعنصر ما عندما يعمل المستخدم scroll ويصبح العنصر في مجال الرؤية داخل الصفحة viewport من خلال css و javascript. أولا: ننشئ مراقب observer ونقوم بربطه بالعنصر المستهدف ثانياً: ننشئ التنسيق والحركة المطلوبين من خلال css ثالثا: نتحكم في بدء الحركة وإيقافها من خلال صنف css يتضمن تعريف الحركة المطلوبة بواسطة animation, transition, transform.. الخ ... /* CSS */ .square { width: 200px; height: 200px; background: teal; border-radius: 8px; opacity: 0; /* العنصر مخفي قبل أن يصبح في مجال الرؤية */ } .square-transition { /* تعريفات الحركة */ opacity: 1; /* إظهار العنصر */ transform: translate(50%); transition: opacity 1.5s ease, transform 1.5s ease; } ... <body > <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <div class="square-wrapper"> <!-- scroll العنصر الذي نريد تحريكه عند عمل --> <div class="square square-transition"></div> </div> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <p>scroll </p> <script> const square = document.querySelector('.square');// الوصول على العنصر square.classList.remove('square-transition');// في كانت الحركة نشطة نوقفها // نقوم بإنشاء المراقب const observer = new IntersectionObserver(entries => { entries.forEach(entry => { //scroll حلقة تكرار للمرور على العناصر عندما نعمل if (entry.isIntersecting) { // أذا الصور في ظاهر للمستخدم square.classList.add('square-transition'); // نفعل الحرمة المرتبة بهذا الصنف من خلال إضافته للعنصر return; } square.classList.remove('square-transition'); // إيقاف الحركة }); }); observer.observe(document.querySelector('.square-wrapper')); // تشغيل المراقب وإسناد نطاق عمله على العنصر الحاوي للعنصر المستهدف بالحركة </script> </body>
  5. يمكنك البحث في google عن سبل تحقيق الخطوات الي وضعناها لك في الرد السابق.
  6. بداية من الضروري فهم أن SQLiteAssetHelper غير قادر على فتح قاعدة بيانات مشفرة من النوع sqlite ولكن فقط يستطيع التعامل مع قاعدة البيانات المفتوحة من خلال الدالتين getReadableDatabase و getWritableDatabase. ما تستطيع فعله بهذا الخصوص هو إستعمال الأداة SQLCipher for Android مع SQLiteAssetHelper لحل المشكلة ولكن بطريقة نوعاً ما يشوبها التعقيد. أولاً - نستعمل SQLCipher لإنشاء قاعدة بيانات فارغة مشفرة. ثانياً - نستعمل SQLiteAssetHelper لقراءة قاعدة البيانات المفتوحة لديك ومن ثم نسخ بياناتها الى المشفرة سابقة ألإنشاء. ثالثاً - نحذف قاعدة البيانات المفتوحة بعد إغلاقها. تستطيع الإطلاع أكثر على SQLCipher هنا
  7. عذراً على الخطأ نعم كنت مستعجلاً. لاحظي أن الصواب هو أن ins تستعمل للدلالة على أن النص تم وضعه لاحقاً كتحديث على النص الأصلي وغالباً ما يتم وضعه برفقة الوسم del الذي يدل على أن جزء من النص تم إستبداله أو التعديل عليه أو إلغاءه من خلال خط يظهر على النص. أما الوسم u فهو لا معنى له سوى وضع خط تحت النص لغرض تمييزه.
  8. لا يوجد تشابه بين عمل أي من الوسمين في سؤالك. نستخدم الوسم ul للتعبير عن قائمة عناصر بدون ترقيم unordered list. بينما نستعمل الوسم ins لحشر نص تحته خط في نص ما. لاحظ المثال التالي ... <p>My favorite color is <ins>red</ins>!</p> <!-- لاحظ الوسم هنا يقوم بأضافة النص تحته خط --> ... <ul> <!-- li تعريف قائمة من العناصر بدون ترقيم ولا يمكن وضع شيء داخل هذا الوسم العنصر ما عدا --> <li>one</li> <li>two</li> <li>Three</li> </ul> ...
  9. يعتمد الجواب على سؤالك كثيراً على الأدوار المناطة بك كمطور backend. إذا كان دورك يقتصر على تكويد تطبيق الواجهة الخلفية وتسليمه, فإنك بهذه الحالة لا علاقة لك بالنظام التشغيلي Operating System الذي سيعمل عليه التطبيق. لكن إذا كان من ضمن أدوارك عمل deployment و ربط النطاق domain والربط مع قاعدة البيانات database محلياً داخل الخادم server أو خارجه , فإنك ستكون بحاجة لتعلم هذه المهارات المرتبطة بشكل مباشر أو غير مباشر مع النظام التشغيلي سواء كان linux أم windows وسواء كنت تتعامل مع جهاز حقيقي physical أو إفتراضي virtual machine. خلاصة القول وبكلام أدق أنت بحاجة الى تعلم المهارات المرتبطة بعملك كمطور backend وليس كل شيء في أنظمة التشغيل.
  10. حتى نتمكن من تشخيص المشكلة التي تحدث معك لابد لك من توفير تفاصيل أكثر. في الواقع الحل الأسهل هو أرفاق ملف المشروع بشكل مضغوط zip أو rar ليتسنى لنا تشغيل الكود وعمل debug.
  11. يمكنك إستعمال الدوال isAfter, isBefore, isAtSameMomentAs المرتبطة بالنوع DateTime لمقارنة الوقت و ترجع كل من هذا الدوال true أو false وكما يلي snapshot.data[index]['LastDate'].isAfter(DateFormat('dd-MM-yyy').format(DateTime.now())) snapshot.data[index]['LastDate'].isBefore(DateFormat('dd-MM-yyy').format(DateTime.now())) snapshot.data[index]['LastDate'].isAtSameMomentAs(DateFormat('dd-MM-yyy').format(DateTime.now())) //compareTo كما يمكنك إستخدام // لكن هذه الدالة ترجع لك 1 أو 0 أو -1 بنفس الدلالة السابقة snapshot.data[index]['LastDate'].compareTo(DateFormat('dd-MM-yyy').format(DateTime.now())) // DateTime ‌لاحظ أننا نقارن النوع //String إذا الوقت لديك من النوع //كما يلي DateTime يمكنك تحويله الى dt= DateTime.parse('2020-01-02T07:12:50+07:00') // مثال // ثم تجري المقارنة كما سبق الحل المطروح هنا يحل الإشكالية الموجودة في المثال في سؤالك أي المقارنة بين قيم الوقت كما يفهم من الكود الذي تطرحه. إذا كنت تريد مقارنة قيم أخرى فلا بد من تحديد نوع هذه القيم لتحديد طريق المقارنة ذات العلاقة.
  12. لاتوجد مشكلة في schema كذلك unique:true تعمل بشكل طبيعي ولا تسمح بتكرار الأدخال كما تبين لنا عند الفحص. هل قمت بتطبيق unique:true على ال schema بعد إنشاءك قاعدة البيانات؟ يبدو أن المشكلة بسببب عدم سريان مفعول الخاصية على قاعدة البيانات مسبقة الإنشاء لديك. جرب حذف قاعدة البيانات ثم تعيد التجربة أو إذا كانت البيانات مهمة ولا تريد حذفها أنشئ قاعدة بيانات جديدة ثم جرب إنشاء مستخدم بنفس الإيميل أكثر من مرة ستجد الخطأ E11000 duplicate key error
  13. يمكنك جمع ملفات المشروع في الباكيند بملف مضغوط zip و إدراجها. بالتأكيد package.json حتى أشغل المشروع على جهازي وأشخص لك المشكلة
  14. يرجى إرفاق ملف المشروع والأفضل بدون node_modules حتى نتمكن مساعدتك بشكل أفضل.
  15. الخاصية overflow في css تتحكم فيما إذا كان المحتوى في عنصر من نوع block-level سيتم عمل clipping من عدمه وفيما إذا كان سيتم إضافة scrollbar من عدمه وبحسب القيم المسندة الى overflow. في الصورة لديك العنصر الرئيسي body يحتوي على overflow-x:hidden أي أن المحتوى إذا تجاوز عرض الصفحة سيتم إخفاء جزء منه ولن يظهر scrollbar. يمكنك الإطلاع هنا https://wiki.hsoub.com/CSS/overflow-x#hidden
  16. غالباً المشكلة في cache المتصفح. ربما كنت تعمل على نسخة قديمة من الكود ومازالت عالقة. لحل المشكلة قم بعمل clear settings > privacy and security > clear browser data >
  17. لا يبدو أن هناك مشكلة, الصفحة تعرض لدي على جميع المتصفحات كما تريدها أنت في الصورة. هل جربت تفتح الصفحة في اكثر من متصفح؟ مثلاً edge , firefox , chrom
  18. يرجى إدراج ملف المشروع حتى نشخص الخلل ونساعدك.
  19. لا يحدث تغيير تلقائي لكن بما أنك لم تجري تعديلات على الكود فلاحظ أنك تستعمل bootstrap لتصميم ال layout فهل قمت بتحديث هذه المكتبة أو غيرت نسختها؟
  20. لطفاً هل يمكنك توضيح سؤالك أكثر.. الموقع يبدو ممتازاً. هناك اربعة صور في سؤالك في أي واحدة المشكلة وما الذي تريد تحقيقه.
  21. الحل الأمثل في مثل هذه الحالة هو إستعمال recursive method طالما أن نوع السلسلة متعدد المستويات من العمق multiple levels depth. إليك المثال التالي my_list = [[1, 2], [3, 4, [5, 6, [7]], 8], 9, [10, 11, [12, [13, [14], 15], 16], 17]] def flatten(L): if not isinstance(L,(list)): # إذا لم يكن المدخل الحالي قيد المعالجة من النوع سلسلة yield L # generator object نعيد return for F in L: # نمر في حلقة تكرار على المدخل yield from flatten(F) # نعيد الناتج ونستمر بالإرجاع لحين المرور على جميع العناصر flat= list(flatten(my_list)) # نستدعي الدالة ونحول الى سلسلة لا يوجد طريقة مسبقة التعريف تقوم بهذه المهمة ولكن هذه الطريقة الأكثر كفاءة.
  22. الطريقة الأسرع لتنقية مصفوفة جافاسكربت من العناصر المكررة هي إستخدام Set مع spread function ( أو ...) كما في المثال let myString = "EElllzzzzzzzeroo"; let array= myString.split("") // نحول النص الى مصفوفة let uniqueArrayElements = [...new Set(array)]; // نستخرج العناصر الفريدة لاحظ أننا لم نعدل على المصفوفة الأصلية الناتجة من تقسيم النص. أيضاً بالنسبة للخطأ الذي يظهر لك سببه أنك تحاول إستدعاء دالة filter ( التابعة للنوع Array ) من خلال متغير من النوع String.
  23. إذا كان المشروع الأصلي حديث الإنشاء ولم يمضي عليه الكثير فلا مشكلة في نسخك للأشياء المذكورة في سؤالك, لكن في حالة كان قد مضى عليه فترة طويلة (لنقل أكثر من شهر ) فقد يعرضك إستعمال أدوات ومكتبات بإصدارات قديمة إلى مشكلات أمنية وتقنية أثناء وبعد التطوير. في كثير من الأحيان يتم أكتشاف ثغرات أمنية security issues في بعض الأدوات والمكتبات مما يدفع منشئيها إلى إجراء معالجات سريعة بغية عدم تسببها بأضرار للمستخدم النهائي. أيضا يقوم القائمين على تطوير هذه البرمجيات بشكل دوري بإطلاق إصدارات تتضمن ميزات جديدة new features و إصلاح الأخطاء bug fixes.
×
×
  • أضف...