-
المساهمات
4909 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
61
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو محمد عاطف17
-
الطريقة تعتمد على الكود الخاص بال HTML فإن التلاعب بعناصر ال DOM تعتمد بشكل أساسي على طريقة كتابة ال HTML فالطريقة الثانية تستخدم إن كان العنصر الذي يتم الضغط عليه هو ما نريد ان نقوم بحذف ال class الخاص به . بينما الطريقة الأولى إن لم يكن نفس العنصر الذي تم الضغط عليه
- 5 اجابة
-
- 1
-
-
لأن في الحالة الأولى قد تم تحديد العنصر الذي يحتوي على class يسمى artec1 وبذلك سوف يقوم بحذف ال class بينما في الحالة الثانية فإن العنصر item هو الذي لديه class يسمي btn وهو لا يحتوي على class يسمى artec1
-
هناك اكثر من طريقة أخي . حيث ان القيمة الخاصة بالعنصر من نوع time هى سلسلة نصية وليست من نوع وقت ولذلك فإن التعامل معها مختلف قليلا. القيمة اللتي تعود من العنصر عبارة عن hh:mm وللحصول على قيمة الساعات والدقائق نستخدم الدالة split والتى تقوم بفصل السلسلة النصية إلي مصفوفة العنصر الاول هو الساعات والثانى هو الدقائق ويمكنك جمعهم كيفما تشاء. document.getElementById('time').addEventListener('input',(event)=>{ const time = event.target.value.split(':'); console.log(time); // ['الساعات','الدقائق'] // time[0] توجد بها الساعات // time[1] توجد بها الدقائق // وللعمليات الحسابية تاكد من وضع علامة الجمع قبل المتغير للتحويل الى رقم }) والطريقة الثانية هى إنشاء متغير من نوع تاريخ و هذا المتغير لديه الكثير من الدوال التي تقوم بتسهيل العمل على الوقت document.getElementById('time').addEventListener('input',(event)=>{ const time = event.target.value; var target = new Date("2022-01-01 " + time); // هنا نقوم بكتابة اى تاريخ فقط لانشاء المتغير وقيمته غير مهمة console.log( target.getMinutes(),target.getHours()); // بعد أن قمنا بإنشاء المتغير الخاص بالتاريخ يمكننا استخدام الدوال التالية للحصول على الوقت // getMinutes للحصول على الدقائق الدالة // getHours للحصول على الساعات الدالة })
- 6 اجابة
-
- 1
-
-
وإياكم أخي . موجود لمساعدتك في أى وقت.
-
وعليكم السلام . إن قمت بتنصيب الملفات علي جهازك فإنك لن تحتاج إلي filezilla لأنه يستخدم لمشاركة الملفات بين الخوادم . وبما أن الملفات علي جهازك فأنت تسطيع الوصول إليها دون إستخدام أى برامج . ومن الواضح انك تستخدم برنامج xampp كمضيف لملفاتك فستجد الملفات الخاصة بك في هذا المسار C:\xampp\htdocs أو في المسار الذى قمت بتنصيب البرنامج فيه ثم htdocs .
- 3 اجابة
-
- 1
-
-
يمكنك إستخدام getElementById للحصول علي العنصر . ولإستخدام القيمة المختارة بواسطة العنصر يمكنك إستخدام .value document.getElementById("timeSyart").value ويمكنك إستخدام الأحداث وبهذا تستطيع تنفيذ ما تريد كلما تم إختيار أو تعديل الوقت . document.getElementById("timeSyart").addEventListener("input", (event)=>{ // هنا نقوم بكتابة الكود وسوف يتم تنفيذه كلما تم إختيار الوقت event.target.value // للحصول على قيمة الوقت });
- 6 اجابة
-
- 1
-
-
معنى رسالة الخطأ ان المؤشر الخاص ب ال list خارج نطاق ال list . والخطأ هنا حيث تقوم بإختيار عنصر من roundkeys و هي فارغة يجب أن تقوم باستخدام roundkeys تحتوى على 32 عنصر لتفادى حدوث خطأ .
- 1 جواب
-
- 1
-
-
يمكنك استخدام البرمجيّات الوسيطة (Middleware) في Laravel فلنفترض أن العنوان الخاص بإظهار المعلمين كالتالى Route::get('/teacher/{id}') هنا يمكننا إنشاء و تمرير ال Middleware كالتالى Route::get('/teacher/{id}')->middleware('employee') هنا قمنا بتمرير Middleware يسمى employee وقبل تنفيذ الكود الخاص بهذا العنوان فإن ال Middleware سينفذ أولا. ولإنشاء ال Middleware نستخدم الامر التالى php artisan make:middleware CheckEmployee وسوف يقوم بإنشاء ملف ال Middleware التالى في هذا المجلد app/Http/Middleware <?php namespace App\Http\Middleware; use Closure; class CheckEmployee { public function handle($request, Closure $next) { $user = User::find($request->route('id')); if(!$user) return abort(404); if ($user->shool_id !== Auth::user()->id) { return abort(401); } return $next($request); } } هنا قمنا بإفتراض ان جدول المعلم لديه عمود school_id خاص بالمدرسة التابع لها وقمنا بالتحقق إذا كان هو نفس ال id الخاص بالمدرسة التى تقوم بتسجيل الدخول حاليا وإن لم يكن نفس ال id فسوف نقوم بتحويله الى صفحة غير مخول بالدخول إلي هذه الصفحة . ونفس الامر أيضا مع الإدارة. وهذا المقال يوضح طريقة إنشاء وإستخدام ال Middleware يمكنك الإطلاع عليه Middleware
- 7 اجابة
-
- 1
-
-
الدالة setAttribute تستخدم لإضافة أى صفة خاصة بالعنصر ولا تقتصر علي ال class فقط . فيمكنك إضافة إسم للعنصر أو حتى جعله غير مفعل . el.setAttribute("name", "Any_Name"); el.setAttribute("disabled", ""); وهذه الدالة تقوم بمسح القيمة القديمة للصفة وتوضع القيمة الجديدة فإذا قمنا باستخدام صفة class فسوف تقوم بمسح جيمع ال classes الخاصة بالعنصر واضافة ما تم ارساله لها za.setAttribute("class", "one"); // هنا سوف تقوم بمسح جميع لاصناف ووضع الصنف one فقط إذا الكود السابق سوف يقوم بمسح جميع الاصناف ووضع الصنف one فقط . اما بالنسبة للخاصية classList فهي خاصة بالعنصر للتلاعب بالاصناف وتحتوى على دوال كثيرة تسهل العمل . contslide.classList.add('one') // هنا سوف تقوم بإضافة الصنف onde على باقى الاصناف contslide.classList.remove('one') // هنا سوف تقوم بحذف الصنف فقط contslide.classList.toggle('one') // هنا سوف تقوم بحذف الصنف إذا وجد أو ستقوم بإضافته إذا لم يوجد هنا في أول سطر سوف تقوم بإضافة الصنف one الى قائمة الاصناف وبذلك لن يفقد العنصر الاصناف الخاصة به . إذا فإن الفرق بينهم هو ان setAtrribute ستقوم بحذف باقى الاصناف واضافة الصنف المرسل لها فقط . و classList.add ستقوم بالحفاظ على الاصناف السابقة مع إضافة الصنف الجديد . ولذلك فإن الافضل هو استخدام classList لاحتوائها على اكثر من دالة تقوم بتسهيل العمل وخاصة بالاصناف فقط
-
لمعرفة أين يقع الخطأ فى جزء ال orderBy علينا معرفة كيف يقوم laravel بتحويل هذا الكود الى امر sql. إن laravel يقوم بتنفيذ امرين , للحصول اولا على UserProducts ثم بعد ذلك يقوم بتنفيذ امر اخر للحصول على ال products . لنرى كيف يقوم بتنفيذ ذلك SELECT * FROM `user_products` WHERE `user_id` = 1; SELECT * FROM `products` WHERE `products`.`id` in (1) هنا اولا يقوم بتنفيذ السطر الاول للحصول على userProducts ثم بعد ذلك يأخذ ال id الخاص بال product ثم يقوم بتمريرها للسطر الثانى . ولذلك فإن orderBy ستكون خطأ لانه سيقوم بترتيب السطر الاول عن طريق products.type اللتى لا توجد فى هذه العملية . ولحل تلك المشكلة هناك اكثر من حل وقد اخترت لك اسهل طريقتين . إن كنت تريد ان تقوم بترتيب النتيجة دائما ب product.type فالحل الافضل ان تقوم بالترتيب فى ملف ال model public function products() { return $this->hasMany(Product::class)->orderBy('type'); } وبذلك ستتاكد ان فى حالة استدعاء ال products ستكون مرتبة ب ال type . والطريقة الثانية عن طريق الدمج join UserProducts::join('products',function($join) { $join->on('products.id', '=', 'user_product.product_id') ->where('user_product.user_id', '=', $user->id) ->where('user_product.count', '>', 0); })->orderBy('products.type')->get(); والافضل هنا ان تقوم باستخدام select لتحديد الاعمده التى تريدها حتى لا يحدث خطأ إن كان هناك اعمده لها نفس الاسم فى الجدولين
- 2 اجابة
-
- 1
-
-
forEach تأخذ معامل من نوع دالة عكسية او ما يسمى callback function . والدالة العكسية هى دالة يتم ارسالها كمعامل لدالة اخري تقوم بإستخدامها . لفهم الدالة العكسية يجب علينا ان نفهم كيفية إنشائها وإستخدامها وهذا المثال التالى يوضح هذا . function myCallback(result){ // هنا قمنا بإنشاء دالة عادية ولكن يمكن أستخدامها كدالة عكسية console.log(result); } function sum(num1, num2, callback) { let result = num1 + num2; callback(result); // لاحظ هنا قمنا بإستدعاء الدالة العكسية المرسلة كمعامل } sum(5, 5, myCallback); // لاحظ هنا قمنا بارسال دالة كمعامل ثالث لدالة sum كما هو موضح بالكود قمنا بإنشاء دالة عادية تسمى myCallback تاخذ معامل وتقوم بطباعته . ودالة sum تاخذ ثلاث معاملات الاول والثانى رقم نقوم بجمعهم والثالث هو دالة عكسية نقوم باستدعائها بداخلها. إذا نظرت إلى اخر سطر فى الكود قمنا بارسال رقمين ودالة myCallback و ستجد انه يتم طباعة النتيجة مع اننا لا نقوم بطباعة النتيجة بداخل الدالة sum بل الدالة myCallback هى ما تقوم بالطباعة. وكذلك أيضا forEach ترسل لها دالة وهى تقوم بتنفيذها. لنوضح تقريبا كيفية عملها. forEach(callback){ // some code callback(element,index,array); } وهذا مثال بسيط عن كيفية عمل forEach فهى تقوم باخذ الدالة العكسية المرسلة لها وتقوم ببعض الامور ثم تقوم باستدعائها وما ينفذ هو ما قمت بارساله لها . وتحديد المعامل هو امر قامت بتخصيصيه forEach فاول معامل هو العنصر الحالى فى ال array و ثانى معامل هو ترتيب العنصر فى ال array وثالث معامل هو ال array كامل.
-
كما وضحت اخى فإن new تستخدم لإنشاء كائن و هذا الكائن له خصائص و دوال . ويمكن أيضا إنشاء Date() بدون new ولكن الفرق انه سيوكن من نوع سلاسل نصية . لنرى الفرق بالكود let date1 = new Date(); let date2 = Date(); console.log( date1); // 2022-08-01T09:13:50.481Z وهذا كائن console.log( date2); // Mon Aug 01 2022 09:13:50 GMT+0000 (GMT) وهذا سلسلة نصية console.log(typeof date1); // object هذا من نوع كائن console.log(typeof date2); // string وهذا من نوع سلسلة نصية وكما قلت ان كل كائن لديه خصائص ودوال وبهذا فإن قمنا بإستخدام المتغير المنشأ بإستخدام new نستطيع استخدام الخصائص والدوال الخاصة بهذا الكائن و العكس بالنسبة للمتغير المنشأ بدون new لنرى الفرق فى الكود . // الكائن من نوع وقت لديه دالة تقوم بطباعة البوم let date1 = new Date(); let date2 = Date(); console.log( date1.getDay()); // هنا سوف يقوم بطباعة اليوم console.log( date2.getDay()); // هنا سوف يحدث خطأ لان المتغير من نوع سلسلة نصية وهو لايملك الدوال الخاصة بالكائن Date كما موضح فإن السطر الثالث سوف يقوم بطباعة رقم اليوم. والسطر الرابع سوف يحدث خطأ لان المتغير من نوع سلسلة نصية وهو لايملك الدوال الخاصة بالكائن Date
-
مرحبا أخى . هل تاكدت من إعادة تشغيل الخادم ؟ . حيث أن هذا الخطأ يظهر فقط فى حال إن كان العنوان غير موجود . وبما أنه ظاهر فى الكود المرسل فتأكد من إعادة تشغيل الخادم
- 3 اجابة
-
- 1
-
-
مرحبا أخى . new تستخدم لبناء الكائنات وهى تقوم بارجاع كائن من النوع التالى لها . يمكنك قرائة المقال التالى لفهم طريقة عملها وفيما تستخدم . https://academy.hsoub.com/programming/javascript/الباني-والعامل-new-في-جافاسكربت-r801/
-
const content = document.getElementsByClassName("content")[0]; هذا الجزء من الكود يستخدم للبحث فى جميع عناصر ال DOM الموجودة فى الصفحة و نتيجة تنفيذه هو إعادة كل العناصر التى تمتلك class يسمى content. const content = eo.target.parentElement.parentElement.getElementsByClassName( "content" )[0]; على العكس فإن هذا الكود يستخدم للبحث عن العناصر الابناء فى هذا العنصر فقط . توضيح : 1- eo.target هذا الجزء يستخدم للحصول على العنصر نفسه الذى هو item الذى بدوره هو ..plus . 2- parentElement.parentElement. يستخدم للحصول على العنصر الاب للعنصر item وهنا استخدمت مرتان للحصول على الجد للعنصر item الذي هو q1 او q2 3- getElementsByClassName("content")[0] وهذا الجزء هو للحصول على الابناء للعنصر q1 او q2 والتى تحمل class يسمى content وهذا هو الحل الافضل لاننا نبحث عن العنصر contetn الابن الخاص بالسؤال
- 2 اجابة
-
- 1
-
-
مرحبا أخى . الخطأ هنا . عندما تقوم بتسجيل دخول المستخدم تضع فى الجلسة كلمة user while($ret=mysqli_fetch_assoc($ret)){ session_start(); ******** $_SESSION['user']=$user; // كلمة user موجوده فى الجلسة echo'<script>window.location. href="welcome.php.php"</script>'; } وعند استدعائها في الصفحة الاخرى تسختدم user1 مع ان الموجود فى الجلسة هو user فقط وبمجرد حذف رقم 1 ستعمل معك إن شاء الله $username=$_SESSION['user1']; // الخطأ هنا $username=$_SESSION['user']; // الحل الصحيح
-
وعليكم السلام اخى . الأمر COUNT(*) يستخدم لمعرفة عدد البيانات الموجودة فى الجدول . إذا كنت تريد مثلا معرفة عدد جميع البيانات الموجودة فى الجدول تستخدم SELECT COUNT(*) from `table` وإذا كنت تريد معرفة عدد بيانات محددة مثلا معرفة عدد المستخدمين اسمائهم مثلا أحمد نستخدم . SELECT COUNT(*) from `table` WHERE name = "أحمد"
- 1 جواب
-
- 1
-
-
مرحبا . الخطا فى هذا الجزء من الكود const allplus =document.querySelectorAll(".plus") // allplus.forEach(item => { item.addEventListener("click", (eo) => { const content=document.getElementsByClassName("content")[0] // الخطا هنا حيث يقوم دائما باخذ العنصر الاول من ال array content.classList.toggle("mm") }) }); ولحل المشكلة نريد كل عنصر ان ياخد ال class الخاص بالابن له ويمكننا تنفيذه كالتالى . const allplus =document.querySelectorAll(".plus") // allplus.forEach((item,index) => { item.addEventListener("click", (eo) => { const content=document.getElementsByClassName("content")[index] // هنا قمنا باستخدام متغير لمكان العنصر وبذلك كل عنصر يستخدم الchild الخاص به content.classList.toggle("mm") }) });
-
مرحبا أخي . المتغيرات من نوع let و var متشابهان ولكن طريقة العمل هي المختلفه. حيث ان let تم تعريفها فى ES6 (2015). والفروق بينهم كالتالي . 1- إعادة التعريف . إذا قمت بإعادة تعريف المتغير من نوع let وسوف يقوم الكود بإظهار خطأ حيث لا يمكن تعريف المتغير فى المجال . var somthing = "somthing"; var somthing = "somthing2"; // هنا سوف يتم استبدال قيمة المتغير let somthing = "somthing"; let somthing = "somthing2"; // هنا سوف يعطيك الكود خطأ باه لايمكن إعادة تعريف المتغير 2- الرفع او Hoisting. ان لغة جافا سكريبت تتميز بخاصية الرفع دوانا عن معظم لغات البرمجة . تعريف الخاصية هو انه قبل ان يتم بدأ الكود فإن لغة الجافاسكريبت تقوم باعريف جميع المتغيرات عدا المتغيرات من نوع let والدوال فى بداية الكود وليس فى مكان كتابة الكود . console.log(somthing); // undefined هنا سوف يتم طباعة // أى اكواد أخرى var somthing = "somthing"; console.log(somthing); // somthing هنا سوف يتم طباعة ما بداخل المتغير console.log(somthing); // ReferenceError هنا سوف يتم طباعة حيث لايمكنك استخادم المتغير من نوع let قبل تعريفه // أى اكواد أخرى var let = "somthing"; console.log(somthing); // somthing هنا سوف يتم طباعة ما بداخل المتغير 3- المجال . حيث ان المتغيرات من نوع let تنتهى بمجرد انتهاء المجال الخاص بها ولا يمكن استخدامها خارج مجالها بعكس المتغيرات من نوع var var somthing = "somthing"; let somthing2 = "somthing2"; console.log(somthing, somthing2); // somthing somthing2 هنا سوف يتم طباعة المتغيران لانهم فى نفس المجال الخاص بهم { var somthing3 = "somthing3" let somthing4 = "somthing4"; console.log(somthing3, somthing4); // somthing3 somthing4 هنا ايضا سوف يتم طباعة المتغيرات لانهم فى نفس المجال الخاص يهم ولكن نلاحظ ان المتغير من نوع let سوف يتم تدميره بمجرد انتهاء مجاله } console.log(somthing3); // somthing3 هنا سوف يتم طباعةالمتغير من نوع let console.log(somthing4); // ReferenceError هنا سوف يظهر خطأ لان المتغير من نوع let قد تم تدميره بمجرد الانتهاء من المجال الخاص به
-
السلام عليكم . هل من الممكن أن تقومى بكتابة هذا الامر وإرسال صورة لما سوف يظهر لكى . php -v و ارسال ملف php.ini الموجود فى xampp/php
- 3 اجابة
-
- 1
-
-
مرحبا أخى. يمكنك إستخدام ال validation بهذه الطريقة { 'api_key' => 'required|integer', 'tags' => 'required', 'posts' => 'required|array|min:1|max:20', 'posts.title' => 'required|string|min:5', 'posts.content' => "required|string|min:5', } حيث يمكنك التحقق من أى عنصر متداخل عن طريق وضعه بعد ال parent مسبوقا بنقطة.
- 2 اجابة
-
- 2
-
-
مرحبا أخى . هل هذا الخطأ يظهر لك عندما تقوم بإرسال ال form من هذه الصفحة ؟ ام يظهر عندما تقوم بعمل تحويل من صفحة إلى صفحة ؟ -إن كان هذا ما يحدث هل يمكنك إرسال هذا الملف- الكود لا يوجد به خطأ ان كنت تقوم بإرسال ال form من هذه الصفحة . معنى رسائل التحذير الظاهرة هي أن المتغير $_POST لا توجد لديه هذه القيم $_POST['name']; $_POST['price']; $_POST['details']; $_FILES['image']; وهذا سوف يحدث فقط ان كنت تقوم بإرسال form اخرى لهذا الملف . إن كان هذا فعلا ما يحدث فقم بإرسال ال form الاخرى لنفس الملف وإذا كنت تريد أن تقوم بعمل redirect لهذه الصفحة تستطيع ان تستخدم هذا الأمر header('Location: '.'/your_file_location'); // هنا تقوم بوضع مسار الملف
- 1 جواب
-
- 1
-
-
كل ال models الخاصة بلارافيل تستطيع أن تقوم بتعديل شكل البيانات اللتى تريدها أن تعود من قاعدة البيانات عن طريق اضافة هذا المتغير فى ال model protected $casts = [ 'any_variable' => 'date:Y-m-d', 'another_variable' => 'datetime:Y-m-d H:00', ] ويمكنك معرفة المزيد من طرق ال casting عن طريق laravel documentation https://laravel.com/docs/8.x/eloquent-mutators#date-casting
- 1 جواب
-
- 1
-