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

بلال زيادة

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

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

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

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

    30

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

  1. إجابة بلال زيادة سؤال في مشكلة اضافة Obfuscating Dart Code الى IOS كانت الإجابة المقبولة   
    تذهب إلى SDK الخاص بفلاتر وليس مجلد المشروع ستجد المسار المذكور كما في الصورة المرفقة.
    ايضا في المسار التالي 
    <ProjectRoot>/ios/Flutter/Release.xcconfig تضع 
    EXTRA_GEN_SNAPSHOT_OPTIONS=--obfuscate  

  2. إجابة بلال زيادة سؤال في obfuscate in flutter كانت الإجابة المقبولة   
    نعم, تقوم باستخدام السطر التالي لإصدار نسخة معماة أي مشفرة,  أي يخفي التعتيم أسماء الوظائف والفئات في كود Dart المترجم ، مما يجعل من الصعب على المهاجم إجراء هندسة عكسية لتطبيقك الخاص.
    flutter build apk --obfuscate --split-debug-info=/<project-name>/<directory>  
  3. إجابة بلال زيادة سؤال في Mediaquery في flutter كانت الإجابة المقبولة   
    حيشتغل على المحاكي طبيعي ولكن على الجهاز الحقيقي ما راح يشتغل, أنت بحاجة إلى MaterialApp أو WidgetsApp حول عنصر واجهة المستخدم الخاص بك. 
    عند استخدام MediaQuery ستبحث Flutter عن شجرة عناصر واجهة المستخدم للعثور على عنصر واجهة المستخدم. 
    فالكود الخاص بك سيصبح 
    void main() => runApp(App()); class App extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: EasyLocalization( saveLocale: true, supportedLocales: [Locale('en', 'US'), Locale('ar', 'SA')], path: 'assets/translations', fallbackLocale: Locale('en', 'US'), child: loginpage(), ), ); } } class loginpage extends StatefulWidget { LoginUserState createState() => LoginUserState(); } class LoginUserState extends State<loginpage> { final _formKey = GlobalKey<FormState>(); void _toggleVisibility(){ setState(() { _isHidden = !_isHidden; }); } Widget buildTextField(String hintText){ return Container( margin: EdgeInsets.all(5), child: TextFormField( validator: (value) { if (value.isEmpty) { return 'Requiredfield'.tr(); } return null; }, maxLength: 12, controller: passwordController, decoration: InputDecoration( hintText: hintText, labelText: 'Password'.tr(), hintStyle: TextStyle( color: Colors.grey, fontSize: 16.0, ), border: OutlineInputBorder( ), prefixIcon: Icon(Icons.lock), suffixIcon: hintText == 'Password'.tr() ? IconButton( onPressed: _toggleVisibility, icon: _isHidden ? Icon(Icons.visibility_off) : Icon(Icons.visibility), ) : null, ), obscureText: hintText == 'Password'.tr() ? _isHidden : false, ), ); } } } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Form( key: _formKey, child: Stack( children: [ Column( children: [ Container( child: SingleChildScrollView( child: SizedBox( width: double.infinity, height:350, child: Center( child: Column( children: <Widget>[ SizedBox( height: 2.0, ), new Stack( children: <Widget>[ Container( margin: EdgeInsets.symmetric(horizontal:45, vertical: 5), child: Image.asset( ("assets/log.png"), height: 310, width: 310, ), ), ], ), ], ), ), ), ), ), ], ), SingleChildScrollView( padding: EdgeInsets.only(left: 7.0, right: 7.0, top: 290.0), child: Card( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8.0), ), elevation: 3, child: Center( child: Column( children: <Widget>[ Padding( padding: const EdgeInsets.all(5.0), ), Container( margin: EdgeInsets.all(5), child: TextFormField( keyboardType: TextInputType.number, validator: (value) { if (value.isEmpty) { return 'Requiredfield'.tr(); } return null; }, maxLength: 12, controller: phoneController, decoration: InputDecoration( prefixIcon: Icon(Icons.phone_iphone), border: OutlineInputBorder(), labelText: 'Phonenumber'.tr()), )), buildTextField('Password'.tr()), Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ RaisedButton( child: Text('Login'.tr(), style: TextStyle(fontSize: 18.0, color: Colors.black),), padding: EdgeInsets.only(top: 16.0, bottom:16.0, left: 90.0, right: 90.0), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(7)), onPressed: () { }, ), InkWell( onTap: () { Navigator.push( context, MaterialPageRoute(builder: (context) => Sign())); }, child: Container( margin: EdgeInsets.symmetric(vertical: 20), padding: EdgeInsets.all(15), alignment: Alignment.bottomCenter, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Row( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'DontHave'.tr(), style: TextStyle(fontSize: 15, fontWeight: FontWeight.w600), ), SizedBox( width: 10, ), ], ), SizedBox( height: 20, ), Row( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ IconButton( icon: Icon( Icons.help_outline, color: const Color(0xFF001c3e), size: 47, ), onPressed: () { }, ), IconButton( icon: Icon( Icons.language, color: const Color(0xFF001c3e), size: 47, ), onPressed: () { }, ), ], ), ], ), ), ), ], ), ], ), ), ), ), ], ), ), ), ); } }  
  4. إجابة بلال زيادة سؤال في توقف تثبيت مشروع فلاتر على الايفون كانت الإجابة المقبولة   
    افتح podfile وقم بالبحث عن 
    # platform :ios, وقم بإزالة علامة #, أو قم بحذف ملف Podfile.lock ,وقم بتنفيذ الأمر التالي:
    pod install أو طبق  الأوامر التالية: 
    flutter clean rm -Rf ios/Pods rm -Rf ios/.symlinks rm -Rf ios/Flutter/Flutter.framework rm -Rf ios/Flutter/Flutter.podspec cd ios pod install cd .. flutter build ios  
  5. إجابة بلال زيادة سؤال في ما هو ال hook المستخدم لتطبيق بعض التأثيرات على صورة المنشور بعد تحميله في المتصفح كانت الإجابة المقبولة   
    يمكنك استخدام دالة delete_post_thumbnail أو 
    function my_post_image_html( $html, $post_id, $post_image_id ) { if(is_single()) { return ''; } else return $html; } add_filter( 'post_thumbnail_html', 'my_post_image_html', 10, 3 );  
  6. إجابة بلال زيادة سؤال في مشكلة بعد ترقية اصدار flutter كانت الإجابة المقبولة   
    يبدو انك غير متابع لما صدر أول امس لقد قامت فلاتر بتحديث النسخة وأصبحت فلاتر 2 و هناك الكثير من المشاكل مع البكجات التي لا تتوافق مع نسخة فلاتر 2 , ايضا قامت فلاتر 2 بتعطيل عدة بكجات ربما يكون أحدى البكجات التي تستخدمها من ضمنها. 
    ايضا لا تقلق يمكنك الرجوع إلى إصدار فلاتر السابق إذا لا تريد العمل على إصدار فلاتر 2. 
    كما ويمكنك الرجوع إلى كل بكج على pub.dev و متابعة يبدو أن الكثير من البكجات قامت بتحديث إصداراتها لتناسب فلاتر 2.
    يمكنك الرجوع هنا و أختيار أي نسخة sdk ويمكنك استخدامها إذا كنت لا تريد فلاتر 2.
  7. إجابة بلال زيادة سؤال في ازالة جافاسكريبت الغير مستخدم كانت الإجابة المقبولة   
    كل كود جافا سكربت لا تستخدمه قم بإزالته سواء في ملفات js او في ملفات html
    أكواد javascript تكون مخزنة بملفات امتدادها يكون .js  أو ايضا تجدها في ملفات html بصيغة 
    <script type="text/javascript">هنا كود الجافاسكريبت</script> و ايضا قم بضغط ملفات js حتى تقلل حجمها, لانه في هذه الطريقة تقلل مدة تحميل الملف مما يزيد من سرعة الموقع و يمكنك استخدام هذه الطريقة عن طريق موقع https://javascript-minifier.com/ أو اي موقع أخر يحول الكود إلى Minified.
    ملاحظة: يمكن ايضا التعامل مع ملفات css بنفس الطريقة وتحويلها إلى Minified.
    مثل هذا الكود 
    $("#contactFormmm").validator().on("submit", function (event) { console.log("hellloooooooooooooooooooooooo"); if (event.isDefaultPrevented()) { // handle the invalid form... formError(); submitMSG(false, "هل قمت بملء النموذج بشكل صحيح؟"); } else { // everything looks good! event.preventDefault(); submitForm(); } }); function submitForm(){ // Initiate Variables With Form Content var name = $("#name").val(); var email = $("#email").val(); var subject = $("#subject").val(); var msg = $("#msg").val(); $("body").addClass("loading"); $('.abcmodal').fadeIn(500); $('.overlayy').fadeIn(500); var fd = new FormData(document.getElementById("contactFormmm")); console.log("hellloooooooooooooooooooooooo"); $.ajax({ type: "POST", url: "{{ route('contact-us.store') }}", data: fd, cache: false, processData: false, contentType: false, success : function(text){ $("body").removeClass("loading"); $('.abcmodal').fadeOut(500); $('.overlayy').fadeOut(500); formSuccess(); } }); } function formSuccess(){ $("#contactFormmm")[0].reset(); submitMSG(true, "تم الإرسال"); } function formError(){ $("#contactFormmm").removeClass().addClass('shake animated').one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function(){ $(this).removeClass(); }); } function submitMSG(valid, msg){ if(valid){ var msgClasses = "h3 text-center tada animated text-success"; } else { var msgClasses = "h3 text-center text-danger"; } $("#msgSubmit").removeClass().addClass(msgClasses).text(msg); } عند تحويله يصبح 
    function submitForm(){$("#name").val(),$("#email").val(),$("#subject").val(),$("#msg").val();$("body").addClass("loading"),$(".abcmodal").fadeIn(500),$(".overlayy").fadeIn(500);var o=new FormData(document.getElementById("contactFormmm"));console.log("hellloooooooooooooooooooooooo"),$.ajax({type:"POST",url:"{{ route('contact-us.store') }}",data:o,cache:!1,processData:!1,contentType:!1,success:function(o){$("body").removeClass("loading"),$(".abcmodal").fadeOut(500),$(".overlayy").fadeOut(500),formSuccess()}})}function formSuccess(){$("#contactFormmm")[0].reset(),submitMSG(!0,"تم الإرسال")}function formError(){$("#contactFormmm").removeClass().addClass("shake animated").one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){$(this).removeClass()})}function submitMSG(o,t){if(o)var e="h3 text-center tada animated text-success";else e="h3 text-center text-danger";$("#msgSubmit").removeClass().addClass(e).text(t)}$("#contactFormmm").validator().on("submit",function(o){console.log("hellloooooooooooooooooooooooo"),o.isDefaultPrevented()?(formError(),submitMSG(!1,"هل قمت بملء النموذج بشكل صحيح؟")):(o.preventDefault(),submitForm())});  
  8. إجابة بلال زيادة سؤال في التحقق من المدخلات فى فورم التسجيل فى الموقع كانت الإجابة المقبولة   
    يمكنك استخدام الكود كاملا, لقد قمت بتجربته و التأكد من عمله 
    <?php $DATABASE_HOST = 'localhost'; $DATABASE_USER = 'root'; $DATABASE_PASS = ''; $DATABASE_NAME = 'phplogin'; $db = mysqli_connect($DATABASE_HOST, $DATABASE_USER, $DATABASE_PASS, $DATABASE_NAME); if ($stmt = $db->prepare('SELECT id, password FROM accounts WHERE username = ?')) { $stmt->bind_param('s', $_POST['username']); $stmt->execute(); $stmt->store_result(); if ($stmt->num_rows > 0) { echo 'Username exists, please choose another!'; }else { $sql = "INSERT INTO accounts (username, password, email) VALUES (?, ?, ?)"; if($stmt = mysqli_prepare($db, $sql)) { mysqli_stmt_bind_param($stmt, "sss", $username, $password, $email); $username = $_REQUEST['username']; $password = password_hash($_POST['password'], PASSWORD_DEFAULT); $email = $_REQUEST['email']; if(mysqli_stmt_execute($stmt)) { echo "Records inserted successfully."; } } } } $stmt->close(); $db->close(); ?> بحيث أنه في الكود الثاني الذي قمت أنت بإرفاقه تقوم بالتحقق من وجود اسم المستخدم ام لا لذلك يوجد في الكود شرط ويمكن استخدام هذا الشرط بحيث أنه إذا تحقق وكان اسم المستخدم موجود لا نقوم بإدخال البيانات إلى قاعدة البيانات, وإذا كان اسم المستخدم غير موجود نضيف البيانات إلى قاعدة البيانات.
    وهذا هو الشرط 
    if ($stmt->num_rows > 0) { echo 'Username exists, please choose another!'; } نضيف إليه else بحيث يصبح هكذا مع إضافة كود الإدخال إلى قاعدة البيانات.
    if ($stmt->num_rows > 0) { echo 'Username exists, please choose another!'; }else { $sql = "INSERT INTO accounts (username, password, email) VALUES (?, ?, ?)"; if($stmt = mysqli_prepare($db, $sql)) { mysqli_stmt_bind_param($stmt, "sss", $username, $password, $email); $username = $_REQUEST['username']; $password = password_hash($_POST['password'], PASSWORD_DEFAULT); $email = $_REQUEST['email']; if(mysqli_stmt_execute($stmt)) { echo "Records inserted successfully."; } } }  
  9. إجابة بلال زيادة سؤال في تركيب صفحة ويب على الووردبرسس كانت الإجابة المقبولة   
    يمكنك برمجة ثيم كامل لوردبريس عن طريق الشروحات المقدمة من موقع ووردبريس يمكنك زيارة التوثيق كاملا من هنا .
    هناك عدة شروط لتنفيذ وبرمجة أي قالب للوردبريس من خلالها يمكنك تنفيذ أي فكرة تريدها وهي: 
    ملف header.php وهو الملف المسؤول عن رأسية الموقع. ملف footer.php وهو الملف المسؤول عن تذييل و أخر الموقع. ملف sidebar.php وهو الملف المسؤول عن الشريط الجانبي للموقع. ملف style.css لوضع تنسيقات الثيم بداخله.  ملف rtl.css لوضع تنسيقات الثيم ليدعم الاتجاه من اليمين لليسار. ملف index.php هو الملف الرئيسي للقالب. ملف home.php , front-page.php  إذا تم وضع أي منهن يكون الملف هو الواجهة الرئيسية للموقع.  ملف comments.php الملف المسؤول عن التعليقات. وهناك الكثير من الأمور التي يجب الأخذ بعين الاعتبار من تنفيذها يمكنك زيارة التوثيق الرسمي و متابعته بشكل جيد لتفهم ذلك جيداً.
    أيضا توفر ووردبريس دوال للمساعدة في برمجة القالب مثل: 
    دالة 
    get_header(); هذه الدالة تقوم بإستدعاء header الخاص بالموقع.
    get_footer(); هذه الدالة تقوم بإستدعاء footer الخاص بالموقع. 
    get_sidebar(); هذه الدالة تقوم بإستدعاء sidebar الخاص بالموقع. 
    get_search_form(); هذه الدالة تقوم بإستدعاء فورم البحث الخاص بالموقع. 
    get_template_part('template_name'); هذه الدالة تقوم بإستدعاء أي ملفات تريد وضعها بالثيم.
    هناك الكثير من الدوال وتوفر ووردبريس مرجع كامل للدوال يمكنك النظر إليه. 
  10. إجابة بلال زيادة سؤال في استفسار حول اسعار اعلانات Admob كانت الإجابة المقبولة   
    طبعا يوجد فرق في السعر لو شاهده كاملا يحسب السعر كاملا للإعلان ولو تم غلقه ممكن أن يتم احتساب جزء من الربح و ممكن أيضا لا يتم حساب أي جزء من الأرباح. 
    وايضا يرجع ذلك حسب الإعلان المعروض فكل فئة إعلان تختلف الأسعار لها من أي فئة أخرى, مثل إعلانات التواصل والمعرفة تختلف باسعارها عن إعلانات السياسة والدين.
  11. إجابة بلال زيادة سؤال في كيف ممكن الوصول الى قيمة في كلاس مختلف flutter كانت الإجابة المقبولة   
    هناك عدة طرق مستخدمة.
    ممكن تحفظ القيمة عن طريق SharedPrefrence وتجلب قيمة المفتاح.  يمكن عن طريق LocalStorage و أيضا يمكن جلب القيمة من المفتاح المخزن. أو عن طريق تنفيذ Setter , Getter ويمكن عن طريق الكود التالي.  يمكن تعريف getter 
    int get coinsValue { return coins; } أو بشكل مختصر 
    int get coinsValue => coins;  ويمكن جلبها عن طريق الكلاس
    AdsRewardedVideoAd.coinsValue  
  12. إجابة بلال زيادة سؤال في استعمال اعلانات AdMob في flutter كانت الإجابة المقبولة   
    يمكنك إضافة الحزمة التالية إلى مشروع flutter الخاص بك وهي firebase_admob من خلال pub.dev او تجد الرابط هنا
    في ملف pubspec.yaml قم بوضع الحزمة مع إصدارها 
    firebase_admob: ^0.11.0+1 ومن ثم تنفيذ الأمر التالي في terminal 
    flutter pub get ثم في المسار التالي android/app/src/main/AndroidManifest.xml قم بوضع 
    <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-3940256099942544~3347511713"/> حيث 
    ca-app-pub-3940256099942544~3347511713 هو id التطبيق على admob.
    في المسار التالي  ios/Runner/Info.plis  الخاص ب iOS ضع 
    <key>GADApplicationIdentifier</key> <string>ca-app-pub-3940256099942544~1458002511</string> يمكنك إنشاء ملف في المسار التالي lib/helper.dart  ووضع الكود التالي فيه 
    import 'dart:io'; class AdManager { static String get appId { if (Platform.isAndroid) { return "<YOUR_ANDROID_ADMOB_APP_ID>"; } else if (Platform.isIOS) { return "<YOUR_IOS_ADMOB_APP_ID>"; } else { throw new UnsupportedError("Unsupported platform"); } } static String get bannerAdUnitId { if (Platform.isAndroid) { return "<YOUR_ANDROID_BANNER_AD_UNIT_ID"; } else if (Platform.isIOS) { return "<YOUR_IOS_BANNER_AD_UNIT_ID>"; } else { throw new UnsupportedError("Unsupported platform"); } } static String get interstitialAdUnitId { if (Platform.isAndroid) { return "<YOUR_ANDROID_INTERSTITIAL_AD_UNIT_ID>"; } else if (Platform.isIOS) { return "<YOUR_IOS_INTERSTITIAL_AD_UNIT_ID>"; } else { throw new UnsupportedError("Unsupported platform"); } } static String get rewardedAdUnitId { if (Platform.isAndroid) { return "<YOUR_ANDROID_REWARDED_AD_UNIT_ID>"; } else if (Platform.isIOS) { return "<YOUR_IOS_REWARDED_AD_UNIT_ID>"; } else { throw new UnsupportedError("Unsupported platform"); } } } مع تغيير كل id لفئة الإعلان الخاص سواء بانر أو Interstitial.
    ومن ثم في الملف الذي تود عرض الإعلانات فيه تضع لتفعيل الإعلانات
    Future<void> _initAdMob() { ///Initialize AdMob SDK return FirebaseAdMob.instance.initialize(appId: AdManager.appId); } يمكن استخدام لتفعيل إعلانات البانر 
    BannerAd _bannerAd; void _loadBannerAd() { _bannerAd ..load() ..show(anchorType: AnchorType.top); } و ثم في دالة initState نضع 
    @override void initState() { _bannerAd = BannerAd( adUnitId: AdManager.bannerAdUnitId, size: AdSize.banner, ); _loadBannerAd(); } لتشغيل الإعلانات في التطبيق, يمكنك مراجعة التوثيق الخاص بالحزمة ستجد تفاصيل أكثر عن كيفية استخدام كل نوع من الإعلانات و كيفية تنفيذها في تطبيقك 
    هنا يجب استخدام إعلانات من فئة interstitial ,وتسمى هذه الإعلانات البينية ,  بحيث هذه الإعلانات تظهر عند الأنتقال من واجهة لواجهة أو عند تنفيذ حدث معين في التطبيق.
    بما أنك تستخدم إعلانات من قوقل أدموب فجميع فئات الإعلانات يمكن للمستخدم تخطيها او إغلاقها حسب رغبة المستخدم.
  13. إجابة بلال زيادة سؤال في كيفية حماية مدخلات الفورم في (php-html) كانت الإجابة المقبولة   
    أول شيء إصدارات PHP أوقفت التعامل مع mysql و استبدلتها ب mysqli أو PDO.
    هناك عدة دوال لحماية المدخلات ومنها 
    mysql_real_escape_string: تقوم بحماية المدخلات المضافة إلى قاعدة البيانات. strip_tags: تمنع إضافة أكواد HTML , PHP داخل قاعدة البيانات. htmlspecialchars: يمكنك مراجعة توثيق موسوعة حسوب بالدالة لفهمها أكثر من هنا
    $name = strip_tags($_POST['name']); $name = htmlspecialchars($_POST['name']); $name = mysql_real_escape_string($_POST['name']); ويمكن صنع دالة حماية واستخدامها مع كل مدخل مثل
    function filterThis($string) { return mysql_real_escape_string($string); } function filterThis($string) { return strip_tags($string); } function filterThis($string) { return htmlspecialchars($string); } فلو أردنا تطبيق هذه الدوال على الكود الخاص بك يصبح هكذا 
    <?PHP $name = strip_tags($_POST['name']); $phone = strip_tags($_POST['phone']); $email = strip_tags($_POST['email']); $db = mysql_connect('localhost', 'root', '', 'info'); $query = "insert into user values('".$name."','".$phone."','".$email."')"; $insert =$db->query($query); ?> <form method="post" action=""> <p><input name="name" type="text"></p> <p><input name="phone" type="text"></p> <p><input name="email" type="text"></p> <p><input type="submit"></p> </form>  
  14. إجابة بلال زيادة سؤال في كيفية اضافة زر Debit card كانت الإجابة المقبولة   
    إذا بتقصد الدفع باستخدام البطاقة الأئتمانية بدون بي بال يجب الأشتراك في بوابة دفع مثل Stripe, Razorpay, 2checkout وغيرها من بوابات الدفع, طبعا كل بوابة دفع لها SDK خاص بالتعامل مع الموبايل, ويمكنك ربط كل بوابة بتطبيقك بشكل كامل بعد قبول حسابك في أي من البوابات هذه. 
    أما بخصوص الدفع من خلال حسابي بي بال و أن يقوم العضو بالدفع من البطاقة الأئتمانية الخاصة به إذا كان رابط حساب بي بال ببطاقة أئتمانية فكالتالي كودك بيكون صحيح إذا كان بيعمل بشكل صحيح و أنه بيخصم من الحساب لمن تدفع باستخدام بي بال فحينها لو العضو رابط حسابه البي بال ببطاقة أئتمانية هين بي بال لو كان حسابه ما فيه المبلغ المطلوب بتخليه يقدر يدفع من بطاقته الأئتمانية. 
    بتمنى تكون وضحت الفكرة.
  15. إجابة بلال زيادة سؤال في تصميم لوحة الحروف على شكل خلية نحل بـ css كانت الإجابة المقبولة   
    يمكنك استخدام وسم map في HTML بحيث تدرج الصورة ومن ثم تحديد map لها وتحديد الأحداثيات لكل حرف باستخدام خاصية coords.
    فمثلا 
    <!DOCTYPE html> <html> <body> <img src="planets.gif" width="145" height="126" usemap="#image"> <map name="image"> <area shape="rect" coords="0,0,82,126" href=""> <area shape="circle" coords="90,58,3" href=""> <area shape="circle" coords="124,58,8" href=""> </map> </body> </html> فكل سهم يشير إلى أحداثيات كل منطقة في الصورة بحيث لو قمت بالضغط على أي منطقة محددة تستطيع فعل أي حدث على هذه المنطقة, ممكن ان تقوم بتشغيل صوت , أو التحويل إلى صفحة معينة, أو وضع tooltip على هذه المنطقة, الأمر متروك لك, يمكنك القراءة أكثر عن هذا الوسم بالدخول إلى موسوعة حسوب من هنا وأيضا يمكنك مشاهدة أمثلة على هذا الوسم من هنا.

    أيضا هذه الوسم يكثر استخدامه في برمجة الألعاب حتى تستفيد من الصورة بوضع أكثر من حدث عليها او تقسيمها إلى مناطق فلو شاهدت التالي 

    تجد ان هذا المثال اكثر وضوحاً من قبله بحيث قمنا بالاستفادة من الصورة و جعلناها مناطق و وكل دائرة هي عبارة عن منطقة. 
    أرجوا قد وضح المثال ووضحت الفكرة لديك.
  16. إجابة بلال زيادة سؤال في أريد أن أتعلم الويب ويصبح لدي مجال عمل بدل العمل في كل وظيفة لفترة معينة، بماذا تنصحوني؟ كانت الإجابة المقبولة   
    أولا: يجب تعلم HTML كاملاً, لماذا ؟ لانها تمثل لغة ترميز تستخدم في إنشاء و تصميم مواقع الويب, هذه اللغة تحتوي على وسوم (tags) هذه الوسوم عن طريقها تستطيع بناء الموقع (هيكل الموقع) من header أعلى الصفحة, إلى footer أخر الصفحة, إلى sections تكون بين رأس الصفحة و أخر الصفحة, عادة sections هي المتغيرة من صفحة إلى أخرى في الموقع. 
    بعد أن قمنا بتصميم هيكل الموقع, يجب أن نقوم بتنسيق الصفحة كي تكون ملائمة لتظهر للمستخدمين بشكل أفضل و تنسيق رائع وتعطي تجربة مستخدم أفضل, هنا يأتي دور استخدام CSS هذه اللغة تحتوي على Attributes هذه الخواص دورها تنسيق الصفحة فمثلا ممكن ان ننشأ ب html وسم عمل فقرة, فكيف سأقوم بوضع لون لهذه الفقرة ؟ كل ما عليك شو استخدام CSS فمثلاً
    <html> <body> <p>أهلا بالعالم !</p> </body> </html> هذا كود HTML نضيف له خاصية من خواص CSS لنعطي الفقرة لون أحمر مثلاً
      
    <html> <head> <style> p{ color: red; } </style> </head> <body> <p>أهلا بالعالم !</p> </body> </html> كما وضحنا بالمثال انه قمنا باستخدام HTML, CSS لكي نبني و ننسق الصفحة, هل هذا يكفي ؟ الإجابة في بعض المواقع يمكن أن تكفي HTML, CSS في برمجة مواقع ثابتة أي لا تتغير إلا بتغيير الكود المستخدم فيها, وبعض المواقع لا يكفي إلا باستخدام JavaScript مع HTML. CSS لتعطي تفاعلاً أكبر مع المستخدم الذي يزور الصفحة.
    و لجعل الموقع أكثر تفاعلاً و يكون ديناميكاً في تعامل المستخدمين معه يجب استخدام لغة تستخدم من جانب الخادم وهي لغات كثر فممكن أن تستخدم PHP, Python, Node.js 
    هذه اللغات تستطيع التعامل مع قواعد البيانات و التعامل مع خواص قواعد البيانات CRUD, أي 
    C => Create R => Read U => Update D => Delete فالألية كالتالي: 
    تعلم HTML في البداية. تعلم CSS  لتنسيق الصفحات بعد إنشائها باستخدام HTML.  تعلم JavaScript لتفاعل الموقع مع المستخدمين.  تعلم لغة من طرف الخادم لجعل الموقع ديناميكاً مثل PHP, Python, Node.js. تعلم SQL لتستطيع التعامل مع قواعد البيانات.
  17. إجابة بلال زيادة سؤال في كيفية تقليل حقول الدفع في paypal كانت الإجابة المقبولة   
    ممكن تجعل المستخدم يقوم بتعديل وحفظ البيانات مرة واحدة, ومن ثم تقوم في  واجهة الدفع بعرض فقط وسيلة الدفع بدون عرض فورم لتعبئة البيانات مثل بيانات العنوان والاسم و معلومات الشحن, فقط تقوم بجلب البيانات من model الخاص باليوزر بعد أن تحفظ البيانات بداخله مثلاً. 
    طبعا يتم تمرير بيانات المستخدم من api الي بيرجع بيانات المستخدم إلى class model و عن طريق class model يمكن جلب البيانات. 
    هناك طريقة أخرى هي فصل الواجهات فمثلا واجهة لتعبئة البيانات الشخصية تحتوي على الاسم والبريد الإلكتروني و باقي المعلومات, و من الواجهة الثانية تكون تعبئة معلومات وعنوان الشحن كاملا, و في اخر واجهة تعرض طريقة الدفع المختارة.
    الفكرة هي استغلال البيانات التي تمررها لأي كلاس Model مسؤول عن أي واجهة. 
    فمثلا في لغة فلاتر أقوم بعمل التالي 
    عندي كلاس model لمعلومات الزبون أو العضو 
    class CustomerDetailModel { int id; String firstName; String lastName; String email; Billing billing; Shipping shipping; CustomerDetailModel( {this.id, this.firstName, this.lastName, this.email, this.billing, this.shipping}); CustomerDetailModel.fromJson(Map<String, dynamic> json) { id = json['id']; firstName = json['first_name']; lastName = json['last_name']; email = json['email']; billing = json['billing'] != null ? new Billing.fromJson(json['billing']) : null; shipping = json['shipping'] != null ? new Shipping.fromJson(json['shipping']) : null; } } class Billing { String firstName; String lastName; String company; String address1; String address2; String city; String postcode; String country; String state; String email; String phone; Billing( {this.firstName, this.lastName, this.company, this.address1, this.address2, this.city, this.postcode, this.country, this.state, this.email, this.phone}); Billing.fromJson(Map<String, dynamic> json) { firstName = json['first_name']; lastName = json['last_name']; company = json['company']; address1 = json['address_1']; address2 = json['address_2']; city = json['city']; postcode = json['postcode']; country = json['country']; state = json['state']; email = json['email']; phone = json['phone']; } Map<String, dynamic> toJson(){ final Map<String, dynamic> data = new Map<String, dynamic>(); data['first_name'] = this.firstName; data['last_name'] = this.lastName; data['company'] = this.company; data['address_1'] = this.address1; data['address_2'] = this.address2; data['city'] = this.city; data['postcode'] = this.postcode; data['country'] = this.country; data['state'] = this.state; data['email'] = this.email; data['phone'] = this.phone; return data; } } class Shipping { String firstName; String lastName; String company; String address1; String address2; String city; String postcode; String country; String state; Shipping( {this.firstName, this.lastName, this.company, this.address1, this.address2, this.city, this.postcode, this.country, this.state,}); Shipping.fromJson(Map<String, dynamic> json) { firstName = json['first_name']; lastName = json['last_name']; company = json['company']; address1 = json['address_1']; address2 = json['address_2']; city = json['city']; postcode = json['postcode']; country = json['country']; state = json['state']; } Map<String, dynamic> toJson(){ final Map<String, dynamic> data = new Map<String, dynamic>(); data['first_name'] = this.firstName; data['last_name'] = this.lastName; data['company'] = this.company; data['address_1'] = this.address1; data['address_2'] = this.address2; data['city'] = this.city; data['postcode'] = this.postcode; data['country'] = this.country; data['state'] = this.state; return data; } } و عندما أريد استخدام البيانات التي تم تمريرها إلى كلاس Model في واجهة الدفع كالتالي
      
    class OrderModel { OrderModel({ this.id, this.parentId, this.number, this.orderKey, this.total, this.billing, this.shipping, this.paymentMethod, this.paymentMethodTitle, this.transactionId, }); int id; int parentId; String number; String orderKey; String total; String totalTax; Ing billing; Ing shipping; String paymentMethod; String paymentMethodTitle; String transactionId; factory OrderModel.fromJson(Map<String, dynamic> json) => OrderModel( id: json["id"], parentId: json["parent_id"], number: json["number"], orderKey: json["order_key"], shippingTotal: json["shipping_total"], shippingTax: json["shipping_tax"], total: json["total"], totalTax: json["total_tax"], billing: Ing.fromJson(json["billing"]), shipping: Ing.fromJson(json["shipping"]), paymentMethod: json["payment_method"], paymentMethodTitle: json["payment_method_title"], transactionId: json["transaction_id"], ); Map<String, dynamic> toJson() => { "id": id, "parent_id": parentId, "number": number, "order_key": orderKey, "shipping_total": shippingTotal, "shipping_tax": shippingTax, "total": total, "total_tax": totalTax, "billing": billing.toJson(), "shipping": shipping.toJson(), "payment_method": paymentMethod, "payment_method_title": paymentMethodTitle, "transaction_id": transactionId, }; } void createOrder() async { if(_ordersModel.shipping == null){ _ordersModel.shipping = this.customerDetailModel.shipping; } if(this.customerDetailModel.shipping != null){ _ordersModel.shipping = this.customerDetailModel.shipping; } if(_ordersModel.billing == null){ _ordersModel.billing = this.customerDetailModel.billing; } if(this.customerDetailModel.billing != null){ _ordersModel.billing = this.customerDetailModel.billing; } if(ordersModel.lineItems == null){ _ordersModel.lineItems = new List<LineItems>(); } } جميع الأمثلة الموضحة مكتوبة بلغة Flutter
  18. إجابة بلال زيادة سؤال في كيفية استخدام ال Sessions فى جلب بيانات المستخدم من قاعدة البيانات وعرضها كانت الإجابة المقبولة   
    تم إضافة جلسة session إلى الكود و تم التأكد من عمله أيضا 
    <?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head> <body> <form name="newad" method="post" enctype="multipart/form-data" action="index.php"> <table border="1"> <tr><td> <input type="file" name="image" id="" required> </td></tr> <tr><td> <input type="hidden" name="MAX_FILE_SIZE" value="90000" /> </td></tr> <tr><td><input name="describe" type="text" size="25" maxlength="100" required > </td></tr> <tr><td> <input name="Submit" type="submit" value="Upload image"> </td></tr> </table> </form> <?php $con = mysqli_connect("localhost", "root", "") or die ("فشل في الإتصال بقاعدة البيانات"); $db=mysqli_select_db($con, 'tc'); define ("MAX_SIZE","1000"); // this function to get extension of files................. function getExtension($str) { $i = strrpos($str,"."); if (!$i) { return ""; } $l = strlen($str) - $i; $ext = substr($str,$i+1,$l); return $ext; } $errors=0; if(isset($_POST['Submit'])) { $image=$_FILES['image']['name']; if ($image) { $filename = stripslashes($_FILES['image']['name']); $extension = getExtension($filename); $extension = strtolower($extension); if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) { echo '<h1>Unknown extension!</h1>'; $errors=1; } else { //$size= filesize($_FILES['image']['name']); $size = $_FILES["image"]["size"]; if ($size > MAX_SIZE*1024) { echo '<h1>You have exceeded the size limit!</h1>'; $errors=1; } $image_name=time().'.'.$extension; $newname="upload/".$image_name; //$copied = copy($_FILES['image']['tmp_name'], $newname); $copied = move_uploaded_file($_FILES["image"]["tmp_name"], $newname); if (!$copied) { echo '<h1></h1>'; $errors=1; }}}} if(isset($_POST['Submit']) && !$errors) { echo "<h1></h1>"; // echo "<img src=$newname>"; // ------------------- To Save Path of Image in DataBase and show it on Browser... $id = $_POST['id']; $describe = $_POST['describe']; $_SESSION['image_name'] = $newname; $result = @mysqli_query($con, "INSERT INTO `news` VALUES ('$id','$newname','$describe',NOW() )"); if($result) { header("location:session.php"); } else { echo "error"; } } ?> </body> </html> وملف session.php 
    <?php session_start(); //عمل حالة شرطية للمقارنة if ($_SESSION['browser'] !== $_SERVER['HTTP_USER_AGENT']) { //sessionانهاء ال session_destroy(); echo "أنت غير معتمد"; exit(); } echo " "; ?> <img src="<?php echo $_SESSION['image_name']; ?>" />  

  19. إجابة بلال زيادة سؤال في كيفية رفع الصور لقاعدة البيانات وعرضها بعد اعادة تسميتها كانت الإجابة المقبولة   
    شكرا أخي لرفعك الكود كاملاً, لقد وجدت خطأ في دالة التحقق من size الملف وقد تم استبدالها 
    $size = $_FILES["image"]["size"]; و قد رفع الملف بنجاح وبدون أي مشكلة, الكود كاملاً.
    <form name="newad" method="post" enctype="multipart/form-data" action="index.php"> <table> <tr><td><input type="file" name="image"></td></tr> <input type="hidden" name="MAX_FILE_SIZE" value="90000" /> <tr><td><input name="Submit" type="submit" value="Upload image"></td></tr> </table> </form> <?php $con = mysqli_connect("localhost", "root", "") or die ("فشل في الإتصال بقاعدة لبينات "); $db=mysqli_select_db($con, 'tc'); define ("MAX_SIZE","1000"); // this function to get extension of files................. function getExtension($str) { $i = strrpos($str,"."); if (!$i) { return ""; } $l = strlen($str) - $i; $ext = substr($str,$i+1,$l); return $ext; } $errors=0; if(isset($_POST['Submit'])) { $image=$_FILES['image']['name']; if ($image) { $filename = stripslashes($_FILES['image']['name']); $extension = getExtension($filename); $extension = strtolower($extension); if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) { echo '<h1>Unknown extension!</h1>'; $errors=1; } else { //$size= filesize($_FILES['image']['name']); $size = $_FILES["image"]["size"]; if ($size > MAX_SIZE*1024) { echo '<h1>You have exceeded the size limit!</h1>'; $errors=1; } $image_name=time().'.'.$extension; $newname="upload/".$image_name; //$copied = copy($_FILES['image']['tmp_name'], $newname); $copied = move_uploaded_file($_FILES["image"]["tmp_name"], $newname); if (!$copied) { echo '<h1>Copy unsuccessfull!</h1>'; $errors=1; }}}} if(isset($_POST['Submit']) && !$errors) { echo "<h1>File Uploaded Successfully! Try again!</h1>"; // echo "<img src=$newname>"; // ------------------- To Save Path of Image in DataBase and show it on Browser... $result = @mysqli_query($con, "INSERT INTO `news` VALUES ('', '$newname')"); if($result) { echo "file added"; } else { echo "error"; } $gotten = @mysqli_query($con, "Select * From news"); while($row = @mysqli_fetch_array($gotten)) { $pic=$row['path']; $id=$row['id']; // echo "<img src=$pic>"; // Here to Display Image on Browser and In Blank Browser if you like..... echo " <a href='$pic' target='_blank'><img border='0' src=$pic alt=$pic></a> "; } } ?>  
  20. إجابة بلال زيادة سؤال في دفع الاموال في flutter كانت الإجابة المقبولة   
    في أكثر من سيناريو يتم استخدامه. 
    أولا: ممكن يكون صاحب التطبيق له نسبة معينة من الارباح على كل طلب و لا يتدخل في عملية التوصيل أو لا.
    ثانيا: ممكن يتم الأتفاق مع أصحاب المطاعم بتوزيع الأرباح عليهم شهريا أو اسبوعيا وتبقى الأموال في محفظتك ولكن معروف لكل صاحب مطعم كم أمواله. 
    حسب الألية المفضلة لديك.
    كيف ممكن أن تنفذ الفكرة وهي كالتالي: 
    يكون لك حساب في أحدى بوابات الدفع المشهورة مثل Stripe, 2checkout, PayPal وتقوم باستخدام SDK الخاص بكل بوابة دفع في تطبيقك, هذه البوابات تستخدم البطاقات الأئتمانية للدفع عن طريقها. 
    كل يوابة دفع لها رسوم تختلف عن الأخرى, عندما يقوم الزبون بالدفع تنتقل الأموال إلى حسابك في هذه البوابة وأنت تقوم بتوزيع الأرباح بعدها من خلال الألية المستخدمة لديك في توزيع الأرباح.
  21. إجابة بلال زيادة سؤال في مشكله في صفحة اتصل بنا كانت الإجابة المقبولة   
    لازم يكون عندي حساب mail وتربطه بالموقع كاملا ممكن ترفق الكود كيف انتا عملت الكود.
×
×
  • أضف...