-
المساهمات
3119 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
29
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو محمد عاطف17
-
هل تاكدت من ان هذا الزر يتم اعادة بناءه عند عمل update للصورة ؟ لانه من المتوقع ان المشكلة فى هذا الزر حيث يحتفظ بقيمة الصورة القديمة فى data-image_url . اذا كانت تلك المشكلة فيجب ان يتم اعادة بناء الزر عند التغير حيث يمكنك انشاء حدث يسمح باعادة بناء الزر . اذا لم يتم حل المشكلة هل يمكنك ارسال ملفات المشروع
-
الخطأ لديك هو فى الاضافة composer Companion فى vs code . يمكنك حل الطريقة عن طريق التالى : اولا قم بالضغط على قائمة file ثم Prefrences ثم settings. ستظهر لنا هذه الشاشة نقوم بكتابة هذا السطر ثم نضغط على هذا الرابط @ext:faelv.composer-companion سيقوم بفتح لنا هذا الملف لنقم بحذف هذين السطرين . وهكذا يجب ان يتم حل المشكلة ان شاء الله.
- 2 اجابة
-
- 2
-
فعلا للاسف لن يمكن ان تضيف هذه الخاصية فى بلوجر حيث انه ليس برمجة خاصة . نعم يمكنك هذا وهو الافضل من نظرى ومن الافضل ايضا ان تضيف عداد مثلا الى الصفحة تخبره انه سيقوم بتحويله . <script type="text/javascript"> function showLucky(e) { var t = e.feed; var n = t.entry || []; var r = t.entry[0]; for (var i = 0; i < r.link.length; ++i) { if (r.link[i].rel == "alternate") { var href = r.link[i].href; href += "?khatar3"; window.location.href = href; } } } function fetchLuck(e) { script = document.createElement("script"); script.src = "/feeds/posts/summary?start-index=" + e + "&max-results=1&alt=json-in-script&callback=showLucky"; script.type = "text/javascript"; document.getElementsByTagName("head")[0].appendChild(script); } function feelingLucky(e) { var t = e.feed; var n = parseInt(t.openSearch$totalResults.$t, 10); var r = Math.floor(Math.random() * n); r++; fetchLuck(r); } const urlParams = new URLSearchParams(window.location.search); const myParam = urlParams.get('link'); if(myParam != null){ var script = document.createElement("script"); script.src = "/feeds/posts/summary?max-results=0&alt=json-in-script&callback=feelingLucky"; script.type = "text/javascript"; document.getElementsByTagName("head")[0].appendChild(script); } </script> يمكنك استخدام هذا الكود وسيقوم بالعمل اذا وجد فى العنوان كلمة link سيقوم بتحويله الى مقالة عشوائية واذا لم يوجد سيقوم بفتح الصفحة الاساسية . وهنا فى هذا السطر يمكنك تغير الكلمة كما تريد . const myParam = urlParams.get('link');
- 11 اجابة
-
- 1
-
ما هى لغة برمجة الموقع ؟ الافضل هو تحويله من السيرفر لانه ليس من الافضل تحويله من ال js script لان المستخدم قد يتضايق فكيف اذا حملت الصفحة ثم يتم اعادة توجيهة اى انه سيقوم بتحميل صفحتين بدل من صفحة واحدة .
- 11 اجابة
-
- 1
-
فى الاصدار رقم 10 من لارافيل يمكنك استخدام هذا الامر لانشاء ملفات الترجمة php artisan lang:publish سيقوم بانشاء مجلد lang وبداخله مجلد en يحتوى على ملفات الترجمة . ناتى الان لاضافة لغه جديدة لنفترض مثلا اللغة العربية ستقوم بانشاء مجلد جديد يسمى ar فى مجلد lang وتضع نفس الملفات فى مجلد en ولكن تقوم بترجمتها . واذا اردت اضافة ملف جديد يجب اضافة فى جميع المجلدات فى مجلد lang . ثانيا لاستخدام الترجمة نستخدم الدالة __() وبين الاقواس نضع اسم الملف ثم نقطة ثم المفتاح الخاص بالترجمة ..فمثلا {{__('validation.string')}} هنا نخبر لارافيل ان تقوم باستخراج الترجمة من ملف validation و مفتاح يسمى string . لنفترض ان هذا هو ملف ال validation فى مجلد en <?php return [ "string" => "english" ] ?> و هذا هو ملف ال validation فى مجلد ar <?php return [ "string" => "عربى" ] ?> اذا لارافيل سيقوم بطباعة كلمة عربى اذا كانت اللغه العربية و طباعة كلمة english اذا كانت اللغه الانجليزية . ناتى الان كيف سيعرف لارافيل اللغة الان . Route::get('/test/{locale}', function (string $locale) { if (! in_array($locale, ['en', 'ar'])) { abort(400); } App::setLocale($locale); }); هنا فى تعريف ال route نستخدم local حيث هو نوع اللغه فاذا كان العنوان test/en اذا اللغه الانجليزية واذا كان test/ar فاذا اللغه العربية. لذلك لن تقوم باعادة جميع الشغل فقط ملفات ال views ستقوم باستخدام الدالة __() للترجمة وبالنسبة للقوالب ستختلف فقط فى طريقة العرض من اليسار الى اليمين فيجب عليك استخدام قالب يدعم الاتجاهين .
- 7 اجابة
-
- 1
-
يمكنك وضع البيانات الخاصة بقاعدة البيانات من اسم المستخدم وكلمة السر و ال host فى ملف env. ولارافيل تلقائيا سيقوم بالاتصال بقاعدة البيانات واستخدامها . وهذه هى البيانات التى يجب ملئها فى ملف env. DB_CONNECTION=mysql // هنا نوع قاعدة البيانات DB_HOST=127.0.0.1 // هنا الهوست الخاص بها اذا كان الهوست محليا على الجهاز فقط استخدم هذا الهوست DB_PORT=3306 // هنا ال port الخاص بقاعدة البيانات DB_DATABASE=laravel // هنا اسم قاعدة البيانات DB_USERNAME=root // هنا اسم المتخدم DB_PASSWORD= // هنا كلمة السر اما بالنسبة لجزء المصادقة (authentication) اى تسجيل الدخول والخروج فيمكنك انشائها بنفسك او استخدام جزمة breaze الخاصة بلارافيل وساخبرك بكيفية تنصيبها. اولا نقم باستخدام هذه الاوامر فى موجه الاوامر ويجب ان تكون فى المجلد الخاص بالمشروع ويفضل ان يكون مشروع جديد قد تم انشائه حديثا حتى لا يتم فقد بعض البيانات . composer require laravel/breeze php artisan breeze:install blade php artisan migrate وبعد تنفيذ هذه الوامر ستجد ان لارافيل قد قام باضافة عدد من المجلدات والملفات اهمهم : ملف auth.php فى مجلد routes حيث قام لارافيل بانشاء عدة عناوين للتسجيل الدخول وتسجيل الخروخ وانشاء حساب جديد وايضا عنوان لتفعيل الحسابات و نسيان كلمة المرور مجلد auth داخل مسار resources/views حيث قام لارافيل بانشاء واجهة مستخدم للتسجيل وتسجيل الخروج ويمكنك وضع الواجهة الخاصة بك فى هذه الملفات ولكن تاكد بوضع ال action فى ال form الى ال route الذى قام لارافيل بانشاءه . وايضا مجلد Auth فى مسار app/Http/Controllers وهى controllers خاصة بالمصادقة وقد قام لارافل بانشائها دون الحاجة الى كتابتها بانفسنا . واذا احتجت اى مساعدة فقط اخبرنى.
-
ان لارافيل من اطارات العمل القوية التى توفر العديد من الدوال والخصائص التى توفر عليك كثير من الوقت . اولا بالنسبة لرسائل الخطأ validation فان لارافيل تستخدم ما يسمى Error Bags اى حقائب الاخطاء وهى تستخدم خاصية ال Session اى ان الخطأ يتم تخزينه فى ال Session ويتم تضمينه فى ال request التالى ويستخدم مره واحده . فمثلا لو يوجد لديك form تستقبل بيانات وعند ارسالها للخادم يجب التحقق من صحتها باستخدام دالة validate. $request->validate([ 'title' => 'required|unique:posts|max:255', 'author.name' => 'required', 'author.description' => 'required', ]); هذا المثال كما موجود فى ال documentation الخاصة بلارافيل هنا يتم التحقق من البيانات التى تم ارسالها للخادم واذاما كانت خاطئة وليست مثل القواعدالتى تم وضعها فان لارافل يقوم بارجاعك الى الصفحة السابقه مع تضمين ال errors فى ال sessions . وبالنسبة لرسائل الخطأ ستجد ان لارافيل يوفر لك ملفا كاملا لجميع انواع رسائل الخطأ وستجده فى هذا المسار lang/en/validation.php ولارافيل لديه القوة فى معرفة نوع الخطأ وبالتالى سيقوم ارجاع رساله الخطأ اللازمة ويقوم ايضا بوضع اسم الحقل فى رساله الخطأ. ويمكنك عرض رسائل الخطأ عن طريق الداله @error او المتغير errors$
- 3 اجابة
-
- 1
-
دالة ال constructor هى من الدوال السحرية (magic method) فى php . تستخدم هذه الدالة لتهيئة المتغيرات او تنفيذ اوامر قبل انشاء الكائن وهى من ال concepts الاساسية فى برمجة الكائنات OOP. وتستخدم فى ال controller الخاص بلارافيل لتنفيذ اوامر قبل الذهاب الى الدالة الخاص ب ال route فكما موجود فى الصورة فانه قد قام باضافه middleware داخل الدالة وبذالك يخبر لارافل بانه يريد اى route يستخدم هذا ال controller بالتاكد منه انه مستخدم وله صلاحية الادمن.
-
هلا اخى . كما اخبرتك سابقا يمكنك تعديل اى صفحة كما تشاء فقط قم بتغير القاعدة الخاصة فى ملف htaccess . وقد قمت بتعديل الملف ليتناسب مع هذه الروابط. .htaccess
- 13 اجابة
-
- 1
-
نعم هى بالفعل ستقوم بتحسين الارشفه . قم فقط باستخدام الملف الذى ارفقته لك وسيعمل جيدا ان شاء الله . واذا اردت تغير صفحات اخرى ستقوم فقط كلمة page بكلمة post مثلا فى السطرين الاخرين بعد ان تقوم بنسخهمها . ولكن تاكد من مسارات الملفات فالكود المرفق يعتبر الملفات فى مجلد ال root اى العنوان كالتالى https://test.com/page.php اذا لم يكن العنوان هكذا فيجب تغيره فى القواعد الخاصة فى ملف .htaccess
- 13 اجابة
-
- 1
-
واياكم اللهم امين . هل يمكنك ان تخبرنى ما هى الملفات التى توجد لديك هل هى ملفات html ام php ؟ وماذا تقصد باضافة صفحات اخرى هل تقصد انك لكل استعلام تقوم باضافة صفحة ؟ لقد قمت بارفاق الملف الذى يحتوى على الاكواد ويجب ان تضعه فى المجلد الرئيسى لديك وسيعمل معك ولكن تاكد من انه لا يوجد لديك هذا الملف مسبقا اذا كان موجود مسبقا قم فقط باضافه هذه الاسطر . RewriteEngine On RewriteCond %{QUERY_STRING} id=(.*) RewriteRule ^page.php$ /page-%1.html? [R=301,L] RewriteRule ^page-([^?]*).html$ /page.php?id=$1 [QSA,L] اذا كان اول سطر موجود لديك فقم بحذفه ولا تضيفه مرة اخرى .htaccess
- 13 اجابة
-
- 1
-
وعليكم السلام ورحمة الله وبركاته . بالاضافه الى الحلول السابقه ستواجهك مشكلة كبيرة، ماذا اذا قام الشخص باعادة تحميل الصفحة بعد الذهاب اليها او اذا اراد احد مشاركة رابط العنوان او قام احد بكتابة العنوان يدويا مثل page-5.html . سيخبره الخادم ان هذه الصفحة غير موجودة لذلك يجب اضافه القاعدة الخاصة التى تسمح للخادم بمعرفة مكان الملف الخاص بالعنوان الجديد . قم فقط باضافه هذا السطر لملف ال htaccess RewriteRule ^page-([^?]*).html$ /page.php?id=$1 [QSA,L] هذه القاعدة ستقوم باخبار الخادم انه فى حال قام احد بالذهاب الى العناون page-4.html مثلا فان العنوان الخاص الذى سيذهب اليه الخادم هو page.php/id=4 . ولكن تاكد بانه لن يكون هناك اى عنوان اخر يبدا ب page- حتى لا يتم التداخل بين الروابط والافضل تغير كلمة page بكلمه خاصة اخرى لتوضح محتوى الصفحة مثلا لو الصفحة خاصه بالمقالات نغيرها الى article وهكذا .
- 13 اجابة
-
- 1
-
وعليكم السلام ورحمة الله وبركاته . بالفعل التحديث الجديد هذه الخاصية مزعجة بالفعل ويمكنك الغائها بطريقتين : اولا قم بالضغط بالزر الايمن للفأرة على الكود الذى يقسم الصفحة وقم بالغاء sticky scroll . ثانيا من قائمة view اختر appearance ثم قم بالغاء sticky scroll .
- 1 جواب
-
- 1
-
مرحبا احمد . بالفعل اذا كنت قد اتممت مسار React.native فان بينه وبين مسار electron.js مسارين فقط . ويمكنك تخطيهما والذهاب مباشرة الى مسار electron.js . ولكن من الافضل ان تقوم بعد اتمام مسار electron.js بالرجوع اليهما حيث انهما مهمين ومنهم مسار تطبيق عملى فيجب دراسته لاكتساب خبرة والاخر مسار اساسيات ال typescript وهو مهم ايضا . بالتوفيق لك
- 5 اجابة
-
- 1
-
مرحبا @muthanna. يمكنك التعليق اسفل الدرس الخاص بالدورة حتى يتمكن المدربون من مساعدتك بشكل افضل حيث هنا قيم الاسئلة العامة . اما بالنسبة للمدرب فنعم حينما قام بوضه دالة string فهو يقوم بتحويل المتغير من نوع الى نوع اخر وهذه العمليه فى البرمجة تسمى (casting) . وعند عملية الطباعة ليس من المهم تحويل الرقم من int الى str حيث سيتم طباعة الاثنين بنفس الطريقة ولكن المدرب بقوم بشرح اساسيات البرمجة و يقوم بالتدريب عليها حتى يتمكن الطلاب من فهم الاساسيات بشكل صحيح والتدرب عليها .
-
وعليكم السلام ورحمة الله وبركاته . ان الكود الذى قمت بارفاقة يعمل جيدا . حيث ان هذا ال api ألخاص بواتس اب يمكنك من ارسال رسالة الى الرقم الذى تقوم بادخاله اذا كان مسجل لدى واتس اب . https://wa.me/رقم الهاتف المشكلة ان الرقم الذى قمت بكتابته ليس مسجل لدى واتس اب اى لا يوجد عليه واتس اب لذلك لن يمكنك مراسلته لان الرسائل لن تصل . وهذه هى الرسالة التى تظهر لك . يمكنك استبدال الرقم برقم اخر لديه واتس اب وسيعمل جيدا معك . والافضل استخدام دالة encodeURI حيث ان الرسالة التى تقوم بارساله تحتوى على مسافات ورموز فيجب ان يتم عمل ترميز (encode) للعنوان حتى يتم ارسال الرسالة بشكل صحيح . window.open(encodeURI(url), '_blank').focus();
- 2 اجابة
-
- 1
-
ان لغات البرمجة تحتوى على انواع عديدة من المتغيرات ولناخذ مثلا لغة php لديها هذه الانواع : المتغير من نوع سلسلة نصية (string) هو متغير يحتوى على حروف وارقام على هيئة نص يمكنك طباعته او استخدامها كما تشائين . المتغير من int هو متغير يحتوى على ارقام صحيحة ولا يوجد بها كسور مثل 1 او 2 او 3 او 100. المتغير من float او double هو مثل int ولكنه من الممكن ان يحتوى على كسور مثل 1.2 او 1.4 او 100.5 وهكذا. المتغير من نوع boolean هو متغير يحتوى فقط على قيمتين سواء true او false . المتغير من نوع مصفوفة (array) هو عبارة عن مصفوفة تتكون من مفتاح خاص و قيمة مثل $arr = ["key1"=>"test","key2"=>100]; ناتى للدالة count و is_array : الدالة is_array تاخذ متغير و تقوم بالتحقق من نوعه اذا كان من نوع مصفوفة array ستقوم بارجاع true اى قيمة صحيحة واذا كان من نوع غير المصفوفة ستقوم بارجاع false اى قيمة خاطئة . وهى دالة مهمة تمكنك من التحقق من نوع المتغير حتى لايحدث خطأ غير مقصود اذا حاولتى استخدام دوال او شئ خاص بالمصفوفات على متغير من نوع غيرها . اما الدالة count فهى تقوم بارجاع مجموع العناصر فى المفصوصة مثلا هنا . $arr = [1,2,3,4,5]; echo count($arr); // ستقوم بطباعة رقم 5 هنا لاحظى كيف استخدمنا دالة count على متغير من نوع مصفوفة و هى تتكون من 5 عناصر اذا دالة count ستقوم باراجع رقم 5 . بالتوفيق ان شاء الله
- 4 اجابة
-
- 1
-
مرحبا . هل يمكنك تحديد لغة البرمجة الخاصة بالدوال المراد شرحها ؟ وايضا هل تقصدين دالة count ؟ لانه لا توجد دالة تسمى account
-
اذا كنت تقصد انك لا تريد القيمة ان تكون سالبة . اذا يمكنك استخدام الدالة abs فى php وهى تسمح لك بان تمرر لها متغير من نوع رقم (int,float) وستقوم بالتاكد من ان يكون رقما موجبا ويمكنك استخدامها كالتالى . echo abs($t - $v); //450 وهكذا سيكون الناتج دائما قيمة موجبة .
-
مرحبا امل . هذه الرساله ليست خطأ فى تنفيذ الشيفرة بل هى تشير الى انه فى حقل password يتم ارسال قيمة تحتوى على نص خطر من المحتمل ان يصيب النظام. وهذه ثغره تسمى SQL Integration و cross-site attack . ال SQL injection هو ان يقوم المستخدم بادخال نص خاص بتنفيذ تعليمات sql بدلا من النص الذى يجب ادخاله وحين استعمالها على الخادم الخاص بك تصبح البيانات فى خطر اذا لم يتم التحقق من البيانات التى ارسلها المستخدم . فمثلا بدلا من ان يدخل المستخدم كلمة المرور لتسجيل الدخول يقوم بكتابه تعليمة sql لتمكنه من تسجيل الدخول بدون الباسورد فقط بالايميل. اما cross-site attack وهو ما يظهر فى رساله الخطا هو بدلا من ادخال نص عادى يقوم المستخدم بادخال اوامر js او عناصر html تمكنه من حقن اوامر ضارة . فمثلا لنفترض هنا فى موقع الاكاديمية بدلا من ان المستخدم يقوم بادخال اسمه يقوم بادخال شيفرة جافاسكربت تقوم بقراءة ال cookies وارسالها الى الخادم الخاص بالمخترق وحين يقوم المخترق بكتابة تعليق او حتى سوال او يظهر اسمه فى اى صفحه فان شيفرة الاختراق سوف ترسل معلومات الضحيه للمخترق لذلك يجب التاكد من عدم حصول هذا . ويظهر انكى تحاولين ادخال قيمةخاطئة فى حقل password كما هو موضح وتقومين بادخال شيفرة وليس نص لذلك يحدث هذا الخطا .
- 1 جواب
-
- 1
-
قم باستخدام هذا الكود واخبرنى بالنتيجة !DOCTYPE html> <html lang="ar" dir="rtl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>الرئيسية</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> </head> <body> <div class="container"> <table class="table my-5 table-bordered table-striped"> <thead> <button class="btn btn-success mt-3"><a href="index.php" class="text-decoration-none text-light" >اضافة بيانات </a> </button> <tr> <th class="text-center table-primary" scope="col">#</th> <th class="text-center table-primary" scope="col"> الاسم</th> <th class="text-center table-primary" scope="col">البريد الالكتروني </th> <th class="text-center table-primary" scope="col"> رقم الهاتف </th> <th class="text-center table-primary" scope="col"> العمليات </th> </tr> </thead> <tbody> <?php include 'dbcon.php'; $sql="select *from users"; $resault=mysqli_query($conn,$sql); $resault=mysqli_query($conn,$sql); while($row=mysqli_fetch_array($resault)) { $id=$row['id']; echo '<tr > <td class="text-center "> '.$row['id'].' </td> <td class="text-center "> '.$row['name'].' </td> <td class="text-center "> '.$row['email'].' </td> <td class="text-center "> '.$row['phone'].' </td> <td class="text-center"> <button class="btn btn-primary my-3"> <a href="update.php?updateid='.$id.'" class="text-light text-decoration-none"> تعديل</a> </button> <button class="btn btn-danger confirm" id="delete-row"> <a href="delete.php?deleteid='.$id.'" class="text-light text-decoration-none delete">حدف </a> </button> <button class="btn btn-success" id="download" onclick="printPage(10)">طباعة</button> </td> </tr>'; } ?> </tbody> </table> </div> <script> let s = document.querySelectorAll('.delete'); for (i = 0; i < s.length; ++i) { s[i].addEventListener('click', (e) => { e.preventDefault(); Swal.fire({ title: "Do you want to save the changes?", showDenyButton: true, confirmButtonText: "حذف", denyButtonText: "الغاء" }).then((result) => { if (result.isConfirmed) { window.location = e.target.href; } else if (result.isDenied) { Swal.fire("لم يتم الحذف", "", "info"); } }); }); } </script> </body> </html> الخطأ هنا حيث لم تقم بتعديل هذا السطر كما قام المدرب مصطفى بتعديله ليتناسب مع كود الجافا سكريبت
-
نعم بالفعل الخطا فى ال deleteid هو الان ب null . هناك خطأ عند اعادة التوجيه . يمكنك تجربة الكود الذى ارفقته لك و اخبارى بالنتيجه
-
هل عند الضغط على حذف يذهب الى صفحة delete.php ؟ هل يمكنك ارسال الرابط الذى يقوم بالذهاب اليه وصورة الصفحة عند تحميلها . لان الكود من المفترض ان يحذف جيدا من الممكن ان تكون هناك مشكلة فى الاتصال بقاعدة البيانات
-
وعليكم السلام ورحمة الله وبركاته . اولا من الافضل الا يتم الحذف عن طريق الذهاب الى عنوان الحذف بل الافضل ان يتم ارساله عن طريق form . ثانيا انت قمت باستيراد مكتبة sweetalert بنجاح ولكنك لم تستعملها فى الكود لديك . اولا يجب اضافة eventlisnter على العنصر الخاص بالذهاب الى عنوان الحذف ويجب اضافه class اليه . ثم عند الضغط عليه نستخدم الكود الخاص ب sweet alert . <button class="btn btn-danger confirm" id="delete-row"> <a href="delete.php?deleteid='.$id.'" class="text-light text-decoration-none delete">حدف </a> </button> هنا قمنا باضفة class الى العنصر a يسمى delete . <script> let s = document.querySelectorAll('.delete'); for (i = 0; i < s.length; ++i) { s[i].addEventListener('click', (e) => { e.preventDefault(); Swal.fire({ title: "Do you want to save the changes?", showDenyButton: true, confirmButtonText: "حذف", denyButtonText: "الغاء" }).then((result) => { if (result.isConfirmed) { window.location = e.target.href; } else if (result.isDenied) { Swal.fire("لم يتم الحذف", "", "info"); } }); }); } </script> هنا قمنا باحضار جميع العناصر التى تحتوى على ال class الخاص delete ونقوم بالتكرار عليها واستماع الحدث click وانشاء عنصر ال sweet alert الذى يحتوى على زرارين فقط ويمكنك تغير النص الخاص بالزر كما تريد . وعند الضغط على حذف سيتم الحذف واذا تم الغاء ستظهر لك رساله بانه لم يتم الحذف وستبقى فى نفس الصفحة . وهذا هو الكود كاملا !DOCTYPE html> <html lang="ar" dir="rtl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>الرئيسية</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> </head> <body> <div class="container"> <table class="table my-5 table-bordered table-striped"> <thead> <button class="btn btn-success mt-3"><a href="index.php" class="text-decoration-none text-light" >اضافة بيانات </a> </button> <tr> <th class="text-center table-primary" scope="col">#</th> <th class="text-center table-primary" scope="col"> الاسم</th> <th class="text-center table-primary" scope="col">البريد الالكتروني </th> <th class="text-center table-primary" scope="col"> رقم الهاتف </th> <th class="text-center table-primary" scope="col"> العمليات </th> </tr> </thead> <tbody> <?php include 'dbcon.php'; $sql="select *from users"; $resault=mysqli_query($conn,$sql); $resault=mysqli_query($conn,$sql); while($row=mysqli_fetch_array($resault)) { $id=$row['id']; echo '<tr > <td class="text-center "> '.$row['id'].' </td> <td class="text-center "> '.$row['name'].' </td> <td class="text-center "> '.$row['email'].' </td> <td class="text-center "> '.$row['phone'].' </td> <td class="text-center"> <button class="btn btn-primary my-3"> <a href="update.php?updateid='.$id.'" class="text-light text-decoration-none"> تعديل</a> </button> <button class="btn btn-danger confirm" id="delete-row"> <a href="delete.php?deleteid='.$id.'" class="text-light text-decoration-none delete">حدف </a> </button> <button class="btn btn-success" id="download" onclick="printPage(10)">طباعة</button> </td> </tr>'; } ?> </tbody> </table> </div> <script> let s = document.querySelectorAll('.delete'); for (i = 0; i < s.length; ++i) { s[i].addEventListener('click', (e) => { e.preventDefault(); Swal.fire({ title: "Do you want to save the changes?", showDenyButton: true, confirmButtonText: "حذف", denyButtonText: "الغاء" }).then((result) => { if (result.isConfirmed) { window.location = e.target.href; } else if (result.isDenied) { Swal.fire("لم يتم الحذف", "", "info"); } }); }); } </script> </body> </html>