-
المساهمات
18818 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
445
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Mustafa Suleiman
-
هناك الكثير من الدروس المجانية في أكاديمية حسوب، من خلال الإطلاع على قسم دروس ومقالات وستجد محتوى قيم ودروس تطبيقية في المجالات التالية: البرمجة ريادة الأعمال العمل الحر التسويق والمبيعات التصميم DevOps البرامج والتطبيقات الشهادات المتخصصة أيضًا هناك موسوعة حسوب الخاصة بالبرمجة وبها توثيق لأشهر لغات وتقنيات البرمجة: HTML CSS Sass Bootstrap Python PHP Laravel Twig Ruby Rails JavaScript TypeScript Node.js React Next.js React Native jQuery Bash Cordova Kotlin Arduino Algorithms Design Patterns SQL Refactoring Liquid كذلك عند الإشتراك في أحد دورات حسوب يتم السماح لك بالإطلاع على القسم الأول من الدورات الأخرى وإذا أردت استكمال الدورة يمكنك الإشتراك بها.
-
بما أن السؤال خاص بمشروع أو سؤال إمتحاني يتم ذكر الخطوات فقط، ويمكن مساعدتك في الكود إذا تم توفيره أو جزء منه. هذه هي الخطوات المطلوبة لحل السؤال باستخدام جافاسكريبت: استخدم دالة prompt() للحصول على النص الذي يدخله المستخدم. استخدم دالة split() لتحويل النص إلى مصفوفة من الأحرف. أنشئ متغيرًا جديدًا لتخزين المحتوى الذي تم إدخاله من المستخدم بطريقة معكوسة. يمكن القيام بذلك عن طريق استخدام الدالة push() لإضافة الحروف إلى الستاك ومن ثم استخدام دالة pop() لإزالة الحروف من الستاك ووضعها في المصفوفة. استخدم دالة join() لتحويل المصفوفة إلى سلسلة جديدة. استخدم دالة alert() أو console.log() لعرض النتيجة للمستخدم. مثال لأول خطوتين: // الخطوة 1 let inputString = prompt("أدخل نصاً:"); // الخطوة 2 let charArray = inputString.split("");
-
الكود لا يقوم بطباعة الأرقام الزوجية بالشكل الصحيح. بدلاً من ذلك، يتم طباعة الأعداد السالبة في حالة عدم الانتقال إلى الشرط الأول. لتصحيحه، يمكن إزالة الشرط الثاني وإضافة قوسين إلى الشرط الأول للتأكد من أن الأعداد الزوجية فقط هي التي يتم طباعتها. باستطاعتك استخدام الكود التالي بدلاً من ذلك: public class Main{ public static void main (String[] args) { for (int i=2; i<=100; i+=2) { if(i % 4 == 0) { System.out.println(-i); } else { System.out.println(i); } } } } الكود سيقوم بطباعة الأرقام الزوجية بشكل صحيح وتحويل الأرقام الذي يمكن قسمتها على 4 إلى أعداد سالبة.
-
الخطأ الذي تتحدث عنه يشير إلى عدم تعريف متغير $Projects، وهذا يعني أن المتغير لم يتم تمريره إلى هذا الملف من الملفات الأخرى التي تستخدمها. مما يعني أنه يجب التأكد من أن المتغير $Projects قد تم تمريره إلى هذا الملف أو تم إنشاؤه في الملف نفسه وتم تعيين قيمته. كما يمكن استخدام دالة isset للتحقق من وجود قيمة في المتغير قبل استخدامه، مما يساعد على تفادي هذه المشكلة، وعند استخدامها، فإنها تعيد true إذا كان المتغير معرفًا وله قيمة، و false إذا لم يكن معرفًا أو لا يحتوي على قيمة. لذا، يمكن تعديل الكود كالتالي: <section> @isset($Projects) @forelse ($Projects as $project) <div class="col-4 mb-4"> <div class="card"> <div class="card-body"> <div class="status"> @switch($project->status) @case(1) <span class="text-success">مكتمل</span> @break @case(2) <span class="text-danger">ملغي</span> @break @default <span class="text-warning">ملغي</span> @endswitch <h5 class="font-weight-bold card-title"> <a href="/projects/{{$project->id}}" >{{ $project->title }}</a> </h5> <div class="card-text mt-4"> {{$project->description}} </div> @include('projects.footer') </div> </div> </div> </div> @empty <p>لا يوجد مشاريع لعرضها</p> @endforelse @else <p>المتغير $Projects غير معرف</p> @endisset </section> وستتم طباعة رسالة إذا كانت قيمة $Projects غير معرفة، وسيتم عرض محتويات المصفوفة $Projects إذا كانت معرفة.
-
بعد البحث هنا المكتبة لم تعد موجودة. https://pypi.org/search/?q=transfermate فقمت بالتوجه إلى المستندات الخاصة بالـ API وأرجو منك قرائتها حيث ستجدي شرح لكيفية الاستخدام وأمثلة في الجزء الأيمن. https://developer.transfermate.com/api-documents/payables
- 4 اجابة
-
- 1
-
-
لم يتم وضع علامة دولار ($) قبل الاسم (project) في الرابط href، يجب وضع العلامة دولار للإشارة إلى أنه متغير في Laravel، لذلك يجب التعديل كالتالي: <a href="/projects/{{$project->id}}" >{{ $project->title }}</a> وبالتالي يكون الكود الصحيح هو: <section> @forelse ($Projects as $project) <div class="col-4 mb-4"> <div class="card"> <div class="card-body"> <div class="status"> @switch($project->status) @case(1) <span class="text-success">مكتمل</span> @break @case(2) <span class="text-danger">ملغي</span> @break @default <span class="text-warning">ملغي</span> @endswitch <h5 class="font-weight-bold card-title"> <a href="/projects/{{$project->id}}" >{{ $project->title }}</a> </h5> <div class="card-text mt-4"> {{$project->description}} </div> @include('projects.footer') </div> </div> </div> </div> @empty <p>لا يوجد مشاريع لعرضها</p> @endforelse </section>
-
باستخدام نفس الطريقة: على سبيل المثال، إذا كان هناك عنصر script مع src="../js/file1.js"، يمكن تغيير مساره عند الضغط على الزر كما يلي: button.onclick = function() { const scriptElement = document.querySelector("script[src='../js/file1.js']"); scriptElement.src = "../js/file2.js"; } الكود سيحدث تغييرًا في مسار العنصر script الذي يحتوي على المسار القديم "../js/file1.js"، وسيتم تغييره إلى المسار الجديد "../js/file2.js". ويرجى الانتباه إلى أنه إذا كانت هناك وظيفة محددة تعمل بالفعل في الملف القديم، فلن يتم استدعاؤها بعد تغيير مسار العنصر script، لذلك قد تحتاج إلى إعادة تحميل الصفحة لتشغيل الوظيفة المحدثة. ويمكنك أيضًا استخدام طريقة أحدث وهي باستخدام addEventListener للزر بدلاً من onclick.
- 4 اجابة
-
- 1
-
-
من الصعب الإجابة على سؤالك دونّ معرفة التفاصيل، فما الذي تريده تنفيذه بالضبط؟ حيث يمكن تغيير مسار ملف JS ولكن لن يعمل بسبب أن السكريبت لم يتم تحميله وعند إعادة تحميل الصفحة سيعود كل شيء كما كان.
- 4 اجابة
-
- 1
-
-
تم إصلاح الأخطاء التي تم الإشارة إليها في ملف ProjectController.php و web.php حيث تم إضافة الكود التالي في ملف web.php الموجود في المسار التالي : routes\web.php use Illuminate\Support\Facades\Auth; وتم إصلاح الخطأ في ملف ProjectController.php ليصبح كالتالي: <?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Auth; use App\Models\project; use Illuminate\Http\Request; class ProjectController extends Controller { /** * Display a listing of the resource. */ public function index() { $projects = auth()->user()->projects; return view('projects.index', compact('projects')); } public function create() { // كود إنشاء المشروع } /** * Store a newly created resource in storage. */ public function store(Request $request) { // } /** * Display the specified resource. */ public function show(project $project) { // } /** * Show the form for editing the specified resource. */ public function edit(project $project) { // } /** * Update the specified resource in storage. */ public function update(Request $request, project $project) { // } /** * Remove the specified resource from storage. */ public function destroy(project $project) { // } }
-
يمكن استخدام العلامة السالبة "-" أمام الرقم الذي تريد تحويله إلى سالب. لذلك، يمكنك تعديل الكود الخاص بك على النحو التالي: public class Main { public static void main (String[] args) { for (int i = 2; i <= 100; i++) { if (i % 2 == 0) { System.out.println(i); } else { System.out.println(-i); } } } } في المثال، إذا كان العدد فرديًا، فسيتم طباعته مع علامة سالبة، بينما إذا كان العدد زوجيًا، فسيتم طباعته كما هو دون علامة سالبة. ويمكنك الإطلاع على الإجابة الخاصة بالسؤال التالي:
-
باستطاعتك استخدام الشرطية السالبة "-" قبل أي رقم في الجافا لجعله سالبًا. على سبيل المثال، إذا أردنا طباعة الرقم -5 في برنامج الجافا، يمكننا كتابة الكود التالي: int number = -5; System.out.println(number); سيقوم هذا الكود بطباعة "-5" في الإخراج، ويمكن استخدام أي عدد آخر بدلاً من "-5" لطباعة أرقام سالبة أخرى. أيضًا بالإمكان استخدام العملية الحسابية لضرب أي رقم بالقيمة السالبة 1 (-1) لجعله سالبًا. مثال، إذا أردنا جعل الرقم 5 سالبًا في برنامج الجافا، يمكن استخدام الكود التالي: int number = 5; int negativeNumber = number * -1; System.out.println(negativeNumber); وسيتم طباعة القيمة "-5" في الإخراج.
-
مرحبًا زينا، حاولي تجربة الحل التالي: استخدام cleaned_data بدلاً من self في دالة clean_count، حيث تحتوي cleaned_data على البيانات المدخلة من قبل المستخدم والتي تم تنقيحها (cleaned) من قبل Django. وعند الوصول إلى الحقل product_name، يمكن استخدامه لاسترداد العنصر من قاعدة البيانات باستخدام get بدلاً من filter. ويمكن تعديل clean_count بالشكل التالي: class ProductForm(forms.ModelForm): class Meta: model = Product fields = '__all__' count = forms.IntegerField(widget=forms.NumberInput(attrs={'min': '0'})) def clean_count(self): count = self.cleaned_data['count'] product = Product.objects.get(product_name=self.cleaned_data['product_name']) firscoun = product.firscoun if count < firscoun: raise forms.ValidationError(f'The minimum count for this product is {firscoun}.') return count أما بالنسبة لمشكلة استبدال product_name بـ id، يجب استخدام self.instance.pk بدلاً من self.id، حيث يمثل self.instance.pk مفتاح الأساسي للكائن الحالي. ويمكن تعديل clean بالشكل التالي: class Product(models.Model): ... firscoun = models.PositiveIntegerField(verbose_name=_("Minimum Countete:"), blank=True, null=True) def clean(self): errors = {} firscoun = self.firscoun if self.count < firscoun: errors['min_count'] = f'The min count must be greater than {firscoun}.' if errors: raise ValidationError(errors) ملاحظة: تحتاج clean إلى تعديل لتعمل بشكل صحيح، حيث يجب استخدام self.count بدلاً من self.cleaned_data['count'].
-
من المفترض أن الكود الصحيح هو كالتالي، وأرجو منك مشاركة الكود هنا من خلال الضغط على علامة <> عند كتابة السؤال بدلاً من الصور وأيضًا كتابة الأخطاء التي تظهر لك، وإذا استمرت المشكلة، أرفق الكود الكامل لملف ProjectController.php public function index() { $projects = auth()->user()->projects; return view('projects.index', compact('projects')); }; public function create() { // كود إنشاء المشروع } والخطأ الثاني الخاص بـ undefined type Auth يظهر لك لأنه يجب عليك استيراد فصل Auth في ملف web.php قبل استخدامه، ويمكنك القيام بذلك باستخدام الكود التالي في بداية ملف web.php: use Illuminate\Support\Facades\Auth; يتم استدعاء هذا الكود لاستيراد الفصل Auth الذي يقدم وظائف المصادقة في Laravel.
-
هناك طريقة أخرى لتعريف الدالة وهي Function Declaration دونّ الحاجة إلى تخزين قيمتها في متغير والتي تعرف باسم Function Expression. فعند استخدام طريقة Function Declaration يمكنك نداء الدالة بعد تعريفها بالشكل التالي: تتميز Function Declaration بأنها تعريف الدالة باستخدام الكلمة المحجوزة function واسم الدالة وقائمة المعاملات (إذا كانت الدالة تأخذ معاملات) وجسم الدالة بين الأقواس المنفتحة والمغلقة. على سبيل المثال: function myFunction(param1, param2) { // كود الدالة هنا } myFunction(1, 2) وبالطبع يجب كتابة اسم الدالة حتى تتمكن من ندائها وهنا اسم الدالة هو myFunction. ويمكن استدعاء الدالة التي تم تعريفها بواسطة Function Declaration في أي مكان في الكود، حتى قبل تعريفها، لأن الدوال التي تم تعريفها بهذه الطريقة ترفع إلى الأعلى (Hoisting) من قبل JavaScript. بينما Function Expression: تتميز بأنها تعريف الدالة بتعبير يتم تخزينه في متغير. في هذه الحالة، يمكن استخدام تعبير السهم (Arrow Function) أو الدالة المجهولة (Anonymous Function) لتعريف الدالة. على سبيل المثال: // Arrow Function Expression: const myFunction = (param1, param2) => { // كود الدالة هنا } // Anonymous Function Expression: const myFunction = function(param1, param2) { // كود الدالة هنا } يجب تعريف المتغير الذي يحتوي على الدالة قبل استخدامها في الكود، ولا يتم رفع هذا النوع من الدوال إلى الأعلى في JavaScript. يمكن استخدام كل من Function Declaration و Function Expression لتعريف الدوال في JavaScript، ويتوقف الاختيار على المطلوب والأسلوب الذي يسهل فهمه.
-
في البداية أرجو منك، طرح كافة الأسئلة الخاصة بك المتعلقة بموضوع واحد في سؤال واحد هنا، فقد تم طرح أكثر من سؤال عن المصفوفات ويمكن جمعهم في سؤال واحد هنا. وتنويه آخر بخصوص الأسئلة الخاصة بك هي أسئلة إمتحانية ولا يتم تقديم كود كحل لها بل يتم شرح الخطوات التي تمكنك من تنفيذ ما تريدينه، وإذا واجهتي مشكلة في الحل يمكنك توفير الكود وسيتم مساعدتك في الحل. وهناك 5 أسئلة في الملف الخاص بك في المرفقات عن المصفوفات باستخدام لغة C# وهم كالآتي: اكتب برنامجا يطلب من المستخدم ادخال مصفوفتين من األعداد الصحيحة و يخزن في مصفوفة جديدة جميع عناصر المصفوفة األولى متبوعة بجميع عناصر المصفوفة الثانية. اكتب برنامجا يخزن المصفوفة التالية {3,3,2,2,1,1,1,3,2,1 {و يطلب من المستخدم ادخال رقم للبحث عنه ثم يطبع رقم اخر عنصر داخل المصفوفة يتواجد فيه الرقم الذي ادخله المستخدم و اذا لم يكن الرقم موجودا يطبع للمستخدم 0. اكتب برنامجا يطلب من المستخدم ادخال مصفوفة من األعداد الصحيحة و يطبع ثاني أكبر عنصر في المصفوفة. اكتب برنامجا يطلب من المستخدم ادخال مصفوفة من األعداد الصحيحة و يطبع العناصر األكبر من متوسط جميع العناصر في المصفوفة. اكتب برنامجا يطلب من المستخدم ادخال مصفوفة ثنائية األبعاد من األعداد الصحيحة ويعيد رقم الصف الذي يحتوي على أكبر مجموع خطوات حل السؤال الأول تعريف ثلاث مصفوفات، مصفوفتي الأعداد الأولى والثانية، ومصفوفة جديدة: طلب إدخال المصفوفة الأولى من المستخدم باستخدام دالة الإدخال Console.ReadLine(). تحويل الإدخال المدخل من النص إلى مصفوفة أعداد صحيحة باستخدام دالة التحويل Int32.Parse(). طلب إدخال المصفوفة الثانية من المستخدم باستخدام دالة الإدخال Console.ReadLine(). تحويل الإدخال المدخل من النص إلى مصفوفة أعداد صحيحة باستخدام دالة التحويل Int32.Parse(). تعيين قيم المصفوفة الأولى في المصفوفة الجديدة. تعيين قيم المصفوفة الثانية في المصفوفة الجديدة، بداية من المؤشر الذي يلي آخر عنصر في المصفوفة الأولى. عرض المصفوفة الجديدة للمستخدم باستخدام دالة الإخراج Console.WriteLine(). خطوات حل السؤال الثاني بتعريف مصفوفة من نوع الصحيح وتعبئتها بالقيم التالية: {3,3,2,2,1,1,1,3,2,1}. الطلب من المستخدم إدخال رقم للبحث عنه باستخدام دالة لقراءة الإدخال من المستخدم. البحث في المصفوفة عن الرقم المدخل باستخدام حلقة for. في حال وجود الرقم المدخل، احتفظ بالموقع الذي تم العثور فيه على الرقم. بعد الانتهاء من البحث، قومي بطباعة العنصر الذي يلي العنصر الذي تم العثور فيه على الرقم إذا كان الرقم موجودًا، وإذا لم يكن الرقم موجودًا قومي بطباعة 0. خطوات حل السؤال الثالث استخدام دالة Console.ReadLine() لطلب المصفوفة من المستخدم عبر واجهة الأمر الخاصة بالبرنامج. استخدام دالة Split() لتحويل السلسلة النصية إلى مصفوفة من الأعداد الصحيحة. إنشاء متغيرات مناسبة للحفاظ على العناصر الأكبر والثاني الأكبر في المصفوفة. استخدام حلقة تكرارية للمرور على جميع العناصر في المصفوفة ومقارنتها بالعناصر الأكبر والثاني الأكبر. إذا كانت العنصر أكبر من الأكبر ، فتحديث القيمة الخاصة بالأكبر والثاني الأكبر على التوالي. إرجاع القيمة الثانية الأكبر من المصفوفة باستخدام دالة Console.WriteLine(). خطوات حل السؤال الرابع استخدام الدالة Console.ReadLine() لطلب إدخال المصفوفة من المستخدم. استخدام الدالة Split() لتقسيم النص المدخل إلى مصفوفة من السلاسل. استخدام حلقة for لحساب مجموع جميع العناصر في المصفوفة. حساب متوسط العناصر في المصفوفة عن طريق قسمة مجموع العناصر على عددها. استخدام حلقة for مرة أخرى للبحث عن العناصر التي تزيد عن المتوسط، وإضافة هذه العناصر إلى مصفوفة جديدة. استخدام دالة Array.Sort() لفرز المصفوفة الجديدة. استخدام شرط if للتحقق من وجود عناصر أكبر من المتوسط، وإذا كانت الشرط صحيحة، فإنه يتم طباعة هذه العناصر. خطوات حل السؤال الخامس استقبال المصفوفة الثنائية الأبعاد من المستخدم عن طريق استخدام دالة الإدخال Console.ReadLine() وتخزينها في متغير مناسب. إنشاء متغير لتخزين القيمة القصوى لمجموع العناصر في الصفوف وتعيينه بالقيمة الأولى في المصفوفة. إنشاء متغير لتخزين رقم الصف الذي يحتوي على المجموع الأكبر وتعيينه برقم الصف الأول. البدء في البحث عن الصف الذي يحتوي على المجموع الأكبر. يتم ذلك بتكرار الخطوة الخامسة والسادسة حتى نصل إلى نهاية المصفوفة. إنشاء متغير مؤقت لتخزين مجموع العناصر في الصف الحالي. الحصول على مجموع العناصر في الصف الحالي بواسطة تكرار العناصر في الصف وإضافتها إلى المتغير المؤقت. التحقق إذا كان مجموع العناصر في الصف الحالي أكبر من المجموع الحالي. إذا كان الأمر كذلك ، فتعديل المجموع الأكبر ورقم الصف. بعد الانتهاء من البحث في جميع الصفوف ، يتم طباعة رقم الصف الذي يحتوي على المجموع الأكبر. يمكن ذلك باستخدام دالة الإخراج Console.WriteLine(). وإليك شروحات لتسهيل الأمر عليكي، أتمنى منك دراستها. واجب فصل المصفوفات.pdf
-
باستطاعتك تشغيل ملفات الـBash script على أجهزة الأندرويد باستخدام تطبيقات مثل Termux و GNURoot Debian. فتلك التطبيقات توفر بيئة لينكس على الأندرويد، وتسمح لك بتشغيل العديد من الأوامر والأدوات التي تستخدمها على أجهزة الكمبيوتر الشخصي. وبالنسبة للتشغيل على أجهزة الويندوز واللينكس، يمكنك تشغيل ملفات الـBash script باستخدام Terminal أو Command Prompt. من خلال فتح Terminal أو Command Prompt وتشغيل الأمر bash تليه اسم الملف الذي تريد تشغيله مثل: bash myscript.sh حيث "myscript.sh" هو اسم الملف الذي تريد تشغيله. ويجب عليك التأكد من أن الـBash script الذي تحاول تشغيله قابل للتشغيل، ويمكنك تغيير صلاحيات الملف باستخدام الأمر chmod في حال لم يكن قابل للتشغيل.
-
أرجو منك قراءة السؤال الخاص بك سابقًا فقد تم طرح نفس السؤال، وإذا كان لديك سؤال آخر لا تتردد في طرحه
-
اسم النموذج المحدد app\models\user لم يتم كتابته بالحروف الأولى الكبيرة كما هو معتاد في لارافيل. بالإضافة إلى ذلك، يتعين عليك التأكد من أن اسم المسار المستخدم في النموذج صحيح، حيث يفترض أن يكون المسار إلى نموذج المستخدم app\Models\User بدلاً من app\models\user. لذا، يمكن إصلاح الخطأ بكتابة اسم النموذج بالحروف الأولى كما هو معتاد في لارافيل، وتصحيح المسار ليصبح app\Models\User على النحو التالي بحرف U كبير. $user = App\Models\User::find(1); بعد التعديل، يمكن إعادة تشغيل php artisan tinker وتحديد السجلات المطلوبة.
-
المشكلة التي في الصورة تحدث بسبب وجود علامة تنصيص خاطئة في الكود الموجود في الملف app\Http\Controllers\ProjectController.php، والتي أدت إلى إعطاء رسالة خطأ بأنه تم توقع فاصلة منقوطة ";" بدلاً من علامة "}". حاول التحقق من السطر الذي يأتي بعد السطر 16، لمعرفة ما إذا كانت هناك أي أخطاء في الـ Syntax، وعليك التأكد من أن العلامات التنصيصية والفواصل المستخدمة في الأسطر السابقة تم وضعها بشكل صحيح، وخاصة في السطر 16 الذي يحتوي على دالة compact(). ويجب معرفة أنه يمكن أن يتسبب تفريط بعلامات التنصيص أو الفواصل في حدوث أخطاء في لغة PHP، لذا عليك التحقق من أن جميع العلامات التنصيصية والفواصل تم وضعها بشكل صحيح في الأماكن الصحيحة في الكود. وأنصحك بقراءة الأخطاء التي تظهر لك ثم البحث برسالة الخطأ على جوجل لمعرفة السبب، وأيضًا تفقد الأسطر التي يتم الإشارة لك بها في الخطأ مثل السطر 16 في الصورة، وإذا واجهت مشكلة لا تتردد في السؤال هنا.
-
الأفضل النقاش هنا لتحقيق استفادة للجميع، وبخصوص سؤالك، لتتمكن من الوصول إلى قاعدة البيانات الموجودة على جهازك المحلي، يجب أن يكون لديك خادم backend تستطيع الوصول إليها. ويمكن القيام بذلك باستخدام تقنيات مثل Node.js و Express أو Django و Flask أو PHP. بعد ذلك ستحتاج إلى استخدام أي نظام إدارة قواعد البيانات مثل MySQL أو PostgreSQL أو SQLite والعديد من الخيارات الأخرى. ويمكنك تثبيتها على جهازك المحلي وإنشاء قاعدة بيانات جديدة واستخدامها كقاعدة بيانات خاصة بالتطوير الخاص بك، وأيضا إنشاء قاعدة بيانات مماثلة على الخادم الذي يتم استضافة موقعك عليه. وللمزامنة بين القاعدتين، يمكنك استخدام أدوات المزامنة المتاحة مثل برنامج pg_dump لنظام PostgreSQL أو mysqldump لنظام MySQL، بالإضافة لاستخدام خدمات الاستضافة التي توفر خدمات النسخ الاحتياطي والمزامنة الآلية. وباستطاعتك كتابة برنامج مخصص للمزامنة بين القاعدتين باستخدام لغة البرمجة التي تستخدمها في التطوير. مثال، سنستخدم Express.js لإنشاء نهايات (endpoints) API التي تتيح لنا الوصول إلى البيانات من قاعدة البيانات المحلية ومزامنتها مع خادم الويب البعيد. سنستخدم cron لتنفيذ العملية بشكل دوري: const express = require('express'); const mysql = require('mysql'); const axios = require('axios'); const cron = require('node-cron'); const app = express(); // اتصال بقاعدة البيانات المحلية const db = mysql.createConnection({ host: 'localhost', user: 'username', password: 'password', database: 'database_name' }); // اتصال بخادم الويب البعيد const remoteApi = axios.create({ baseURL: 'http://remote-server.com/api', timeout: 1000, headers: {'Authorization': 'Bearer YOUR_API_KEY'} }); // API endpoint لاسترداد البيانات من قاعدة البيانات المحلية app.get('/local-data', (req, res) => { db.query('SELECT * FROM table_name', (error, results) => { if (error) { throw error; } res.send(results); }); }); // API endpoint لإضافة البيانات إلى خادم الويب البعيد app.post('/remote-data', (req, res) => { remoteApi.post('/data', req.body) .then(response => { res.send(response.data); }) .catch(error => { console.log(error); }); }); // دالة لمزامنة البيانات function syncData() { db.query('SELECT * FROM table_name', (error, results) => { if (error) { throw error; } results.forEach(result => { remoteApi.post('/data', result) .then(response => { console.log(response.data); }) .catch(error => { console.log(error); }); }); }); } // cron job لتنفيذ مزامنة البيانات بشكل دوري cron.schedule('0 0 * * *', () => { syncData(); }); // تشغيل السيرفر app.listen(3000, () => { console.log('Server started on port 3000'); });
-
لا مشكلة عزيزي، بخصوص جافاسكريبت، فإذا كان المقصود قسم المقدمة، فنعم هو قسم نظري للغة ومن المفيد مشاهدته بالطبع ولا يوجد تطبيق عملي به. أما بدايًة من قم أساسيات جافاسكريبت فيبدأ التطبيق العملي وكتابة الأكواد وأنصحك بالكتابة وراء المدرب، ولا تترك فيديو إلا قد قمت بكتابة الكود الخاص به، وبذلك ستتخلص من الكثير من المشاكل مستقبلاً بسبب المشاهدة السلبية وعدم كتابة الكود بنفسك، وحاول التغيير في الكود وتنفيذ أفكارك والبحث عن حلول للمشاكل أو طريقة لتنفيذ ما تريده. فستتعلم الكثير من خلال فعل ذلك، وليس بالمشاهدة والتطبيق بالحرف فقط، أي كل 5 فيديوهات مثلاُ قم بتعمل تحدي لنفسك بتنفيذ فكرة مختلفة أو إضافة شيء جديد أو خاصية جديدة في الكود.
- 7 اجابة
-
- 1
-
-
المشكلة تحدث بسبب عدم وجود مسار النطاق الافتراضي للتطبيق في الملف الذي تعمل عليه، ويمكن حل هذه المشكلة بإضافة الأمر use في بداية الملف، لتحديد مسار المجال الذي تعمل عليه النماذج: use App\Models\User; وفي هذه الحالة، يجب استخدام Models بدلاً من Model بسبب تغيير في الاسم في إصدارات Laravel الحديثة. وبعد ذلك، يمكنك استخدام الأمر التالي لاستدعاء النموذج User وجلب سجل واحد من قاعدة البيانات: $user = User::find(1); ويجب التأكد من أن الملف الذي تعمل عليه موجود في المجال المناسب لتطبيق Laravel وأنه يتم تشغيله من داخل مجلد التطبيق. كما يجب التأكد من أنه تم تشغيل الأمر من داخل مجلد التطبيق Laravel باستخدام منفذ الأوامر CMD.
- 1 جواب
-
- 1
-
-
أهلا بك روجيه، إذا كان السؤال خاص بأحد دورات أكاديمية حسوب، أرجو منك طرح السؤال في المرة القادمة أسفل فيديو الدورة المتعلق بالسؤال. وبالنسبة لسؤالك، ما هي الفيديوهات التي شاهدتها؟ فإذا كانت مجرد شرح نظري ولا يوجد تطبيق عليه فلا مشكلة أبدًا، حيث يجب فهم الأمور النظرية لتنفيذ الأمور العملية على دراية وعلم وليس كتابة أكواد أو تنفيذ خطوات تم حفظها فقط. ويمكنك الاستزادة من خلال البحث عن الموضوع الذي تعلمته أو الأمور التي بحاجة إلى توضيح أو المزيد من الشرح بالنسبة لك، وأيضًا ربما تجد تطبيقات عملية على ما تعلمته.
- 7 اجابة
-
- 1
-
-
الإجابة التي تم ذكرها من قبل قيس مشكورًا، تحتوي على فكرة جيدة، وهي استخدام دالة clean() الموجودة في ال model الخاص بالمنتج للتحقق من أن الحد الأدنى المحدد للكمية التي يمكن طلبها لهذا المنتج قد تم الالتزام به. ولكن، هناك تحدي يحدث عند استخدام هذه الطريقة، وهو أن الخطأ لن يتم عرضه على الحقل المرتبط بالكمية، وإنما سيتم عرضه على النموذج بشكل عام. لذلك، يمكن استخدام مجموعة العناصر الإضافية (widgets) في Django، وتحويل الحقل المرتبط بالكمية إلى نوع IntegerField والتحقق من الحد الأدنى لهذا الحقل في العنصر الإضافي clean() الخاص به. فيما يلي مثال محدث للطريقة السابقة: from django import forms from django.db import models class Product(models.Model): product_number = models.PositiveIntegerField(unique=True) min_count = models.PositiveIntegerField() class ProductForm(forms.ModelForm): class Meta: model = Product fields = '__all__' count = forms.IntegerField(widget=forms.NumberInput(attrs={'min': '0'})) def clean_count(self): count = self.cleaned_data['count'] min_count = Product.objects.get(product_number=self.cleaned_data['product_number']).min_count if count < min_count: raise forms.ValidationError(f'The minimum count for this product is {min_count}.') return count في المثال، يتم استخدام Django form بدلاً من استخدام clean() في ال model، ويتم إنشاء عنصر إضافي (count) لإدخال الكمية، وتحويل الحقل المرتبط بهذا العنصر الإضافي إلى IntegerField. ثم التحقق من الحد الأدنى للكمية في clean_count()، وعرض الخطأ على الحقل المرتبط بهذا العنصر الإضافي.
- 11 اجابة
-
- 1
-