-
المساهمات
4376 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
30
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو بلال زيادة
-
يمكن تكرار الاستعلام مرة داخل controller الخاص ب admin panel و مرة في الcontroller الخاص بالموقع. يجوز تكرار نفس الاستعلام داخل أي controller تريدين.
- 10 اجابة
-
- 1
-
أخي يبدو أن هناك أجزاء من gradle لم يتم تحميلها بشكل صحيح. لذلك هناك عدة حلول وهي يمكن استدعاء هذه الحزمة مرة أخرى cloud_firestore و العمل على تثبيتها في مشروعك بشكل صحيح ممكن تقرأ أكثر عنها هنا , ومن ثم تشغيل الأمر flutter clean , و من ثم الأمر flutter run, ومن ثم الأمر flutter build apk. ممكن أن تقوم بصنع مشروع جديد و من ثم نقل الملفات إليه و المحاولة مرة أخرى. ومن ثم تشغيل الأمر flutter build apk. التأكد من الحزم التي تم استخدامها في المشروع و التأكد من أنها ثبتت بشكل صحيح و هناك بعض الحزم مثل cloud_firestore تحتاج إلى إضافة بعض الأوامر إلى الملفات. تشغيل الأمر flutter doctor وفحص النتيجة و العمل على حل جميع المشاكل.
- 9 اجابة
-
- 1
-
هل موجود في ملف gradle.properties هذه الأوامر org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true android.enableR8=true ممكن لقطة شاشة من ملف gradle.properties؟
- 9 اجابة
-
- 1
-
أخي يمكن للحل المرفق مسبقاً إعلاه أن يفيدك لقد واجهني خطأ مثل هذا قبل ذلك وقمت بحله بنفس طريقة الجواب الذي أرفقته لك هل ممكن أن تقوم بتجربة ذلك واخباري بالنتيجة.
-
يمكنك صنع مجلد جديد داخل المسار التالي app\Http\Controllers وليكن Admin و من ثم في هذا المجلد نخزن أي controller خاص بالادمن أو عن طريق الأمر التالي نستطيع تخزين الcontroller في أي مجلد نريده php artisan make:controller Admin\PostsController --resource لو لاحظتي جيدا أننا قمنا بتوجيه تخزين الcontroller إلى المجلد Admin كما في الأمر إعلاه. طبعا لوحة التحكم ستكون مختلفة التصميم و الأوامر عن تصميم الموقع فينصح بفصل controllers الخاصة بالموقع عن لوحة التحكم , أيضا نادراُ ما يتم استخدام نفس الcontroller لكل من اللوحة أو الموقع. و أيضا يمكن في ملف web.php الخاص ب routes تمييز لكل من اللوحة و الموقع عن طريق Route::group ففي المثال التي حددنا مسارات لوحة التحكم داخل Route::group Route::group(['prefix' => 'admin', 'as' => 'admin.'], function () { Route::get('/login', 'Admin\Auth\LoginController@showLoginForm')->name('adminlogin'); Route::post('/login', 'Admin\Auth\LoginController@login')->name('adminloginsubmit'); Route::get('/logout', 'Admin\Auth\LoginController@logout')->name('adminlogout'); Route::post('/logout', 'Admin\Auth\LoginController@logout')->name('adminlogout'); }); كلما كانت طريقة تنظيم المشروع ممتازة وجيدة فيسهل مستقبلا التطوير على المشروع و أيضا هذا قد يساعدكي في مشروعات أخرى من الأستفادة من العناصر المشتركة في مشاريع مستقبلية.
- 10 اجابة
-
- 1
-
يمكنك إنشاء مشروع مخصص للأندرويد باستخدام flutter عن طريق الأمر التالي flutter create -i objc -a java nameProject بحيث nameProject هي اسم المشروع الجديد المخصص للأندرويد. ثم إنشاء Channel مخصصة باستخدام الخاصية MethodChannel, طبعا يرتبط client و host المضيف للقناة من خلال اسم القناة الذي تم تمريره في منشئ القناة. و هنا يجب أن يكون جميع اسماء القنوات المستخدمة في تطبيق واحد فريدة أي لا تتكرر. import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; ... class _MyHomePageState extends State<MyHomePage> { static const platform = const MethodChannel('flutter.native/helperchannel'); } ومن ثم يتم استداعاء القناة String res = ""; try { final String result = await platform.invokeMethod('nativeCode'); res = result; } on PlatformException catch (e) { } و من ثم في مجلد android نجد ملف MainActivity.java و من ثم إنشاء MethodChannel بنفس الاسم الذي أنشأناه في تطبيق flutter. private static final String CHANNEL = "flutter.native/helperchannel"; ومن ثم في دالة OnCreate علينا أنشاء MethodCallHandler new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler( new MethodChannel.MethodCallHandler() { @Override public void onMethodCall(MethodCall call, MethodChannel.Result result) { if (call.method.equals("nativeCode")) { String myCode = myCode(); result.success(myCode); } }}); و أيضا ننشىء الدالة myCode في نفس الملف private String myCode() { return "print my Code"; } } ومن ثم في Flutter نستطيع استدعاء أي دالة في MainActivity.java الخاصة بالاندرويد عن طريق القناة المعرفة مسبقا كما ذكرنا سلفاً. كود main.dart كاملا import 'package:flutter/material.dart'; import 'dart:async'; import 'package:flutter/services.dart'; void main() => runApp(new MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( home: new HomePage(), ); } } class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar( title: const Text('Native Code from Dart'), ), body: new MyHomePage(), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => new _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { static const platform = const MethodChannel('flutter.native/helperchannel'); String responseCode = ''; Future<void> responseMyCode() async { String res = ""; try { final String result = await platform.invokeMethod('nativeCode'); res = result; } on PlatformException catch (e) { } setState(() { responseCode = res; }); } @override Widget build(BuildContext context) { return Material( child: Center( child: Column( children: [ RaisedButton( child: Text('get My Code'), onPressed: responseMyCode, ), Text(responseCode), ], ), ), ); } } MainActivity.java import android.os.Bundle; import io.flutter.app.FlutterActivity; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; public class MainActivity extends FlutterActivity { private static final String CHANNEL = "flutter.native/helperchannel"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler( new MethodChannel.MethodCallHandler() { @Override public void onMethodCall(MethodCall call, MethodChannel.Result result) { if (call.method.equals("nativeCode")) { String myCode = myCode(); result.success(myCode); } }}); } private String myCode() { return "print my Code"; } }
-
دائما يجب فحص logs لانه ممكن ان يكون هناك شرط قد وضعتيه انه اذا لم يتحقق أن يقوم بالذهاب الى الصفحة الرئيسية للمشروع, وهذا الشرط ممكن أن يكون موضوع عند تشغيل الموقع أي من البداية فعند لا تحقق الشرط يستمر بالذهاب إلى الصفحة الرئيسية مما يسبب المشكلة الذي تم حلها. مثال بسيط <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class IndexController extends Controller { /** * Show the application dashboard. * * @return \Illuminate\Contracts\Support\Renderable */ public function index() { $c = 1 if($c != 0){ return redirect()->route("/index"); } return view('home'); } } هذا الكود لو لاحظتي جيدا أنه عند تشغيل المشروع إذا لم يتحقق الشرط سيكرر الذهاب إلى الصفحة الرئيسية مما يسبب المشكلة الي حصلت عندك.
-
صحيح , لاحظت هو عدم وجود متغير about وهو مسبب المشكلة ممكن ترفقي اول جزء من الملف هنا أو التأكد من متغير about في ملف FrontController.php
- 8 اجابة
-
- 1
-
ممكن تشوفي المسار التالي storage\logs وفحص مشاكل logs ستجدين عدة ملفات كل ملف مسمى بتاريخ اليوم إذا حصلت المشكلة اليوم سوف تجدين ملف بتاريخ اليوم ممكن تشوفي المشكلة المسببة لذلك أو وضع المشكلة هنا لنساعدك بها.
-
ممكن يكون عدة أسباب لذلك, قد تكون مش مفعل multiDexEnabled true defaultConfig { multiDexEnabled true } في المسار التالي أو ناسي وضعها android > app > build.gradle, ومن ثم في defaultConfig بدك ترقي gradle في ملف android/build.gradle classpath 'com.android.tools.build:gradle:3.3.1' طبعا مع تغيير 3.3.1 إلى أخر أصدار gradle, ومن ثم في المسار التالي android/app/gradle.properties ستضع التالي android.useAndroidX=true android.enableJetifier=true و من ثم تشغيل الأمر التالي flutter clean
- 9 اجابة
-
- 1
-
أول شيء إصدارات 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>
- 2 اجابة
-
- 1
-
يمكنك جلب السجلات بترتيب تنازلي او أفقي عن طريق الدالة orderBy هكذا بحيث DESC تنازلياً و ASC تصاعدياً User::orderBy('title', DESC)->first(); User::orderBy('title', ASC)->first();
-
ممتاز جدا يمكنك التحقق أكثر عندما تطبعي البيانات في ملف view.
- 23 اجابة
-
- 1
-
هل هكذا $aboutus = About::all(); $about =About::whereIn('id', [1,2])->get(); يمكنك استخدام كل استعلام بشكل منفصل.
-
لا داعي للكود التالي $aboutus = About::all(); الثاني يعمل بشكل صحيح مع تغيير $aboutus إلى اسم المودل هكذا $about =About::whereIn('id', [1,2])->get();
-
$users = User::select('name', 'image', 'age')->where('age', '>=', 18)->limit(100)->get(); يمكنك جلب عدة حقول باستخدام دالة select كما في المثال إعلاه, اسماء الحقول داخل دالة select هي اسماء الحقول كما في الجدول في قاعدة البيانات. أما لو كنتي تقصدين كيف يتم ارجاع الحقول جميعها $users = User::where('age', '>=', 18)->limit(100)->get(); $users = User::whereIn('id', [6, 7, 9])->get(); هذه الاستعلامات ترجع جميع الحقول الموجودة لكل سجل وما قمنا بتحديده في دالة where أو whereIn هو الشرط الذي الذي يعود بالنتائج بناء عليه.
- 23 اجابة
-
- 2
-
first تستخدم لجلب صف واحد ( سجل واحد ) من الجدول داخل قاعدة البيانات. $user = User::where('id', 1)->first(); ويتم جلب هذا الاستعلام داخل ملف view فمثلاً <p>{{ $user->name }}</p> أما get تستخدم لجلب عدة سجلات على شكل مصفوفة كما في المثال التالي $posts = Post::where('user_id', 1)->get(); ويتم جلب هذا الاستعلام داخل ملف view فمثلاً <table class="table table-bordered table-hover"> <thead> <tr> <th>ID</th> <th>Phone</th> <th>ORDER</th> <th>DATE</th> </tr> </thead> <tbody> @foreach($posts as $post) <tr> <td>{{ $post->id ?? '' }}</td> <td>{{ $post->title ?? '' }}</td> <td>{{ $post->desc ?? '' }}</td> <td>{{ $post->created_at ?? '' }}</td> </tr> @endforeach </tbody> </table> ويمكن استخدام أي دالة loop مثل while , for, foreach لجلب عناصر المصفوفة العائدة من الاستعلام
- 23 اجابة
-
- 1
-
يمكنك جلب أي متغير global داخل الكلاس بالطريقة التالية, هو أن تقوم بجعل المتغير global ومن ثم تقوم استدعائه عن طريق $GLOBALS , من خلال الأمثلة ستتضح لك الفكرة. يوجد لدينا ملف db.php <?php $appConfig = array( 'db' => array( 'host' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'database' ), ); ويوجد لدينا ملف index.php <?php require('db.php'); class Teacher { public function __construct() { global $appConfig; echo $appConfig['db']['username']; } } $p = new Teacher(); ?> فلو تلاحظ أننا قمنا بجلب بيانات من المصفوفة بعد أن قمنا بجعل المتغير لها عام و من ثم استدعينا index معين لنطبع نتيجته.
-
يمكن باستخدام Middleware منع و توجبه الزوار و الأعضاء إلى أي صفحة تريدها فمثلا في حالتك هذه ممكن أنشاء middleware باستخدام الأمر التالي php artisan make:middleware UserAuth أو يمكن زيارة الصفحة الخاصة بالتوثيق هنا ثانيا عند تنفيذ هذا الأمر في command سيقوم بأنشاء ملف خاص لِ Middleware في المسار التالي app\Http\Middleware ستجد الملف التالي UserAuth.php في دالة handle ممكن تضع أي شرط لإكمال الدخول إلى route محدد أو توجيه الزائر أو العضو إلى صفحة معينة ما دام الشرط غير صحيح فمثلا public function handle($request, Closure $next) { if (auth()->guard('web')->user()) { return $next($request); } else { return redirect('/404'); } } ومن ثم نذهب للملف التالي في المسار app/Http/Kernel.php ونقوم بوضع مسار Middleware الذي قمنا بأنشائه داخل المصوفة $routeMiddleware 'userauth' => \App\Http\Middleware\UserAuth::class, ومن ثم في ملف الخاص بِ routes نضع في route الذي نريد منع الأعضاء من الدخول إليه Route::post('threads/{thread}/replies', [ReplyController::class, 'store'])->middleware('userauth'); وهكذا تكون عملية توجيه الاعضاء حسب شرط معين, يمكنك زيارة التوثيق الخاص Laravel في الرابط إعلاه.
- 2 اجابة
-
- 1
-
لتجنب عدم الاستجابة عند الاتصال بأي api في تطبيق flutter يجب استخدام دالة compute وهذه الدالة تقوم بتشغيل الوظائف المجهدة في الخلفية بحيث لا تؤثر على التطبيق. أيضا من النصائح المتبعة ايضا هي اضافة البيانات المرجعة من api في كلاس Model بحيث تستطيع جلب البيانات وتخزينها في هذا الكلاس Model بحيث تقلل عملية الاستجابة ووقت التنفيذ. الشكل العام لهذه الدالة هو var getData = await compute(function, parameter); بحيث function هي المستقبل أو الوظيفة التي نمررها إلى الدالة. parameter هي البيانات التي تمرر الى function. يمكنك مراجعة دالة compute من هنا ولقد عدلت على الكود الخاص بك واصبح سربعا في الاستجابة import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( theme: ThemeData( primarySwatch: Colors.blue, visualDensity: VisualDensity.adaptivePlatformDensity, ), home: MyHomePage(title: 'Flutter Demo Home Page'), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Hello'), ), body: FutureBuilder<List<Welcome>>( future: getData(), builder: (context, AsyncSnapshot<List> snapshot) { switch (snapshot.connectionState) { case ConnectionState.none: return Center( child: Text('No Connection'), ); break; case ConnectionState.waiting: case ConnectionState.active: return Center( child: CircularProgressIndicator(), ); break; case ConnectionState.done: if (snapshot.hasError) print(snapshot.error); return snapshot.hasData ? WelcomeList(welcome: snapshot.data) : Center( child: CircularProgressIndicator(), ); break; } return Container(); }, ), ); } Future<List<Welcome>> getData() async { var response = await http.get('https://jsonplaceholder.typicode.com/comments'); return compute(welcomeFromJson, response.body); } } // To parse this JSON data, do // // final welcome = welcomeFromJson(jsonString); List<Welcome> welcomeFromJson(String str) => List<Welcome>.from(json.decode(str).map((x) => Welcome.fromJson(x))); String welcomeToJson(List<Welcome> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson()))); class Welcome { Welcome({ this.postId, this.id, this.name, this.email, this.body, }); int postId; int id; String name; String email; String body; factory Welcome.fromJson(Map<String, dynamic> json) => Welcome( postId: json["postId"], id: json["id"], name: json["name"], email: json["email"], body: json["body"], ); Map<String, dynamic> toJson() => { "postId": postId, "id": id, "name": name, "email": email, "body": body, }; } class WelcomeList extends StatelessWidget { final List<Welcome> welcome; WelcomeList({Key key, this.welcome}) : super(key: key); @override Widget build(BuildContext context) { return ListView.builder( itemCount: welcome.length, itemBuilder: (context, i) { return ListTile( title: Text('comment:${welcome[i].name}'), ); }, ); } } وهذه صورة من النتيجة
- 2 اجابة
-
- 1
-
لو لاحظت في الكود المستخدم انه يوجد متغير باسم isEnvironmentSandbox وهذا يأخذ قيمة bool يعني true or false إذا أردت تغيير الوضع إلى live mode قم بتغيير قيمة isEnvironmentSandbox إلى false.
- 5 اجابة
-
- 1
-
هذا ملف makePayment.dart كاملا بعد التعديل عليه بحيث أصبح مثل التصميم الذي تريده. import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'PaypalPayment.dart'; class MakePayment extends StatefulWidget { @override _MakePaymentState createState() => _MakePaymentState(); } class _MakePaymentState extends State<MakePayment> { var number; TextStyle style = TextStyle(fontFamily: 'Open Sans', fontSize: 15.0); final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>(); @override void initState() { super.initState(); number = '1.99'; } @override Widget build(BuildContext context) { return Scaffold( key: _scaffoldKey, appBar: PreferredSize( preferredSize: Size.fromHeight(45.0), child: new AppBar( backgroundColor: Colors.white, title: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'Paypal Payment Example', style: TextStyle( fontSize: 16.0, color: Colors.red[900], fontWeight: FontWeight.bold, fontFamily: 'Open Sans'), ), ], ), ), ), body: Container( padding: EdgeInsets.all(15), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: <Widget>[ Text("Total: 30.53 USD"), Divider( thickness: 2, color: Colors.grey[300], ), Row( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text("Name"), Text("bbbb"), ], ), Row( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text("Code"), Container( padding: EdgeInsets.all(10), decoration: BoxDecoration(color: Colors.grey), child: Text("RP62800QL"), ), ], ), Divider( thickness: 2, color: Colors.grey[300], ), SizedBox( height: 10, ), Text("Pay with PayPal"), SizedBox( height: 10, ), Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ Container( width: MediaQuery.of(context).size.width, height: 50, child: RaisedButton( color: Color(0xffffc43a), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => PaypalPayment(onFinish: number)), ); }, child: RichText( text: TextSpan( text: "Pay ", style: TextStyle(color: Color(0xff013089), fontSize: 25, fontWeight: FontWeight.bold), children: <TextSpan>[ TextSpan(text: 'Pal', style: TextStyle(color: Color(0xff019cde))), ], ), ),/*Text( 'PayPal', textAlign: TextAlign.center, style: TextStyle(fontSize: 30), ),*/ ), ), SizedBox( height: 10, ), Container( width: MediaQuery.of(context).size.width, height: 50, child: RaisedButton( color: Color(0xff2d2e30), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => PaypalPayment(onFinish: number)), ); }, child: RichText( text: TextSpan( children: [ TextSpan( text: "بطاقة سحب أو ائتمان ", style: TextStyle(color: Colors.white, fontSize: 20,), ), WidgetSpan( child: Icon(Icons.credit_card, size: 20, color: Colors.white,), ), ], ), ) ), ), ], ), ], ), ), ); } }