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

محمد_عاطف

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

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

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

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

    117

كل منشورات العضو محمد_عاطف

  1. هل يمكنك توضيح سؤالك أكثر ؟ هل تقصد وجود خبرة قبل الإشتراك في دورة "تطوير التطبيقات باستخدام لغة Python" ؟ إذا كان كذلك فلا يجب وجود أى خبرة . حيث يتم البدأ في الدورة من الصفر . وستجد في وصف الدورة التالي : لمن لا يمتلك خبرة مسبقة في مجال البرمجة ويريد الدخول في هذا المجال الشيق ويمكنك معرفة أكثر عن الدورة من خلال الرابط التالي : https://academy.hsoub.com/learn/python-application-development/
  2. ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل.
  3. وعليكم السلام ورحمة الله وبركاته. الأمرين كل منهما يقوم بتنزيل مكتبة مختلفة حيث هاتان هما مكتبتان مختلفتان python-nmap و python3-nmap . ولكن المكتبة الشائعة والمستخدمو بكثرة والتي تدعم بايثون 3 هي python-nmap . ويمكنك تنزيلها من الأمر : pip install python-nmap
  4. بالرغم من التطور الكبير في أدوات الذكاء الاصطناعي التي تساعد على كتابة الأكواد فإن كتابة الأكواد لم تصبح من الماضي وأعتقد أن هذا صعب بعض الشئ . ولكن من الممكن أن يتغير دور المبرمج. حيث في الوقت الحالي لم يعد من الضروري كتابة كل سطر بنفسك يدويا حيث من الممكن توليد ذلك بسهولة من خلال أدوات الذكاء الإصطناعي وتوفير الكثير من الوقت في الكتابة . و لكن بالطبع القدرة على قراءة وفهم الكود بعمق أصبحت أكثر أهمية من أي وقت مضى. حيث كما وضحت الذكاء الاصطناعي مثل ChatGPT وCopilot وغيرها يمكنه توليد كود بسرعة لك و لكن أن تقوم بتوجيهه بشكل صحيح يتطلب معرفة جيدة وعميقة بأساسيات البرمجة والمنطق الخاص بها وفهم واضح لما تريد تنفيذه. حيث المبتدأ الذي لا يفهم الكود الذي يولده الذكاء الاصطناعي من الممكن بالطبع أن توجد مشاكل في الكود متعلقة بأخطاء أو منطق خاطئ أو حتى ثغرات وذلك بسبب عدم توضيح كل شئ أو نقص المعلومات التي وضحها للذكاء الإصطناعي أو من الممكن أن يكون أداء الكود سيء. ولهذا بالطبع يجب على المبرمج أو الشخص أن يكون لديه مهارات فهم الأكواد والبنية الخاصة به والمنطق البرمجي وأيضا تحليل الكود المكتوب وتعديله حسب الحاجة. و القدرة هلى صياغة تعليمات واضحة للذكاء الاصطناعي للحصول على ما تريده . وفي النهاية إن إستخدام الذكاء الاصطناعي يجب أن يكون كأداة مساعدة لك وليس بديلا عنك أو عن المبرمج لهذا ينبغي على المبرمج بالطبع أن يتعلم كتابة الكود لكنه لم يعد الهدف الرئيسي حيث الهدف الآن هو القدرة على التفكير البرمجي وتحليل الكود والتفاعل مع الذكاء الإصطناعي.
  5. وعليكم السلام روحمة الله وبركاته. هذا المصطلح جديد.وهو أسلوب برمجة جديد ظهر هذا االعام حيث يشير إلى نظام جديد في تطوير البرمجيات يعتمد بشكل كبير على أدوات الذكاء الاصطناعي والنماذج اللغوية الكبيرة (LLMs) مثل ChatGpt وغيرها. حيث يعتمد هذا النطام على إستخدام اللغة العادية بدلا من كتابة الكود يدويا. أى أنه يمكنك وصف ما تريد أن يفعله البرنامج بالكلمات للذكاء الإصطناعي ويتولى هو توليد الكود اللازم لتحقيق ما تريده.و هذا الأمر يجعل حتى الأشخاص غير المبرمجين من إنشاء تطبيقات أو مواقع أو حتى ألعاب دون الحاجة لفهم عميق للبرمجة. حيث يسرع عملية تطوير البرمجيات بشكل كبير فإنه يمكنك الآن بناء تطبيقات أو أدوات في ساعات بدلا من أسابيع أو حتى شهور. وكل ما عليك فعله هو وصف ما تريد تحقيقه باستخدام اللغة العادية لأدوات الذكاء الإصطناعي ويستخدم الذكاء الاصطناعي هذا الوصف لتوليد الكود المناسب لك وبعدها تقوم بتجربة الكود الناتج وتطلب من الذكاء الاصطناعي إجراء التعديلات اللازمة لك إذا أردت وأخيرا يمكنك نشر وإستخدام هذا الكود كما تريد.
  6. أولا يجب عليك معرفة أن الوقت المستغرق في الدراسة يختلف من شخص إلى أخر . حيث كل مدى وسرعة إستيعابه مختلفة عن الأخر . فمن الممكن الدرس الواحد يأخذ مع شخص ما 30 دقيقة ولكن مع شخص أخر يأخذ أكثر من 60 دقيقة لهذا لا يجب عيلك التركيز على الوقت الذي تستغرقة في الدرس . الأهم بالنسبة لك هو التأكد من فهمك التام للدرس وعدم تخطيه. أما بخصوص سؤالك عن وضت التطبيق على الدروس لكل ساعة . فهذا الأمر أيضا لا يعتمد على الوقت . يبنغي عليك عند الإنتهاء من أى درس خصوصا دروس الأساسيات أن تقوم بالتمرين على هذا الدرس مباشرة وحل تمارين إلى أن تتأكد من فهمك التام له وأنك تستطيع التطبيق عليه دون مشكلة. ومن الممكن أن مشكلة عدم فهم المكتبات أو الأكواد هو بسبب عدم فهم الأساسيات بشكل عام أو عدم التطبيق عليها . وإذا ما واجهتك أى مشكلة يمكنك دوما السؤال أسفل الدرس . ويمكنك قراءة النصائح التالية لكيفية وضع خطة لك وأفضل طريقة لمذاكرة الدورة :
  7. هذا هو الكود كان يوجد مشكلة في إضافة البيانات . إليك الكود بعد التعديل : <?php include('header.php'); error_reporting(0); ini_set('display_errors', 0); function calculateVacationBalance($con, $emp_id, $type, $hire_date, $birth_date, $gender, $to_date) { $to = new DateTime($to_date); $hire = new DateTime($hire_date); $birth = new DateTime($birth_date); $current_year = $to->format('Y'); // حساب سنوات الخدمة $service_years = $to->diff($hire)->y; // حساب العمر $age = $to->diff($birth)->y; // استعلام للحصول على الأيام المستخدمة $stmt = $con->prepare(" SELECT COALESCE(SUM(DATEDIFF(end_date, start_date) + 1), 0) AS used_days FROM vacations WHERE emp_id = ? AND type = ? AND accept = 1 AND YEAR(start_date) = ? "); $stmt->bind_param("iss", $emp_id, $type, $current_year); $stmt->execute(); $stmt->bind_result($used_days); $stmt->fetch(); $stmt->close(); $used_days = $used_days ?: 0; switch ($type) { case 'اجازة سنوية': // 30 يومًا سنويًا، 45 يومًا إذا كان العمر ≥ 50 أو الخدمة ≥ 20 سنة $annual_days = ($age >= 50 || $service_years >= 20) ? 45 : 30; $balance = $annual_days - $used_days; // التأكد من أن الرصيد لا يقل عن 15 يومًا متصلة إذا لم يتم استخدامها return max(0, $balance); case 'اجازة مرضية': // 45 يومًا متصلة أو 60 يومًا متقطعة سنويًا $sick_balance = 60 - $used_days; return max(0, $sick_balance); case 'اجازة الحج': // 20 يومًا مرة واحدة خلال الخدمة $stmt = $con->prepare(" SELECT COUNT(*) AS taken FROM vacations WHERE emp_id = ? AND type = 'اجازة الحج' AND accept = 1 "); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); return $taken > 0 ? 0 : 20; case 'اجازة زواج': // 14 يومًا مرة واحدة خلال الخدمة $stmt = $con->prepare(" SELECT COUNT(*) AS taken FROM vacations WHERE emp_id = ? AND type = 'اجازة زواج' AND accept = 1 "); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); return $taken > 0 ? 0 : 14; case 'اجازة وفاة الزوج': // 130 يومًا (4 أشهر و10 أيام) للإناث فقط، مرة واحدة if ($gender !== 'أنثى') { return 0; } $stmt = $con->prepare(" SELECT COUNT(*) AS taken FROM vacations WHERE emp_id = ? AND type = 'اجازة وفاة الزوج' AND accept = 1 "); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); return $taken > 0 ? 0 : 130; default: return 0; } } ?> <head> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css" rel="stylesheet" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js"></script> <style> .rak { width: 400px; height: 300px; font-size: 14px !important; } </style> </head> <div class="col-md-9 pan1"> <ol class="breadcrumb" style="background-color: #fff;padding-top:8px;padding-bottom:8px;color:#000;font-size:16px;"> <li><a href="vacations.php">الاجازات</a></li> <li class="active">اضافة اجازة جديد</li> </ol> </div> </div> <div class="row"> <div class="col-md-9 pan1"> <div class="panel" style="color:#000;"> <div class="panel-body" style="font-size:14px; padding-left:40px;padding-right:40px;padding-bottom:25px;padding-top:25px;"> <form method="POST" enctype="multipart/form-data"> <div class="row"> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>الموظف</label> <select name="emp_id" id=""> <?php $sql = "SELECT e.person_id, p.name FROM employees e JOIN people p ON e.person_id = p.id;"; $result = $con->query($sql); while ($row = $result->fetch_assoc()) { echo "<option value='{$row['person_id']}'>{$row['name']}</option>"; } ?> </select> </div> </div> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>نوع الاجازة</label> <select name="type" id=""> <option value="اجازة سنوية">اجازة سنوية</option> <option value="اجازة مرضية">اجازة مرضية</option> <option value="اجازة الحج">اجازة الحج</option> <option value="اجازة زواج">اجازة زواج</option> <option value="اجازة وفاة الزوج">اجازة وفاة الزوج</option> </select> </div> </div> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>تاريخ البداية</label> <input name="start_date" type="date" class="form-control"> </div> </div> </div> <div class="row"> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>تاريخ المباشرة</label> <input name="end_date" type="date" class="form-control"> </div> </div> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>سبب الاجازة</label> <input name="reason" type="text" class="form-control" placeholder="ادخل سبب الاجازة"> </div> </div> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <label>الموافقة مسبقا</label> <input name="companion" type="checkbox" class="form-control"> </div> </div> </div> <div class="row"> <div class="col-md-4"> <div class="form-group" style="margin-top:10px;"> <button name="submit" type="submit" class="btn btn-primary">إضافة <span class="ion-android-add"></span></button> <button type="reset" class="btn btn-danger">إلغاء <span class="ion-android-delete"></span></button> </div> </div> </div> </form> <?php 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'); $start = new DateTime($start_date); $end = new DateTime($end_date); $interval = $start->diff($end); $years = $interval->y; $months = $interval->m; $days = $interval->d; $errors = []; if (empty($type)) { $errors[] = 'يجب تحديد نوع الإجازة'; } if (empty($start_date)) { $errors[] = 'يجب إدخال تاريخ بداية الإجازة'; } if (empty($end_date)) { $errors[] = 'يجب إدخال تاريخ المباشرة'; } if ($end <= $start) { $errors[] = 'تاريخ المباشرة يجب أن يكون بعد بداية الإجازة'; } if (!empty($errors)) { echo implode('<br>', $errors); exit; } mysqli_begin_transaction($con); try { $stmt = $con->prepare("SELECT * FROM employees WHERE person_id = ?"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $employee = $stmt->get_result()->fetch_assoc(); $stmt->close(); if (!$employee) { echo "لم يتم العثور على بيانات الموظف"; exit; } // تحقق لا يوجد إجازة قيد الإجراء $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) { echo "عذرًا، هنالك إجازة قيد الإجراء للموظف الحالي، الرجاء التحقق."; exit(); } $stmt = $con->prepare("SELECT * FROM people WHERE id = ?"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $people = $stmt->get_result()->fetch_assoc(); $stmt->close(); if ($type == "اجازة سنوية") { $to_date = $start_date; $hire_date = $employee->start_date; $birth_date = $people->birth_date; $to = new DateTime($to_date); $hire = new DateTime($hire_date); $birth = new DateTime($birth_date); $service_years = $to->diff($hire)->y; $age = $to->diff($birth)->y; // تحديد الحد الأقصى للإجازة السنوية $max_annual_days = ($age >= 50 || $service_years >= 20) ? 45 : 30; // حساب عدد أيام الإجازة المطلوبة $start = new DateTime($start_date); $end = new DateTime($end_date); $interval = $start->diff($end); $requested_days = $interval->days + 1; // التحقق من أن عدد أيام الإجازة المطلوبة لا يتجاوز الحد الأقصى if ($requested_days > $max_annual_days) { echo "لا يمكنك طلب إجازة سنوية تتجاوز " . $max_annual_days . " يومًا. الحد الأقصى المسموح به هو: " . $max_annual_days . " يومًا."; exit; } } if ($type == "اجازة مرضية") { $stmt = $con->prepare("SELECT COALESCE(SUM(DATEDIFF(end_date,start_date)+1),0) FROM vacations WHERE emp_id = ? AND type = 'اجازة مرضية' AND accept = 1 AND YEAR(start_date)=?"); $stmt->bind_param("ii", $emp_id, $current_year); $stmt->execute(); $stmt->bind_result($used); $stmt->fetch(); $stmt->close(); if ($requested_days > 45) { echo 'الحد الأقصى المستمر للإجازة المرضية هو 45 يوم.'; exit; } if (($used + $requested_days) > 60) { $left = 60 - $used; echo "المتبقى من رصيد الإجازة المرضية هذا العام هو $left يوم."; exit; } } if ($type == "اجازة الحج") { $stmt = $con->prepare("SELECT COUNT(*) FROM vacations WHERE emp_id=? AND type='اجازة الحج' AND accept=1"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); if ($taken) { echo 'تمّ الحصول على إجازة الحج من قبل، لا تُمنح إلا مرة واحدة.'; exit; } if ($requested_days > 20) { echo 'الحد الأقصى لإجازة الحج 20 يوم.'; exit; } } if ($type == "اجازة زواج") { $stmt = $con->prepare("SELECT COUNT(*) FROM vacations WHERE emp_id=? AND type='اجازة زواج' AND accept=1"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); if ($taken) { echo 'تمّ الحصول على إجازة زواج سابقًا، لا تُمنح إلا مرة واحدة.'; exit; } if ($requested_days > 14) { echo 'الحد الأقصى لإجازة الزواج هو 14 يوم.'; exit; } } if ($type == "اجازة وفاة الزوج") { if ($gender != 'أنثى') { echo 'إجازة وفاة الزوج خاصة بالإناث فقط.'; exit; } $stmt = $con->prepare("SELECT COUNT(*) FROM vacations WHERE emp_id=? AND type='اجازة وفاة الزوج' AND accept=1"); $stmt->bind_param("i", $emp_id); $stmt->execute(); $stmt->bind_result($taken); $stmt->fetch(); $stmt->close(); if ($taken) { echo 'تمّ الحصول على هذه الإجازة سابقًا، لا تُمنح إلا مرة واحدة.'; exit; } if ($requested_days != 130) { echo 'مدة الإجازة هى 4 أشهر و10 أيام (130 يوم) ويجب إدخال المدة كاملة.'; exit; } } $stmt = $con->prepare("INSERT INTO vacations (emp_id, years, months, days, reason, companion, type, start_date, end_date, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); $start_date_formatted = $start->format('Y-m-d'); $end_date_formatted = $end->format('Y-m-d'); $stmt->bind_param( 'iiiisissss', $emp_id, $years, $months, $requested_days, // الآن أصبحت days هي فارق الأيام $reason, $companion, $type, $start_date_formatted, $end_date_formatted, $created_at ); if ($stmt->execute()) { echo "<script> Swal.fire({ title: 'رسالة تأكيد', text: 'تم إضافة بيانات اجازة موظف بنجاح!', icon: 'success', customClass: 'rak', }); </script>"; echo '<meta http-equiv="refresh" content="2;url=vacations.php" />'; } $stmt->close(); mysqli_commit($con); } catch (Exception $e) { mysqli_rollback($con); echo "خطأ: " . $e->getMessage(); exit; } } ?> </div> </div> </div> </div> <?php include('footer.php'); ?> إذا حدثت مشكلة يرجى إرفاق المشكلة هنا.
  8. لم تقل إسم العمود الذي يتم تخزين البيانات فيها في جدول people و employees . عموما يرجى إضافة الكود التالي قبل سطر 244 مباشرة : $to_date = $start_date; $hire_date = $employee->hire_date; $birth_date = $people->birth_date; وتأكد من إستبدال hire_date و birth_date بأسماء الأعمدة لديك . وهنا لا أقصد المتغيرات بل أقصد في employee و people . ويجب ان يعمل معك .
  9. وعليكم السلام ورحمة الله وبركاته. المنطق في الكود صحيح ولكن الخطأ في المتغيرات والبيانات التي تستخدمها. أولا يجب الإنتباه إلى أن الدالة calculateVacationBalance لديك لا يتم إستخدامها فقط تم تعريفها. أما المشكلة الرئيسية لديك هنا في هذا الجزء . لاحظ في هذا الجزء أنت تستخدم المتغيرات to_date و hire_date و birth_date وتلك المتغيرات لم يتم تعريفهم وإحضارهم من قاعدة البيانات. لهذا يتم حساب جميع تلك التواريخ من التاريخ الحالي . أى أن تاريخ to و تاريخ hire و تاريخ birth يصبحان التاريخ الحالي عند تنفيذ الكود . ولهذا عندما يتم إحتساب الفرق يظهر الفرق دائما ب 0 . أى أنه يحسب عمر الشخص ب 0 و مدة التعيين ب 0 أيضا لهذا لا يعمل المنطق لديك. لذلك يجب عليك إحضار بيانات تاريخ الميلاد و بيانات موعد التعين ووضعها في المتغيرات hire_date و birth_date وسيعمل معك . يرجى توضيح أين يتم تخزين تلك البيانات في قاعدة البيانات لمساعدتك في هذا الأمر.
  10. وعليكم السلام ورحمة الله وبركاته. أولا يجب عليك إنشاء جدول في قاعدة البيانات ليحوي رمز إعادة تعين كلمة المرور . ولنقوم بتسمية الجدول بإسم password_resets وهذا هو إستعلام إنشاء الجدول : CREATE TABLE password_resets ( email VARCHAR(255) NOT NULL, token VARCHAR(255) NOT NULL, expires_at DATETIME NOT NULL ); هنا في جدول نقوم بحفظ البريد الإلكتروني و ال token الخاص بإعادة التعين . وتاريخ الإنتهاء الخاص بالرمز token. ولنقوم بإنشاء صفحة لطلب إعادة تعين كلمة المرور وليكن إسم الملف هو request_reset.php: <?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'vendor/autoload.php'; if ($_SERVER["REQUEST_METHOD"] == "POST") { $email = $_POST['email']; $pdo = new PDO("mysql:host=localhost;dbname=databasename", "username", "password"); $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?"); $stmt->execute([$email]); if ($stmt->rowCount() > 0) { $token = bin2hex(random_bytes(32)); $expires = date("Y-m-d H:i:s", time() + 3600); // تاريخ الصلاحية هو ساعة واحدة // حذف أي رمز سابق موجود $pdo->prepare("DELETE FROM password_resets WHERE email = ?")->execute([$email]); $stmt = $pdo->prepare("INSERT INTO password_resets (email, token, expires_at) VALUES (?, ?, ?)"); $stmt->execute([$email, $token, $expires]); // أرسل البريد الإلكتروني $resetLink = "https://yourdomain.com/reset_password.php?token=$token"; $mail = new PHPMailer(true); try { // إعدادات SMTP $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = 'your_email@gmail.com'; $mail->Password = 'your_app_password'; // كلمة مرور التطبيق $mail->SMTPSecure = 'tls'; $mail->Port = 587; // تفاصيل الرسالة $mail->setFrom('your_email@gmail.com', 'اسم الموقع'); $mail->addAddress($email); $mail->Subject = 'إعادة تعيين كلمة المرور'; $mail->Body = "انقر على الرابط التالي لإعادة تعيين كلمة المرور:\n\n$resetLink\n\nالرابط صالح لمدة ساعة."; $mail->send(); echo "تم إرسال رابط إعادة تعيين كلمة المرور إلى بريدك الإلكتروني."; } catch (Exception $e) { echo "حدث خطأ أثناء إرسال البريد: {$mail->ErrorInfo}"; } } else { echo "البريد الإلكتروني غير مسجل."; } } ?> <form method="POST"> البريد الإلكتروني: <input type="email" name="email" required> <button type="submit">إرسال الرابط</button> </form> ولكن يجب أولا مكتبة PHPMailer من خلال الأمر : composer require phpmailer/phpmailer وأيضا تأكد من وضع إعدادات ال smtp الخاصة بالبريد الذي ستقوم بإرسال الرسائل منه. وأخيرا صفحة إعادة تعيين كلمة المرور reset_password.php : <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $token = $_POST['token']; $newPassword = $_POST['password']; $pdo = new PDO("mysql:host=localhost;dbname=yourdb", "username", "password"); $stmt = $pdo->prepare("SELECT * FROM password_resets WHERE token = ? AND expires_at > NOW()"); $stmt->execute([$token]); $reset = $stmt->fetch(); if ($reset) { $hashedPassword = password_hash($newPassword, PASSWORD_DEFAULT); $stmt = $pdo->prepare("UPDATE users SET password = ? WHERE email = ?"); $stmt->execute([$hashedPassword, $reset['email']]); $pdo->prepare("DELETE FROM password_resets WHERE email = ?")->execute([$reset['email']]); echo "تم تغيير كلمة المرور بنجاح."; } else { echo "الرابط غير صحيح أو إنتهت صلاحيته."; } } elseif (isset($_GET['token'])) { $token = $_GET['token']; ?> <form method="POST"> <input type="hidden" name="token" value="<?= htmlspecialchars($token) ?>"> كلمة المرور الجديدة: <input type="password" name="password" required> <button type="submit">إعادة التعيين</button> </form> <?php } else { echo "الرابط غير صحيح."; } ?>
  11. يجب الذهاب إلى الإعدادات settings . ثم الذهاب إلى Apps ثم Default Apps : ثم في ال Web browser يرجى إختيار chrome او المتصفح الذي تريده.
  12. وعليكم السلام ورحمة الله وبركاته. إن الدورات هنا في الأكاديمية تم تصميمها بعناية وترتيب مناسب للمبتدئين . حيث تم تقسم الدورة إلى عدة مسارات وكل مسار تم تقسيمه إلى عدة أقسام والأقسام تحتوي على الدروس . لهذا يجب عليك دراسة الدورة كما هي بالترتيب حيث تبدأ بالمسارات الأولى وهي الخاصة بدراسة الأساسيات و التطبيق مع المدرب وحل التمارين المطلوبة . وتأكد من عدم تخطي أى درس دون فهمه تماما والتطبيق عليه مع المدرب . وإذا واجهتك أى مشكلة أو صعوبة في جزء ما يمكنك السؤال دائما أسفل الدرس الذي توجد به مشكلتك وسيتم المتابعة معك من خلال المدربين الموجودين في الأكاديمية. وبالنسبة للطريقة الصحيحة للتعلم تختلف من شخص لآخر، ولكن بشكل عام ينصح بتسجيل المعلومات التي تستوعبها من خلال كتابة ملاحظات أو إجراء ملخصات أو حل تمارين. كما يمكنك مشاهدة الفيديو أكثر من مرة إذا شعرت بأنك بحاجة إلى توضيح أو تعميق أكثر وعدم تخطيه دون فهمه تماما كما وضحت لك سابقا. ، ثم بعد ذلك يمكنك التدرب عن طريق التطبيق عمليا على ماتعلمته من خلال القيام بتمارين عملية وتطبيق الأفكار التي تم تعلمها. و يفضل متابعة الفيديوهات أكثر من مرة لضمان فهمك للدرس جيدًا، ويفضل أيضًا أن تقوم بالتطبيق العملي لما تعلمته فور انتهاء كل درس وذلك لتثبيت المفاهيم وتطوير مهاراتك العملية. ويمكنك قراءة المزيد من التفاصيل والنصائح من خلال الإجابات التالية :
  13. وعليكم السلام ورحمة الله وبركاته. إن تعلم Odoo ليس أمر ضروري لمطورين ال back end والمتخصصين في Laravel و Node.js . حيث إن odoo هو نظام مفتوح المصدر لإدارة الأعمال (ERP) يهدف إلى دمج مختلف الوظائف التجارية والإدارية في منصة واحدة. ويستخدم بشكل واسع من قبل الشركات الصغيرة والمتوسطة والكبيرة لتسهيل إدارة العمليات اليومية مثل المحاسبة و المخزون و المبيعات و إدارة العملاء والموارد البشرية والعديد من الوظائف الأخرى. وهو قائم على لغة بايثون . وإن مطورين odoo مختلفين تماما عن مطورين laravel و Node.js ولهم مسمى وظيفي منفصل. لهذا إذا لم تكن تريد أن تعمل على مشروع odoo او تعمل في تطوير تطبيقات odoo وإضافة أنظمة بها أو لا تريد التقديم على شركات تعمل بشكل أساسي على odoo فإذا لا داعي لتعلمه وهذا ليس إختصاصك . ويجب عليك التركيز على جزء واحد معين إما php مع laravel أو java script مع Node.js أو odoo .
  14. يمكنك الدخول إلى قسم دوراتي وستجد جميع الدورات تظهر لك التي قمت بالاشتراك بها والتي لم تقم بالإشتراك بها . وإذا قمت بالدخول إلى أى دورة لم تقم بالإشتراك بها ستجد أن المسار الأول متاح لك. يرجى بعد الذهاب إلى الدورة التي قمت بالإشتراك بها : ستجد كل دورة مقسمة إلى عدة مسارات وكل مسار مقسم إلى أقسام وكل قسم به عدد من الدروس. إذا لم تجد قسم الدورات ظهر لك يرجى محادثة الدعم من خلال هذا الرابط لمساعدتك في تفعيل الإشتراك.
  15. إن الدورات هنا في الأكاديمية تم تصميمها بعناية وترتيب مناسب للمبتدئين . حيث تم تقسم الدورة إلى عدة مسارات وكل مسار تم تقسيمه إلى عدة أقسام والأقسام تحتوي على الدروس . لهذا يجب عليك دراسة الدورة كما هي بالترتيب حيث تبدأ بالمسارات الأولى وهي الخاصة بدراسة الأساسيات و التطبيق مع المدرب وحل التمارين المطلوبة . وتأكد من عدم تخطي أى درس دون فهمه تماما والتطبيق عليه مع المدرب . وإذا واجهتك أى مشكلة أو صعوبة في جزء ما يمكنك السؤال دائما أسفل الدرس الذي توجد به مشكلتك وسيتم المتابعة معك من خلال المدربين الموجودين في الأكاديمية. وتأكد من التطبيق و حفظ الأكواد والمشاريع التي أنشأتها مع المدرب وذلك لأنه سيتم طلب منك رفع تلك المشاريع عند التقدم للإختبار وذلك للتأكد من إنهاءك لتلك المسارات . وإليك الإجابات التالية لمزيد من النصائح حول طريقة المذاكرة : وإليك الإجابة التالية لكيفية تقسيم الدروة والملفات التي أنشأتها لتقوم برفعها وتسليمها قبل التقدم للإختبار :
  16. وعليكم السلام ورحمة الله وبركاته. بالطبع لا . إن فترة أسبوع ليست بالمدة الطويلة التي تجعلك تنسى ما تعلمته في البرمجة . بل الإنقطاع لشهور طويله هي التي تنسيك ما تعلمته . ولكن أيضا يجب الإنتباه إلى أن هذا الأمر يعتمد على مدى خبرتك وتقدمك في البرمجة . فالمبتدئين الذين فقط لديهم الأساسيات ولم يقوموا بالتطبيق فمن الممكن الإبتعاد عن البرمجة لأكثر من إسبوعين ينسيهم كل ما تعلموه وهكذا ينبغي عليهم مراجعة ما تعلموه قبل ذلك. أما لو لديك خبرة جيدة وقمت بالتطبيق كثيرا فلا داعي للقلق حيال هذا الأمر . الأفضل لك عدم الإنقطاع لمدة طويلة و أن تقوم بالتدريب قليلا في فترة إنقطاعك حتى لا تنسي كثيرا ما تعلمته. وأيضا يجب الإنتباه إلى أنه من الممكن أن تنسى ال syntax أو مثلا أسماء الدوال وهكذا ولكن لو كنت قد ذاكرت جيدا فستجد فقط مراجعة الأسماء يكفي لإستعادتك ما تعلمته فأنت تعرف كيفية إستخدام الدوال مثلا وفيما تستخدم وهكذا .
  17. وعليكم السلام ورحمة الله وبركاته. يمكنك التقدم إلى امتحان الدورة (في أي وقت)، من خلال التواصل مع مركز مساعدة أكاديمية حسوب، مع مراعاة الشروط التالية: إتمام أربعة مسارات تعليمية على الأقل التطبيق العملي مع المدرب، والاحتفاظ بالمشاريع العملية الناتجة لإرسالها للمراجعة رفع المشاريع على حسابك على GitHub أولًا بأول لمشاركتها معنا و هذه خطوات الامتحان 1. تواصل معنا أخبرنا برغبتك باجراء الامتحان مع تزويدنا بروابط مشاريعك التي طبقتها أثناء الدورة. يجب أن تكون قد طبقت المشاريع مع المدرب أثناء الدورة، ولا يمكن اجراء امتحان بمشاهدة المحتوى فقط. 2. محادثة صوتية سنحدد لك موعد لاجراء محادثة صوتية لمدة 30 دقيقة يطرح المدرب فيها أسئلة متعلقة بالدورة ويناقش معك ما نفذته خلالها. 3. مشروع التخرج سيحدد لك المدرب مشروعًا مرتبطًا بما تعلمته أثناء الدورة لتنفيذه خلال فترة محددة تتراوح بين أسبوع الى أسبوعين. 4. مراجعة المشروع والتخرج سيراجع المدرب المشروع الذي أنجزته، وإن سارت جميع الخطوات السابقة بشكل صحيح، ستتخرج وتحصل على الشهادة أو يرشدك المدرّب لأماكن القصور ويطلب منك تداركها ثم التواصل معنا من جديد. يمكنك معرفة تفاصيل أكثر من خلال هذه الصفحة.
  18. وعليكم السلام ورحمة الله وبركاته. إن ال Python Launcher هو برنامج يأتي مع بايثون عند تثبيته على نظام التشغيل ومهمته الأساسية أنه يساعدك على تشغيل سكريبتات وأكواد بايثون بسهولة. وهو مفيد جدا إذا كان لديك أكتر من إصدار مثل 3.11 و 3.12 حيث ال Python Launcher يجعلك تقوم بتشغيل السكريبت بالإصدار الذي تريده. ويمكنك إستخدامه من خلال الأمر py في موجه الأوامر . ولو أردت إصدار معين يمكنك تنفيذ التالي : py -3.11 file.py وهذا سيجعلك تقوم بتشغيل الملف على إصدار 3.11 .
  19. لقد تم شرح هذا الجزء في سؤال سابق هنا : إذا كان هناك جزء معين لم تفهمه يرجى توضيحه هنا . ولكن الكود كما طلبت تم تحويله إلى php native في الإجابات السابقة يمكنك إستخدامه.
  20. وعليكم السلام ورحمة الله وبركاته . في هذا الجزء نحن نتحقق من أن الموظف لديه أجازات سابقة أم لا . أى أننا نحضر جميع الأجازات الخاصة بالموظف ونتحقق هل توجد أجازات أم لا . وإذا كان يوجد أجازات لديه ننفذ السطر التالي : وهذا السطر يقوم بإستدعاء الدالة calculateVacationBalance ويقوم بتمرير لها التاريخ و أيضا الأجازات التي تم الموافقه عليها لهذا الموظف . ولكن لو لم يكن للموظف أجازات سابقة يتم تنفيذ جزء else : وهنا هو نفس الكود السابق ولكن الإختلاف هو مررنا رقم 0 بدلا من اجازات الموظف . ويمكننا تحويل الكود السابق إلى php مباشرة وأيضا دون الحاجة إلى شرط if هكذا : // جلب جميع الإجازات المقبولة للموظف $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(); $totalAcceptedDays = $row['total_days'] ?? 0; // هنا لو لم يوجد أجازات إذا هذا جزء else في الكود السابق لذلك نضع 0 $vacationBalance = calculateVacationBalance($s_date->format('Y-m-d'), $totalAcceptedDays); ولكن تأكد من وجود الدالة calculateVacationBalance لديك كما في لارافيل ليعمل الكود . الآن هنا نحن نتحقق من رصيد الأجازات هل يسمح للأجازة الحالية التي يتم إضافتها أم لا . إذا لم يكن هناك رصيد نعيد رسالة خطأ ولا نقوم بتنفيذ شئ وهذا هو الكود البديل له : if ($vacationBalance < $daysDiff) { echo "عذرآ لايمكن إنشاء إجازة وذلك لعدم توفر الرصيد الكافي..."; exit(); }
  21. إذا كنتِ تقصدين البرمجة بشكل عام فيمكنك قراءة الإجابة التالية لمزيد من التفاصيل حول كيفية دراسة البرمجة وأيضا لنصائح في كيفية التعامل مع النسيان والتشتت : هذا الأمر يعتمد على الوقت المتاح لديكِ ولا يوجد وقت محدد للدراسة بل كل شخص يختلف عن الأخر في الوقت المتاح له وأيضا في مدى فهمة وإستيعابه . ولهذا فإن هذا الأمر يعتمد عليكِ بشكل كلي . ولكن الأفضل ألا يقل عدد الساعات عن ساعتين يوميا وذلك إذا أردتي التقدم سريعا. الأفضل بالطبع التخصص في مجال واحد معين فقط وعدم التشتت في أكثر من مجال . فأن تكوني متخصصة في مجال واحد أفضل من أن تكون لديكِ خبرة بسيطة في عدة مجالات . لذلك إذا لم تحددي المجال الذي تريدنه يمكنك تصفح المجالات المتاحة عموما في البرمجة بشكل سريع ومن ثم السير في طريق المجال الذي ستختارينه. بالطبع بعد دراسة الأساسيات يجب عليكي التوجه في التطبيق العملي والبحث عن المشاريع العملية الحقيقية للتطبيق على ما قمتِ بدراسته وحينها يمكنكِ البحث عن وظائف للمبتدئين حيث الإنتقال للمستوى المتقدم سيكون صعبا إذا تم على إنفراد حيث يجب أن يكون هناك من هو أكثر خبرة منكِ ليقوم بتوجيهك . وستعرفين متى تحتاجين لذلك عندما لا تستطيعين تنفيذ أو حل المشكال المعقدة والتي لن تساعدك بها الأساسيات فقط. إن لغة بايثون هي من اللغات المهمة جدا في مجال الذكاء الإصطناعي ولا غني عنها في ذلك لذلك يجب أولا دراسة لغة بايثون قبل الإنتقال لدراسة أى لغة أخرى. إن الذكاء الإصطناعي يتركز بشكل أساسي على الرياضيات و تعلم الجبر الخطي Linear Algebra . ولذلك لابد من وجود أساسيات الجبر الخطي مثل : المصفوفات والعمليات على المصفوفات ولابد أن تعرف قواعد كل عملية، لأنه بالتأكيد لا يمكن الحصول على قيمة المتغير c في المثال الذي أعطيته دون أن تعرف كيف يتم حسابها، كذلك معرفة بالمعادلات الرياضية من الدرجات المختلفة وكذلك التمثيل البياني وفهم المصطلحات الخاصة به،والمتجهات والانحدار و يجب دراسة هذه المواضيع حتى تفهم ما يدور خلف الكواليس وتستطيع تحسين النتائج فيما بعد. وإضافة إلى الجبر الخطي: التفاضل والتكامل حساب المثلثات الإحصاء الوصفية وإليك الإجابة التالية لمزيد من التفاصيل حول ما هو المطلوب قبل البدء في الذكاء الإصطناعي : وإليكِ المقالات التالية يرجى قراءتها بعناية لمزيد من التفاصيل حول هذا المجال وما هي التخصصات فيه وكيفية التقدم فيه :
  22. ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل.
  23. بخصوص السؤال الأول . الموارد هنا المقصود بها هو تنزيل المكتبات من الإنترنت وحذف الملفات في كل مرة تريد تحديث أو تغير إصدار مكتبة . وأيضا لا يتم إستهلاك الموارد ما دام المشروع مغلق ولم يتم تشغيله إذا تنزيل نسختين من اللغة أو المكتبة لن يستهلك أى موارد ما دام المشروع لا يعمل . وأيضا يجب الإنتباه إلى أنه ليس من الضروري أن يكون نسختين من اللغة ولكن السبب الرئيسي من البيئة الإفتراضية هو المكتبات . حيث كل مشروع له الإصدارات الخاصة بالمكتبات ولهذا إذا تم تنزيل مكتبات مختلفة سيحدث تضارب بينها . لنقل مثلا أن لدينا مكتبة إصدار 1x وتلك المكتبة تعتمد على مكتبة أخرى لها إصدار 1y . ولكننا قمنا بتنزيل مشروع أخر يعتمد على إصدار 2y . إذا هنا المشروع الأول ستحدث به مشاكل لأنه تم تغير إصدار1y إلى 2y . وهكذا ستحدث مشاكل كثيرة لك في المشاريع . ولهذا فإن فصل البيئات يساعد في فصل كل مشروع بالمكتبات الخاصة به ولذلك تحديث أو تعديل أى مكتبة في بيئة إفتراضية ما لن يغير أى شئ في البيئات الأخرى. بخصوص السؤال الثاني لنفهم أولا ما هو Docker : هو نظام حاويات (Containers) يستخدم لتشغيل التطبيقات في بيئات معزولة تماما ومحمولة فمثلا لو لدي مشروع يعمل لدي ولكن حينما أقوم بإرساله لك لا يعمل لديك وهذا بسبب إختلاف الحزم والبرامج وإعدادات الجهاز لديك مما يسبب مشاكل في تشغيل المشروع عند كل شخص . ولهذا فإن Docker يعتمد على ما يسمى Docker Image (الصورة) وهو مثل "قالب جاهز" يحتوي على التطبيق (المشروع) مع مكتباته مع إعداداته الخاصة مثل نظام تشغيل Ubuntu وإصدار معين من بايثون مع قاعدة بيانات MySQL. وهنا لو لديك مشروع بايثون فبدلا من تنزيل بايثون مع قوراعد البيانات على كل جهاز تقوم فقط بكتابة Dockerfile لإنشاء صورة تحتوي على كل شيء جاهز وبمجرد فقط إرسال هذا الملف إلى أى شخص وتشغيله سيتم تحميل المشروع مع النظام مع جميع البرامج بجميع الإعدادات والإصدارات المناسبة تلقائيا دون الحاجةإلى تنزيل كل برنامج بشكل منفصل وإختلاف إصدار كل برنامج وتعارضات مع البرامج الموجودة في الجهاز وغيرها. فمثلا لو لديك مشروع بايثون 3.13 ولكن الشخص الأخر الذي أرسلت له المشروع لديه بايثون 3.10 مثلا هنا سيتوجب عليه حذف 3.10 وتنزيل 3.13 أو تنزيلهم معا والذي من الممكن أن يسبب مشاكل . ولكن من خلال docker يتم إنشاء حاوية كاملة لنظام كما لو أنك أنشأت نظام تشغيل جديد لديك ووضعت به البرامج . إذا docker هو مخصص أكثر لبيئة العمل الكاملة من نظام تشغيل مع برامج مع مكتبات مع مشروع . أما البيئة الإفتراضية فهي مخصصة فقط لعزل المكتبات الخاصة بالمشروع.
  24. وعليكم السلام ورحمة الله وبركاته. تخيل معكي أنك الآن مطور . وتعمل مثلا على مشروع Django والمشروع الحالي الذي تعمل عليه هو إصدار 5 . وبينما أنت تعمل عليه تم عرض مشروع Django أخر ولكن إصدار 4 . ما الحل هنا في تلك الحالة ؟ كيف ستستطيع تشغيل إصدارين معا ؟ لو حاولت تثبيت إصدار 4 ستجد أن بايثون يثوم بحذف إصدار 5 وتنزيل إصدار 4 مكانه والعكس لو أردت تشغيل إصدار 5 . إذا الحل لديك هنا هو أنك تقوم بحذف الإصدار الموجود لديك وتنزيل الإصدار بناء على المشروع الحالي الذي تعمل عليه. ولكن هذا الأمر ليس جيدا بالمرة فإنه يستهلك وقت وموارد دون الحاجة لذلك. وهنا تظهر لك ميزة البيئة الإفتراضية حيث تعمل كأنها حاوية منفصلة . حيث تقوم في كل مشروع بإنشاء بيئة إفتراضية ويتم التعامل معها كحاوية منفصلة تماما . أى أن المكتبات التي بداخلها لا دخل لها بالبيئات الأخرى وهنا يمكنك تنزيل أى إصدار تريده بناء على المشروع الذي تعمل عليه. وبناء على المثال السابق هنا ستقوم بإنشاء بيئتين إفتراضيتين لكل مشروع البئية المنفصلة الخاصة به وهكذا يمكنك تشغيل إصدارين من Django في نفس الوقت . ويمكنك إنشاء البيئة الإفتراضية من خلال إستخدام pipenv أو من خلال بايثون نفسه venv ويمكنك قراءة الإجابة التالية لكيفية إنشاء البيئة الإفتراضية وتفعيلها من خلال الأداتين السابقتين : أما إذا أردت تشغيل البيئة الإفتراضية في pycharm فإنه من المفترض أن pycharm تلقائيا يقوم بتفعيل البيئة الحالية الموجودة في المشروع ولكن إذا لم يتم ذلك يمكنك قراءة الإجابات التالية لكيفية فعل ذلك :
  25. وعليكم السلام ورحمة الله وبركاته. نعم توجد بعض الشركات وبعض الوظائف في العمل الحر والتي تتطلب فقط HTML و CSS و JS .وهذه اللغات كافية لك للعمل على مشاريع تتطلب صفحات ثابتة static وليس مشاريع معقدة نسبيا، أي مشاريع بسيطة. فمثلاً لا يتم بناء متجر إلكتروني من خلال HTML و CSS و JS فقط بل يتم الإعتماد على مكتبات للواجهة الأمامية مثل React أو إطار مثل Vue.js و Angular. وأيضا ستجد مشاريع كثيرة منها من يريد تحويل تصميم figma إلى ملفات html و css و ستجد العديد من المشاريع ممن يريدون تغير تنسيقات الموقع لديهم . وأيضا مشاريع أخري لمشاكل في التنسيق يريد صاحب المشروع إصلاحها و أخري لإنشاء صفحات هبوط و أيضا لإنشاء مواقع ثابته static. ولكن الوظائف تلك ليست كثيرة بالنسبة للشركات وأيضا الراتب الخاص بتلك الوظائف ليس كبيرا وإذا أردت العمل على ذلك سيتوجب عليك أن تكون قويا جدا في HTML و CSS ومكتباتها مثل bootstrap وغيرها . وأيضا JS ومكتباتها مثل JQuery وغيرها . وتوجد هنا دورة في الأكاديمية مخصصة لذلك وهي "دورة تطوير واجهات المستخدم" . ويمكنك قراءة الإجابة التالية لمزيد من التفاصيل حول الفرق بين "دورة تطوير واجهات المستخدم" و "دورة تطبيقات باستخدام javascript" :
×
×
  • أضف...