-
المساهمات
14490 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
384
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Mustafa Suleiman
-
ما هو إطار الواجهة الخلفية؟ رسالة الخطأ AxiosError: Request failed with status code 419 تعني عدم تطابق رمز CSRF (الحماية من التزوير عبر المواقع)، أي أن الخادم يتوقع رمز CSRF صالحًا في طلبك، لكنه إما مفقود أو غير صحيح. رمز CSRF هو رمز مميز وفريد من نوعه يتم إنشاؤه بواسطة جانب الخادم لمنع هجمات CSRF ويعمل كإجراء أمني لضمان أن الطلبات الواردة إلى تطبيق الويب لديك شرعية وليست من مصادر ضارة. في حين رمز الحالة 419 يعني رمز حالة HTTP غالبًا 419 Page Expired إلى أن الخادم تلقى طلبك لكنه رفضه بسبب رمز CSRF غير صالح أو مفقود. عند إرسال الطلبات في Postman، فإنه لا يقوم بتضمين ملفات تعريف الارتباط cookies من متصفح الويب تلقائيًا، ومن الشائع تخزين رموز CSRF في ملفات تعريف الارتباط، ويجب تكوين تطبيق الويب لتضمين رمز CSRF في كل طلب يقوم بتعديل البيانات على الخادم (مثل طلبات POST و PUT و DELETE).
-
سرعة الموقع غير مهمة في حال كانت واجهة المستخدم بحاجة إلى التحسين، فعند التوجه للموقع لم تقابلني مشكلة في سرعة تحميله حيث استغرق 3 ثوانِ تقريبًا على إتصال VDSL، بينما 5 ثوانِ على إتصال Fast 3G، مع الأخذ في الإعتبار أنك تستخدم استضافة مجانية. كتحسين قم بوضع سكريبت leaflet و رابط تنسيقات font-awesome في نهاية عنصر body وليس في عنصر head. أيضًا ضغط الصور وتقليل حجمها واستخدام صيغة webp أو avif، بجانب عمل minify لملفات الأكواد لديك. لكن عليك العمل على واجهة الموقع من خلال ترتيبها واختيار ألوان هادئة ومريحة للعين.
- 4 اجابة
-
- 1
-
-
أرجو تجربة إعادة تحديث الصفحة بالضغط على CTRL + F5 من أجل حذف الملفات المؤقتة، وإن فعلت ذلك لنقم بتجربة متصفح آخر. إن استمرت المشكلة لنقم بتجربة تحميل وتثبيت Cloudflare WARP فهو بمثابة طبقة وسيطة مثل الـ VPN من خلال شبكة Cloudflare وبعد التثبيت قم بتشغيل التطبيق بالضغط على زر الإتصال مباشرًة وتفقد الدروس مرة أخرى. https://install.appcenter.ms/orgs/cloudflare/apps/1.1.1.1-windows-1/distribution_groups/release وذلك لتفقد هل يوجد مشكلة بالإنترنت أم لا.
-
أعلى اليمين في المتصفح ابحث عن الإضافات المثبتة لديك، وعند الوقوف بمؤشر الفأرة عليها سيظهر اسمها، وإن لم تجد إضافات ظاهرة، اضغط على أيقونة مشابة لأحد الأيقونات التالية: وسيظهر لك الأيقونات المثبتة بالمتصفح. إن لم تجدها أرجو ذكر اسم المتصفح لتوضيح الطريقة.
-
تلك إضافة بالمتصفح لمنع الإعلانات، في حال لم تعرفها فغالبًا ليست مثبتة لديك في حال كنت أنت فقط من تستخدم الحاسوب.
-
عذرًا على ذلك عمر، في حال كان لديك إضافة adblock فغالبًا ذلك سبب المشكلة، استخدم uBlock Origin فتلك الإضافة لا تسبب مشكلة. ثم إعادة تحديث الصفحة بالضغط على CTRL + F5 من أجل حذف الملفات المؤقتة. إن استمرت أرجو تجربة تحميل وتثبيت Cloudflare WARP فهو بمثابة طبقة وسيطة مثل الـ VPN من خلال شبكة Cloudflare وبعد التثبيت قم بتشغيل التطبيق بالضغط على زر الإتصال مباشرًة وتفقد الدروس مرة أخرى. https://install.appcenter.ms/orgs/cloudflare/apps/1.1.1.1-windows-1/distribution_groups/release وذلك لتفقد هل يوجد مشكلة بالإنترنت أم لا.
-
ما هي مقابلة العمل المقصودة؟
- 11 اجابة
-
- 1
-
-
هل المقصود التقدم للإختبار في الأكاديمية بخصوص الدورة؟ أم أنك تودين تمارين على Excel؟
- 11 اجابة
-
- 1
-
-
مشكلة الأساسيات أنه هناك رغبة في التخلص منها سريعًا ظنًا أنها غير مفيدة وأننا لا نستطيع إنجاز شيء مفيد بواسطتها، وفيما بعد ستجد أنك تعود إليها عند مواجهة مشكلة لا تستطيع حلها لأنك لست مستوعب لما يحدث بسبب الضعف في الأساسيات، جميع التنقيات مبنية على الأساسيات ومن الخارج يظهر أنّ هناك سحر يدور ولكن عند دراسة كيف تم بنائها ستزول تلك الدهشة. في مقابلات العمل سيتم سؤالك عن الأساسيات بشكل غالب عن التقنيات، فالشخص الذي لديه أساسيات قوية أفضل من الشخص الذي لديه معرفة قوية بالإطار أو المكتبة، فالأول يستطيع تعلم ذلك بسهولة، لكن الثاني لا يستطيع حل المشاكل التي ستواجهه لضعف الأساسيات، أيضًا لأول سيكتب كود أفضل من حيث الأداء. مثلاً في مقابلات العمل ستجد أنه يتم السؤال عن SQL وحل أسئلة معقدة من خلالها لمطوري الواجهة الخلفية وليس استخدام مكتبة لفعل ذلك.
-
لا حاجة إلى ذلك طالما أنه مشروع تخرج فلن تحتاج ذلك، أظن أنّ المقصود هو تخصيص مساحة معينة من الذاكرة لتنفيذ تلك العملية ولا يتخطى الأمر ذلك صحيح؟ من الممكن تحديد ذلك من خلال دالة ini_set لضبط إعدادات الذاكرة قبل العملية ثم إعادة ضبطها بعد الانتهاء: ini_set('memory_limit', '128M'); ini_set('memory_limit', '64M'); وذلك هو الحد أقصى للذاكرة الذي يمكن لأي سكربت PHP استخدامه.
- 12 اجابة
-
- 1
-
-
من الأفضل دائمًا اختبار العملية ببيانات تجريبية مماثلة لحجم البيانات الفعلي للتأكد من أنها تعمل بشكل صحيح قبل استخدامها في بيئة الإنتاج. والأمر يعتمد على أمور مختلفة، فيجب أن تكون موارد الاستضافة وهما الذاكرة و CPU كافية للتعامل مع حجم البيانات، والكود مكتوبًا بكفاءة لتجنب استهلاك موارد إضافية، حيث تُستخدم الذاكرة لتخزين ملف Excel أثناء إنشائه بجانب وحدة المعالجة المركزية لتنفيذ مكتبة PHPSpreadsheet وإنشاء ملف Excel. وقد تحتاج إلى تعديل بعض إعدادات PHP مثل memory_limit و max_execution_time للسماح للسكربت بالعمل مع البيانات الكبيرة. وفي حالة البيانات الكبيرة جدًا، من الأفضل تقسيمها إلى ملفات Excel متعددة لتحسين الأداء. أي مثلاً قاعدة بيانات صغيرة إلى متوسطة بعدد 10 آلاف إلى 50 ألف سجل، فستكون الاستضافة المشتركة قادرة على تنفيذ ذلك في حيث ستحتاج من 128 إلى 256 ميجابايت من الذاكرة العشوائية. لكن يجب ألا يؤثر ذلك على استخدام الموقع بالنسبة لباقي المستخدمين، لذا تفقد الموارد المتاحة الباقية أثناء تنفيذ العملية هل هناك ما يكفي لعمل الموقع بشكل طبيعي؟
- 12 اجابة
-
- 1
-
-
يتم ذلك من خلال الـ API، ففي الواجهة الخلفية يتم إنشاء API's ولها مسارات end points أو نقاط نهاية، نستخدم تلك المسارات في الواجهة الأمامية لإرسال البيانات من خلال طلبات POST أو الحصول على البيانات من خلال طلبات GET. ستجد تفصيل هنا:
-
ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم الأسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
- 2 اجابة
-
- 1
-
-
من خلال جافاسكريبت، أولاً إنشاء حقول Select مع IDs مختلفة و display: none لإخفائها في البداية، وإنشاء حقل input من نوع file لرفع الصور. نستخدم addEventListener لالتقاط event التغيير change التغيير في Select الأول، وعند تغيير Select الأول، يتم إظهار Select الثاني و إخفاء الباقي، وهكذا عند تغيير Select الثاني، يتم إظهار Select الثالث بناءً على اختيار Select الأول و الثاني. وإظهار حقل رفع الصور فقط عند اختيار "Bachelors" في Select الثالث. <!DOCTYPE html> <html> <head> <title>Dependent Select Fields</title> </head> <body> <label for="area">Area name:</label><br> <select id="area" name="H1"> <option value="">Select an area</option> <option value="region1">The first region</option> <option value="region2">The second area</option> <option value="region3">The third region</option> </select> <div id="side-container" style="display:none;"> <label for="side">Side:</label><br> <select id="side" name="H2"> <option value="">Select a side</option> <option value="side1">The first side</option> <option value="side2">The second side</option> <option value="side3">The third side</option> </select> </div> <div id="academic-container" style="display:none;"> <label for="academic">Academic:</label><br> <select id="academic" name="H3"> <option value="">Select academic level</option> <option value="bachelors">Bachelors</option> <option value="preparatory">Preparatory school</option> <option value="medium">Medium</option> </select> </div> <div id="jurion-container" style="display:none;"> <label for="jurion">Jurion:</label><br> <select id="jurion" name="H4"> <option value="">Select a jurion</option> <option value="engineer">Engineer</option> <option value="doctor">Doctor</option> </select> </div> <div id="tion-container" style="display:none;"> <label for="tion">Tion:</label><br> <select id="tion" name="H4"> <option value="">Select a tion</option> <option value="neer">Neer</option> <option value="tor">Tor</option> </select> </div> <div id="image-container" style="display:none;"> <label for="image">Image:</label><br> <input type="file" id="image" name="H5"> </div> <script> const areaSelect = document.getElementById('area'); const sideContainer = document.getElementById('side-container'); const academicContainer = document.getElementById('academic-container'); const jurionContainer = document.getElementById('jurion-container'); const tionContainer = document.getElementById('tion-container'); const imageContainer = document.getElementById('image-container'); areaSelect.addEventListener('change', () => { sideContainer.style.display = 'block'; academicContainer.style.display = 'none'; jurionContainer.style.display = 'none'; tionContainer.style.display = 'none'; imageContainer.style.display = 'none'; }); sideContainer.querySelector('select').addEventListener('change', () => { academicContainer.style.display = 'block'; }); academicContainer.querySelector('select').addEventListener('change', (event) => { const selectedValue = event.target.value; if (areaSelect.value === 'region1' && selectedValue === 'bachelors') { jurionContainer.style.display = 'block'; tionContainer.style.display = 'none'; } else if (areaSelect.value === 'region2' && selectedValue === 'bachelors') { jurionContainer.style.display = 'none'; tionContainer.style.display = 'block'; } else { jurionContainer.style.display = 'none'; tionContainer.style.display = 'none'; } if (selectedValue === 'bachelors') { imageContainer.style.display = 'block'; } else { imageContainer.style.display = 'none'; } }); </script> </body> </html>
- 2 اجابة
-
- 1
-
-
متى تقوم بإنهاء 4 مسارات؟ في حال تريد التخصص بمهارة معينة ضمن الدورة، وليس الدورة كلها، مثل التخصص في الواجهة الخلفية فقط في دورة جافاسكريبت أو بايثون. في حال ليس لديك توجه ناحية تخصص معين، نقوم بإنهاء الدورة بالكامل ثم التعمق في التخصص الذي تريده. الحصول على الشهادة ليس بتلك الأهمية، في الواقع العملي المهم هو ما تستطيع تنفيذه والمهارات التي لديك ووجود معرض أعمال بجودة جيدة يثبت ذلك، الشهادة بمثابة دليل فقط على أنك اجتزت محتوى تعليمي معين.
-
وصفك للأمر ليس صحيح، فليس لديك تحكم بموقع Shein فور مغادرة الزائر موقعك ليس لديك تحكم فيما يفعله، تفقدت الـ API الخاص بالمنصة وليس متاح سوى المنتجات التي تم طلبها بالفعل. لذا الأمر بشكل منطقي غير ممكن، الصحيح هو عرض المنتجات على موقعك وتفاصيل كاملة عنها ثم توصيلها للعميل بعد أن يطلبها وذلك يعرف باسم Dropshipping. للتوضيح الـ Dropshipping حرام بسبب بيع الشخص ما لا يملك، إلا في حالة أنك وكيل أو مسوق لذلك الموقع مثل منصة تاجر مثلاً، بحيث يكون لديك حساب به وتسوق للمنتجات وتبيعها بالسعر الذي تريده.
-
30 عمودًا في جدول واحد يعتبر عددًا صغيرًا جدًا ولا يمثل أي مشكلة لمعظم أنظمة إدارة قواعد البيانات. وللتوضيح بشكل دقيق، سأفترض أنك تعمل على MySQL بما أنها نظام قواعد البيانات الأشهر مع مشاريع PHP، فالحد الأقصى النظري الذي يُذكر في وثائق MySQL لعدد الأعمدة في الجدول هو 4096 عمودًا. أما الحد العملي فعمومًا الأفضل هو عدم عدم تجاوز بضع مئات من الأعمدة في جدول واحد، وذلك للحفاظ على أداء قاعدة البيانات. وعليك تقسيم البيانات إلى جداول متعددة ذات علاقات واضحة بينها، بدلاً من إنشاء جدول واحد يحتوي على عدد كبير جدًا من الأعمدة مع استخدم أنواع البيانات المناسبة للأعمدة لتوفير مساحة التخزين وتحسين الأداء، واستخدم الفهارس لتسريع عمليات البحث في الجداول التي تحتوي على عدد كبير من الأعمدة.
- 10 اجابة
-
- 1
-
-
من ضمن وصف الدورة هو التالي: بعد حصولك على الشهادة، وإن لم تحصل على عمل خلال 6 أشهر يغطي قيمة الدورة التي دفعتها، فسنعيد لك ما دفعت. بهذه البساطة! وبعد منحك الشهادة ستحصل على باقة كتابة السيرة الذاتية في موقع بعيد بقيمة 99$ مجانًا. أرجو ذكر الدورة لتحصل على إجابة واضحة، أغلب الدورات تؤهلك لذلك ولكن هناك مجهود منك مطلوب في تعلم مهارات إضافية والتعمق أكثر بالطبع، فلا توجد تلك الدورة التي تعلمك كل شيء في أي مكان. أرجو توضيح الدورة
-
بعد الإنتهاء من الدورة ستتاح لك فرص العمل بالمجالات التالية: مطور Full-stack لبناء مواقع الويب والمتاجر الإلكترونية أي قادر على تطوير الواجهة الأمامية والخلفية أيضًا من خلال Django و Flask. مطور واجهة خلفية Back-End فقط. مجال تعلم الآلة ولكن هنا أنت بحاجة إلى تعلم المزيد وعدم الإكتفاء بالدورة والأمر بحاجة إلى وقت أكثر من أي مجال آخر. محلل بيانات (Data Analyst )، حيث ستتمكن من استخدام مهارات البرمجة الخاصة بك للتحليل واستخراج البيانات من مصادر متنوعة، ومعالجة البيانات، وإجراء التحليلات الإحصائية والتعلم الآلي باستخدام مكتبات Python مثل pandas و NumPy و scikit-learn. مطور odoo كل مجال وله المهارات الخاصة به وفي الدورة ستتمكن من تعلم الأساسيات اللازمة لكل منهم، بعد ذلك سيتعين عليك التعمق أكثر وتنفيذ مشاريع أكثر في المجال الذي ستختاره. لكن اختار بناءًا على المطلوب في سوق العمل الذي تستهدفه، هل تستهدف الشركات المحلية؟ إذن ابحث عن الوظائف المعروضة على مواقع التوظيف مثل LinkedIn و Glassdoor و Indeed وغيرهم ثم تفقد ما هو المجال المطلوب بكثرة وله وظائف بمستوى Junior. ستجد تفصيل هنا:
-
خبراتك السابقة بخصوص الحاسوب ستسهل عليك الأمر كثيرًا، بخصوص العمل، السن متقدم بعض الشيء بالنسبة لمستوى Junior في البلدان العربية، لذا ستواجه صعوبة مقارنًة بمن هم أصغر سنًا ذلك أمر عليك تقبله، في الدول الأجنبية يتم تقبل الـ Career shift أكثر، لكن هناك أمر هام وأنّ الرزق مكتوب للجميع فما عليك سوى السعي والمحاولة وعند التقدم لمقابلات العمل توقع الرفض بكثرة وذلك يحدث للجميع لكن تعلم من ذلك وقم بتحسين ما تحتاج إليه إن تمكنت من معرفة سبب الرفض. ففي العالم العربي بالنسبة لمستوى Junior أغلب الشركات تريد سن 30 عام لذلك كحد أقصى أو ربما 32 مثلاً. لذا عليك وضع العمل الحر في إعتبارك أو العمل عن بُعد مع شركات خليجية أو أجنبية، وما سبق سيوفر لك خبرة لتتخطي مستوى Junior وتصبح بمستوى Mid-level للعمل في شركة.
- 6 اجابة
-
- 2
-
-
لتسهيل الأمر إليك كود SQL لتوليد قاعدة البيانات مع بيانات وهمية: -- إنشاء قاعدة البيانات CREATE DATABASE IF NOT EXISTS ecommerce_db; USE ecommerce_db; -- إنشاء جدول المنتجات CREATE TABLE Products ( product_id INT PRIMARY KEY, product_name VARCHAR(255), category VARCHAR(255), price DECIMAL(10,2) ); -- إنشاء جدول الطلبات CREATE TABLE Orders ( order_id INT PRIMARY KEY, product_id INT, quantity INT, order_date DATE, FOREIGN KEY (product_id) REFERENCES Products(product_id) ); -- إدراج بيانات وهمية في جدول المنتجات INSERT INTO Products (product_id, product_name, category, price) VALUES (1, 'هاتف ذكي', 'إلكترونيات', 500.00), (2, 'حاسوب محمول', 'إلكترونيات', 1000.00), (3, 'سماعة رأس', 'إلكترونيات', 50.00), (4, 'تيشيرت', 'ملابس', 20.00), (5, 'بنطلون جينز', 'ملابس', 50.00), (6, 'حذاء رياضي', 'ملابس', 80.00), (7, 'كتاب', 'كتب', 10.00), (8, 'قلم', 'أدوات مكتبية', 2.00), (9, 'دفتر ملاحظات', 'أدوات مكتبية', 5.00); -- إدراج بيانات وهمية في جدول الطلبات INSERT INTO Orders (order_id, product_id, quantity, order_date) VALUES (1, 1, 2, '2023-03-01'), (2, 3, 1, '2023-03-02'), (3, 2, 1, '2023-03-03'), (4, 4, 3, '2023-03-04'), (5, 5, 2, '2023-03-05'), (6, 1, 1, '2023-03-06'), (7, 7, 5, '2023-03-07'), (8, 8, 10, '2023-03-08'), (9, 9, 2, '2023-03-09'), (10, 2, 1, '2023-03-10'), (11, 6, 2, '2023-03-11'), (12, 3, 3, '2023-03-12'); تستطيعي زيادة عدد البيانات كما تريدين باستخدام دالة WHILE لإنشاء حلقة تقوم بإدراج سجلات جديدة في الجدول حتى تصل إلى عدد السجلات المطلوب. أو من خلال Python مع مكتبات مثل random و faker لإنشاء بيانات وهمية عشوائية، ثم استخدام مكتبات مثل pyodbc أو mysql.connector لإدراجها في قاعدة بيانات SQL.
- 9 اجابة
-
- 1
-
-
الفكرة من إصدار 11 في لارافل هو تبسيط هيكلية الملفات بشكل كبير، حيث تم ضم بعضها في ملفات معينة وإخفاء البعض مع السماحية بإظهارها عن الحاجة فقط لأن الغالبية لا تحتاج ذلك وإلى التعديل على ملفات معينة، ولم يعد هناك ملف AppServiceProvider افتراضيًا في لارافل 11. وستجد أن جميع الـ service providers التي تقوم بإنشائها أصبحت في مسار bootstrap/providers.php عامًة الـ Service Provider هو كلاس في Laravel لتسجيل الخدمات والتبعيات dependencies في حاوية الخدمة Service Container، أي فكر به على أنه مكان لتهيئة مختلف أجزاء التطبيق وتسجيل جميع الخدمات التي يحتاجها التطبيق قبل بدء التشغيل. أي الـ Service Providers هي مثل مخططات البناء blueprints التي تحدد كيفية بناء وتوصيل مكونات المنزل المختلفة، مثل الكهرباء، والسباكة، والتدفئة، وحاوية الخدمات Service Container هي مثل صندوق الأدوات الذي يحتوي على جميع الأدوات والمواد اللازمة لبناء المنزل. والروابط Bindings هي مثل التعليمات التي تخبرك بأي أداة تستخدمها لبناء كل مكون. الفائدة من ذلك هو جعل الكود أكثر تنظيماً حيث يتم فصل تسجيل الخدمات وإعدادات التهيئة في أماكن مخصصة، وتستطيع بسهولة إضافة أو تعديل الخدمات التي يحتاجها التطبيق وإعادة استخدام نفس Service Provider في تطبيقات مختلفة. لإنشاء ذلك ستحتاج إلى تنفيذ الأمر التالي: php artisan make:provider testServiceProvider تستطيع كتابة أي اسم تريده بدلاً من testServiceProvider. بعد ذلك ستجد ميثود register وبها عليك تسجيل الروابط bindings في حاوية الخدمات Service Container، ويجب عليك تجنب استدعاء أي دوال أخرى من إطار العمل داخل register، لأنها قد لا تكون متاحة بعد. وفي ميثود boot نقوم بتهيئة الخدمات وتنفيذ أي عمليات أخرى مطلوبة بعد تحميل جميع مكونات التطبيق، وبإمكانك الوصول إلى جميع الخدمات المسجلة داخل boot.
- 4 اجابة
-
- 2
-
-
-
في مجال العمل الحر، تحتاج إلى الصبر والتعامل مع الأمور بإحترافية، أمور مثل ذلك تحدث كثيرًا، لذا لا تقوم بإزعاج العميل بل أعطه الوقت لفعل ما يريد وقم بالعمل أنت على مشاريع أخرى أي لا تتوقف، ثم عند العودة وتوضيح الأمر لك، قم بزيادة مدة المشروع لتتناسب مع التأخير ثم استئناف العمل. يكفي فقط رسالة بالسؤال عن أحواله، ثم تذكيره بمراستلك عند التوافر. وللعلم لا مشكلة في إرسال بريدك طالما قام بطلبه هو الفكرة هي تسهيل الأمر له طالما أن الملف كبير، وطالما أن المشروع ضمن مستقل فلا مشكلة.
- 7 اجابة
-
- 1
-
-
تقوم بتضمين ملف register.php مرتين، وذلك يسبب حدوث تعارضات أو الكتابة فوق المتغيرات، احذف السطر include 'register.php'; من داخل كتلة if (isset($_POST['save_btn']))، حيث تحتاج فقط إلى تضمينه مرة واحدة في بداية البرنامج. <?php include 'register.php'; ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="styles.css"> <title>User Registration</title> </head> <body> <div> <h1>User Registration Form</h1> <form action="register.php" method="POST"> <input type="text" name="Firstname" placeholder="Firstname"> <br> <br> <input type="text" name="Lastname" placeholder="Lastname"> <br> <br> <input type="number" name="Age" placeholder="Age"> <br> <br> <input type="submit" name="save_btn" value="Save Data"> </form> </div> <?php if (isset($_POST['save_btn'])) { $fname = mysqli_real_escape_string($connect, $_POST['Firstname']); $lname = mysqli_real_escape_string($connect, $_POST['Lastname']); $age = mysqli_real_escape_string($connect, $_POST['Age']); $query = "INSERT INTO students (Firstname, Lastname, Age) VALUES ('$fname', '$lname', '$age')"; $result = mysqli_query($connect, $query); if ($result) { echo "تم إدراج السجل بنجاح!"; } else { echo "خطأ: " . mysqli_error($connect); } } ?> </body> </html>
- 1 جواب
-
- 1
-