-
المساهمات
2064 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
13
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Chihab Hedidi
-
أنصح ب VsCode لأنه يعد من أشهر البرامج ويحتوي على إضافات لدعم PHP، أما إذا كنت تبحث عن بيئة تطوير متكاملة يمكنك تجربة PHPStorm فيقدم مزايا متقدمة لتطوير PHP. بالنسبة لمشكلة ال port ، إذا كان المنفذ 80 مشغول من قبل برنامج آخر، يمكنك معرفة البرنامج الذي يشغل المنفذ باستخدام الأوامر التالية في موجه الأوامر في ويندوز: netstat -aon | findstr :80 ستظهر لك قائمة بالبرامج التي تستخدم المنفذ 80 مع معرف العملية، و يمكنك تغيير المنفذ الذي يستخدمه Apache في XAMPP من خلال تعديل ملف التكوين httpd.conf. افتح الملف وابحث عن السطر الذي يحتوي على: Listen 80 و قم بتغييره إلى المنفذ الذي تريد.
-
تأكد من استخدام CSS لتثبيت الهيدر والشريط السفلي عند التمرير، و أيضا حاول استخدم ميديا كويري لضبط التنسيقات بناء على حجم الشاشة بهذا الشكل: @media only screen and (max-width: 600px) { header, footer { position: fixed; width: 100%; } } و جيب عليك تأكد من عدم وجود تضارب في الأكواد والتأكد من عدم وجود أخطاء في CSS، فأسباب المشكلة كثيرة و بالتالي يجب عليك فحص الكود جيدا.
-
للتقدم من أجل إلإختبار تحتاج على الأقل إنهاء أربع مسارات من كل دورة، و لكن من الأفضل إنهاءها كلها فالمسارات متعلقة و مكملة لبعضها البعض، أما بالنسبة لطريقة رفع المشاريع فيجب عليك إنشاء مستودع لكل مسار في github و ترفع المشاريع هناك بحيث يكون كل مشروع في مجلد خاص بك حتى يكون العمل سهل للمدربين فيما بعد، و يمكنك أن تطلع أكثر على طريقة رفع المشاريع من هنا :
-
هذا الأمر يأتي بشكل تلقائي عند العمل الكثير و التعلم لفترة طويلة، و انا هنا أتحدث على الدوال التي تكون بشكل إفتراضي مع لغة البرمجة التي تعتمد عليها، فبسبب تكرار إستخدامها كثيرة ستحفظها، أما بخصوص الدوال الخاصة بالمكتبات فهذا الأمر يكون أيضا مع المكتبات التي تستخدمها كيثرا و بشكل متكرر و لكن يمكنك دائما الإطلاع على التوثيق الخاص بالمكتبة لمعرفة الدوال الخاصة بها، فمعرفة أسماء الدوال والوظائف التي تقوم بها يمكن أن يساعدك في الكتابة بفعالية أكبر وتوفير الوقت، و يكفي أن تكون لديك فكرة عامة عن الدوال الأساسية والشائعة الاستخدام في اللغات التي تعمل بها.
-
ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم الأسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
-
التحديثات سريعة في أغلب المكتبات و أعتقد أن التخطي ليس حل ممتاز لهذا الأمر، يمكنك أن تثبت النسخة نفسها التي يستخدمها المدرب و بالتالي تتخلص من هذه الأخطاء، أو كحل أفضل هو أن تستخدم آخر نسخة مع الإطلاع على التوثيق الخاص بالمكتبة و محاولة حل الأخطاء، و إذا واجهك أي خطأ حتى مع إستخدام التحديث الجديد يمكنك طرح تساؤلك أسفل الفيديو الخاص بالدورة و سيقوم المدربين بتوجيهك لتتعامل مع التحديث الجديد.
-
في هذه الحالة أعتقد أنه من الأفضل تضمين الكود في ملفات PHP الخاصة بك (مثل SHOW1.PHP, SHOW2.PHP, إلخ) لتصدير البيانات مباشرة إلى ملف Excel، و هذا عن طريق إنشاء زر تصدير للبيانات إلى Excel في كل ملف PHP، وسيتعامل الكود مع تصدير البيانات فقط للمرض المحدد في ذلك الملف، على سبيل المثال ملف SHOW1.PHP الذي يعرض بيانات مرضى السكر: <?php include('conn.php'); $disease_type = "Diabetes"; // نوع المرض لهذا الملف $sql = "SELECT * FROM UN WHERE disease_type = '$disease_type'"; $result = $conn->query($sql); if ($result->num_rows > 0) { echo "<table border='1'> <tr> <th>اسم المريض</th> <th>عنوان المريض</th> <th>نوع المرض</th> </tr>"; while($row = $result->fetch_assoc()) { echo "<tr>"; echo "<td>" . $row['patient_name'] . "</td>"; echo "<td>" . $row['patient_address'] . "</td>"; echo "<td>" . $row['disease_type'] . "</td>"; echo "</tr>"; } echo "</table>"; } else { echo "No data found for this disease type."; } $conn->close(); ?> <!-- زر تحميل البيانات إلى Excel --> <form method="post" action="export_to_excel.php"> <input type="hidden" name="disease_type" value="<?php echo $disease_type; ?>"> <button type="submit">تصدير البيانات إلى Excel</button> </form> يمكن أن يكون هكذا و أيضا قم بإنشاء ملف جديد export_to_excel.php لتنفيذ تصدير البيانات إلى ملف Excel: <?php include('conn.php'); if (isset($_POST['disease_type'])) { $disease_type = $_POST['disease_type']; $sql = "SELECT * FROM UN WHERE disease_type = '$disease_type'"; $result = $conn->query($sql); if ($result->num_rows > 0) { $filename = "data_from_UN_$disease_type.csv"; header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=' . $filename); $output = fopen('php://output', 'w'); $header = ['اسم المريض', 'عنوان المريض', 'نوع المرض']; fputcsv($output, $header); while ($row = $result->fetch_assoc()) { fputcsv($output, $row); } fclose($output); exit(); } else { echo "No data found for this disease type."; } } $conn->close(); ?> هكذا بالإضافة لعرض البيانات المحددة حسب نوع المرض، نقوم بإضافة زر لتصدير البيانات إلى Excel، والذي يرسل نوع المرض إلى export_to_excel.php، سيقوم هذا املف باستقبال نوع المرض من النموذج، و استعلام البيانات من جدول UN بناء على نوع المرض، ثم تصدير البيانات إلى ملف CSV وتحميله.
- 7 اجابة
-
- 1
-
يمكنك استخدام وظائف PHP المدمجة لإنشاء ملف Excel بصيغة CSV بدون استخدام مكتبة خارجية، حيث أن صيغة CSV مدعومة من قبل Excel ويمكن فتحها وعرضها بسهولة، بالشكل التالي: <?php include('conn.php'); // تضمين ملف الاتصال بقاعدة البيانات // تحديد الجدول الذي ترغب في تحميل بياناته $tableName = "UN"; // أو "CH" حسب ما ترغب // استعلام للحصول على البيانات من الجدول المحدد $sql = "SELECT * FROM $tableName"; $result = $conn->query($sql); if ($result->num_rows > 0) { // تحديد اسم الملف $filename = "data_from_$tableName.csv"; // ضبط ترويسات HTTP header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=' . $filename); // فتح تدفق الخرج $output = fopen('php://output', 'w'); // الحصول على أسماء الأعمدة $fields = $result->fetch_fields(); $header = []; foreach ($fields as $field) { $header[] = $field->name; } // كتابة أسماء الأعمدة إلى ملف CSV fputcsv($output, $header); // كتابة البيانات إلى ملف CSV while ($row = $result->fetch_assoc()) { fputcsv($output, $row); } // إغلاق تدفق الخرج fclose($output); exit(); } else { echo "No data found in the table."; } $conn->close(); ?>
- 7 اجابة
-
- 1
-
يمكنك استخدام المكتبة الحديثة PHPSpreadsheet لأنها تحظى بدعم مستمر، تأكد من تثبيت مكتبة PHPSpreadsheet باستخدام Composer. إذا لم تكن قد ثبت Composer بعد، يمكنك تنزيله من الموقع الرسمي Composer. ثم، لتثبيت PHPSpreadsheet، افتح نافذة الأوامر في مجلد مشروعك واستخدم الأمر التالي: composer require phpoffice/phpspreadsheet بعد تثبيت المكتبة، يمكنك استخدام الكود التالي لتحميل البيانات من قاعدة البيانات إلى ملف Excel: <?php require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "database_name"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // تحديد الجدول الذي ترغب في تحميل بياناته $tableName = "UN"; // أو "CH" حسب ما ترغب $sql = "SELECT * FROM $tableName"; $result = $conn->query($sql); if ($result->num_rows > 0) { $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); // الحصول على أسماء الأعمدة $fields = $result->fetch_fields(); $column = 'A'; foreach ($fields as $field) { $sheet->setCellValue($column . '1', $field->name); $column++; } // الحصول على البيانات $rowNumber = 2; while($row = $result->fetch_assoc()) { $column = 'A'; foreach ($row as $cell) { $sheet->setCellValue($column . $rowNumber, $cell); $column++; } $rowNumber++; } // حفظ الملف $writer = new Xlsx($spreadsheet); $filename = "data_from_$tableName.xlsx"; $writer->save($filename); echo "Data has been exported to $filename successfully."; } else { echo "0 results"; } $conn->close(); ?> بعد الاتصال بقاعدة البيانات، نقوم بكتابة استعلام جميع البيانات من الجدول المحدد (UN أو CH)، ثم إنشاء ملف Excel جديد باستخدام مكتبة PHPSpreadsheet، و تعبئة الملف بأسماء الأعمدة والبيانات، ثم في الأخير نقوم بحفظ الملف باسم data_from_UN.xlsx أو data_from_CH.xlsx حسب الجدول المستخدم. و تأكد من تغيير بيانات الاتصال بقاعدة البيانات ($servername، $username، $password، $dbname) بما يتناسب مع إعدادات قاعدة البيانات الخاصة بك.
- 7 اجابة
-
- 1
-
اختيار الخصائص هو عملية مهمة في تحليل البيانات وتعلم الآلة، والهدف منها هو تحسين أداء النماذج وتقليل تعقيدها، حيث أن تقليل عدد الخصائص يمكن أن يحسن أداء النموذج من خلال تقليل احتمالية الإفراط في التكيف أو overfitting وتحسين الدقة، كما أنه يمكن أن يقلل من وقت التدريب ويقلل من استخدام الموارد الحاسوبية، و بالتالي يكون النموذج أسهل في التفسير وفهم العلاقات بين البيانات، و في بعض الأحيان بعض الخصائص قد تكون غير ذات صلة بالنتيجة المطلوبة أو تحتوي على معلومات ضوضاء، واختيار الخصائص يساعد في إزالة هذه البيانات غير المفيدة.
- 2 اجابة
-
- 1
-
مكنك استخدام ميزة "التنسيق التلقائي" أو ما يعرف بـ "Format Document"، هذه الميزة تساعدك في ترتيب الكود وجعل الوسوم في HTML أو الأكواد في لغات البرمجة الأخرى منظمة وسهلة القراءة، حيث يجب عليك تثبيت ملحق مناسب للغة البرمجة أو التنسيق الذي تستخدمه يمكنك تثبيت ملحق مثل "Prettier - Code formatter"، بعد تثبيته يمكنك تنسيق الكود عبر اختصار لوحة المفاتيح Shift + Alt + F، أو يمكنك أيضا الضغط بالزر الأيمن داخل الملف واختيار "Format Document" من القائمة.
-
نعم، استخدام htmx يمكن أن يكون خيارا ممتازا لك إذا كنت ترغب في البدء بتعلم جوانب الواجهة الأمامية دون التعمق كثيرا في تفاصيل جافاسكريبت ، و أيضا تعتبر htmx مكتبة خفيفة الوزن تجعل التعامل مع الواجهات الديناميكية أكثر سهولة من خلال تقليل الحاجة إلى كتابة JavaScript مخصص. و لكن لا تستطيع الحكم إلا إذا جربت بنفسك، ستتعلم من خلال استخدام htmx كيفية التعامل مع الطلبات من جانب العميل والتفاعل مع الخوادم، مما يعطيك فهما جيدا لكيفية بناء تطبيقات تفاعلية دون الغوص في تفاصيل جافاسكربت، كما أنه يمكنك إستخدامها لتسهيل بناء واجهات المستخدم الخاصة بك، ومع مرور الوقت، يمكنك الانتقال إلى أدوات ومكتبات أكثر تعقيدا مثل Vue.js أو React إذا شعرت بالحاجة إلى مزيد من التحكم والتخصيص.
-
لحل هذه المشكلة تحتاج إلى التأكد من التعامل الصحيح مع حالات الخطأ في جزء الواجهة الأمامية وكذلك في جزء الخلفية حيث يجب عليك التأكد من أن الكود الخاص بـ actAuthLogin يقوم بإرجاع رسالة خطأ مفهومة عند حدوث خطأ في المصادقة: const actAuthLogin = createAsyncThunk( "login/actAuthLogin", async (formData: TFormData, thunkApi) => { const { rejectWithValue } = thunkApi; try { const response = await axios.post<TResponse>("/login", formData); return response.data; } catch (error) { // تأكد من إعادة الخطأ return rejectWithValue(AxiosError(error)); } } ); و أيضا تأكد من أن الكود يتعامل بشكل صحيح مع حالات الرفض في extraReducers: builder.addCase(actAuthLogin.rejected, (state, action) => { state.loading = "failed"; if (isString(action.payload)) { state.error = action.payload; } else { state.error = "An unknown error occurred"; // رسالة خطأ افتراضية } }); و أهم أمر هو التحقق من الاستجابة في الخلفية، يحب أن تتأكد من أن API الخاصة بك تعيد رسالة خطأ مناسبة عند تسجيل الدخول بإيميل غير موجود: app.post("/login", async (req, res) => { const { email, password } = req.body; const user = await findUserByEmail(email); if (!user || !isValidPassword(user, password)) { return res.status(401).json({ error: "Invalid email or password" }); } // بقية منطق تسجيل الدخول هنا });
- 2 اجابة
-
- 1
-
على الأغلب الكود لن يعمل بالشكل المطلوب لأن عمليات الأتمتة تتطلب خبرة كبيرة للتعامل مع المواقع، مع ذلك يفضل أولا تجربة الكود بدون بوت تلغرام، بحيث يكون سكريبت عادي يمكنك تشغيله من ال terminal و في حالة إشتغل يمكنك تحويله إلى بوت تلغرام بسهولة، يجب أن تعرف أيضا أن أغلب كودات الذكاء الإصطناعي من إصدارات قديمة من المكاتب لذا يجب عليك تحديثها بما يتوافق مع التحديث الأخير. أما لإتشاء بوت تلغرام يجب عليك أولا الحصول على معرف البوت و إنشاءه و هذا يكون من داخل تلغرام عن طريق Botfather بعدها يمكنك وضع المعرف في الكود الخاص بك و تشغيله.
-
نعم توجد بعض الواجبات التي يمكنك أن تتمرن عليها و تطرح أجوبتك في التعليقات أسفل الفيديو الذي فيه الواجب و سيتكفل المدربين بمساعدتك، كما تحتوي الدورات على العديد من المشاريع و التي ستعمل عليها أيضا لتتقدم أكثر في المجال الذي إخترته، و في حالة لم تفهم أي جزء من الدرس أو كنت تريد واجبات أو تمرينات إضافية يمكنك طلب ذلك في التعليقات و سيتم منحك المزيد من التمارين لتتمرن أكثر.
-
لكل منهما وظيفة مختلفة ف return تستخدم لإرجاع قيمة من دالة إلى المكان الذي تم استدعاء الدالة منه، كما أنه بعد تنفيذ جملة return يتم إنهاء تنفيذ الدالة ويُعاد القيمة المحددة، و يمكن استخدام القيمة المرجعة في العمليات اللاحقة، مثل تخزينها في متغير أو استخدامها في حسابات. بينما print تستخدم لطباعة المعلومات إلى الشاشة أو إلى مكان الإخراج المخصص، مثل وحدة التحكم أو سطر الأوامر، و لا تعيد أي قيمة من الدالة، بل تقوم فقط بعرض المعلومات للمستخدم، كما أنها لا تؤثر على القيم التي قد تحتاجها العمليات البرمجية الأخرى. و يمكنك أن تطلع أكثر على الفرق بينهما من خلال هذا السؤال:
- 4 اجابة
-
- 1
-
يوجد العديد من قوالب ووردبريس العربية المجانية التي تدعم ميزات متعددة وسريعة ومتوافقة مع SEO، و الأمر يعتمد على حسب رغبتك و الشكل و الذي تريد من ناحيتي سأقترح عليك قالب Newspaper فهو قالب مجاني مثالي للمواقع الإخبارية والمجلات، ويأتي بميزات متعددة مثل دعم SEO وسرعة الأدا، و يوجد أيضا قالب Astra فهو قالب شهير ومتعدد الاستخدامات، بما في ذلك المواقع الإخبارية، ويوفر أداء ممتازا وسرعة تحميل سريعة وميزات SEO، لكن بصراحة أغلب القوالب التي تكون جيدة تجدها مدفوعة لذا حاول الإستثمار في هذا الأمر و ستجد نتائج أفضل.
- 1 جواب
-
- 1
-
من الأفضل البدأ بكورس تطوير واجهات المستخدم حيث يعطيك فكرة على كيفية الإحتراف في التصاميم من البداية، و بعد الإنتهاء تستطيع التعمق في هذا الأمر عن طريق أي لغة برمجة تريد من بينها لغة php التي تمتلكها في الكورس الثاني، و بالنسبة للشهادة فكل دورة لديها شهادة خاصة بها لأن إسم الدورة سيكون في الشهادة و بالتالي سيكون لديك شهادتين. أما بالنسبة لإسترداد المبلغ فهذا الأمر يحدث في حالة لم تجد عمل بعد الإنتهاء من دورة واحدة و لكن لم يتم تحديد الحالات الخاصة مثل العرض الصيفي لذا من الأفضب التواصل مع الدعم لتفهم من عندهم أكثر.
- 5 اجابة
-
- 1
-
حاليا لم يعد من الضروري دفع مبلغ 500 دولار لتفعيل حساب Stripe، حيث أن Stripe يسمح بإنشاء حساب تجاري بدون تكاليف أولية، ويمكنك استخدامه لقبول المدفوعات عبر الإنترنت بمجرد إكمال عملية التسجيل وتوثيق الهوية، و قد تكون هناك تكاليف إضافية تتعلق بالتعامل مع بعض المزايا المتقدمة أو في حالة وجود متطلبات خاصة للمشاريع الكبيرة، ولكن حاليا إنشاء حساب وتفعيل بوابة الدفع عبر Stripe لا يتطلب دفع مبلغ كبير. بالنسبة لأسعار الإستضافات فالأمر يعود على حسب المفاهمة بين المستقل و صاحب المشروع، يوجد من يقوم بتضمين هذه القيمة مع سعر المشروع الأولي، و يوجد من يقوم بدفعها مباشرة أو يقوم بشراء الإستضافة و يعطيك الصلاحيات لربط المشروع عليها، يعني الأمر يختلف من مشروع لآخر. بالنسبة لموقع ووردبرس عادة ما يتم تحديد التكلفة بناء على نطاق المشروع ككل، وليس عدد الصفحات فقط، حيث يجب أن يتفق الفريلانسر والعميل على المتطلبات الأساسية للموقع، و بناء على هذه المتطلبات، يتم تحديد السعر الإجمالي للمشروع.
- 1 جواب
-
- 1
-
في هذه الحالة windows يدعم مجموعة واسعة من البرمجيات والأدوات الخاصة بالذكاء الاصطناعي، بما في ذلك المكتبات والأطر مثل TensorFlow وPyTorch، بالإضافة إلى أدوات تطوير متعددة، كما أن أغلب أدوات البرمجة والبيئات مثل Anaconda وJupyter Notebook تعمل بسلاسة على Windows، وبالنسبة للبيئة التطويرية في وwindows يمكن أن يكون لديك سهولة أكبر في تثبيت وإعداد بيئات تطوير متعددة، لذا أعتقد أنه من الأفضل الإعتماد على Windows لتتجنب كل المشاكل التي في الأنظمة الأخرى.
- 1 جواب
-
- 1
-
نعم هذه النسخة هي من أحدث إصدارات بايثون وتدعم معظم الميزات والتحديثات الجديدة، كما أنها نسخة ثابتة و لا تحتوي على مشاكل، إذا كنت تعمل على مشاريع أو تتعلم من خلال دروس معينة، تأكد فقط من التحقق من التوافق مع المكتبات والأدوات التي تستخدمها، و يمكنك أن تستخدمها في مشاريعك بشكل عادي.
- 1 جواب
-
- 1
-
تظهر رسالة الخطأ "element not interactable" تظهر عادة عندما يكون العنصر الذي تحاول التفاعل معه إما غير مرئي أو غير في حالة تمكن من التفاعل معه، في الكود الخاص بك، يبدو أن هذا الخطأ يحدث عند محاولة إرسال نص إلى عنصر الإدخال في السطر 10، لحل هذه المشكلة تأكد من أن العنصر الذي تحاول التفاعل معه مرئي على الصفحة قبل محاولة إرسال النص إليه، حيث أحيانا قد لا تكون الصفحة محملة بالكامل عند محاولة التفاعل مع العنصر، و أيضا تأكد من المسار الخاص بالعنصر رربما هناك خطأ فيه.
-
مكتبة NextAuth.js مفيدة جدا فهي مكتبة شائعة وموثوقة تسهل عليك إضافة ميزات التوثيق والحماية إلى تطبيقك المبني بـ Next.js، و توفر الكثير من الميزات الجاهزة، مما يوفر عليك وقت وجهد كبيرين في كتابة كود التوثيق والحماية بنفسك، كما أن هذه المكتبة تم تطويرها واختبارها من قبل مجتمع كبير من المطورين، مما يعني أنها تلتزم بمعايير الأمان الحديثة وتغطي العديد من السيناريوهات، و لكن مع مرور الوقت يجب عليك فهم كيفية عمل التوثيق والحماية على مستوى أساسي، يعني كبداية يمكنك البدء باستخدام NextAuth.js لتسريع عملية التطوير وفهم الأساسيات، ومن ثم يمكنك في وقت لاحق تجربة كتابة نظام توثيق وحماية بنفسك لتعمق معرفتك ومهاراتك.
- 3 اجابة
-
- 1
-
لتحقيق استيعاب 100 ألف متقدم هناك عدة عوامل يجب أخذها بعين الاعتبار لضمان سلاسة العملية وتجنب فقدان البيانات أو حدوث مشاكل، فقبل كل شيء تأكد من اختيار خطة استضافة تدعم الحجم الكبير من البيانات والزيارات المتوقعة، و يفضل استخدام استضافة ذات أداء عالي ومواصفات مناسبة، وفي نفس الوقت تأكد من إعداد قاعدة البيانات بشكل مناسب لتتعامل مع العدد الكبير من الإدخالات، يمكن أن يتطلب الأمر تحسينات مثل فهرسة الجداول وضبط إعدادات الاتصال، و أيضا تأكد من وجود نسخ احتياطية دورية للبيانات لتجنب فقدان البيانات في حالة حدوث مشاكل، يمكنك استخدام خوادم النسخ الاحتياطي أو النسخ المتماثل لقاعدة البيانات لضمان توفر البيانات، لكن دائما يفضل إجراء اختبارات تحمل load testing قبل الإطلاق الفعلي للتأكد من كفاءة النظام.