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

Hassan Hedr

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

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

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

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

    38

كل منشورات العضو Hassan Hedr

  1. عندما يعيد التابع prepare قيمة منطقية bool فهذا يعني إما خطأ في الاتصال بقاعدة البيانات أو خطأ في الاستعلام نفسه، حاول إضافة السطر التالي في بداية الملف : mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); والآن بدلًا من إعادة قيمة منطقية عند حدوث خطأ، سيتم رمي الخطأ وفيه رسالة توضح المشكلة، حاول تنفيذ العملية مجددًا وعاين رسالة الخطأ التي ستظهر والتي ستحدد لك المشكلة
  2. يوجد خطأ في نص الاستعلام يجب وجود فراغ قبل اسم الجدول عدل النص ليصبح كالتالي وحاول مجددًا: $sql = "UPDATE Table User SET {$fields} WHERE id=?"; ^
  3. يمكنك بناء نص استعلام تحديث البيانات ديناميكيًا، حيث تتحقق من كل حقل إذا طابق الشروط التي تريدها تضيف له تعليمة تحديث، ويمكنك تمرير الحقول المقبولة ضمن مصفوفة كمعامل أول للتابع execute حتى يتم إدراجها ضمن نص الاستعلام كالتالي: <?php $id =$_POST['id']; $name =$_POST['name']; $ExtraData = $_POST['ExtraData']; $IDColors = $_POST['IDColors']; $validated = []; if($name !== null) $validated['name'] = $name; if($ExtraData !== null) $validated['ExtraData'] = $ExtraData; if($IDColors !== null) $validated['IDColors'] = $IDColors; $fields = implode(',', array_map(fn($field) => $field.'=?', array_keys($validated))); $sql = "UPDATE TableUser SET {$fields} WHERE id=?"; $stmt = $con->prepare($sql); $values = array_values($validated); $values[] = $id $stmt->execute($values);
  4. لا يوجد تسعيرة موحدة الأمر يعتمد على طرفي الاتفاق، صاحب المشروع والمطور أو الجهة المطورة، ولكل منهما عوامل عدة في التسعير، بحسب مثلًا التقنيات المستخدمة والجودة المطلوبة والجهد والوقت الذي يحتاجهما إتمام هذا العمل، وحتى العرض والطلب والقيمة التي تقدمها لصاحب المشروع، أنصحك بقراءة المقال التالي فهو يتطرق للكثير من جوانب وعوامل التسعير:
  5. لا يمكن اختيار الأفضل كل من لغة PHP لها مجالها وطلبها في السوق، ولغة جافاسكربت أيضًا لها مجالاتها وطلبها في عدة نواحي، بما أن لديك خبرة في رياكت وبالتالي خبرة بجافاسكربت فسيكون من الأسهل لك الاشتراك بدورة تطوير التطبيقات باستخدام جافاسكربت، أما إذا كنت تنوي تعلم لغة جديدة أو العمل ضمن إطار عمل محدد مثل لارافل أو ووردبرس فاختر دورة تطوير تطبيقات الويب باستخدام PHP، أنصحك بقراءة المقال التالي ففيه شرح مفصل عن كل المجالات في عالم تطوير الويب واللغات الممكنة وشرح أيضًا عن الدورات التي تقدمها الأكاديمية في ذلك السياق:
  6. قد يكون توقف والرسالة الظاهرة قديمة، تأكدي من تشغيله بالضغط باليمين على ملف HTML الذي تريدين معاينته واختيار "Open with Live Server"
  7. يمكن بناء أي برنامج بأي لغة برمجة تقريبًا، والأمر في الاختيار بين اللغات يعتمد على عدة عوامل، أولها شهرة لغة البرمجة ففي حالتك كل من لغتي ++C و بايثون مشهورتين، الأخرى مزايا لغة البرمجة ضمن نطاق المشكلة التي نحاول حلها، وجوابًا على سؤالك التالي: في تطوير نظم الذكاء الاصطناعي إذا كنت تريد الوصول لنموذج ما والتطوير عليه فلغة بايثون هل لغة عالية المستوى وستساعدك في عملية التطوير كثيرًا، بينما إذا كان لديك نموذج سابق أو محدد وتريد تضمينه ورفع كفاءته وتحسين أداءه على أخفض المستويات فلغة ++C تعتبر أفضل من هذه الناحية لما تتيحه من تحكم في العمليات ضمن الذاكرة والمعالج، ولهذا السبب يختار مطورو الألعاب اللغات منخفضة المستوى لأن الهدف الأساسي رفع الأداء لتلك الألعاب، بسبب العامل الثالث هو توفر المكتبات التي تساعد في حل المشكلة، حيث يتوفر في بايثون الكثير من المكتبات المخصصة لذلك والتي تقريبًا تغطي كل ما ستحتاجه في هذا المجال، وهو سبب اختيار المطورين للعمل عليها لتطوير أنظمة الذكاء الاصطناعي يمكنك التعرف على الفرق بين اللغتين بالتعرف على أساسياتهما والمقارنة بينهما، ويمكنك الاستفادة من السلسلات التالية لتعلم اللغتين: وللتعرف على مجال الذكاء الاصطناعي أنصحك بقراءة كتاب "مدخل إلى الذكاء الاصطناعي":
  8. إذا كنت تقصد بالبرنامج تطبيق للجوال فكما ذكرت الأمر يعتمد على عدة عوامل للتسعير من قبل المطور الذي سيعمل على المشروع، لكن إذا كنت تقصد الكلف الأخرى غير كلفة التطوير فالتطبيقات لا تحتاج لتكاليف خارجية أخرى سوى كلفة استضافتها ضمن متجر التطبيقات، فمثلًا متجر جوجل يحتاج لفتح حساب مطور ويكلف 25 دولار تدفع لمرة واحدة، ويمكن بعدها رفع التطبيق إليه، بينما متجر تطبيقات IOS يكلف حساب المطور 99 دولار سنويًا وستتمكن من رفع تطبيقاتك ونشرها، لكن إذا كان تطبيقك يحتاج للتواصل مع نظام خارجي وهو جزء من المشروع فستضاف كلفة استضافة ذلك المشروع كخادم خلفي Backend مثلًا إلى كلفة التطبيق
  9. هذه رسالة معلومات تدل على تشغيل خادم المعاينة بنجاح وأنه يستمع إلى المنفذ رقم 5500 على جهازك، أي يمكنك الوصول لصفحة المعاينة عن طريق الرابط التالي localhost:5500، ويمكنك إلغاء هذه الرسالة من الظهور مجددًا بالضغط على الزر الأزرق "Don't show again" ولن تظهر الرسالة مرة أخرى.
  10. يقبل التابع primary تمرير اسم مخصص لفهرسة المفتاح المركب الذي تحاول إضافته بدلًا من الاسم المركب الطويل الذي يضيفه laravel افترضيًا، ليصبح تعريف المفتاح كالتالي: $table->primary(['first_column', 'second_column', 'third_column'], 'composite_key'); ^^^^^^^^^^^^^^^
  11. يمكن الاستفادة من extends@ لإنشاء قوالب الصفحات بلغة blade، حيث ننشئ ملف عرض قالب يحوي بداخله عدة أقسام بأسماء معينة باستخدام yield@، ولاحقًا يمكن استخدام ملف القالب هذا لإنشاء عدة ملفات عرض، حيث يسمح ذلك بتقليل التكرار لهيكلية بيانات الصفحات المتشابهة وتوحيدها، فمثلًا يمكن إنشاء ملف قالب أساسي لجميع الصفحات view/layouts/main.blade.php كالتالي: <html> <head> <title>@yield('header')</title> </head> <body> @yield('content') </body> </html> ويمكن استخدامه ضمن أي صفحة كالتالي: @extends('layouts.main') @section('title') صفحة فرعية @endsection @section('content') <h1>أهلًا بكم</h1> @endsection وسينتج عن تفسير الصفحة السابقة محتوى HTML التالي: <html> <head> <title>الصفحة الرئيسية</title> </head> <body> <h1>أهلًا بكم</h1> </body> </html> أما include@ فهي تشبه في عملة include في PHP، حيث تقتصر مهمتها على جلب محتوى ملف العرض المذكور وطباعته مكانها، يفيد ذلك في إنشاء مكونات وإعادة استخدامها في أكثر من مكان دون الحاجة لتكرار كتابة هيكليتها في كل مرة، مثلًا إذا كان لدينا المكون views/components/nav.blade.php كالتالي: <nav>...</nav> وفي أي مكان ضمن أي ملف عرض آخر استخدمنا المكون السابق باستخدام include@ كالتالي: @include('components.nav') <div>..</div> فبعد تفسير الصفحة السابقة سينتج ما يلي: <nav>..</nav> <div>..</div>
  12. راجع صفحة اكتب معنا ففيها شرح عن طريقة تقدمك لكتابة أو ترجمة المقالات لصالح أكاديمية حسوب، حيث تذكر أن الأكاديمية تنشر مشاريع للكتابة والترجمة على منصة مستقل يمكنك متابعة الأعمال المنشورة هناك والتقديم على ما يناسبك منها، أما في حال كان لديك محتوى جاهز وتريد نشره تواصل مع مركز المساعدة واشرح لهم بالتفصيل عما ترغب بتقديمه وسيخبروك عن امكانية ذلك
  13. تدل الخاصية parentElement على العنصر الحاوي للعنصر الذي يملك هذه الخاصية مثال: <div> <-- العنصر الأب <p id="target">..</p> </div> وهو مفيد في حال لدينا مرجع للعنصر الابن وأردنا التعامل مع العنصر الحاوي له كالتالي: const paragraph = document.getElementById('target') paragraph.parentElement // العنصر الأب بحسب التطبيق الذي نعمل عليه والمشكلة التي نحاول تضمينها وحلها قد يكون الوصول لذلك العنصر عن طريق العنصر الابن أسهل طريقة، وإلا يمكن استخدام إحدى الطرق التي ذكرتيها الأمر يعود لك ولطبيعة التطبيق كالتالي: <div id="target"> <p>..</p> </div> <script> const div = document.getElementById('target') // العنصر مباشرةً </script>
  14. يمكنك بطرف الخادم مباشرة تجميع وتنسيق البيانات بالشكل الذي تحتاجه الواجهة لديك، ابدأ بالاستعلام عن البيانات من الجدول كما تفعل حاليًا: $getDATA = $conn->query("SELECT langName, langVar, translation FROM lang "); وخزن القيم من ذلك الاستعلام ضمن مصفوفة مفاتيحها هي قيمة langVar وقيمها هي مصفوفة الترجمات المتوفرة للمصطلح كالتالي: $byLangVar = []; foreach($getDATA as $data) { $byLangVar[$data['langVar']][] = $data; } ستحصل على بنية بيانات مشابهة لما يلي: [ 'ad_cmrcaldsc' => [ ['langVar' => 'ad_cmrcaldsc', 'langName' => 'EN', 'translation' => '..'], ['langVar' => 'ad_cmrcaldsc', 'langName' => 'AR', 'translation' => '..'] ], .. ] يمكنك الآن المرور على هذه المصفوفة بدلًا من بيانات الاستعلام السابقة، ولكل مفتاح تطبع سطرًا واحدًا يعبر عن الترجمات المتعددة لهذا المتغير كالتالي: foreach($byLangVar as $langVar => $translations): ?> <tr> <td><?php echo $langVar ?></td> <?php foreach($translations as $translation): ?> <td><?php echo $translation['translation'] ?></td> <td><?php echo $translation['translation'] ?></td> <?php endforeach ?> </tr> <?php endforeach ?>
  15. يمكن استخدام الواجهة Schema والتابع getColumnListing منها لجلب أسماء كل الأعمدة من جدول ما، ولجلب أعمدة الجدول tasks لديك يمكن استخدامه كالتالي: Schema::getColumnListing('tasks');
  16. تأكد أن محرك تخزين بيانات الجلسة ليس array، حيث هذا المحرك يستخدم ضمن الاختبارات فقط، يمكنك إعداد ذلك ضمن ملف متغيرات البيئة env. كالتالي: SESSION_DRIVER=cookie المحرك cookie سيُخزن ملفات الجلسة ضمن Cookie بطرف المستخدم
  17. لغة البرمجة هي لغة بينك وبين جهاز الحاسوب، تعبر بها عما تريده أن يفعل، سواء بتنفيذ بعض الخطوات، أو التعبير عن ذلك بلغة قريبة من اللغة المحكية، ويوجد الكثير من لغات البرمجة، بدءًا من اللغات منخفضة المستوى مثل C و ++C وصولًا إلى عالية المستوى مثل Python و Java و PHP وغيرها الكثير، وستجد اللغات العالية المستوى أسهل لتعلم البرمجة، يمكنك أن تبدأ بإحدى تلك اللغات، وليس من المهم عدد لغات البرمجة التي تعرفها بل ما يهم هو غرضك الأساسي منها، هل تريد تطوير مواقع إلكتروني أم تطبيقات جوال أم سطح مكتب أم فقط تريد تعلم البرمجة، أنصحك بقراءة المقالين التاليين فهما يشرحان ما هي البرمجة وكيف تبدأ وكيف تختار أول لغة البرمجة لتتعلمها، وما هي مجالات كل لغة برمجة:
  18. يمكنك التواصل مع مركز المساعدة وشرح مشكلتك وما تريد معرفته ووسائل الدفع المتاحة لديك، وسيساعدونك في عملية الشراء والتوجيه لكي تشترك بالدورة، فقط أرسل رسالة توضح بها ما تريد بالتفصيل وسيتم التواصل معك بأقرب وقت، بالتوفيق لك
  19. تأكد إذًا من وجود الدالة update ضمن المتحكم ClassificationController كالتالي: class ClassificationController extends Controller { .. public function update($id) { .. } }
  20. المشكلة في حالة عدم وجود استعلام ضمن search_query أن السطر ضمن else يجلب كل البيانات ورسالة الخطأ تخبرك بعدم وجود الدالة orderBy ضمن مجموعة المنتجات التي تم جلبها، يمكنك حل المشكلة بإنشاء استعلام query بداية ثم تطبيق الشروط عليه فقط في حال كان هناك داعٍ لذلك، وبعدها وفقط في آخر سطر تنفذ الاستعلام باستخدام get لتكون الشيفرة كما يلي: $query = Product::query(); if ($search_query) { $query->where('name', 'LIKE', "%$search_query%"); } $products = $query->orderBy('created_at', 'desc')->with('tags')->get();
  21. يوجد حوالي 48 كلمة محجوزة في جافاسكربت، والعدد سيختلف من إصدار لآخر بحسب المزايا التي يدعمها، بعضها لتعريف الجمل الشرطية، وبعضها للحلقات التكرارية بأنواعها، وأخرى لتعريف الأصناف والواجهات مع ميزاتها، وأخرى تعبر عن قيم كالقيم المنطقية و null، وأخرى للتعامل مع الوحدات البرمجية من تصدير واستيراد، التالي قائمة بتلك الكلمات: await break case catch class const continue debugger default delete do else enum export extends false finally for function if import in instanceof let new null return super switch this throw true try typeof var void while with arguments eval implements interface package private protected public static yield
  22. تأكد من السماح للطريقة PATCH ضمن ملف التوجيه web.php الخاص بك على المسار Classification/update كالتالي: Route::patch('Classification/update', '...'); ^^^^^ سبب المشكلة هو عدم تعريف هذه الطريقة لذلك المسار فلا يمكنك إرسال طلب النموذج إليه
  23. عملية التقطيع أو Hashing هي عملية تحويل قيمة إلى أخرى بنفس الطريقة دومًا، لكن دون إمكانية الرجوع من النتيجة إلى القيمة الأصل، لذا نصفها بأنها باتجاه واحد فقط، يفيد ذلك في التحقق من المساواة بين القيم دون الحاجة لتخزين القيمة الأصلية، فقط تخزين القيمة المقطّعة، ولاحقًا يمكنك التأكد من مطابقة قيمة ما مع القيمة المخزنة لديك بتمريرها على نفس خوارزمية التقطيع ومقارنة تساوي النتيجتين، في حالتك عادة لا نخزن كلمات السر كما هي في قاعدة البيانات لأغراض أمنية، بل نخزن قيمة Hash لها، وعندما يحاول المستخدم تسجيل الدخول نتأكد من صحة كلمة المرور التي أدخلها بتمريرها على نفس خوارزمية التقطيع، وإذا تطابقت النتيجتين فالكلمة صحيحة، أي لا نقارن كلمات السر مباشرة، بل نطابق قيم Hash لها يمكنك الاستفادة من قراءة المقالات التالية:
  24. يمكنك إضافة مسار المجلد الحاوي على ملفات PHP التي تريد إضافتها ضمن ملف الإعداد config\view.php تحديدًا ضمن القيمة paths كالتالي: 'paths' => [ .. public_path('php/scripts') ], بعدها يمكن استخدام include@ ضمن ملفات العرض لديك وذكر مسار الملف النسبي بدءًا من المجلد scripts كالتالي: @include('helpers')
  25. إذا كانت الهدف من التعلم الاستفادة بأكبر قدر ممكن من تخصصك في علوم الحاسب، فلغة ++C تعتبر أقرب لعمل الحاسب وتعلمها يقوي الفهم حول طريقة عمل الحاسب من معالجة وإدارة للذاكرة والقدرة على بناء البرامج منخفضة المستوى كالتعريفات Drivers مثلًا، أما إذا كان الهدف هو تعلم المفاهيم البرمجية فتعتبر لغة جافا أبسط وأعلى مستوى ما يتيح التركيز على المفاهيم البرمجية عالية المستوى مقارنة بالقرب من العتاد Hardware في لغة مثل ++C، أنصحك بقراءة المقال التالي وخصوصًا فقرة "كيفية اختيار لغة البرمجة التي تناسبك" ومشاهدة الفيديو المرفق ضمنها:
×
×
  • أضف...