حسابي

بحث

القائمة

Mustafa Suleiman

313 نقاط السمعة
21.3 ألف مشاهدات المحتوى
عضو منذ سنتان
ستجد تفصيل هنا https://developers.paymob.com/egypt/payment-methods-1/digital-wallets تم ذكر أنك بحاجة إلى مراسلة الدعم لتفعيل الدفع عن طريق المحافظ الإلكترونية، وذلك من خلال إنشاء تذكرة دعم عبر ويدجت الدعم في لوحة تحكم التاجر Merchant Dashboard. بعد التفعيل توجه إلى Payment Integrations في لوحة التحكم لديك، ُثم أضف الـ ID الذي تريده لوسيلة الدفع تلك. https://developers.paymob.com/egypt/accept-dashboard/payment-integrations ثم في الـ Intention API عليك تحديد وسيلة الدفع التي تريدها عند ضغط العملاء على الدفع عن طريق المحافظ الإلكترونية، وذلك من خلال الـ ID الذي قمت بكتابه
حاول تثبيت wsl من خلال: https://github.com/microsoft/WSL/releases/download/2.4.12/wsl.2.4.12.0.x64.msi لو استمرت المشكلة توجه إلى مسار مشابه للتالي على حاسوبك: C:\Program Files\WindowsApps\MicrosoftCorporationII.WindowsSubsystemForLinux_2.1.5.0_x64__8wekyb3d8bbwe ثم قم بتشغيل ملف wsl ثم في منفذ الأوامر بصلاحية administrator انتقل لذلك المسار ثم قم بتنفيذ الأوامر لكن بدلاً من كتابة wsl اكتب wsl.exe
عليك إلغاء تسجيل التوزيعة من خلال تنفيذ الأوامر التالية بالترتيب، أولاً قم بتشغيل منفذ الأوامر بصلاحية administrator: wsl --update wsl --shutdown wslconfig /unregister Ubuntu ثم التثبيت: wsl --install --distribution Ubuntu في حال استمرت المشكلة تأكد من تفعيل خاصية virtualization  في إعدادات الـ BIOS تفقد على اليوتيوب كيفية تفعيل ذلك من اللوحة الأم الخاصة بك.
لا مشكلة، تستطيع إرسال استفسارك
مناسبة للأيقونات والشعارات، أو الرسومات vector art style كالتالي: https://ibb.co/Z1W4w3vs أما باقي الصور استخدم webp فهي صيغة تدعم الشفافية للصور في حال أردت عرض صور بدون خلفية، وأيضًا تقوم بضغط الصور لتصغير حجمها بشكل كبير بدون فقد كبير في الجودة. بخصوص الأمان، فهناك مشكلة، حيث يوجد إمكانية لتضمين كود JavaScript خبيث، فملفات SVG هي في الأساس ملفات XML ومتاح أن تحتوي على كود JavaScript مضمن، يعني أنه يمكن للمهاجمين تضمين أكواد JavaScript ضارة داخل ملف SVG.  عند فتح ملف SVG خبيث
في البداية، لو كان موقعك يعمل من خلال React فستحتاج إلى استخدام Next.js بسبب ميزة SSR. عدا ذلك، سنقوم بالتالي، حيث Deferred تعني أن يبدأ المتصفح بتنزيل ملف JavaScript في الخلفية دون إيقاف عملية تحليل HTML (parsing). ثم تنفيذ ملف JavaScript بعد أن يتم تحليل HTML بالكامل وإنشاء نموذج DOM لكن التنفيذ يكون قبل حدث DOMContentLoaded، ولو لديك عدة ملفات JavaScript مؤجلة، سيتم تنفيذها بالترتيب الذي ظهرت به في كود HTML. أما Delayed يعني تأخير تحميل ملف JavaScript حتى وقت لاحق، مثلاً بعد تحميل المحتوى المرئي الأولي First
وما السبب؟ هل المشكلة بسبب إصدار الأندرويد؟
الأمر يعتمد على ماهية الموقع بالضبط؟ هل هو موقع يوجد به محتوى وستعتمد على البحث عن كلمات معينة واستقبال زوار من جوجل؟ إذن تحتاج إلى رفع موقعك على استضافة مدفوعة وتفعيل https لتتمكن من المنافسة وتكسب ثقة جوجل. أما لو الموقع يستقبل زوار بشكل مباشر فلا مشكلة تستطيع فعل ما تريد في البداية، لكن الاستضافة المجانية توفر موارد محدودة ولن تستطيع استقبال عدد كبير من الزوار في نفس الوقت. والمساحة الإعلانية يتم تحديد سعرها حسب عدد المشاهدات ومدى إهتمام زوار
يتوفر مكتبة Flask-Mail لذلك، أولاً قم بالتثبيت: pip install Flask-Mail ثم في ملف تطبيق Flask أيًا كان اسمه وبشكل إفتراضي app.py، عليك كتابة الإعدادات الأساسية، وهي إعدادات البريد الإلكتروني من خلال مزود خدمة مثل Mailtrap فعند التسجيل ستجد تلك البيانات في حسابك من خلال الضغط على email testing من القائمة الجانبية ثم inboxes ثم اضغط على أيقونة الترس في الجانب الأيمن. from flask import Flask from flask_mail import Mail, Message app = Flask(__name__) app.config['MAIL_SERVER'] = 'smtp.Mailtrap.com'  app.config['MAIL_PORT'] = 587 app.config['MAIL_USE_TLS']
وما الحاجة إلى ذلك التعقيد، كل ما تحتاجه هو تطبيق KSWEB: web developer kit https://play.google.com/store/apps/details?id=ru.kslabs.ksweb&feature=search_result وستتمكن من خلاله من تشغيل Apache, PHP, MySQL, phpMyAdmin ويدعم nginx أيضًا. وبعد تشغيله توجه إلى الرابط التالي في المتصفح: 127.0.0.1:8001 ثم أدخل اسم المستخدم وكلمة المرور الإفتراضيين وهم admin وستظهر لك لوحة التحكم. لو أردت الوصول إلى phpMyAdmin اضغط على Tools من واجهة التطبيق ثم اختر phpMyAdmin، وسيتم تحميل قرابة 7 ميجابايت لتثبيت phpMyAdmin بعد الإنتهاء توجه إلى: 127.0.0.1:8000 وأدخل اسم المستخدم root وكلمة المرور اتركها فارغة ثم
المشكلة غير واضحة من مجرد وصف، هناك الكثير من الأمور التي تؤدي لتلك المشكلة، هل يظهر خطأ في الخادم في منفذ الأوامر بعد تسجيل دخول؟ وهل يتم تسجيل الدخول أم تحدث مشكلة؟ وهل التطبيق يتم تطويره بشكل محلي أم تظهر المشكلة على الاستضافة؟ وما هي التقنيات المستخدمة؟ في البداية تفقد أنه يتم الإتصال بقاعدة البيانات بشكل صحيح من خلال طباعة رسالة تفيد أنه تم الإتصال بقاعدة البيانات عند تشغيل الخادم. بعد ذلك تفقد مسار الـ API المسؤول عن استقبال الطلب
ستجد تفصيل هنا في المستند الرسمي: https://developers.paymob.com أولاً عليك إعداد إعداد متغيرات البيئة في ملف .env.local PAYMOB_API_KEY="مفتاح الـ api هنا" PAYMOB_INTEGRATION_ID="الـ integration_id" PAYMOB_IFRAME_ID="الـ iframe_id" وستجد المعلومات السابقة في حسابك عند التسجيل كمطور في الموقع السابق. ثم عليك إنشاء مسار API كالتالي pages/api/paymob.js import axios from 'axios'; async function getAuthToken() {   try {     const response = await axios.post('https://accept.paymob.com/api/auth/tokens', {       api_key: process.env.PAYMOB_API_KEY     });     return response.data.token;   } catch (error) {    
يوجد مكتبة مثل MaxMind GeoLite2 توفر لك ذلك من خلال كود جافاسكريبت في المتصفح، أو يمكنك استخدام قاعدة البيانات الخاصة وتحميلها لمعالجة ذلك من قبل الخادم بأي لغة مثل بايثون أو PHP. يوجد منصات أخرى أيضًا تستطيع استخدام الـ API الخاص بها برمجيًا، مثل: ipinfo.io ip-api.com لكن من الأسهل لك استخدام أداة تحليل للزيارات وأفضلها Google analytics فهي توفر لك ما تريده والمزيد.
لتوضيح الأمر مثالًا واقعيًا باستخدام Stripe وهي أحد أشهر بوابات الدفع، بجانب استخدام إطار Flask، فالأمر يتم كالتالي: في الـ Frontend يوجد زر اشتري الآن أو نموذج إدخال بيانات الدفع، أقصد القالب الذي يتم توليده بواسطة محرك القوالب Jinja2  في Flask. وفي الـ Backend الجزء الخاص بالـ API في Flask يعالج طلبات الدفع ويتواصل مع بوابة الدفع عبر API. الـ Payment Gateway بوابة الدفع وهي Stripe وسيط بينك وبين شبكات البطاقات (Visa، Mastercard)، وتوفر APIs جاهزة تستطيع استخدامها لإنشاء معاملات، تأكيدها، وإدارة
بخصوص دراسة الزيارات المريبة أي تحسين الأمان الإيجابيات، ففكرة مراقبة الطلبات المشبوهة ذكية، خاصة لتتبع الهجمات المحتملة، لكن تحتاج إلى استخدم أدوات جاهزة مثل Fail2Ban أو ModSecurity لمنع الهجمات تلقائيًا بدلًا من الاعتماد فقط على التسجيل. وقلل التخزين بتجنب تخزين كل الطلبات، أي ركز على الأنماط الخطيرة (مثل محاولات SQL Injection)، وأضف حدًا زمنيًا مثل 10 طلبات/دقيقة من نفس الـIP قبل إرسال إشعار، بالإضافة إلى استخدام CDN مثل Cloudflare لتوفير حماية مبدئية من الهجمات (DDoS، SQLi). وفكرة استخدام قيمة عشوائية في ملف CSS مبتكرة، لكن من الأفضل
ستظهر لك رسالة مثل التالية في حال تنفيذ أمر flutter doctor: https://i.sstatic.net/Ak12a.png والتي تخبرك أنك بحاجة إلى تثبيت visual studio وبالأخص تحديد مكون Desktop development with C++" workload أثناء التثتبيت وذلك لتطوير تطبيقات سطح المكتب من خلال flutter لنظام ويندوز. بالتالي أنت لست بحاجة إلى ذلك في حال أردت تطوير تطبيقات الهاتف فقط، وتستطيع تنفيذ الأمر التالي لكي لا تظهر لك الرسالة مرة أخرى حيث تخبر flutter بتعطيل تطوير تطبيقات سطح المكتب. flutter config --no-enable-windows-desktop
الموقع يعمل حاليًا بشكل سليم لا مشكلة، السبب هو استضافة الموقع على استضافة مجانية وبطبيعة الحال لا يتم ضمان عمل الموقع بنسبة 99.9% طوال أيام وساعات الأسبوع بل ستجد أوقات لا يعمل الموقع بها لمدة ساعة مثلاً كل فترة وليس دائمًا، وذلك أمر طبيعي. أما في حال كان موقع الاستضافة نفسه لا يعمل فيعني أن هناك مشكلة بالمنصة نفسها بالتالي يجب عليك الإنتظار لحين عودتها للعمل كما حدث معك.
استخدم left و top فقط وليس جميع الإتجاهات، مع تحديد طول وعرض كالتالي:       #editor {         margin: 0;         position: absolute;         width: 800px;         height: 600px;         left: 0;         top: 0;       }
تتوفر دالة filemtime لتحديد أخر مرة تم فيها تحديث الملف file.txt، بالتالي لو الفترة الزمنية بين أخر تحديث للملف وأقرب وقت حالي أكبر من 3 ساعات، نقوم بإنشاء الملف من جديد. $url = 'رابط الموقع'; $web = file_get_contents($url); $myfile = 'file.txt'; $lastUpdate = filemtime($myfile); $currentTime = time(); // تحديد الفترة الزمنية بين آخر تحديث للملف وأقرب وقت حالي $diffTime = $currentTime - $lastUpdate; // تحديد عدد الساعات بين آخر تحديث للملف وأقرب وقت حالي $hours = floor($diffTime / 3600); if
ستحتاج إلى استخدام OAuth 2.0 من جوجل، وستجد تفصيل بخصوصه هنا: https://developers.google.com/identity/protocols/oauth2/javascript-implicit-flow حيث ستحتاج أولاً إلى إنشاء حساب على: https://console.cloud.google.com/ ثم إنشاء مشروع جديد به والتوجه إلى APIs & Services ثم Dashboard اضغط على Enable APIs and Services وابحث عن Google Sign-In. من الأفضل مشاهدة فيديو على اليوتيوب لشرح الخطوات بشكل عملي لك، وهنا يوجد تفصيل للشرح: https://academy.hsoub.com/apps/web/wordpress/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D8%AA%D8%B3%D8%AC%D9%8A%D9%84-%D8%A7%D9%84%D8%AF%D8%AE%D9%88%D9%84-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AC%D9%8A%D9%85%D9%8A%D9%84-gmail-%D9%84%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r478/ لديك أيضًا Firebase Authentication والتي تستخدم OAuth 2.0 بجانب أنها توفر لك تسجيل الدخول للمستخدمين من خلال منصات التواصل الإجتماعي أو برقم
من الأسهل والأفضل استخدام مكتبة JavaScript مثل Dropzone.js لرفع الملفات، وستوفر لك واجهة سحب وإفلات لرفع الملفات، وتوفر أيضًا ميزات إضافية مثل: عرض تقدم رفع الملفات. التحقق من صحة الملفات قبل رفعها. : رفع ملفات متعددة في نفس الوقت. تخصيص مظهر واجهة رفع الملفات. وبخصوص الكود الحالي لديك أولاً عليك إضافة الكود الخاص برفع الملفات إلى صفحة profile.php وإجراء بعض التعديلات سأذكرها لاحقًا: <!DOCTYPE html> <html lang="ar"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>الملف الشخصي</title> </head> <body> <h1>الملف الشخصي</h1>
لاحظ زر الرفع هو من نوع submit و هو يرسل طلب إلى الخادم لإعادة تحميل الصفحة. حاول إضافة خاصية event.preventDefault() إلى دالة الازرار التي تتعامل مع رفع الصور، لمنع الصفحة من إعادة التحميل عند الضغط على زر رفع. أيضًا إضافة خاصية return false; إلى نهاية الدالة لإيقاف إعادة التحميل. document.getElementById('upload-form').addEventListener('submit', function(event) { event.preventDefault(); return false; });
إذن $post['profile_picture'] ربما لا تحتوي على قيمة صحيحة. قم بالتحقق من قيمتها قبل محاولة عرض الصورة: <?php echo "قيمة profile_picture: " . var_dump($post['profile_picture']); if ($post['profile_picture']): ?> <img src="data:image/jpeg;base64,<?= base64_encode($post['profile_picture']) ?>" alt="صورة الملف الشخصي" style="width: 50px; height: 50px; border-radius: 50%; display: inline-block;"> <?php else: ?> <img src="default-profile.png" alt="صورة افتراضية" style="width: 50px; height: 50px; border-radius: 50%; display: inline-block;"> <?php endif; ?> ذلك سوف يظهر لك قيمة $post['profile_picture']، ويمكنك من خلالها تحديد ما إن كانت القيمة صحيحة أم لا. وفي حال القيمة غير
لاحظ أنك تستخدم $post['$userProfilePicture'] بدلاً من $post['profile_picture']، عليك استبدال السطر الذي يظهر صورة الناشر بالتالي: <?php if ($post['profile_picture']): ?> <img src="data:image/jpeg;base64,<?= base64_encode($post['profile_picture']) ?>" alt="صورة الملف الشخصي" style="width: 50px; height: 50px; border-radius: 50%; display: inline-block;"> <?php else: ?> <img src="default-profile.png" alt="صورة افتراضية" style="width: 50px; height: 50px; border-radius: 50%; display: inline-block;"> <?php endif; ?>