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

Khaled Osama3

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

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

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

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

    1

كل منشورات العضو Khaled Osama3

  1. جزاك الله خيرا. طريقة حفظ الأعمدة دون طباعتها في الجدول، يمكنك حفظ قيم الأعمدة في متغيرات منفصلة بدلاً من إضافتها للجدول مباشرة. مثال: # حساب العمود الأول col1_values = Table.iloc[:, [5,6]].max(axis=1) # حساب العمود الثاني col2_values = Table.iloc[:, [10,11]].max(axis=1).apply(lambda x: 50 if x > 50 else x) # استخدام القيم في العملية التالية Table['3أكبر_قيمة'] = Table.apply(lambda row: col1_values[i] if col2_values[i]==0 else col2_values[i] if 0 < col2_values[i] <= 50 else None, axis=1) فهذا يحافظ على القيم دون إضافتها للجدول. اما هذا الكود محتاج بعض التعديلات: 1. لا تضف القيم مباشرة للمتغيرات repeated، بل احفظها في متغيرات مستقلة 2. استخدم المؤشر i للوصول لقيم المتغيرات داخل الدوال 3. حساب قيم الأعمدة خارج الدوال وليس داخلها repeated_values1 = [] repeated_values2 = [] col1_values = [] col2_values = [] for i in range(len(Table)): repeated_values1.append(df.iloc[6,3]) repeated_values2.append(df.iloc[3,4]) Table['إسم المادة'] = repeated_values1 Table['العام الدراسي'] = repeated_values2 Table.fillna(0, inplace=True) col1_values = Table.iloc[:, [5,6]].max(axis=1) col2_values = Table.iloc[:, [10,11]].max(axis=1).apply(lambda x: 50 if x > 50 else x) Table['3أكبر_قيمة'] = Table.apply(lambda row: col1_values[i] if col2_values[i]==0 else col2_values[i] if 0 < col2_values[i] <= 50 else None, axis=1)
  2. لابد اولا من فهم ما يلي: - Dependency Injection: هنا يتم حقن تابع الـ Project كائن داخل الوظيفة، بدلاً من اننا نقوم بإنشائه داخل الوظيفة. - Route Model Binding: عندما نضع معلمة من نوع Model كـ Project في المسار، فإن Laravel يقوم تلقائياً بالبحث عن السجل المطابق للـ id وتمريره. أي أن لارافيل يقوم بالبحث بنفسه وتمرير النموذج المطلوب دون أن نحتاج للقيام به والافتراضي لها هو الid . مثال: Route::get('/project/{project}', function (Project $project) { return $project->name; }); هنا project سيحتوي مباشرة على البيانات بدون الحاجة لاستدعاء find. في المقابل لو استخدمنا: Route::get('/project/{id}', function ($id) { return Project::find($id)->name; }); فهنا سنقوم بالبحث يدويا. تستخدم هذه الطريقة عندما نريد أن يقوم لارافيل بالبحث تلقائيا دون الحاجة للقيام به يدويا. ويمكننا عمل Route Model Binding عن طريق اي حقل يكون unique, فهكذا يمكننا اخبار لارافل ان تفعل ال Route Model Binding لحقل ال slug Route::get('/projects/{project:slug}', 'ProjectController@show'); public function show(Project $project) { // يمكنك الوصول إلى حقول النموذج هنا باستخدام الـ slug $projectName = $project->name; $projectDescription = $project->description; // ... }
  3. نعم، إدارة الإعتماديات والإصدارات قد تكون صعبة في البداية في كل من React Native وFlutter. لكن Flutter بشكل عام يعتبر أسهل في التعامل والتطوير لعدة أسباب: - لغة البرمجة الوحيدة هي Dart، بينما React Native يتطلب JavaScript أيضًا. - Flutter يوحد المظهر والسلوك عبر كل الأجهزة، بينما React Native قد تختلف بعض التفاصيل. - Flutter يدعم hot reload مما يسرع عملية التطوير. - الواجهات في Flutter أكثر سلاسة ويسر من React Native. أما من حيث الأداء فكلاهما يعتبران جيدين، لكن Flutter ربما يتفوق قليلا لأنه مصمم من الأساس لتطوير التطبيقات عبر الأجهزة. وفيما يتعلق بسوق العمل فكلاهما يحظيان بطلب كبير لكن React Native سباق في هذا الصدد لأنه موجود منذ فترة أطول. بشكل عام يمكن القول أن فلتر أسهل في التعامل والتطوير للمبتدئين، في حين يبقى React Native الأكثر طلبًا حاليًا في سوق العمل.
  4. هناك خطأ في الكود عند استخدام apply و lambda: - يجب استخدام apply مع دالة معرفة مسبقا وليس بصيغة lambda. - في صيغة lambda يجب استخدام متغير واحد فقط x وليس إشارة للمصفوفة مباشرة. الكود الصحيح: def func(x): if 0 < x < 50: return Table.iloc[:, 14] else: return x Table['3أكبر_قيمة'] = Table.iloc[:, 15].apply(func) أو بدون استخدام lambda/func: Table['3أكبر_قيمة'] = Table.iloc[:, 15].apply(lambda x: Table.iloc[:, 14] if 0 < x < 50 else x) في الكود الأصلي كان هناك خطأ في استخدام apply مع lambda وإشارة مباشرة إلى المصفوفة داخلها. حسنا اخي هذا هو الكود بعد اضافه المطلوب Table.fillna(0, inplace=True) Table['3أكبر_قيمة'] = Table.apply(lambda row: row.iloc[14] if row.iloc[15] == 0 else row.iloc[15] if 0 < row.iloc[15] < 50 else None, axis=1)
  5. المشكلة هنا تحدث بسبب وجود قيم None في الأعمدة المراد مقارنتها. عندما تحاول مقارنة None مع رقم عن طريق > فإنه لن يسمح بذلك لأن None ليست قيمة رقمية. هناك عدة طرق لحل هذه المشكلة: 1- استبدال قيم None بقيمة أخرى مثل 0 قبل عملية المقارنة: Table.fillna(0, inplace=True) 2- تجاهل الصفوف التي تحتوي على None: Table = Table[Table[col1].notna() & Table[col2].notna()] نعم يمكن تعديل الكود لتطبيق الشرط المطلوب: # ايجاد اكبر قيمة بين العمودين 14 و 15 max_col = Table.iloc[:, [14,15]].max(axis=1) # تطبيق الشرط Table['3أكبر_قيمة'] = max_col.apply(lambda x: Table.iloc[:, 14] if 0 < x < 50 else x ) نقوم بإيجاد أكبر قيمة بين العمودين رقم 14 و 15 في DataFrame المسمى `Table`. ثم نقوم بإضافة عمود إلى DataFrame يسمى '3أكبر_قيمة'. ثم نطبق دالة (function) على كل قيمة في `max_col`. الدالة هنا هي `lambda x: Table.iloc[:, 14] if 0 < x < 50 else x`. إذا كانت القيمة `x` بين 0 و50، فإن القيمة المطلوبة تكون `Table.iloc[:, 14]` (قيمة في العمود 14). إذا لم تكن تلبي هذا الشرط، يتم استخدام القيمة الأصلية `x`.
  6. حسنا اخي يمكنك استخدام داله apply في مكتبه pandas بمساعده داله lambda وتعديل سطر الكود لهذا df['أكبر_قيمة'] = df.iloc[:, 2:5].max(axis=1).apply(lambda x: 50 if x > 50 else x) نحن هنا اضفنا شرط لو كانت القيمه الكبري اكبر من 50 ستظل 50, لكن لو اصغر سياخذ القيمه الكبري حل اخر يمكنك استخدام for loop سيتكرر هذا الكود لكل صف في الداتا يقوم أولاً بحساب القيمه الكبري مثل الكود السابق وتخزينها في عمود "أكبر_قيمة". ثم يتكرر فوق هذا العمود ويستبدل أي قيمة أكبر من 50 بـ 50. يمكنك اضافه هذا الكود بعد مباشره تكوين عمود 'أكبر_قيمة' for i in range(len(df['أكبر_قيمة'])): if df['أكبر_قيمة'].iloc[i] > 50: df['أكبر_قيمة'].iloc[i] = 50
  7. بالطبع هذا الكود بالاعلي يفعل هذا عندما يجد قيمه فارغه سياخذ القيمه الاعلي ويمكنك اضافه هذا السطر لملئ كل القيم الفارغه بقيمه = 0 df.fillna(0, inplace=True)
  8. عن طريق استخدام فانكشن max و تخزين القيمه الاكبر في عمود اسمه "أكبر_قيمة" df['أكبر_قيمة'] = df.iloc[:, 2:5].max(axis=1) // تم تعديله ولقد استخدمنا axis = 1 لكي ينظر لمحور X الافقي, يعني العثور على القيمة القصوى (الأكبر) في كل صف .
  9. نعم بالطبع سأكتب لك الكود الجديد ولكن الاختلاف في الكود صغير اليك مثال اخر: import pandas as pd # قراءة الملف الإكسل df = pd.read_excel('file.xlsx') // تم تعديله # تكوين عمود جديد لتخزين أكبر القيم في كل صف df['أكبر_قيمة'] = df.iloc[:, 2:5].max(axis=1) // تم تعديله # حفظ النتيجة df.to_excel('output.xlsx', index=False) # index=False لعدم حفظ الأرقام الخاصة بالصفوف `iloc` هي وسيلة للوصول إلى البيانات في DataFrame باستخدام تعيين الفهرس (integer-location based indexing). يتيح لك `iloc` تحديد الصفوف والأعمدة بناءً على مواقعها بالفهرس، بدلاً من استخدام الأسماء. تستخدم `iloc` بهذه الطريقه: data.iloc[row_index, column_index] بالمثال السابق، `df.iloc[:, 2:5]` يعني استخراج كل الصفوف والأعمدة من الثالثة (العمود 2) إلى الخامسة (العمود 4).
  10. حسنًا، هذا الكود قد يحقق المهمة المطلوبة: import pandas as pd # قراءة الملف الإكسل df = pd.read_excel('file.xlsx', usecols=[2,3,4]) # تكوين عمود جديد لتخزين أكبر القيم في كل صف df['max'] = df.max(axis=1) # حفظ النتيجة df.to_excel('output.xlsx', index=False) # index=False لعدم حفظ الأرقام الخاصة بالصفوف
  11. باستخدام لارافيل: يمكنك تخزين الملف عندك في Storage وتحفظ المسار فقط في الداتابيز وعندما تريد عرض او تحميله فقط ستذهب لكل ملف الي المسار خاص به 1. إنشاء موديل PdfFile وأضف حقلين، أحدهما لاسم الملف والآخر للمسار path: $table->string('name'); $table->string('path'); 2. في ميثود التحميل ضع الملف في مجلد uploads بداخل storage: $file = $request->file('file'); $fileName = $file->getClientOriginalName(); $path = $file->store('uploads','public'); عندما نستخدم store مع إعطاء اسم المجلد كـ'uploads'، فإن لارافيل سيقوم تلقائيا بإنشاء هذا المجلد داخل storage/app/public إن لم يكن موجوداً مسبقاً. ثم يقوم بتخزين الملف داخل هذا المجلد. بحيث يكون المسار النهائي للملف هو: storage/app/public/uploads/file-name.pdf 3. احفظ المسار فقط في حقل path بدلاً من الملف: $this->path = $path; $this->name = $fileName; $this->save(); 4. عند العرض أو التحميل، اذهب مباشرة إلى المسار: <a href="{{ asset('storage/' . $pdf->path) }}"> تحميل </a> بهذه الطريقة سيتم تخزين الملفات فعلياً في storage والاحتفاظ بالمسار فقط في الداتابيز. https://wiki.hsoub.com/Laravel/filesystem
  12. المشكلة هنا يبدو انه يستخدم اسم "emailOrUsername" كاسم عمود في الاستعلامات where و orWhere. يمكنك تجربه هذا الحل: $user = User::where(function ($query) use ($request) { $query->where('email', $request->emailOrUsername) ->orWhere('username', $request->emailOrUsername); }) ->first(); هذا التحديث يستخدم دالة where لتحديد الشرط ويستخدم orWhere داخلها لتحديد أن يكون الحقل إما email أو username. او تجربه هذا الحل: $user = User::where('email', $request->input('emailOrUsername')) ->orWhere('username', $request->input('emailOrUsername')) ->first(); بهذه الطريقة ستستخدم القيمة الفعلية المرسلة في حقل emailOrUsername وليس اسم الحقل نفسه كاسم عمود.
  13. الطريقة الأفضل لتجنب استدعاء الهوك داخل حلقة هي استخدام خطاف useMemo: const users = useMemo(() => { return userIds.map(userId => useFetchUser(userId)) }, [userIds]) return ( <div> {users.map(user => ( <div key={user.id}> {user.id} - {user.name} </div> ))} </div> ) useMemo سيضمن أن يتم استدعاء useFetchUser مرة واحدة لكل مستخدم، بدلاً من داخل حلقة. ويعتمد users على userIds فقط، فعندما يتغير userIds سيتم إعادة إنشاء users. هذه الطريقة تجنب المشاكل التي تحدث عند استدعاء الهوك داخل حلقة، وتضمن أن يتم استدعاء useFetchUser بالترتيب الصحيح.
  14. يمكنك استخدام sometimes لحل هذه المشكلة $request->validate([ 'first_name' => 'required_without_all:first_name,middle_name,last_name,email,password,active', 'middle_name' => 'required_without_all:first_name,middle_name,last_name,email,password,active', 'last_name' => 'required_without_all:first_name,middle_name,email,password,active', 'email' => 'required_without_all:email,first_name,middle_name,last_name,password,active', 'password' => [ 'nullable', // يسمح بالقيمة الفارغة أو الـ null 'bail', 'sometimes', // يتم تطبيق القاعدة إذا كانت القيمة موجودة Password::min(8)->letters()->mixedCase()->numbers()->symbols(), ], 'active' => 'required_without_all:first_name,middle_name,last_name,email,password', ]); في هذا الحل، يتم استخدام 'nullable' للسماح بالقيمة الفارغة أو الـ null في حقل كلمة المرور. ثم يتم استخدام 'sometimes' مع 'bail' لتطبيق القاعدة (Password::min(8)->letters()->mixedCase()->numbers()->symbols()) إذا كانت القيمة موجودة (تم تحديث حقل كلمة المرور). يعني ذلك إذا كانت قيمة حقل كلمة المرور موجودة، سيتم تطبيق قواعد التحقق، وإذا كانت فارغة، فلن يتم تطبيقها.
  15. وعليكم السلام، تعلم تطوير الواجهة الخلفية (باك إند) للمواقع بسبب قلة الموارد المتوفرة باللغة العربية. إليك بعض النصائح: - ابدأ بتعلم إحدى لغات البرمجة الشائعة للباك إند مثل PHP أو Java أو Python. هناك العديد من الكتب والدورات التدريبية المجانية أو المفتوحة المصدر باللغة الإنجليزية. - امتلك خلفية عن قواعد البيانات مثل MySQL ونظم إدارة قواعد البيانات مثل PHPMyAdmin. - تعلم مهارات تصميم الواجهة الخلفية مثل إنشاء جداول البيانات وتحديثات البيانات وصلاحيات المستخدمين. - تدرب على بناء بروتوكولات شبكة مثل REST API للتواصل بين الواجهة الأمامية والخلفية. - ابحث عن مشاريع مفتوحة المصدر على GitHub وتدرب على تحليلها وتعديلها. - تابع المجتمعات العربية على الإنترنت للمساعدة والإرشاد الفني. أتمنى أن تجد هذه النصائح مفيدة. توكل على الله وابدأ العمل، ستتعلم الكثير خلال التدريب العملي. يمكنك قراءه هذه المقاله:
  16. للوصول إلى phpMyAdmin وإدارة قواعد البيانات MySQL الخاصة بك باستخدام PHP، يمكنك استخدام أي لغة برمجة تدعم الاتصال بقواعد البيانات MySQL والتفاعل معها. اللغة الأكثر شيوعاً لتطوير واجهات المستخدم الويب هي PHP نفسها، لكن يمكنك استخدام أي لغة أخرى تدعم الاتصال بقواعد البيانات MySQL. في حال استخدام PHP، يمكنك ربط بين ملفات الموقع والphp 1. إنشاء اتصال بقاعدة البيانات: في ملف PHP، استخدم الأمر `mysqli_connect` لإنشاء اتصال بقاعدة البيانات. يجب عليك توفير اسم المضيف (localhost في حالة phpMyAdmin مثبتة محليا)، اسم المستخدم، كلمة المرور، واسم قاعدة البيانات. <?php $host = "localhost"; $username = "اسم_المستخدم"; $password = "كلمة_المرور"; $database = "اسم_قاعدة_البيانات"; $conn = mysqli_connect($host, $username, $password, $database); if (!$conn) { die("فشل الاتصال: " . mysqli_connect_error()); } ?> 2. استعلامات SQL: يمكنك استخدام اللغة SQL لاستعلام وتحديث البيانات في قاعدة البيانات. قم بتنفيذ استعلامات SQL باستخدام `mysqli_query`. <?php $sql = "SELECT * FROM اسم_الجدول"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { while ($row = mysqli_fetch_assoc($result)) { // استخدم البيانات هنا } } else { echo "لا توجد نتائج"; } mysqli_close($conn); ?> يمكنك أيضاً استخدام استعلامات INSERT، UPDATE، DELETE لتعديل البيانات. 3. تضمين ملفات PHP في صفحات الموقع: يمكنك استخدام `include` أو `require` لتضمين ملفات PHP في صفحات موقعك. على سبيل المثال، <?php include("ملف_الاتصال_بقاعدة_البيانات.php"); ?> هذا يسمح لك باستخدام متغيرات الاتصال بقاعدة البيانات في جميع صفحات موقعك. يرجى ملاحظة أنه يجب عليك تحديد قواعد البيانات الخاصة بك وهياكل الجداول وفقًا لاحتياجات مشروعك.
  17. المشكلة هنا أن كلمة "global" لا يمكن استخدامها داخل الفئات في PHP، لأن global تستخدم لجعل متغير متاح عالميا خارج الفئات. الحل هو استدعاء متغيرات الاتصال بقاعدة البيانات من ملف config.php دون استخدام global: 1. استدعاء ملف config.php كما هو موجود الآن لتضمين المتغيرات: include('../config.php'); 2. استخدم المتغيرات مباشرة دون إضافة كلمة global: class Database { private $db_host; private $db_user; private $db_pass; private $db_name; public function __construct() { $this->db_host = $db_server; $this->db_user = $db_user; $this->db_pass = $db_password; $this->db_name = $db_name; } } بهذه الطريقة سيتم الوصول إلى المتغيرات المعرفة في ملف config.php داخل الفئة دون مشكلة.
  18. هناك طريقتان أساسيتان لإضافة ميزات جديدة لمشروع لارافل منشور على استضافة: الطريقة الأولى هي عبر نظام إدارة النسخ مثل Git: - فبإمكانك تحديث المشروع محلياً. - ثم إضافة التعديلات والملفات الجديدة وعمل كوميت لها. - ثم Pushها إلى المستودع الرئيسي مثل GitHub. - قم بعمل Pull request من GitHub إلى المشروع على الاستضافة. - مراجعة التعديلات وموافقتها. - سيتم بعدها تحديث المشروع على الاستضافة تلقائيا. الطريقة الثانية هي رفع الملفات يدوياً: - حيث تقوم بتحديث المشروع محلياً. - قم بنسخ جميع الملفات المحدثة بما فيها الجديدة. - تسجيل الدخول إلى حساب الاستضافة عبر FTP أو SSH. - قم بنسخ الملفات المحدثة والجديدة إلى السيرفر. - تحقق من عمل التحديثات على الاستضافة.
  19. المشكلة في طريقة إضافة الشرط (WHERE clause) إلى الاستعلام و ليست آمنة. عند استخدام implode() سيتم إضافة الشروط دون علامات الاقتباس مما يجعل الاستعلام غير صالح. الحل هو استخدام طريقة أخرى لإضافة الشرط مثل: $where = '1=1'; // دائما TRUE if(is_array($where_conditions)) { $where_parts = []; foreach($where_conditions as $field => $value) { $where_parts[] = "{$field} = '{$value}'"; } $where .= ' AND ' . implode(' AND ', $where_parts); } $queryStr = "SELECT * FROM {$table} WHERE {$where}"; هذا التعديل يضيف تكوينًا صحيحًا للشرط في حالة وجود مصفوفة لتصفية المهام.
  20. المشكلة هي أن دالة toggle تقوم بتغيير حالة isOpen العامة، وهذا يؤدي إلى فتح أو إغلاق كل الصفوف مرة واحدة عند النقر على أي زر "تبديل العرض". يجب تعديل الكود لاستخدام متغير expandedRowIndex الذي يشير إلى صف محدد يتم فتحه. بذلك، يمكنك فقط فتح صف واحد في كل مرة، وذلك باستخدام الحالة المحلية هنا كيف يمكن عرض مكون AutoShopPriceExpand فقط للصف ذي الصلة: 1. نحتاج إضافة متغير محلي isExpanded يخزن ID الصف المفتوح: const [expandedRowIndex, setExpandedRowIndex] = useState(null); 2. نضيف ID لكل صف: {filteredAutoShopPricesLists.map((autoshop, index) => { return ( <Tr key={autoshop.id}> ... </Tr> ) })} 3. للنقرة على الصف يقوم بتحديد ID: const toggleExpand = (id) => { setExpandedRowIndex(expandedRowIndex === id ? null : id); } 4. ونعرض المكون بناء على ID: <Tr onClick={() => toggleExpand(autoshop.id)}> ... </Tr> {expandedRowIndex === autoshop.id && ( <AutoShopPriceExpand details={autoshop}/> )} بهذا سيتم عرض مكون واحد فقط للصف المنقور عليه.
  21. يمكنك استخدام مكتبة Laravel Excel. تعتبر هذه المكتبة مفيدة لمعالجة ملفات Excel بشكل سهل وفعال. https://docs.laravel-excel.com/3.1/getting-started/ يمكنك تثبيت المكتبة باستخدام Composer: composer require maatwebsite/excel بعد تثبيت المكتبة، يمكنك إعداد ملف التكوين `config/excel.php` عبر الأمر: php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config ثم يمكنك استخدام الكود التالي في وحدة التحكم (`App\Http\Controllers\UserController`) لتحميل ملف Excel وإدراج بياناته في قاعدة البيانات: use Maatwebsite\Excel\Facades\Excel; use App\Imports\UsersImport; public function importUsers() { // استخدام مكتبة Laravel Excel لتحميل ملف Excel Excel::import(new UsersImport, 'users.xlsx'); return 'Users imported successfully!'; } ثم، يجب عليك إنشاء فئة `UsersImport` لمعالجة عملية الاستيراد. يمكنك استخدام الأمر التالي لإنشاء الفئة: php artisan make:import UsersImport ومن ثم، يمكنك تحرير الفئة المنشأة `UsersImport` لتناسب حقول الجدول `users`: namespace App\Imports; use App\Models\User; use Maatwebsite\Excel\Concerns\ToModel; class UsersImport implements ToModel { public function model(array $row) { return new User([ 'prefix' => $row['prefix'], 'firstname' => $row['firstname'], 'middlename' => $row['middlename'], 'lastname' => $row['lastname'], 'suffix' => $row['suffix'], 'slug' => $row['slug'], 'tags' => $row['tags'], 'status' => $row['status'], 'password' => $row['password'], 'email' => $row['email'], 'email_verified_at' => $row['email_verified_at'], 'altemail' => $row['altemail'], 'empnumber' => $row['empnumber'], 'altempnumber' => $row['altempnumber'], 'type' => $row['type'], 'description' => $row['description'], 'dob' => $row['dob'], 'doh' => $row['doh'], 'dos' => $row['dos'], 'separation_reason' => $row['separation_reason'], 'home_number' => $row['home_number'], 'home_street' => $row['home_street'], 'home_street_alt' => $row['home_street_alt'], 'home_city' => $row['home_city'], 'home_state' => $row['home_state'], 'home_postalcode' => $row['home_postalcode'], 'home_county' => $row['home_county'], 'home_country' => $row['home_country'], 'home_lat' => $row['home_lat'], 'home_lng' => $row['home_lng'], 'signature' => $row['signature'], 'logins' => $row['logins'], 'last_login_dt' => $row['last_login_dt'], 'last_login_ip' => $row['last_login_ip'], 'dl_state' => $row['dl_state'], 'dl_number' => $row['dl_number'], 'dl_type' => $row['dl_type'], 'facebook' => $row['facebook'], 'twitter' => $row['twitter'], 'religion' => $row['religion'], 'worship_place' => $row['worship_place'], 'armed_service' => $row['armed_service'], 'professional_orgs' => $row['professional_orgs'], 'will_info' => $row['will_info'], 'organ_donor' => $row['organ_donor'], 'bookmarks' => $row['bookmarks'], 'locked' => $row['locked'], 'personnel' => $row['personnel'], ]); } } يمكنك استخدام دالة `ToModel` لتعيين البيانات المستخرجة إلى نموذج `User`. بعد تكوين ذلك، يمكنك استدعاء دالة `importUsers` عبر الطريقة المناسبة في تطبيق Laravel الخاص بك، مثل إنشاء مسار واستدعاء الوحدة التحكم.
  22. 1. Pass by Reference: يتم إرسال عنوان المتغير (عنوان الذاكرة) وليس قيمته. فأي تغيير في المتغير داخل الدالة سيؤثر على القيمة الأصلية خارجها أيضًا. شرح بسيط لمفهوم عنوان الذاكرة عند استدعاء دالة أو طريقة وتمرير متغير إليها بالمرجع، فإن ما يتم إرساله ليس القيمة نفسها بل عنوان الذاكرة التي تحتوي على هذه القيمة. فمثلاً لو أرسلنا متغير obj إلى دالة، فإن ما سيتم إرساله هو عنوان ذاكرة الـ obj في الرام وليس القيمة نفسها. عندها إذا حدث تغيير في المتغير داخل الدالة مثلاً بتحديث قيمة خاصية ما، فسيتم التغيير في نفس عنوان الذاكرة الذي تعلق المتغير الأصلي به. بذلك سينعكس التغيير على القيمة خارج الدالة أيضاً لأن كلاهما يشيران لنفس عنوان الذاكرة. function modifyNumber(obj) { obj.value = obj.value * 2; } let myNumber = { value: 5 }; modifyNumber(myNumber); console.log(myNumber.value); // سيطبع: 10 2. Pass by Value: هو أن المتغير المرسل في دالة أو طريقة يتم نسخ قيمته وليس المرجع أو العنوان. أي أن أي تغيير في قيمة المتغير داخل الدالة لن يؤثر على القيمة الأصلية خارجها. function modifyNumber(num) { num = num * 2; } let myNumber = 5; modifyNumber(myNumber); console.log(myNumber); // سيطبع: 5 3. Shallow Copy: Shallow Copy تعني إنشاء نسخة جديدة من الهيكل الرئيسي للكائن، لكن لا يتم إنشاء نسخ فرعية للكائنات الموجودة داخله. let originalArray = [1, 2, [3, 4]]; // Shallow Copy let shallowCopy = [...originalArray]; shallowCopy[2][0] = 99; console.log(originalArray); // سيطبع: [1, 2, [99, 4]] 4. Deep Copy: Deep Copy تعني إنشاء نسخة جديدة من الهيكل الرئيسي وجميع الكائنات الفرعية داخله. let originalArray = [1, 2, [3, 4]]; // Deep Copy let deepCopy = JSON.parse(JSON.stringify(originalArray)); deepCopy[2][0] = 99; console.log(originalArray); // سيطبع: [1, 2, [3, 4]] 5. Type Coercion: هو تحويل تلقائي للأنواع في جافاسكريبت عند القيام بعمليات رياضية أو مقارنة بين قيم مختلفة. let result = 5 + "5"; console.log(result); // سيطبع: "55" فائدة استخدام كل من هذه المفاهيم تعتمد على الحالة البرمجية. مثلا، نستخدم "Pass by Reference" عندما نريد تعديل القيمة الأصلية داخل الدالة. نستخدم "Pass by Value" عندما نريد تجنب تأثير الدالة على القيمة الأصلية. "Shallow Copy" تستخدم عندما نحتاج إلى نسخة سريعة وغير مكلفة من البيانات. "Deep Copy" تستخدم عندما نحتاج إلى نسخة كاملة ومستقلة من البيانات، بدون مشاركة بين النسخ. "Type Coercion" تحدث تلقائياً في العديد من الحالات، ولكن يمكننا استخدامها عندما نحتاج إلى تحويل صريح للأنواع لضمان التناسب الصحيح.
  23. تفضل اخي هذا هو الكود بعد التحديث واستخدام PDO update.php
  24. تم وضع علامات استفهام في جملة الادخال بسبب استخدام prepared statements في PHP. Prepared statements تسمح لنا بالاعداد مسبقا لعملية الادخال ولكن بدون تحديد القيم بعد. فالعلامات الاستفهام تعني ان هذه القيم سوف تعطى لاحقا قبل تنفيذ العملية. اما بالنسبة ل$stmt فهو ليس مجرد اسم متغير بل هو object من نوع Statement يمثل العملية المعدة مسبقا. عندما نستخدم prepared statements فانه يتم انشاء عضو Statement وتخزين التعليمة المعدة فيه قبل تحديد القيم. ثم نستخدم ميثودات على هذا العضو لتعيين القيم وتنفيذ العملية مثل bind_param و execute. بشكل مختصر: - العلامات استفهام لان القيم لم تحدد بعد في التعليمة المعدة - $stmt هو عضو Statement يمثل التعليمة المعدة قبل تحديد القيم السبب في ظهور العناصر ال HTML بعد تعديلها رغم استخدام دوال التنقية مثل mysqli_real_escape_string هو: - دوال التنقية مثل mysqli_real_escape_string تقوم بتنقية البيانات فقط من أخطار الاقتحام عبر SQL Injection. - لكنها لا تقوم بتنقية البيانات من الشوائب أو الرموز ال HTML. - فعندما نعدل بيانات تحتوي على عناصر HTML مثل <b>، <script> إلخ فسيظل هذا المحتوى HTML موجوداً. - مثل ما اخبرتك سابقا - لذا يجب إما تنقية البيانات يدوياً من الرموز الخطرة أو استخدام الدوال الخاصة بتنقية المحتوى HTML مثل strip_tags() أو htmlspecialchars(). - فهذه الدوال تقوم بترميز أو إزالة الرموز ال HTML لإبقاء البيانات آمنة عند عرضها. لذا الحل هنا هو إما تنقية يدوية للبيانات أو استخدام دوال تنقية HTML أيضاً مع mysqli_real_escape_string.
  25. يبدو أن هناك خطأ في كود SQL الذي قمت بتقديمه. الخطأ يتعلق بوجود خطأ في تسمية العمود "coustomerID" بدلاً من "customerID". إليك الكود المصحح: INSERT INTO installments (amount, coustomerID, date) VALUES (500, 2222, "11-oct-2023"), (800, 1111, "15-oct-2023"), (750, 3333, "30-oct-2023"); قمت بتصحيح التسمية إلى "coustomerID" . الآن يجب أن يكون الكود صحيحًا.
×
×
  • أضف...