-
المساهمات
5232 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
52
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Adnane Kadri
-
لنقم بإستكمال عملك و تحقيق ذات الغرض , ثم سنأتي لطريقة الأجاكس بعد ذلك : في ملف العرض display_items.php : نقوم بإستعمال حقل من نوع radio بدلا عن checkbox كونه عملي أكثر , و لنتأكد من إعطاء كامل الحقول ذات الإسم و ذلك كالتالي : <?php foreach ($category_data->result_array() as $row) { ?> <label> <input name="filter_cats" type="radio" value="<?php echo $row['category_name'];?>"> <?php echo $row['category_name']?> </label> <?php } ?> لنتأكد من إعطاء كامل أسطر الجدول صنفا عاما كالتالي : item و صنفا اخر خاصا كالتالي : item_[category_name] ليصبح : foreach($result as $row): echo "<tr class='item item_".$row->category_name."'>"; ثم لنقم بإضافة التفاعلية التالية : $("input[type='radio']").change(function() { if(this.checked) { let target = $(this).val(); $('.item').hide(); $('.item_' + target).show(); } }); يلخص هذا الطريقة الأولى . هاته الطريقة عملية و بسيطة في حالة محدودية المنتجات لديك , و لكن إن كنت مضطرا لإستعمال AJAX فسنلجأ لإستعمال الطريقة الثانية : و لكن هاته الطريقة أيضا غير عملية كونك لا تقوم بفصل جدول العناصر عن جدول الفئات , بل تضيف عمودا خاصا لإسم الفئة داخل جدول العناصر , و في هاته الحالة لن يمكنك الإستعلام من جدول منفصل بل من ذات الجدول الذي تريد جلب العناصر منه . و يجعل هذا العملية غير منطقية و غير عملية . فلا يوجد داع من : الإستعلام مرة أولى من الجدول tbl_items لقراءة أسماء الفئات . الإستعلام مرة ثانية من الجدول tbl_items لقراءة المنتجات الحاملة لإسم فئة معين . و بالتالي فإن أفضل حل هو ما تم إعتماده في الطريقة الأولى . خصوصا و أن المسار , ملف العرض و المتحكم يخصون المنتجات .
- 6 اجابة
-
- 1
-
-
في الغالب و بشكل عام , يعني هذا الخطأ أنه قد تم حظر عنوان IP الذي تتصل منه بواسطة إحدى خدمات الأمان للخادم الذي ترسل إليه طلبات الـ Http . و ليس المقصود بحظر عنوان IP الخاص بك حظره هو ذاته بالضرورة , بل قد يكون الحظر شمل عناوين ذات البلد مثلا . مثال : إذا كنت تتصل من شبكة مشتركة ، تكون فيها البنية التحتية للإنترنت أقل تطورًا ، فإن عناوين IP نادرة (من المرجح أن يشاركها الكثير من الأشخاص) ، فهذا يمكن أن يزيد من احتمالية رؤية هذا الخطأ . في هاته الحالة ، كإقتراح على ما يمكنك فعله هو محاولة الاتصال من شبكة أخرى مؤقتًا . أما و بشكل خاص , فستحتاج البحث في توثيق الواجهة البرمجية التي تتصل بها على دلالية كود الخطأ 1003 و إصلاح المشكلة بعد تحديدها , فقد يحتمل مثلا أن بيانات المصادقة التي تستعملها قد استهلكت .
- 3 اجابة
-
- 1
-
-
في الحقيقة , هذا ما تم وصفه في التعليق السابق . و قد تم تجزئته إلى إحتمالين : في حالة محدودية العناصر المنتمية للفئات : أين تم تفضيل عرض كل المحتوى بالصفحة و التلاعب بإظهاره و إخفاءه بحسب التفاعل مع مربعات التحقق . في حالة كثرتها : أين تم تأويل العمل بالأجاكس لعرض الفئات فقط , و إرسال طلبات الأجاكس عند التحقق من المربعات لجلب بيانات معينة تخص الفئة المحدد مربع تحققها . لاحظ تماثل منطق المثالين مع مطلوبك تماما : المثال 1 : المثال 2 : لا يقترح أن يكون طلب الأجاكس من النوع POST , فهذا الأخير موجود خصيصا لإرسال بيانات من الواجهة الأمامية للخلفية على عكس GET الذي هو موجود لعكسها . أظن أن أفضل و أقصر طريق هي ما تم وصفها سابقا , فنحن لا نقوم بإرسال أية بيانات للواجهة الخلفية . على عكس ذلك نحن نقوم بتمرير ما نحتاج في عنوان الـ URL الخاص بنا مباشرة . وهو نفس المتبع في الفيديو , على أن صاحب الفيديو يعتمد تخصيص الفلتر و إضافة مميزات أخرى بجانب غرضه الأساسي , و بالطبع يمكنك ذلك فالعملية عملية تطوير إبتداءا من فكرة صغيرة و بدائية.
- 6 اجابة
-
- 1
-
-
في الحقيقة , في لينكس لا يوجد ما يعرف بـ "إسم روت " . فـ kali@kali مثلا يجزء إلى : kali ما قابل الرمز @ معبرة عن اسم المستخدم الحالي , في الغالب يكون هو ذاته المستخدم الـ root . و : kali الأخرى ما بعد الرمز @ معبرة عن اسم المستضيف أو الجهاز . على سبيل المثال : ali@ali-lap يمكنك طباعة كل منهما بإستعمال الأمرين التاليين : whoami و : hostname تغيير إسم المستضيف يمكنك ذلك عن طريق التعديل على ملفي hostname و hosts داخل /etc بإرفاق إسم المستضيف الجديد مكان الإسم القديم . يمكنك إستعمال الأمرين التاليين لتعديلهما : sudo nano /etc/hostname sudo nano /etc/hosts سنحتاج بعد ذلك إعادة تشغيل النظام لإلتقاط هاته التحديثات : sudo reboot تغيير اسم المستخدم يتطلب هذا التأكد من أن المستخدم المراد تغيير اسمه غير مسجل للدخول حاليا , أي أن مستخدما اخر هو من يمكنه تغييره و ليس هو ذاته . و عليه سيمكنك إتباع أحد الحلين : إنشاء المستخدم باسم ali , حذف kali تماما . إنشاء مستخدم مؤقت و ليكن tempUser , و تسجيل الخروج كـ kali و تسجيله كـ tempUser . و أخيرا تغيير اسم مستخدم kali و حذف tempUser . يمكنك تغيير إسم مستخدم عن طريق مستخدم اخر كالتالي : sudo usermod -l new-name old-name كما يمكنك حذف مستخدم كالتالي : sudo userdel user-name و أخيرا إضافة مستخدم عن طريق الأمر : sudo useradd user-name كما يمكنك التبديل بين الجلسات عن طريق طباعة الأمر : su -targetUsername و طباعة كلمة المرور في حالة ظهورها .
-
و عليكم السلام و رحمة الله . أظن أنك تقصد فلترة بيانات معينة بحسب الفئات التي تنتمي لها إعتبارا لهاته العلاقة . مثال : فلترة المنتجات بحسب الفئات التي تنتمي لها . لنقم بتجزئة الأمر إلى فكرتين : بيانات محدودة في حالة محدودية الفئات لديك يمكنك الإستغناء عن AJAX تماما و طباعة كامل الفئات مع كامل البيانات , و التعامل مع إخفاء بيانات الفئة الواحدة عن طريق أصناف CSS عادية و بعض الجافاسكربت . سيمكن ذلك كالتالي : في ملف المتحكم : جلب كامل الفئات و تمريرها إلى ملف العرض . public function index(){ $query = $this->db->get('categories'); $data['categories'] = $query->result(); $query = $this->db->get('products'); $data['products'] = $query->result(); $this->load->view('categories_view' ,$data); } في ملف العرض , عرض كامل الفئات : <?php foreach($categories as $c):?> <div> <label for="cat_<?php echo $c['id']; ?>"> <?php echo $c['name']; ?> </label> <input type="checkbox" id="cat_<?php echo $c['id']; ?>" value="<?php echo $c['id']; ?>"> </div> <?php endforeach;?> مرفقة بكامل المنتجات : <?php foreach($products as $p):?> <div class="product c_<?php echo $p['category_id']; ?>"> <h2><?php echo $p['name']; ?></h2> </div> <?php endforeach;?> ثم لنقم بإضافة التفاعلية التي تقوم بعمل التالي : عند تحديد أي مربع تحقق يتم تخزين قيمته و تحديدها . يتم إخفاء كامل المنتجات . يتم إظهار تلك التي تمتلك صنفا كالتالي : [c_[category_id . مثال عملي : عند تحديد مربع تحقق الفئة بالعنوان "ملابس رجال" يتم تخزين القيمة 5 و تحديدها . يتم إخفاء كامل المنتجات . يتم إظهار تلك التي تمتلك صنفا كالتالي : c_5 . ستفي الشيفرة التالية بذات الغرض : $("input[type='checkbox']").change(function() { if(this.checked) { let target_id = $(this).val(); $('product_container').hide(); $('c_' + target_id).show(); } }); بيانات غير محدودة سنضطر في هذا إلى إخفاء كامل العناصر (المنتجات مثلا) , و إظهار كامل الفئات : لنقم بتغيير محتوى ملف المتحكم كالتالي : public function index(){ $query = $this->db->get('categories'); $data['categories'] = $query->result(); $this->load->view('categories_view' ,$data); } public function get_products_of_category(){ $c_id = $this->input->get('category_id'); $query = $this->db->get('products')->where('category_id' ,$c_id); return $query->result(); } على أن يحتوي ملف العرض الهيكلية التالية : <?php foreach($categories as $c):?> <div> <label for="cat_<?php echo $c['id']; ?>"> <?php echo $c['name']; ?> </label> <input type="checkbox" id="cat_<?php echo $c['id']; ?>" value="<?php echo $c['id']; ?>"> </div> <?php endforeach;?> <div id="products_container" ></div> سنحتاج الان تعديل التفاعلية لتصبح كالتالي : عند تحديد أي مربع تحقق يتم تخزين قيمته و تحديدها . يتم حذف أي عناصر لمنتجات تظهر . يتم إرفاق طلبية AJAX لجلب بيانات المنتجات إلى عنوان URL مرفق بمعرف الفئة . مثال عملي : عند تحديد مربع تحقق الفئة بالعنوان "ملابس رجال" يتم تخزين القيمة 5 و تحديدها . يتم حذف أي عناصر لمنتجات تظهر و ذلك تجنبا لإضافة أي بيانات لا تهم الفئة الحالية . يتم إرفاق طلبية AJAX لجلب بيانات المنتجات إلى العنوان التالي : https://domain.info/categories/5/products عند نجاح الطلبية , يتم عرض كامل المنتجات التي تم جلبها داخل حاوي المنتجات . يترجمه : $("input[type='checkbox']").change(function() { if(this.checked) { let target_id = $(this).val(); $('#products_container').empty(); $.get("https://domain.info/categories/"+ target_id +"/products", function(data, status){ data.forEach(function(item){ $('#products_container').append('<h2>'+ item['title'] +'</h2>'); }); }); } }); و بالطبع سيجب تعريف المسارات اللازمة في ملف routes.php و إرفاقها بالمتحكمات و التوابع المتعلقة بها . سيمكن تخصيص العملية أكثر و جعلها عملية أكثر , كأن يتم إضافة حاو لكل منتج , و طباعة إسم المنتج بجانب غلافه و تخصيص تصميم هذا الحاو و غيرها من الأفكار ..
- 6 اجابة
-
- 1
-
-
يمكنك ذلك عن طريق تشغيل الأمر التالي مباشرة : passwd root أو : sudo passwd root سيطلب منك طباعة كلمة مرورك القديمة و الجديدة مع تكرار هاته الأخيرة للتأكيد . قم بعد ذلك بتقديم الطلب و ستظهر لك رسالة لطيفة تخبرك بنجاح تحديثها كالتالي : passwd: password updated successfully
- 3 اجابة
-
- 1
-
-
بالضبط , هذا ما تم الإشارة إليه سابقا في : أما عن المقصود بتوثيق طلبات الدفع , فهي تلك المسائلة البسيطة التي يطلب منك فيها اسم المستخدم و كلمة المرور عند تنفيذ الأمر : git push -u origin main ففي حالة فشل هاته المصادقة لن يتم رفع -يستحسن اللفظ دفع- ملفات المشروع إلى غيتهب . يرجى الإنتباه جيدا إلى الخطأ الذي يظهر و التصرف بناء عليه . يمكنك التخلص من المشكلة بإتباع الخطوات التالية : تحديث : يرجى الملاحظة جيدا أنه لا يوجد لديك أي مستودع على الرابط : https://github.com/najah18/cof.git في حين أنه يتوفر و بشكل عادي على : https://github.com/najah18/coffee.git يرجى التأكد جيدا من توفر المستودع على الرابط المضاف أولا . يمكن أن يسبب هذا ذات المشكلة .
-
يحتمل أنك قد قمت بنسيان تنفيذ أحد الأوامر على نحو صحيح , كما أنه يلحظ سلوك مشابه في حالة الخطأ في إضافة رابط المستودع البعيد هلا تأكدت أولا من إصلاحها بتنفيذ الأمر التالي : git remote remove origin git remote add origin https://github.com/najah18/ecommerce.git git push -u origin main كما أنه مهم جدا إضافة اللاحقة git. مثلما ما هو موضح . إذ لم ينجح الأمر يرجى إعادة تنفيذ كافة الأوامر على نحو صحيح , و تتبع أي خطأ يظهر بأية مرحلة . هلا قمت بتنفيذ هاته الأوامر : git init git add . git commit -m "init commit" git push -u origin main و إخباري بأي أخطاء تظهر مع الإشارة إلى المرحلة أو الأمر الذي أظهر نص الخطأ . يحتمل أيضا أنك لم تقومي بتجاوز عملية توثيق طلب الدفع عند تنفيذ الأمر : git push -u origin main مما أظهر خطأ كالتالي مع اخر الأوامر : remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. و هذا لأن طريقة توثيق طلبات الدفع عن طريق كلمة مرور حساب غيتهب قد تم التخلي عنها , و تم إستبدالها بتوكن للوصول يستعمل عند طلب كلمة المرور في توثيق الطلب عوضا عن كلمة سر الحساب . يمكنك إنشاء توكن كالتالي : الذهاب إلى الإعدادات Settings. // // إعدادات المطور Developer Settings . // // توكن وصول شخصي Personal Access Token . الضغط على توليد توكن Generate New Token . ملئ النموذج . الضغط على توليد توكن Generate token . نسخ التوكن الظاهر و الإحتفاظ به , و إستعماله في عملية توثيق الطلب عند تنفيذ الأمر : git push -u origin main
-
هذا ليس خطأ و إنما رسالة تحذير بسيطة يتم إخبارك فيها أنه لا يمكنك محو مجلد , و يحدث هذا لأن بعض عناصر المصفوفتين تحوي سلاسل نصية كالتالي : " " , أي فراغ . يمكنك تجاهلها بكل حال من الأحوال كون الشيفرة قابلة للتنفيذ مرة واحدة . لا تنسى ضبط السطر التالي : $targetImages = array_diff($stored_imgs,$db_imgs); و ذلك وفق ما هو موضح سابقا :
- 12 اجابة
-
- 1
-
-
لاحظ عدم تماثل مخروجي المصفوفتين . فإما هذا : أو العكس : أن يكون مخروج مصفوفة المخزن تحوي اسم المجلد . فنتائج المصفوفة الأولى ممثلة للصور المخزنة stored_imgs لا تماثل نتائج المصفوفة الثانية db_imgs. و لحل المشكلة سنقوم بإضافة السابقة uploads/profile/ إلى كل عناصر مصفوفة عناوين الصور في قواعد البيانات . يمكن ذلك عن طريق الوظيفة preg_filter كالتالي : $prefixedArray = preg_filter('/^/', 'prefix', $targetArray); كما أننا سنحتاج فلترة نتائج كل من المصفوفتين للتخلص من وجود العناصر الفارغة لتجنب التحذيرات و الأخطاء التي تظهر , يمكن ذلك عن طريق الوظيفة array_filter كالتالي : $filteredArray = array_filter($nonFilteredArray); لتصبح الشيفرة كاملة : // تحديد كامل مسارات الصور من قواعد البيانات من الجدول المستهدف و تخزينها في مصفوفة . $res = mysql_query('SELECT img_profile_path from users'); $db_imgs = []; while($row = mysql_fetch_array($res)) { $db_imgs[] = $row['img_profile_path']; } // إضافة سابقة $db_imgs = preg_filter('/^/', 'uploads/profile/', $db_imgs); // تحديد كامل مسارات الصور داخل المجلد المستهدف و تخزينها في مصفوفة . $stored_imgs = glob($targetDirectory . "*.jpg"); // تحديد العناصر الغير متوفرة في كلتا المصفوفتين . $targetImages = array_merge(array_diff($db_imgs, $stored_imgs), array_diff($stored_imgs, $db_imgs)); // فلترة العناصر الفارغة $targetImages = array_filter($targetImages); // حذفها هاته العناصر foreach($targetImages as $image) { unlink($image); } يفترض أن يقوم هذا بحل المشكل . يمكنك دوما تتبع مخروج المصفوفتين عن طريق طباعة كل منهما كل مرة . توثيق الوظيفتين : array_filter preg_filter
- 12 اجابة
-
- 1
-
-
هلا قمت بتنفيذ الشيفرة التالية و إرفاق النتيجة ؟ // تحديد كامل مسارات الصور من قواعد البيانات من الجدول المستهدف و تخزينها في مصفوفة . $res = mysql_query('SELECT img_profile_path from users'); $db_imgs = []; while($row = mysql_fetch_array($res)) { $db_imgs[] = $row['img_profile_path']; } // تحديد كامل مسارات الصور داخل المجلد المستهدف و تخزينها في مصفوفة . $stored_imgs = glob($targetDirectory . "*.jpg"); // تحديد العناصر الغير متوفرة في كلتا المصفوفتين . $targetImages = array_diff($stored_imgs, $db_imgs); echo '<pre>'; print_r($targetImages); echo '</pre>'; echo '<br><br><br><pre>'; print_r($db_imgs); echo '</pre>'; die(); // حذفها هاته العناصر foreach($targetImages as $image) { unlink($image); } سيمكن بهذا تتبع مخروج كل من المصفوفتين قبل تطبيق أية عمليات عليها .
- 12 اجابة
-
- 1
-
-
يعني هذا عدم تماثل بعض النتائج من قاعدة البيانات و الملفات , يحتمل أنك تقوم بتخزين اسم المجلد في قواعد البيانات أيضا . هلا تأكدت من أن الصور تظهر كالتالي في قاعدة البيانات : img1.jpg img2.jpg و ليس كـ : images/profile/img1.jpg images/profile/img2.jpg
- 12 اجابة
-
- 1
-
-
تقوم الشيفرة الموصوفة بحذف كل من : الصور المخزن مساراتها في قواعد البيانات و التي لا تتوفر على مسار فعلي في نظام الملفات. الصور المتوفرة في نظام الملفات و ليس لها توفر في قواعد البيانات . يمكنك استثناء الإحتمال الأول بالتخلص تماما من فكرة مزج مصفوفتي : ناتج فرق المصفوفة الاولى و الثانية . ناتج فرق المصفوفة الثانية و الأولى . وذلك عن طريق السطر المعني ليصبح كالتالي : $targetImages = array_diff($stored_imgs, $db_imgs);
- 12 اجابة
-
- 1
-
-
في الحقيقة نحن عادة لا نقوم بتخزين " الصور " ذاتها في قواعد البيانات بل نقوم بتخزين مسارات هاته الصور , و عوضا عن تخزينها في قواعد البيانات نحن نستخدم نظم التخزين و الملفات لذلك . كما أنه لا ينصح بتخزين الصور في جدول قاعدة البيانات. فهناك عيوب كثيرة جدا لهذا النهج. بحيث يتطلب تخزين بيانات الصورة في الجدول أن يقوم خادم قاعدة البيانات بمعالجة ونقل كميات هائلة من البيانات التي يمكن إنفاقها بشكل أفضل على المعالجة الأنسب لها . و من جانب اخر يمكن لخادم الملفات معالجة ملفات الصور هذه بشكل أفضل . بحيث يؤدي تخزين بيانات الصورة داخل حقل ثنائي إلى ترك هذه البيانات متاحة فقط للتطبيق الذي يقوم بدفق بيانات الصورة الأولية من وإلى هذا الحقل , و الميزة الوحيدة لهذا الأسلوب هي أنه يمكنك تأمين صورك بشكل أفضل لأنه يمكنك استخدام ميزات أمان قاعدة البيانات . طريقة بديلة وأفضل هي تخزين الصور خارج قاعدة البيانات و تخزين رابط فقط إلى ملف الصورة و ليكن تحت حقل اسمه img_path مثلا . بحيث سنحتاج فقط إلى حقل نص في جدول قاعدة البيانات لتخزين هذه المعلومات , كما أننا ستحتاج مزامنة البيانات في حقل الارتباط مع نظام الملفات الخاص بك لكي نتجنب مشاكل مثل التالي : و من السهل جدًا أيضًا استخدام هذه الطريقة لتخزين الصور مع مختلف لغات البرمجة , لأن معظمها تدعم وظائف القراءة من نظمم الملفات و إدارتها .
-
يمكنك جعل العملية ديناميكية و منطقية أكثر كالتالي : يتم حذف الصورة القديمة لكل مستخدم قبل تغيير صورته في حالة ارساله لطلب . فلو كانت شيفرة تحديث صورة مستخدم ما كالتالي : $target_dir = "uploads/profile"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); if(isset($_POST["change_pic"])) { move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file); $sql = "UPDATE users SET image_profile_path = '".$_FILES['fileToUpload']['name']."' WHERE id = '" .$targetUser. "'"; $check = $conn->query($sql); } سيجب إضافة شيفرة الحذف كالتالي : $target_dir = "uploads/profile"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); $oldImgPath = "SELECT image_profile_path from users WHERE id = '".$targetUser."'"; if(isset($_POST["change_pic"])) { move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file); $sql = "UPDATE users SET image_profile_path = '".$_FILES['fileToUpload']['name']."' WHERE id = '" .$targetUser. "'"; $check = $conn->query($sql); if($check){ unlink($oldImgPath); } } و بالطبع يمكنك تخصيص الشيفرة أكثر , سيحل هذا مشكلة الإحتفاظ بالصور في حالة تعديلها . لكن سيبقى مشكل توفر صور لا فائدة منها . و لتفادي هذا المشكل يمكننا إنشاء شيفرة تنفذ مرة واحدة و تحذف بعد ذلك ( one-time excutable code ) , ستتبع الشيفرة المنطق التالي : تحديد كامل مسارات الصور من قواعد البيانات من الجدول المستهدف و تخزينها في مصفوفة . تحديد كامل مسارات الصور داخل المجلد المستهدف و تخزينها في مصفوفة . تحديد العناصر الغير متوفرة في كلتا المصفوفتين . حذفها هاته العناصر . يترجم إلى : // تحديد كامل مسارات الصور من قواعد البيانات من الجدول المستهدف و تخزينها في مصفوفة . $res = mysql_query('SELECT img_profile_path from users'); $db_imgs = []; while($row = mysql_fetch_array($res)) { $db_imgs[] = $row['img_profile_path']; } // تحديد كامل مسارات الصور داخل المجلد المستهدف و تخزينها في مصفوفة . $stored_imgs = glob($targetDirectory . "*.jpg"); // تحديد العناصر الغير متوفرة في كلتا المصفوفتين . $targetImages = array_merge(array_diff($db_imgs, $stored_imgs), array_diff($stored_imgs, $db_imgs)); // حذفها هاته العناصر foreach($targetImages as $image) { unlink($image); } يجب التأكد من تمليك الملف الحاوي لهاته الشيفرة الأذونات اللازمة لذلك , كما أنه يجب حذفها نهائيا بعد تنفيذها .
- 12 اجابة
-
- 1
-
-
يحتمل أن يكون ذلك بسبب عدم تحديث ملفات التطبيق المؤقتة , و ذلك في حالة توفر ملف بإسم home.blade.php في مجلد resources/views . و لذلك يرجى التأكد من توفر الملف المستهدف و إلا فستحتاجين إنشاءه , ثم سيمكنك محوها عن طريق تنفيذ الأمر التالي : php artisan config:clear php artisan cache:clear فمسارات التطبيق المحددة و المخزنة مؤقتا في : storage/framework/config.php قد لا تزال مضبوطة على المسار الموجود على الجهاز القديم .
-
الأمر بالطبع ليس بالبساطة التي يظهر عليها , فلتحقيق ذلك تحتاج التكامل بين الواجهتين الأمامية و الخلفية و القراءة من قواعد البيانات بإستعلامات خاصة . و لكن عموما يمكن تحقيق فكرتك بإتباع التالي : تضمين الهاتشتاغ في رابط تشعبي خاص بصفحة عرض و فلترة الهاتشتاغات في هيكلية صفحة الـ HTML . فلترة نصوص الحقل المستهدف في الجدول المستهدف بحسب الهاتشتاغ الممرر في الرابط التشعبي . عرض النتائج الحاوية لحقول حاملة لذات الهاتشتاغ . مثال عملي في لغة الـ PHP : لنقل أننا نحتاج فلترة التدوينات التي تحتوي الهاشتاغ someHashtag اخرها . تكون الهيكلية لصفحة ما مثلا : <div class="article"> <p>some dummy text some dummy text some dummy text</p> <p>some dummy text some dummy text some dummy text</p> <a href="http://my_domain.dm/path/to/filter_tags?tag=someHashtag"> #someHashtag </a> </div> في صفحة العرض المقدمة من الرابط المعرف في الخاصية href للعنصر a في الهكلية السابقة نحتاج عمل التالي : استخراج الهاشتاغ من الرابط بناء إستعلام قراءة من قواعد البيانات إنطلاقا من المستخرج عرض النتائج يترجم ذلك الشيفرة التالية : if(isset($_GET['tag']) && $_GET['hashtag'] != '') { $tag = trim($_GET['tag']); $result = mysql_query("SELECT * FROM `articles` WHERE article LIKE '%$tag%' ORDER BY `id` DESC"); while($row = mysql_fetch_array($result)) { ?> <div> <?php echo $row['article']; ?> </div> <?php } } ?> كما يمكنك تخصيص العملية و إضافة تفاصيل أخرى .
-
يستعمل الـ CROSS JOIN عادة لإنشاء ,إنطلاقا من جدولين, توليفة مزدوجة من كل صف من الجدول الأول مع كل صف من الجدول الثاني . أي إن كان الجدول الأول يحوي المعلومات : +++++++++++ |STUDENTS | |---------| |AHMED | |OMAR | |YOUNESS | +++++++++++ و الجدول الثاني المعلومات : +++++++++++ |CARS | |---------| |BMW | |MERCEDES | |HONDA | +++++++++++ فإن إستعمال الـ CROSS JOIN الذي سيقوم بتشكيل : سطر لأحمد بمحاذاة سطر BMW . // // // // MERCEDES . // // // // HONDA . و أيضا : سطر لعمر بمحاذاة سطر BMW . // // // // MERCEDES . // // // // HONDA . و أيضا : سطر ليونس بمحاذاة سطر BMW . // // // // MERCEDES . // // // // HONDA . بمعنى أنه سيتبع منطقا كالتالي : / BMW / |OMAR ---- MERCEDES \ \ HONDA / BMW / |AHMED --- MERCEDES \ \ HONDA / BMW / |YOUNESS --- MERCEDES \ \ HONDA لينتج لنا مجموعة النتائج التالية : ++++++++++++++++++++++ |STUDENTS | CARS | |---------|----------| |AHMED |BMW | |AHMED |MERCEDES | |AHMED |HONDA | | | | |OMAR |BMW | |OMAR |MERCEDES | |OMAR |HONDA | | | | |YOUNESS |BMW | |YOUNESS |MERCEDES | |YOUNESS |HONDA | ++++++++++++++++++++++ يشبه هذا جداء مجموع في الجبر , إذ يتم إستعمال النشر المزدوج كطريقة لتحليل عبارة جبرية تتضمن جداء مجموع , مثال : (a + c )( b + d ) = ab + ad + cb + cd سوى أن النتائج في الـ CROSS JOIN يتم نشرها كصفوف بنتيجة الإستعلام . السياق العام لها هو ما كالتالي : SELECT ColumnName_1, ColumnName_2, ColumnName_N FROM [Table_1] CROSS JOIN [Table_2] أو يكفي : SELECT ColumnName_1, ColumnName_2, ColumnName_N FROM [Table_1],[Table_2] و يتم استخدامه بغرض إنشاء مجموعة من كافة مجموعات العناصر بجدول ما بقاعدة البيانات ، مثل تشكيل مجموعات منازل ذات ألوان و أحجام معينة , هذا مع إمكانية التحكم في عناصر هاته المجموعات لونا أو حجما : select size, color from sizes CROSS JOIN colors ++++++++++++++++++++++ |SIZE | COLOR | |---------|----------| |XS |RED | |XS |BLUE | |XS |GREY | | | | |XM |RED | |XM |BLUE | |XM |GREY | | | | |XL |RED | |XL |GREY | |XL |BLUE | ++++++++++++++++++++++ فلو أردنا مثلا إستثناء المنازل الحمراء , فسنتثني اللون الأحمر فقط ليتم إستثناء كل التوليفات المشكلة من حجم X و لون أحمر .. : و هكذا . أو ربما تريد جدولاً يحتوي على صف لكل دقيقة في اليوم ، وتريد استخدامه للتحقق من تنفيذ إجراء ما كل دقيقة ، لذلك يمكنك تجاوز ثلاثة جداول : select hour, minute from hours CROSS JOIN minutes ++++++++++++++++++++++ |HOUR | MINUTE | |---------|----------| |13:00 |00 | |13:00 |01 | |13:00 |02 | |13:00 |03 | . . . . . . |21:00 |55 | |21:00 |56 | |21:00 |57 | |21:00 |58 | . . . . . . ++++++++++++++++++++++ فهو يخلق مجموعة إحتمالات غير مكررة ,بإعتبار أن الأعمدة تحمل قيما فريدة, إبتداءا من مجموعات محدودة من العناصر . يمكن أن يكون هذا عمليا جدا في عمليات مثل إختبار التطبيق أو بذر قواعد البيانات ببيانات تجريبية .
- 1 جواب
-
- 3
-
-
شائع عادة إستعمال مدير قواعد البيانات phpMyadmin لذلك . سواء في المستضيف المحلي أو على الإستضافة المشتركة . لنقم بتلخيص الأمر وفق الخطوات التالية : تصدير قواعد البيانات من المستضيف المحلي بصيغة SQL . يمكنك ذلك عن طريق الدخول إلى phpmyadmin من localhost و التوجه إلى export من قائمة التصفح العلوية التي تظهر بعد الضغط على اسم قواعد البيانات الخاصة بك , ثم اختيار صيغة التصدير و التصدير . (يمكنك تجاهل هاته الخطوة ان كنت تمتلك بالفعل ملف بلاحقة sql خاص بقاعدة البيانات التي لديك ) . الدخول إلى لوحة التحكم الخاصة بإستضافتك . الذهاب إلى phpMyadmin في الجزء الخاص بقواعد البيانات . (المثال من لوحة cPanel) قد تحتاج في بعض لوحات التحكم التي تعطي وصولا محدودا في phpMyadmin إلى إنشاء قاعدة بيانات ومستخدم كامل الصلاحيات . بعد الدخول إلى phpMyadmin تأكد أن تقوم بتحديد قاعدة البيانات المنشأة حديثا , أو أن تقوم بإنشاء واحدة جديدة , ان توفرت صلاحية ذلك , عن طريق الضغط على New أعلى القائمة الجانبية أسفل شعار phpmyAdmin . من قائمة التصفح العلوية نقوم بإختيار تضمين أو Import . قم بالتصفح إلى ملف الـ sql. الذي قمت بتصديره و قم بتحديده و تضمينه بعد الضغط على browse files . ربط موقعك بقواعد البيانات المضافة . يكون هذا عادة بملف إعداد للموقع على شاكلة env. أو init.php_ أو غيرها . قد تحتاج كخطوة إضافية في بعض الأحيان محو الملفات المؤقتة الخاصة بإعداد موقعك , و هذا في حالة إستعماله للملفات المؤقتة بالطبع (مثال : تطبيقات اللارافيل تستعمل ذلك) .
- 2 اجابة
-
- 2
-
-
الـ views أو العروض في SQL هي نوع من الجداول الافتراضية . تحتوي على صفوف وأعمدة مثلها مثل الجداول الحقيقية في SQL . بحيث يمكننا إنشاء العروض عن طريق تحديد حقول معينة من جدول واحد أو أكثر موجود في قاعدة البيانات الخاصة بنا . و لفهمها أكثر لنقم بفهم المثال التالي : ليكن لدينا جدول تفاصيل الطلاب students_details التالي : و ليكن لدينا جدول علامات الطلاب students_marks كالتالي : و لنقل أننا نريد إنشاء طريقة نقوم من خلالها بقراءة علامات الطلبة Mark و عناوينهم Address . واحدة من السبل لذلك هي في إنشاء العروض أو الـ Views .بحيث توفر تلخيصا لذلك في جدول افتراضي و لنقل أنه جدول بإسم students_extra_details . يمكننا إنشاء عرض ما باستخدام التعليمة CREATE VIEW مباشرة .بحيث يمكن إنشاء طريقة عرض إما من جدول واحد أو من عدة جداول بسياق عام كالتالي : CREATE VIEW view_name AS SELECT column1, column2..... FROM table1_name,table2_name , table3_name.... WHERE condition; أي : CREATE VIEW students_extra_details AS SELECT student_details.NAME, student_details.ADDRESS, student_marks.MARKS FROM student_details, student_marks WHERE student_details.NAME = student_marks.NAME; في ذاكرة الـ SQL قد تم إنشاء هاته الـ view كجدول افتراضي , يمكن معاملته كأي جدول SQL اخر . بشكل يبدوا كالتالي : الان لن نحتاج إلا لمعاملتها كجدول عادي تماما , فإستعلام القراءة SELECT مثلا يكون كالتالي : SELECT * FROM students_extra_details; و هكذا .. وراء ما يخفيه هذا الإستعمال المميزات و الفوائد التالية : الأمان و التغليف : بحيث يمكن إتاحة العروض للمستخدمين بينما لا يمكن الوصول إلى الجداول الأساسية بشكل مباشر . مما يعطي المستخدمين البيانات التي يحتاجون إليها فقط ، مع حماية البيانات الأخرى في نفس الجدول , لإستعمالها كشروط أو أغراض أخرى . كما أنها تعتبر طبقة تجريدية أو abstraction layer ، وهي تفعل ما تفعله أي طبقة تجريد جيدة ، بما في ذلك تغليف مخطط قاعدة البيانات وحمايتك من أية عواقب تنتج عن كون هيكلية قواعد البيانات مكشوفة . البساطة و الدلالية: يمكن استخدام العروض لإخفاء الاستعلامات المعقدة مثل إستعلامات الـ JOIN , فما الذي يبدوا أبسط برأيك , إنشاء طريقة عرض شاملة لكامل إستعمالاتك في التطبيق أم كتابة إستعلام JOIN كل مرة تحتاج القراءة من جدولين وفق شرط ما ؟ .. كما يمكن استخدامها لتوفير أسماء مستعارة بسيطة لأسماء الأعمدة لجعلها أكثر قابلية للتذكر أو دلالية ذات مغزى . مساحة تخزين بسيطة : بحيث تأخذ مساحة صغيرة جدًا للتخزين , فقاعدة البيانات تحتوي على تعريف العرض فقط ، وليس نسخة من جميع البيانات التي تقدمها و هذا شيء يقوم بإختصار الكثير . يمكنك القراءة أكثر عن العروض في سلسلة sql للمحترفين - مواضيع متفرقة في SQL .
- 3 اجابة
-
- 2
-
-
أقوم عادة بإستعمال واحد من هاته المواقع : موقع 365psd : بوصول وطريقة تحميل سهلة سريعة . موقع dribbble : القوالب التي يحتويها أحسن جودة ,و تحتاج فيه فتح حساب , و نادرا ما تجد المجاني منها . فأغلب القوالب المتوفرة مدفوعة . موقع freepik : يقوم بدمج الاثنين السابقين معا , إذ أن الوصول و التحميل سهل و سريع , يتوفر على المجاني و المدفوع بنظام فلترة . بجانب : موقعي pngtree و unsplash الغنيين عن التعريف . موقع freepsdfiles .
- 1 جواب
-
- 1
-
-
تعتبر أداة FFmpeg حل متعدد المنصات لتسجيل وتحويل وبث الصوت والفيديو و تعديله , و لذلك قد تتغير طريقة الإستعمال أو سياقها بتغير تفاصيل الواجهة الخلفية لموقعك مثلا . فكثير من الإضافات و الملحقات توفر واجهات سهلة للإستعانة بخدمات المكتبة و أدواتها في كثير من اللغات . فعلى سبيل المثال في php , و بإستعمال مكتبة PHP-FFMpeg/PHP-FFMpeg يتم تعديل حجم فيديو كالتالي : $video->filters()->resize($dimension, $mode, $useStandards); // example : $video->filters()->resize(new FFMpeg\Coordinate\Dimension(320, 240)) كما يمكن إضافة علامة مائية كالتالي : $video ->filters() ->watermark($watermarkPath, [ 'position' => 'relative', 'bottom' => 50, 'right' => 50, ]); يمكنك القراءة أكثر عن توثيق المكتبة هنا . كما تتوفر على أداة command Line كاملة , يمكنك الإطلاع على توثيقها مفصلا هنا .
- 2 اجابة
-
- 1
-
-
لنقم أولا بفهم كل منهما كالتالي : NoSQL هو نظام قواعد بيانات غير علائقي يقوم بتوفير آلية لتخزين واسترجاع البيانات التي تم تصميمها بتقنيات أو طرق غير العلاقات المجدولة المستخدمة في قواعد البيانات العلائقية مثل الشائع استعمالها في SQL . SQL , ترجمة عن Structured Query Language , لغة الاستعلامات البنائية (أو البنيوية) . هي لغة برمجة غير اجرائية تستخدم في مضمونها مفاهيم مثل العلاقات و الفهرسة . فكلاهما لغتان برمجيتان غير إجرائيتين ، أي أنهما يختلفان عن لغات البرمجة المعتادة مثل C ، فهي لغات متخصصة للتعامل والتحكم مع قواعد البيانات المترابطة من خلال التعامل مع تراكيب البيانات وإجراء عمليات إدخال البيانات والحذف والفرز والبحث والتصفية والتعديل و غيره . و نلقم بتلخيص الفروقات التالية بينهما كالتالي : من حيث نموذج تخزين البيانات Data storage model : فـ SQL تعتمد جداول بأعمدة و صفوف ثابتة و مرنة , على عكس NoSql التي تستعمل مفاهيم أخرى مثل مفتاح - قيمة (Key - Value NoSQL Database) , الجدول الكبير (Big table) و غيرها .. من حيث الهدف من إنشاء كل منهما . فـ SQL أنشئت للغرض العام , في حين أن NoSql تستوعب كميات كبيرة من البيانات مع استعلامات بحث بسيطة ،أو مع أنماط استعلام يمكن التنبؤ بها . من حيث السهولة و السرعة : تعتبر NoSql أسهل منطقا و تجريدا و تعاملا و أسرع مقارنة بـ SQL . من حيث التوسع : تتطلب منك معظم قواعد بيانات SQL التوسع عموديًا ( مثل الإضطرار إلى الانتقال إلى خادم أكبر وأكثر تكلفة) عندما تتجاوز متطلبات السعة لخادمك الحالي . على العكس من ذلك ، تسمح لك معظم قواعد بيانات NoSQL بالتوسع أفقيًا ، مما يعني أنه يمكنك إضافة خوادم سلعة أرخص كلما احتجت إلى ذلك . من حيث الإستعمال : تعتبر SQL أفضل بكثير في جانب تنظيم البيانات ,فلو كانت بياناتك منظمة للغاية ، ولا تتغير بنية أو تركيبا بشكل متكرر فـ SQL أفضل بكثير . على عكس NoSql التي يكون استعمالها شائع من حيث التعامل مع البيانات غير المهيكلة أو شبه المنظمة التي لا تتناسب مع النموذج العلائقي الذي تستعمله SQL . من ناحية الأمان : يعتبر الكثير SQL أكثر أمانا , و أفضل حلا عندما يتطلب الأمر درجة عالية من سلامة البيانات وأمانها . يمكنك القراءة أكثر عن شرح الفروقات بين قواعد بيانات SQL ونظيراتها NoSQL . كما قد تحتاج الإطلاع أكثر عن NoSQL مقابل SQL و حالات إستخدام كل واحد منهما .
- 2 اجابة
-
- 1
-