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

بلال زيادة

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

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

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

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

    30

كل منشورات العضو بلال زيادة

  1. استخدام نموذج ذكاء اصطناعي لكتابة الأكواد (مثل تاسكات أو مهام برمجية) ممكن يكون أسرع في حالات معينة، لكن فيه أسباب تخلي المبرمجين يفضلوا كتابة الأكواد بنفسهم أحيانًا: الدقة والتخصيص نماذج الذكاء الاصطناعي زي GitHub Copilot أو Grok بتقدر توللد أكواد، لكن ممكن ما تكون دقيقة 100% أو مش مطابقة لاحتياجات المشروع بالظبط. المبرمج بيقدر يتحكم أكتر في تفاصيل الكود لو كتبه بنفسه. فهم الكود لما المبرمج يكتب الكود بنفسه، بيفهم كل سطر وكل منطق وراه. لو الذكاء الاصطناعي كتب الكود، ممكن ياخد وقت أطول عشان المبرمج يراجعه ويفهمه، خاصة لو فيه أخطاء أو تعقيدات. أخطاء محتملة الذكاء الاصطناعي ممكن يوللد كود فيه أخطاء أو مشاكل أداء (performance issues) أو حتى ثغرات أمنية لو ما تمت مراجعته بشكل صحيح وهذا الأمر بيخلي المبرمج يفضل يكتب الكود بنفسه لضمان الجودة. التعلم والتطوير كتابة الكود بنفسك بتساعدك تتعلم وتطور مهاراتك. لو اعتمدت على الذكاء الاصطناعي دائمًا، ممكن مهاراتك البرمجية ما تتحسن بنفس السرعة. حالات معقدة في التاسكات المعقدة أو اللي محتاجة حلول إبداعية، الذكاء الاصطناعي ممكن ما يقدر يقدم حل مثالي زي اللي بيقدر المبرمج يصممه بناءً على خبرته. التكلفة والموارد بعض نماذج الذكاء الاصطناعي بتكون مكلفة (زي الاشتراكات أو استخدام API)، وفي بيئات معينة، المبرمج بيفضل يكتب الكود يدويًا بدل ما يعتمد على أدوات خارجية.
  2. لا, الدورة غير محدد بوقت انتهاء و يمكنك قراءة الاسئلة الشائعة عن الدورات من هنا و ايضا يمكنك زيارة مركز المساعدة من هنا للمزيد من المعلومات.
  3. للبحث داخل جدول قاعدة بيانات مع إظهار حقل واحد فقط بناءً على شرط البحث. سأفترض أنك تستخدم MySQL كقاعدة بيانات. <?php // إعداد الاتصال بقاعدة البيانات $servername = "localhost"; // اسم الخادم $username = "root"; // اسم مستخدم قاعدة البيانات $password = ""; // كلمة المرور $dbname = "test_db"; // اسم قاعدة البيانات // إنشاء الاتصال $conn = new mysqli($servername, $username, $password, $dbname); // التحقق من الاتصال if ($conn->connect_error) { die("فشل الاتصال: " . $conn->connect_error); } // تعيين الترميز لدعم اللغة العربية $conn->set_charset("utf8"); // التحقق من إرسال بيانات البحث if (isset($_POST['search'])) { $search_term = $_POST['search_term']; // استعلام البحث (حماية من SQL Injection باستخدام prepared statements) $sql = "SELECT email FROM users WHERE name LIKE ?"; $stmt = $conn->prepare($sql); $search_term = "%" . $search_term . "%"; // إضافة % للبحث الجزئي $stmt->bind_param("s", $search_term); $stmt->execute(); $result = $stmt->get_result(); // عرض النتائج if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { echo "البريد الإلكتروني: " . $row['email'] . "<br>"; } } else { echo "لا توجد نتائج مطابقة."; } $stmt->close(); } // إغلاق الاتصال $conn->close(); ?> <!-- نموذج HTML لإدخال البحث --> <!DOCTYPE html> <html lang="ar"> <head> <meta charset="UTF-8"> <title>البحث في قاعدة البيانات</title> </head> <body> <h2>البحث في قاعدة البيانات</h2> <form method="POST" action=""> <label for="search_term">أدخل اسم المستخدم للبحث:</label> <input type="text" id="search_term" name="search_term" required> <button type="submit" name="search">بحث</button> </form> </body> </html> هذا الكود كامل بناء على ما تريد.
  4. وعليكم السلام ورحمة الله وبركاته، هناك العديد من منصات العمل الحر المتخصصة في مجال علوم البيانات والذكاء الاصطناعي بخلاف Kaggle، ومنها العديد مثل Upwork منصة عامة للعمل الحر، لكنها تحتوي على قسم كبير مخصص لعلوم البيانات، التعلم الآلي، والذكاء الاصطناعي. يمكنك العثور على مشاريع متنوعة من تحليل البيانات إلى تطوير النماذج. Freelancer مشابهة لـ Upwork، تقدم فرصًا لمشاريع علوم البيانات والذكاء الاصطناعي، مع إمكانية البحث عن مهام محددة مثل تطوير خوارزميات أو معالجة البيانات. Toptal منصة تركز على المحترفين ذوي المهارات العالية. إذا كنت متخصصًا في علوم البيانات أو الذكاء الاصطناعي، يمكنك التقديم للانضمام، وهي تربطك بشركات تبحث عن خبراء. Kolabb منصة مخصصة لمشاريع علوم البيانات والذكاء الاصطناعي، حيث يمكن للشركات نشر تحديات أو مشاريع، والمستقلون يقدمون حلولهم. DataCamp Donates تقدم فرصًا للمستقلين في علوم البيانات للعمل على مشاريع غير ربحية، مما يساعد في بناء السيرة الذاتية. Guru منصة أخرى للعمل الحر تضم فئات مخصصة لتحليل البيانات، التعلم الآلي، والذكاء الاصطناعي. PeoplePerHour تحتوي على مشاريع في مجال البرمجة وعلوم البيانات، وهي مناسبة للمبتدئين والمحترفين على حد سواء.
  5. الكود لا يأخذ في الاعتبار الإجازات السنوية التي تم إدخالها ولكن لم تُوافق عليها بعد (accept = 0). هذا يعني أنه إذا أدخلت إجازة سنوية أولى (مثلًا من 1-1-2023 إلى 1-1-2024) ولم تُوافق عليها بعد، فإن الكود سيسمح بإدخال إجازة ثانية (مثلًا من 1-1-2024 إلى 1-1-2025) لأن: استعلام SUM(days) يحسب فقط الإجازات التي تمت الموافقة عليها (accept = 1) و لا يتم أخذ الإجازات قيد الإجراء (accept = 0) في حساب الرصيد. لمنع قبول إجازة سنوية ثانية إذا كانت هناك إجازة سنوية قيد الإجراء أو إذا كان الرصيد غير كافٍ، يجب تعديل الكود ليشمل الإجازات قيد الإجراء (accept = 0) في حساب الرصيد. يمكن تحقيق ذلك عن طريق تعديل استعلام SUM(days) ليشمل جميع الإجازات (سواء تمت الموافقة عليها أو قيد الإجراء). if ($type == "اجازة سنوية") { $vacation_days = $days; // حساب رصيد الإجازة $start_date_calc = new DateTime($employee['start_date']); $start_date_calc->modify('+1 year'); $start_date_calc = $start_date_calc->format('Y-m-d'); // استرجاع إجمالي الأيام المستخدمة (بما في ذلك الإجازات قيد الإجراء) $stmt = $con->prepare("SELECT SUM(days) as total_days FROM vacations WHERE emp_id = ? AND type = 'اجازة سنوية'"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $result = $stmt->get_result(); $row = $result->fetch_assoc(); $used_days = $row['total_days'] ? $row['total_days'] : 0; $stmt->close(); $vacation_balance = calculateVacationBalance($start_date_calc, $used_days); if ($vacation_balance < $vacation_days) { echo "عذرًا، لا يمكن إنشاء إجازة وذلك لعدم توفر الرصيد الكافي."; exit(); } }
  6. Iterable و Iterator هما مفهومان مرتبطان بالتكرار (iteration)، لكنهما يختلفان في التعريف والاستخدام. إليك الفرق باختصار Iterable (قابل للتكرار) أي كائن يمكن التكرار عليه باستخدام حلقة (مثل for) أو يمكن تمريره إلى دالة مثل iter() للحصول على Iterator. الخصائص يحتوي على الدالة السحرية __iter__() التي تُرجع كائن Iterator. أمثلة: القوائم (list)، المجموعات (set)، السلاسل (str)، القواميس (dict)، وغيرها. لا يحتفظ بحالة التكرار بنفسه. ومثال على ذلك my_list = [1, 2, 3] for item in my_list: # my_list هو Iterable print(item) Iterator (مُكرّر) كائن يمثل تيارًا من البيانات ويتيح استرجاع العناصر واحدًا تلو الآخر باستخدام الدالة next(). الخصائص يحتوي على دالتين سحريتين: __iter__() (تُرجع نفس الكائن) و __next__() (تُرجع العنصر التالي أو تُطلق استثناء StopIteration إذا انتهت البيانات). يحتفظ بحالة التكرار (أي يتذكر أين وصل في التكرار). يتم إنشاؤه عادةً من Iterable باستخدام iter(). ومثال على ذلك my_list = [1, 2, 3] iterator = iter(my_list) # تحويل Iterable إلى Iterator print(next(iterator)) # 1 print(next(iterator)) # 2 print(next(iterator)) # 3 # print(next(iterator)) # سيُطلق استثناء StopIteration
  7. Python Launcher، أداة تأتي مع تثبيت Python على نظام Windows، وتُستخدم لتسهيل تشغيل برامج Python وإدارة إصدارات Python المختلفة المثبتة على جهازك. عندما تثبت Python على Windows ، يتم تثبيت ملف يُسمى py.exe في مجلد تثبيت Python وفي مجلد Scripts أو ضمن PATH النظام. هذا الملف (py.exe) هو Python Launcher، وهو بمثابة "وسيط" يساعدك على تشغيل ملفات Python بسهولة دون الحاجة إلى كتابة المسار الكامل لملف python.exe أو تحديد إصدار Python يدويًا. ويمكنك استخدام الأمر py my_script.py وسيقوم Python Launcher باختيار الإصدار المناسب من Python تلقائيًا وتشغيل الملف.
  8. ليس شرطاً أن تكون صحيحاً فيجب التأكد من حقول جدول قاعدة البيانات كاملاً وانك تضيف البيانات لها صحيحاً و أن اسماء حقول الجدول نفسها في عملية الإدخال.
  9. يجب التأكد من معلومات الاتصال بقاعدة البيانات في مشروعك بالكامل و أيضا يجب عليك مراجعة الأكواد بالكامل و تشغيل الملف و حل أي مشكلة تظهر لك بعد تشغيل الملف.
  10. حسنا هذا هو الكود المحول <?php // دالة calculateVacationBalance function calculateVacationBalance($startDate, $usedDays) { $start = new DateTime($startDate); $now = new DateTime(); $totalAccruedDays = 0; if ($start->format('n') > 6) { $start->setDate($start->format('Y') + 1, 1, 1); } elseif ($start->format('n') < 6 || ($start->format('n') == 6 && $start->format('j') > 1)) { $start->setDate($start->format('Y'), 6, 1); } elseif ($start->format('n') == 1 && $start->format('j') > 1) { $start->setDate($start->format('Y'), 6, 1); } while ($start <= $now) { $totalAccruedDays += 15; $start->modify('+6 months'); } $totalAccruedDays -= $usedDays; return $totalAccruedDays; } // الكود الرئيسي لحفظ الإجازة if ($_SERVER["REQUEST_METHOD"] == "POST") { // افترض أن $con هو اتصال قاعدة البيانات // $con = mysqli_connect("localhost", "username", "password", "database"); // $user_id = 1; // معرف المستخدم الحالي (يجب جلبها من جلسة تسجيل الدخول) // $id = isset($_GET['id']) ? (int)$_GET['id'] : 0; // معرف الموظف من المعاملات أو النموذج // جلب البيانات من النموذج $emp_id = isset($_POST['emp_id']) ? (int)$_POST['emp_id'] : 0; $type = isset($_POST['type']) ? $_POST['type'] : ''; $start_date = isset($_POST['start_date']) ? $_POST['start_date'] : ''; $end_date = isset($_POST['end_date']) ? $_POST['end_date'] : ''; $reason = isset($_POST['reason']) ? $_POST['reason'] : ''; $companion = isset($_POST['person']) ? 1 : 0; $approve = isset($_POST['approve']) ? 1 : 0; $years = isset($_POST['years']) ? $_POST['years'] : ''; $months = isset($_POST['months']) ? $_POST['months'] : ''; $days = isset($_POST['days']) ? (int)$_POST['days'] : 0; $created_at = date('Y-m-d H:i:s'); // التحقق من البيانات المطلوبة $errors = []; if (empty($type)) { $errors[] = 'يجب تحديد نوع الإجازة'; } if (empty($start_date)) { $errors[] = 'يجب إدخال تاريخ بداية الإجازة'; } if (empty($end_date)) { $errors[] = 'يجب إدخال تاريخ المباشرة'; } if (!empty($errors)) { echo implode('<br>', $errors); exit; } // بدء المعاملة mysqli_begin_transaction($con); try { // جلب بيانات الموظف if ($id == 0) { $stmt = $con->prepare("SELECT id, gender, status, start_date FROM people p JOIN employees e ON p.id = e.person_id WHERE p.id = ?"); $stmt->bind_param("i", $emp_id); } else { $stmt = $con->prepare("SELECT id, gender, status, start_date FROM people p JOIN employees e ON p.id = e.person_id WHERE p.id = ?"); $stmt->bind_param("i", $id); $emp_id = $id; } $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows == 0) { throw new Exception("الموظف غير موجود."); } $employee = $result->fetch_assoc(); $stmt->close(); // التحقق من وجود إجازة قيد الإجراء $stmt = $con->prepare("SELECT COUNT(*) FROM vacations WHERE emp_id = ? AND accept = 0"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($count); $stmt->fetch(); $stmt->close(); if ($count > 0) { throw new Exception("عذرًا، هنالك إجازة قيد الإجراء للموظف الحالي، الرجاء التحقق."); } // التحقق من تعبئة المدة if (empty($years) && empty($months) && empty($days)) { throw new Exception("عذرًا، يجب تعبئة إحدى الخانات على الأقل (السنوات، الأشهر، الأيام)."); } // التحقق من إجازة وضع if ($type == "إجازة وضع" && $employee['gender'] == 1 && $employee['status'] == 1) { throw new Exception("عذرًا، لا يمكن إعطاء هذا النوع من الإجازة للموظف المختار."); } // التحقق من إجازة زواج if ($type == "إجازة زواج") { $stmt = $con->prepare("SELECT COUNT(*) FROM vacations WHERE emp_id = ? AND type = ?"); $stmt->bind_param("is", $emp_id, $type); $stmt->execute(); $stmt->bind_result($count); $stmt->fetch(); $stmt->close(); if ($count > 0 && $employee['status'] == 0) { throw new Exception("عذرًا، الموظف المختار قد حصل على إجازة زواج مسبقًا."); } } // معالجة عدد الأيام $vacation_days = null; if ($type == "إجازة سنوية") { $vacation_days = $days; // حساب رصيد الإجازة $start_date_calc = new DateTime($employee['start_date']); $start_date_calc->modify('+1 year'); $start_date_calc = $start_date_calc->format('Y-m-d'); $stmt = $con->prepare("SELECT SUM(days) as total_days FROM vacations WHERE emp_id = ? AND accept = 1"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $result = $stmt->get_result(); $row = $result->fetch_assoc(); $used_days = $row['total_days'] ? $row['total_days'] : 0; $stmt->close(); $vacation_balance = calculateVacationBalance($start_date_calc, $used_days); if ($vacation_balance < $vacation_days) { throw new Exception("عذرًا، لا يمكن إنشاء إجازة وذلك لعدم توفر الرصيد الكافي."); } } elseif ($type == "إجازة بدون مرتب" && !isset($_POST['person'])) { $vacation_days = 365; } // إدخال بيانات الإجازة $stmt = $con->prepare("INSERT INTO vacations (emp_id, type, days, start_date, end_date, reason, companion, accept, created_id, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->bind_param("isisssiiis", $emp_id, $type, $vacation_days, $start_date, $end_date, $reason, $companion, $approve, $user_id, $created_at); if (!$stmt->execute()) { throw new Exception("خطأ أثناء إنشاء الإجازة."); } $vacation_id = $con->insert_id; $stmt->close(); // معالجة الملفات المرفقة if (!empty($_FILES['files']['name'][0])) { $upload_dir = 'public/VACATION/'; if (!file_exists($upload_dir)) { mkdir($upload_dir, 0777, true); } $file_inserts = []; foreach ($_FILES['files']['name'] as $key => $file_name) { if ($_FILES['files']['error'][$key] == UPLOAD_ERR_OK) { $file_ext = pathinfo($file_name, PATHINFO_EXTENSION); $file_name_new = time() . '_' . $key . '.' . $file_ext; $file_path = $upload_dir . $file_name_new; if (move_uploaded_file($_FILES['files']['tmp_name'][$key], $file_path)) { $file_inserts[] = " ('vacation', $vacation_id, '$file_path') "; } } } if (!empty($file_inserts)) { $query = "INSERT INTO files (type, procedure_id, path) VALUES " . implode(',', $file_inserts); if (!$con->query($query)) { throw new Exception("خطأ أثناء حفظ الملفات."); } } } // تسجيل السجل (Log) $log_title = "إضافة إجازة جديدة ($type)"; $log_message = "تمت إضافة إجازة جديدة ($type)"; $stmt = $con->prepare("INSERT INTO logs (user_id, type, emp_id, title, log, created_at) VALUES (?, ?, ?, ?, ?, ?)"); $log_type = 7; $stmt->bind_param("iiisss", $user_id, $log_type, $emp_id, $log_title, $log_message, $created_at); if (!$stmt->execute()) { throw new Exception("خطأ أثناء تسجيل السجل."); } $stmt->close(); // تحديث حالة الموظف إذا كانت إجازة زواج if ($type == "إجازة زواج") { $stmt = $con->prepare("UPDATE employees SET status = 1 WHERE person_id = ?"); $stmt->bind_param("i", $emp_id); if (!$stmt->execute()) { throw new Exception("خطأ أثناء تحديث حالة الموظف."); } $stmt->close(); } // تأكيد المعاملة mysqli_commit($con); // إعادة التوجيه (بديل لـ redirect) header("Location: show_vacation.php?id=$emp_id&success=" . urlencode("تمت إضافة إجازة الموظف بنجاح")); exit; } catch (Exception $e) { // إلغاء المعاملة mysqli_rollback($con); // إعادة التوجيه مع رسالة خطأ header("Location: create_vacation.php?error=" . urlencode($e->getMessage())); exit; } } ?> يمكنك مراجعة الاجابات السابقة لانه قمت بشرح الدوال كاملاً
  11. مرحباً ، يجب إرفاق الكود كامل الذي تحاول ان تقوم بتحويله الى php pure حتى نقوم بشرحه كاملاً مرة واحدة.
  12. هل يمكنك توضيح ما هي المشكلة ؟ لان هذا كود لارافل و ليس PHP Pure.
  13. الدالة تأخذ تاريخ بدء ($startDate) وعدد الأيام المستخدمة ($usedDays) وتحسب رصيد الإجازة المتاح حيث تعديل تاريخ البداية، إذا كان الشهر أكبر من يونيو (> 6)، يتم تعيين تاريخ البداية إلى 1 يناير من السنة التالية و إذا كان الشهر أقل من يونيو أو يساوي يونيو ولكن اليوم أكبر من 1، يتم تعيين تاريخ البداية إلى 1 يونيو من نفس السنة و إذا كان الشهر يناير واليوم أكبر من 1، يتم تعيين تاريخ البداية إلى 1 يونيو من نفس السنة و يتم حساب الأيام المتراكمة، يتم إضافة 15 يوم إجازة كل 6 أشهر (نصف سنوية) طالما أن تاريخ البداية أقل من أو يساوي التاريخ الحالي و يتم تحديث تاريخ البداية بإضافة 6 أشهر في كل تكرار و من ثم يتم طرح عدد الأيام المستخدمة ($usedDays) من إجمالي الأيام المتراكمة ($totalAccruedDays) ثم تقوم بإرجاع رصيد الإجازة النهائي. الكود كامل محول مع الدالة <?php // دالة calculateVacationBalance function calculateVacationBalance($startDate, $usedDays) { $start = new DateTime($startDate); $now = new DateTime(); $totalAccruedDays = 0; if ($start->format('n') > 6) { $start->setDate($start->format('Y') + 1, 1, 1); } elseif ($start->format('n') < 6 || ($start->format('n') == 6 && $start->format('j') > 1)) { $start->setDate($start->format('Y'), 6, 1); } elseif ($start->format('n') == 1 && $start->format('j') > 1) { $start->setDate($start->format('Y'), 6, 1); } while ($start <= $now) { $totalAccruedDays += 15; $start->modify('+6 months'); } $totalAccruedDays -= $usedDays; return $totalAccruedDays; } // الكود الرئيسي if ($_SERVER["REQUEST_METHOD"] == "POST") { // جلب البيانات من النموذج $emp_id = $_POST['emp_id']; $type = $_POST['type']; $start_date = $_POST['start_date']; $end_date = $_POST['end_date']; $reason = $_POST['reason']; $companion = isset($_POST['companion']) ? 1 : 0; $created_at = date('Y-m-d H:i:s'); // الاتصال بقاعدة البيانات (افترض أن $con معرف مسبقًا) // $con = mysqli_connect("localhost", "username", "password", "database"); // بدء المعاملة mysqli_begin_transaction($con); try { // التحقق من وجود الموظف $stmt = $con->prepare("SELECT gender FROM people WHERE id = ?"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $row = $result->fetch_assoc(); $gender = $row['gender']; } else { throw new Exception("الموظف غير موجود."); } // التحقق من إجازة وضع if ($type == "إجازة وضع" && $gender == "ذكر") { throw new Exception("عذرًا، لا يمكن إعطاء هذا النوع من الإجازة للموظف المختار لأنه ذكر."); } // التحقق من إجازة زواج if ($type == "إجازة زواج") { $stmt = $con->prepare("SELECT COUNT(*) FROM vacations WHERE emp_id = ? AND type = ?"); $stmt->bind_param("is", $emp_id, $type); $stmt->execute(); $stmt->bind_result($count); $stmt->fetch(); $stmt->close(); if ($count > 0) { throw new Exception("لديك إجازة زواج مسبقًا، لا يمكنك أخذها مرة أخرى."); } } // التحقق من وجود إجازة قيد الإجراء $stmt = $con->prepare("SELECT COUNT(*) FROM vacations WHERE emp_id = ? AND accept = 0"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($count); $stmt->fetch(); $stmt->close(); if ($count > 0) { throw new Exception("عذرًا، هنالك إجازة قيد الإجراء للموظف الحالي، الرجاء التحقق."); } // التحقق من تعبئة المدة if (empty($_POST['years']) && empty($_POST['months']) && empty($_POST['days'])) { throw new Exception("عذرًا، يجب تعبئة إحدى الخانات على الأقل (السنوات، الأشهر، الأيام)."); } // معالجة إجازة سنوية if ($type == "إجازة سنوية") { $startDate = new DateTime($start_date); $endDate = new DateTime($end_date); $interval = $startDate->diff($endDate); $daysDiff = $interval->days + 1; // عدد أيام الإجازة المطلوبة // جلب تاريخ بدء العمل $stmt = $con->prepare("SELECT start_date FROM employees WHERE person_id = ?"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $row = $result->fetch_assoc(); $emp_start_date = $row['start_date']; $s_date = new DateTime($emp_start_date); $s_date->modify('+1 year'); $s_date = $s_date->format('Y-m-d'); } else { throw new Exception("خطأ: لا يوجد موظف بهذا المعرف."); } // جلب عدد الأيام المستخدمة من الإجازات المقبولة $stmt = $con->prepare("SELECT SUM(days) as total_days FROM vacations WHERE emp_id = ? AND accept = 1"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $result = $stmt->get_result(); $row = $result->fetch_assoc(); $used_days = $row['total_days'] ? $row['total_days'] : 0; // حساب رصيد الإجازة باستخدام calculateVacationBalance $vacation_balance = calculateVacationBalance($s_date, $used_days); // التحقق من كفاية الرصيد if ($vacation_balance < $daysDiff) { throw new Exception("عذرًا، لا يمكن إنشاء إجازة وذلك لعدم توفر الرصيد الكافي."); } // إدخال الإجازة في قاعدة البيانات $stmt = $con->prepare("INSERT INTO vacations (emp_id, type, days, start_date, end_date, reason, companion, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->bind_param("isisssis", $emp_id, $type, $daysDiff, $start_date, $end_date, $reason, $companion, $created_at); if (!$stmt->execute()) { throw new Exception("خطأ أثناء إنشاء الإجازة."); } } // تأكيد المعاملة mysqli_commit($con); echo "تم إنشاء الإجازة بنجاح."; } catch (Exception $e) { // إلغاء المعاملة في حالة الخطأ mysqli_rollback($con); echo "خطأ: " . $e->getMessage(); } // إغلاق الاتصال $stmt->close(); // mysqli_close($con); } ?>
  14. أنه كود لارافل و الكود يتعامل مع رصيد الإجازة السنوية للموظف، ويتحقق مما إذا كان لديه رصيد كافٍ لأخذ الإجازة المطلوبة. يعتمد هذا على دالة calculateVacationBalance التي تحتاج إلى معرفة كيفية عملها. بما أنك لم تقدم الكود الكامل للدالة، سأفترض أنها تحسب رصيد الإجازة بناءً على تاريخ معين (مثل السنة الأولى بعد بدء العمل) وعدد الأيام المستخدمة مسبقًا. الكود المحول // استكمال الكود الخاص بك داخل شرط "اجازة سنوية" if ($type == "اجازة سنوية") { $startDate = new DateTime($start_date); $endDate = new DateTime($end_date); $interval = $startDate->diff($endDate); $daysDiff = $interval->days + 1; // عدد أيام الإجازة المطلوبة // جلب تاريخ بدء العمل للموظف $stmt = $con->prepare("SELECT start_date FROM employees WHERE person_id = ?"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $row = $result->fetch_assoc(); $s_date = new DateTime($row['start_date']); $s_date->modify('+1 year'); // إضافة سنة إلى تاريخ بدء العمل $s_date = $s_date->format('Y-m-d'); } else { echo "خطأ: لا يوجد موظف بهذا المعرف."; exit(); } // التحقق من وجود إجازات سابقة $stmt = $con->prepare("SELECT SUM(days) as total_days FROM vacations WHERE emp_id = ? AND accept = 1"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $result = $stmt->get_result(); $row = $result->fetch_assoc(); $used_days = $row['total_days'] ? $row['total_days'] : 0; // حساب رصيد الإجازة (بديل لـ calculateVacationBalance) $annual_vacation_days = 21; // افتراض: 21 يوم إجازة سنوية $vacation_balance = $annual_vacation_days - $used_days; // التحقق من كفاية الرصيد if ($vacation_balance < $daysDiff) { echo "عذرًا، لا يمكن إنشاء إجازة وذلك لعدم توفر الرصيد الكافي."; exit(); } // إذا كان الرصيد كافيًا، يمكنك متابعة إدخال الإجازة في قاعدة البيانات $stmt = $con->prepare("INSERT INTO vacations (emp_id, type, days, start_date, end_date, reason, companion, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->bind_param("isisssis", $emp_id, $type, $daysDiff, $start_date, $end_date, $reason, $companion, $created_at); if ($stmt->execute()) { echo "تم إنشاء الإجازة بنجاح."; } else { echo "خطأ أثناء إنشاء الإجازة."; } $stmt->close(); } والكود التالي if($emp->vacations) يتحقق مما إذا كان للموظف إجازات مسجلة سابقًا و الكود التالي $vacationBalance = $this->calculateVacationBalance($date, $emp->vacations->where('accept', true)->sum("days")); يقوم بحساب رصيد الأجازة و الكود التالي $vacationBalance = $this->calculateVacationBalance($date, 0); إذا لم يكن هناك إجازات، يتم تمرير 0 كعدد الأيام المستخدمة، و الكود التالي if($vacationBalance < $vac->days) إذا كان رصيد الإجازة أقل من عدد الأيام المطلوبة ($vac->days)، يتم إلغاء العملية (rollback) وإظهار رسالة خطأ.
  15. بما أنك مهتمة بالذكاء الاصطناعي، ابدئي بـ Python لأنها سهلة التعلم، متعددة الاستخدامات، ومستخدمة بكثرة في الذكاء الاصطناعي ، و تحتاجين 2-3 ساعات يوميًا كافية إذا كنتِ مبتدئة، مقسمة كالتالي: 30-45 دقيقة: تعلم نظري (فيديوهات، قراءة). 1-1.5 ساعة: ممارسة عملية (كتابة كود، حل تمارين). 15-30 دقيقة: مراجعة أو مناقشة مع مجتمع (مثل منتديات أو مجموعات دراسية). ركزي على الذكاء الاصطناعي (AI) إذا كنتِ متحمسة له. هذا يساعدك على بناء أساس قوي دون تشتت، بعد إتقان الأساسيات (مثل Python ومكتبات الذكاء الاصطناعي)، يمكنك استكشاف مجالات متعلقة مثل تطوير الويب أو تحليل البيانات إذا لزم الأمر. اتبعي مبادئ الكود النظيف: التسمية الواضحة: استخدمي أسماء متغيرات ودوال واضحة (مثل calculate_sum بدلاً من x). التعليقات: اكتبي تعليقات توضح الهدف من الكود، لكن لا تبالغي. التنسيق: استخدمي تنسيقًا موحدًا (مثل PEP 8 لـ Python) مع مسافات واضحة. تقسيم الكود: قسمي الكود إلى دوال صغيرة تقوم بمهام محددة. إعادة استخدام الكود: تجنبي تكرار الكود باستخدام الدوال أو المكتبات. البرمجة صعبة في البداية، والأخطاء طبيعية. كل خطأ هو فرصة للتعلم. عندما تقومين بإتقان الأساسيات تستطيعين كتابة برامج بسيطة بسهولة (مثل حل مسائل متوسطة على LeetCode)، و فهم المفاهيم المتقدمة مثل الكائنات (OOP)، هياكل البيانات (Arrays، Lists، Dictionaries)، والخوارزميات الأساسية (Sorting، Searching) و تحتاجين إلى إكمال مشاريع عملية مثل بناء مشاريع مثل تطبيقات بسيطة أو نماذج ذكاء اصطناعي أولية و عندما تصلين إلى مستوى من القدرة على حل المشكلات بمفردك أي تستطيعين البحث عن حلول وتصحيح الأخطاء دون مساعدة كبيرة. Python الخيار الأول لأنها سهلة، تدعم مكتبات قوية مثل TensorFlow، PyTorch، Scikit-learn، وتستخدم في معظم تطبيقات الذكاء الاصطناعي. سوف تحتاجين إلى أساسيات الرياضيات (مثل الجبر الخطي الأساسي، الإحصاء، الاحتمالات) لفهم مفاهيم الذكاء الاصطناعي مثل التعلم الآلي. المسارات الأساسية للذكاء الاصطناعي هي كالتالي: التعلم الآلي (Machine Learning): تعلمي نماذج مثل التصنيف (Classification) والانحدار (Regression) باستخدام Scikit-learn. تعلم العميق (Deep Learning): دراسة الشبكات العصبية باستخدام TensorFlow أو PyTorch. معالجة البيانات: تعلمي تحليل وتنظيف البيانات باستخدام Pandas وNumPy. رؤية الحاسوب (Computer Vision) أو معالجة اللغة الطبيعية (NLP): اختاري فرعًا بناءً على اهتمامك (مثل تحليل الصور أو بناء Chatbots).
  16. بناء على تجربة سابقة ، تقوم الشركات بتوظيف اشخاص تحت بند التدريب و غالبا تكون مدة العقد 6 شهور و إذا استطاع الشخص التجاوب مع متطلبات الشركة و فهم الية عمل الشركة ممكن ان تقوم الشركة بتمديد العقد له و غالبا الشركات تعتمد على frameworks خاص بها مبني على اللغات المذكورة اذا استطاع الشخص التكيف مع متطلبات الشركة فلا بأس بذلك.
  17. الرياضيات ليست مجرد ضرورة، بل هي العمود الفقري لتعلّم الذكاء الاصطناعي. مجالات مثل الجبر الخطي (للتعامل مع المصفوفات والمتجهات)، التفاضل والتكامل (لتحسين النماذج مثل التدرج النازل)، الإحصاء والاحتمالات (لتحليل البيانات ونمذجة عدم اليقين)، ونظرية التحسين (لتصميم الخوارزميات) هي أساسية. بدون فهم جيد لهذه المفاهيم، سيكون من الصعب استيعاب كيفية عمل خوارزميات الذكاء الاصطناعي، مثل الشبكات العصبية أو تعلم الآلة. لكن، إذا كنت مبتدئًا، يمكنك البدء بمستوى أساسي من الرياضيات وتطوير مهاراتك تدريجيًا مع التعمق في المجال. هناك أدوات ومكتبات (مثل TensorFlow أو PyTorch) تقلل من الحاجة إلى التعامل المباشر مع الرياضيات المعقدة، لكن فهم الرياضيات يمنحك ميزة كبيرة لتصميم حلول مبتكرة أو فهم الأنظمة بعمق. إذا كنت تسعى للعمل في البحث أو التطوير في الذكاء الاصطناعي، فالرياضيات تصبح حتمية.
  18. مفهوم التأثيرات الجانبية (Side Effects) في البرمجة يعني أي تغيير يحدث خارج نطاق الدالة نفسها أثناء تنفيذها، مثل تعديل متغير عالمي، تغيير حالة كائن، كتابة/قراءة من ملف، أو حتى طباعة شيء على الشاشة، دالة نظيفة (Pure Function) هي دالة: function add(a, b) { return a + b; } والدالة الغير نظيفة let total = 0; function addToTotal(a) { total += a; // تعديل متغير عالمي (تأثير جانبي) return total; } الدوال النظيفة مهمة من حيث سهولة الاختبار بما إنها دايمًا تعطي نفس النتيجة لنفس المدخلات، سهل تختبرها و تعمل على تقليل الأخطاء: لأنها ما بتغير حالة البرنامج بشكل غير متوقع.
  19. يمكنك إنشاء نظام مستأجرين في لارافل بسهولة تامة مع حزمة composer require stancl/tenancy حيث تمكنك هذه الحزمة من إنشاء نظام متكامل لإدارة المستأجرين في لارافل بسهولة تامة حيث توفر لك أكثر من نظام منها، إنشاء يعتمد على حقل فريد في قاعدة البيانات بالنسبة لكل مستأجر باستخدام قاعدة بيانات واحدة أو إنشاء قاعدة بيانات لكل مستأجر حسب النطاق الخاص به مثل إذا كان لديك مستأجر و نطاقه مثلا test.saas-store.com تكون قاعدة البيانات الخاصة بهذا المستأجر حسب /** * Tenant database names are created like this: * prefix + tenant_id + suffix. */ 'prefix' => 'tenant', 'suffix' => '', أي ممكن تكون هكذا tenant_test أو بشكل أخر إذا كان لديك suffix إيضا و بالتالي تمنحك تحكم كاملا في إدارة المستأجرين و قواعد البيانات لهم و يمكنك نشر قاعدة البيانات لجميع المستأجرين من خلال الأمر التالي php artisan tenants:migrate اما بخصوص تثبيت هذه الحزمة فيكون باستخدام الأمر التالي composer require stancl/tenancy ثم الأمر التالي لإنشاء الملفات الازمة لهذه الحزمة php artisan tenancy:install هذا الأمر سينشئ التالي: ملف التهيئة: config/tenancy.php ملفات الهجرة (migrations) لجدولي tenants وdomains ملف مسارات المستأجر: routes/tenant.php مزود الخدمة: app/Providers/TenancyServiceProvider.php
  20. يمكنك إنشاء دالة تحتوي على pd.read_csv() فكرة إنشاء دالة لقراءة ملفات CSV باستخدام pd.read_csv() منطقية، إذا كنت تقرأ عدة ملفات CSV بنفس الطريقة أو إذا كنت تريد تقليل التكرار في الكود و إذا كنت قد تحتاج إلى إعادة استخدام نفس المنطق في أماكن أخرى من المشروع. import pandas as pd def read_csv_file(file_path, encoding='utf-8', delimiter=','): try: df = pd.read_csv(file_path, encoding=encoding, delimiter=delimiter) print(f"Loaded {file_path} successfully!") return df except FileNotFoundError: print(f"Error: File {file_path} not found.") return None except Exception as e: print(f"Error loading {file_path}: {str(e)}") return None
  21. لا يمكنك استخدام الدالة cv2.imshow() مباشرة في Kaggle Notebook لعرض الصور. السبب هو أن cv2.imshow() تعتمد على واجهة رسومية (مثل Qt أو GTK) لفتح نافذة منبثقة تعرض الصورة، وKaggle Notebook يعمل في بيئة خادم (server environment) لا تدعم هذه الواجهات الرسومية. عند محاولة استخدام cv2.imshow() قد يتوقف الكرنل أو يظهر خطأ، يمكنك الاعتماد على matplotlib.pyplot لعرض الصور.
  22. شعورك بأنك نسيت ما تعلمته في HTML وCSS أو أنك تعتمد على النسخ فقط هو أمر طبيعي، خاصة عندما تبدأ بتطبيق عملي مثل بناء موقع شخصي. هذا الشعور غالبًا يأتي من نقص التطبيق العملي المستمر أو عدم الثقة في مهاراتك. لكن لا داعي للقلق! يمكنك التغلب على هذا من خلال خطوات عملية ومنظمة لتحسين مهاراتك واستعادة ثقتك، يمكنك تقسيم المشروع إلى اجزاء لكي تنظم و ترتب افكارك، يمكنك الاستمرار بالتدريب العملي أكثر من مرة.
  23. المشكلة أن مكتبة pisa لا تدعم الخطوط العربية بشكل جيد افتراضيًا، خاصة عند استخدام خطوط Google Fonts مباشرة. بالإضافة إلى ذلك، قد تكون هناك مشكلة في طريقة معالجة اتجاه النص (RTL) أو الترميز و ايضا حاول تنزيل ملفات الخط محليا على جهازك ووضعها في المشروع و استدعائها بهذا الشكل @font-face { font-family: 'Noto Sans Arabic'; src: url('static/fonts/NotoSansArabic-Regular.ttf') format('truetype'); font-weight: normal; font-style: normal; } .font { font-family: 'Noto Sans Arabic', sans-serif; direction: rtl; text-align: right; font-size: 18px; } و اخباري بالنتيجة لو سمحت هل تم اصلاح مشكلة اللغة العربية أو لا.
  24. لقد قمت بالبحث عن هذا الكتاب و هو كتاب مدفوع، ونسخته الرسمية غير متاحة بشكل مجاني بشكل قانوني من المصادر الرسمية مثل الناشر (Pearson) أو مواقع البيع مثل Amazon وBarnes & Noble.
  25. عن دورة الذكاء الاصطناعي هذه النبذة التوضيحية للدورة و يمكنك زيارة صفحة الدورة من هنا و أيضا لاحظ دورة البايثون ليست مشتتة لانها تم تقسيم الدورة إلى أقسام يمكن متابعتها و توضيح الغرض من كل قسم و بالتالي يمكنك فهم بسهولة جداً غرض كل قسم . و يجب أن تكون الدورة شاملة لكل شيء تقريباً ليستطيع الطالب الخروج من الدورة مؤهل بشكل كامل و ليس عنده أي لبس في أي قسم.
×
×
  • أضف...