-
المساهمات
3124 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
29
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو محمد عاطف17
-
جزء ال select مختلف عن ال input حيث يجب عليك التأكد من القيمة الموجودة في قاعدة البيانات وقيمة ال option وإذا كانت متساوية نقوم بوضع خاصية selected هكذا : <select name="type" > <option value="">select type</option> <option value="img1" <?php echo ($row['type']=="img1") ? 'selected':'' ?> >img1</option> <option value="img2" <?php echo ($row['type']=="img2") ? 'selected':'' ?>>img2</option> </select> وفي المثال السابق إفترضنا أنه يوجد لدينا عمود في قاعدة البيانات يسمى type وهو يحوي قيمتين فقط إم img1 أو img2 . ونقوم بالتحقق من البيانات التي ترجع إلينا للتعديل فإذا كانت مثل قيمة ال option نضع خاصية selected لها . وبهذا ستظهر القيمة لهذا العمود في ال form
-
أولا يجب عليك إنشاء ملف ال form كالتالي : <!DOCTYPE html> <html lang="ar"> <head> <meta charset="UTF-8"> <title>رفع الصور</title> </head> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> <label for="img1">صورة 1:</label> <input type="file" name="img1" id="img1"><br> <label for="img2">صورة 2:</label> <input type="file" name="img2" id="img2"><br> <label for="img3">صورة 3:</label> <input type="file" name="img3" id="img3"><br> <label for="img4">صورة 4:</label> <input type="file" name="img4" id="img4"><br> <label for="img5">صورة 5:</label> <input type="file" name="img5" id="img5"><br> <input type="submit" value="رفع الصور"> </form> </body> </html> بعد ذلك نقوم بإنشاء سكريبت الرفع ملف upload.php : <?php // إعدادات قاعدة البيانات $servername = "localhost"; $username = "root"; $password = ""; $dbname = "db_name"; // إنشاء اتصال بقاعدة البيانات $conn = new mysqli($servername, $username, $password, $dbname); // التحقق من نجاح الاتصال if ($conn->connect_error) { die("فشل الاتصال بقاعدة البيانات: " . $conn->connect_error); } // تحديد المجلد الذي سيتم تخزين الملفات فيه $target_dir = "img/"; // المتغير الذى يحوي مسارات الملفات لوضعها في قاعدة البيانات $path_files = []; // معالجة كل حقل من حقول الملفات for ($i = 1; $i <= 5; $i++) { if (isset($_FILES["img$i"])) { $uploadOk = 1; // تحقق من حجم الملف if ($_FILES["img$i"]["size"] > 5000000) { // 5MB كحد أقصى echo "عذراً، حجم الملف " . $_FILES["img$i"]["name"] . " كبير جداً.<br>"; $uploadOk = 0; } } } // تحقق من $uploadOk لتجنب رفع الملفات إذا كان هناك مشكلة if ($uploadOk == 0) { echo "عذراً، لم يتم رفع الملفات .<br> "; } else { for ($i = 1; $i <= 5; $i++) { $target_file = $target_dir . basename($_FILES["img$i"]["name"]); move_uploaded_file($_FILES["img$i"]["tmp_name"], $target_file); $path_files[$i] = [$target_file]; } $stmt = $conn->prepare("INSERT INTO table_name (img1,img2,img3,img4,img5) VALUES (?, ?,?,?,?)"); $stmt->bind_param("sssss", $path_files[1], $path_files[2],$path_files[3],$path_files[4],$path_files[5]); if ($stmt->execute()) { echo " تم رفع الملفات بنجاح <br> "; } else { echo "حدثت مشكلة اثناء الإضافة في قاعدة البيانات"; } } $conn->close(); وهكذا سيتم رفع جميع الملفات معا وإذا حدث خطا في ملف فلن يرفع الباقي ولن يتم الإضافة في قاعدة البيانات
- 2 اجابة
-
- 1
-
يمكنك إستخدام الكود التالي : <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <form action="file.php"> <input type="text" name="secret" placeholder="please enter 0000" data-secret="0000" onkeyup="check(this)"> </form> <script> function check(el){ if(el.dataset.secret == el.value) { el.closest('form').submit(); } } </script> </body> </html> لاحظ هنا أنشئنا input وقد قمنا بوضع placeholder ليخبر الشخص بإدخال الرقم 0000 ووضعنا خاصية ال data-secret لتساوي الرقم الذى نريده أن يقوم بإدخاله . وقمنا بإستماع الحدث الخاص بالضغط على الزر ومررنا له الدالة check. الآن أنشئنا الدالة check التي يتم تمرير ال input لها وتقوم بالتحقق من البيانات داخل ال input وإذا كانت مثل ما قمنا بوضعها في الخاصية data-secret فسيتم إرسال ال form تلقائيا . وهكذا يمكنك أخذ هذا الزر وو ضعه بداخل أى form مع أخذ الدالة check أيضا.
- 4 اجابة
-
- 1
-
السؤال غير واضح قليلا هل تقصد في الواجهة الأمامية تريد ال input أن يحوي 0000 ولا يتم تغيره ؟ في تلك الحالة يمكنك إستخدام خاصية disabled لتمنع تغيره ولكن أيضا يجب التحقق في الواجهة الخلفية فمن الممكن أن المستخدم يقوم بتغيره من أدوات المطور : <input type="text" value="0000" disabled>
-
وعليكم السلام ورحمة الله وبركاته : في لغة البرمجة بايثون نتستخدم كلمة pass كتعليمات فارغة حيث أن وظيفتها الأساسية هي أنها تعطي مكانا في الكود حيث يتطلب الكود وجود أكواد يجب توفيرها لكنك لا ترغب في تنفيذ أي شيء في هذه المرحلة. وهي مفيده بشكل خاص عند تخطيط الوظائف أو الفئات (Classes) أو الحلقات (Loops) والدوال (functions) . def function_to_implement_later(): pass class MyClass: def method_to_implement_later(self): pass for i in range(10): if i % 2 == 0: pass # لا تفعل شيئاً مع الأرقام الزوجية لاحظ فى المثال الأول قمنا بإنشاء دالة حاليا ولكننا لم ننشئ الكود الخاص بها فبدلا من مسحها نقوم بكتابة pass حيث إذا لم نقم بكتابة أى شئ سيحدث خطأ ولن يعمل البرنامج . وأيضا في الأصناف فمثلا من الممكن أن يرث صنف دالة من صنف أخر ويجب تعديلها أو كتابتها ولكننا لا نريد كتابتها الآن وبهذا نقوم بكتابة pass. وفي الكود الأخير في حلقة for قمنا بكتابة pass في مكان لا نريد تنفيذ شئ فيه
- 3 اجابة
-
- 1
-
الخطوات الأساسية اللازمة لدخول أي مجال هي غالبا تتعلق بتعلم الأساسيات وفهما قبل التخصص في مجال معين و البدأ فيه مباشرة ، وهذا لأهميتها الكبيرة في ذلك. فهي ما تساعدك على فهم الكثير من جزئيات البرمجة وتعينك على حل المشكلات وتكسبك خبرة التفكير المنطقي وتحليل وحل المشكلات. وتلك الأساسيات مثل : التفكير المنطقي الخوارزميات بعض أساسيات الرياضيات أساسيات البرمجيات هياكل البيانات ويمكنك قراءة المقال التالي لمزيد من المعلومات : وأنصحك بدراسة كورس CS50 المقدم من جامعة هارفرد أما إذا كنت مشترك هنا في دورة علوم الحاسب فهي كافية ويمكنك قراءة الأجوبة التالية حول نصائح دخول المجال وعن كورس CS50 :
-
نعم التحديث الجديد جيد هو لم يتم التغير كثيرا هو فقط تم تغير أماكن العناصر ولكن هذا الترتيب حيث يعطيك تفاصيل اليوم كاملة أولا وواضحه وهو ما يريده المستخدم وأصبح متجاوب أكثر للشاشات المختلفة . ولكن توجد مشكلة في الحواسيب ستجد scroll bar في أسفل الصفحة لذلك أنصحك بوضع التنسيق التالي لحذفه : body { overflow-x: hidden; } وأيضا جزء الطقس ل يوما ليس أفضل شئ في الهواتف والشاشات الصغيرة حيث النصوص تكون بجوار بعض متداخلة وصغيرة ويفضل تغير تصميمها وإليك الكود التالي : .weather-slider { display: flex; flex-direction: column; } .weather-day { flex-direction: column; align-items: center; overflow: hidden; } .weather-day img { max-width: 25%; } ويمكنك وضعك الأكواد السابقة داخل media حتي يتم تطبيقها فقط على الشاشات الصغيرة لتصبح شكلها كالتالي : ويمكنك تنسيقها كما تشاء .
- 5 اجابة
-
- 1
-
نعم يجب حذفها ولكن هكذا لن تقوم بإعادة تحميل الصفحة لذلك هذا الكود لن يتم طباعته حيث أن هذا الكود يقرأ الرقم من الرابط وليس من قاعدة البيانات . فإذا كان هذا الكود في نفس الملف الذي فيه الرابط الذى ستقوم بحذفه إذا قم بطباعة الجملة مكانه . أما إذا كان في ملف أخر إذا يفضل وضعه في ال session هكذا : session_start(); $_SESSION['saved_id'] = mysqli_insert_id($conn); header("Location: index.php"); حيث هذا الكود يتم وضعه مكان الرابط ولاحظ أن أخر سطر يقوم بالتوجيه للملف index.php . والآن في ملف index.php نكتب التالي : session_start(); if (isset($_SESSION['saved_id'])) { echo "تم الإرسال رقم الكود المدخل هو " . $_SESSION['saved_id']; unset($_SESSION['saved_id']); } وهكذا يجب أن تحل المشكلة .
- 7 اجابة
-
- 1
-
إذا المشكلة ليست هنا المشكلة أنك ترسله في الرابط هنا : وهكذا يظهر لديك في الرابط . لهذا لا تقوم بإرساله في الرابط فقط قم بطباعته بعد رجوعة من قاعدة البيانات مباشرة
-
المشكلة لديك أنك تقوم بإرسال ال form عن طريق method التي تسمى get و هذا لا يجب أن يتم حيث أن هذه الطريقة تفضل فقط في جلب البيانات حيث ستجد أن كل شئ تم إرساله في ال form تظهر في العنوان . ولكن في حال إرسال بيانات لإضافتها فأفضل شئ في ال form هو جعلها ترسل الطلب عبر post وذلك للأمان حيث لا يتم إرسال البيانات في الرابط. فتخيل لو هناك form لتسجيل مستخدم جديد وقام بكتابة كلمة مرور فستظهر في العنوان إن كانت من توع get ومن الممكن أن يرى أي شخص هذا الرمز بعدة طرق . أما في ال post فيتم إرسال البيانات في جسم الطلب ومن الصعب رؤيتها لذلك هي طريقة آمنه . لهذا في الواجهة الأمامية عند كل form قم بإضافة التالي : <form action="action.php" method="post"> لاحظ كيف أضفنا خاصية method="post" وهكذا سيتم إرسال الطلب عبر post وليس get حيث أن القيمة الإفتراضية هي get . لذلك فقط قم بإضافة method="post" في أى form لديك ترسل البيانات . وفي الواجهة الخلفية قم بتغير أى $_GET إلى $_POST . $_GET // قم بتغيرها إلى $_POST
-
أعتقد أن البرنامج الذي تتحدث عنه من الممكن أن يكون Adobe XD (Adobe Experience Design)، وهو برنامج لتصميم واجهات المستخدم وتجربة المستخدم (UI/UX) وهو خاص بشركة Adobe . يستخدم Adobe XD لتصميم صفحات التطبيقات والمواقع بشكل بصري حيث يمكنك إضافة عناصر مثل الأيقونات وربطها بصفحات أخرى لإنشاء تجربة تفاعلية . ولكن حاليا أفضل برنامج موجود هو Figma حيث هو منتشرا كثيرا ومجاني و أفضل من حيث الإستخدام
-
لنشرح أولا الكود الذى أرفقته : هذا الرمز هو عبارة عن عنصر <meta> في HTML وهو يستخدم لتعيين العرض الأولي للصفحة ومستوى التكبير الإفتراضي على الأجهزة المختلفة وهو يتكون من عدة أجزاء : <meta>: هذا العنصر يستخدم في HTML لتوفير معلومات عن الصفحة التي لا تظهر على المتصفح و للمستخدم مثل الوصف والكلمات الرئيسية (meta tags). name="viewport": هذا هو الخاصية التي تحدد نوع المعلومة التي يحتويها العنصر <meta> وهنا هو يشير إلى أننا نعرف عرض ال viewport. content="width=device-width, initial-scale=1.0": هذه هي القيم التي تحدد كيف ينبغي للمتصفح توسيع الصفحة لتلائم شاشة الجهاز حيث أن : width=device-width: يعني أن عرض الصفحة يجب أن تكون هي عرض الجهاز الذي يعرض عليه الصفحة. initial-scale=1.0: يحدد مستوى التكبير الإفتراضي للصفحة عندما يتم تحميلها. وتلخيصا للسابق فإن هذا الكود يساعد في جعل الصفحة تكون متجاوبة وتظهر بشكل صحيح على مختلف أحجام الشاشات ويجعل عرض الصفحة مثل عرض الشاشة تماما . ولكن ما تقوله بأنك تريد كود يجعل الموقع ثابت مع جميع الشاشات فهو مستحيل فلا يوجد شئ مثل هذا فإذا كان يوجد هذا الكود الذى تبحث عن فلن يكون هناك حاجة إلى التصميمات وإلى تعلم لغة css حيث هي المسؤولة عن التنسيقات . لذلك لا يوجد كود يتم تنفيذه على الموقع ليجعله ثابت بل يجب أن يكون كل موقع له التنسيقات الخاصة به فكل موقع يختلف من حيث الهيكل و العناصر . ولكن يمكنك إستخدام flex box في css فهي من أفضل الخصائص وأقواها في css لجعل العناصر متجاوبة . يمكنك قراءة الدرس التالي على موقع موسوعة حسوب عن flex box
-
هذا يعتمد على ما الذي تقصده . هل تقصد إذا قام بإرسال بيانات لا يحق له إرسالها مرة أخري ؟ أم يحق له إرسال بيانات أكثر من مرة ولكن لا تتكرر ؟ على العموم يوجد أكثر من حل من خلال ال Session أو من خلال قاعدة البيانات . استخدام الجلسات (Sessions): عندما يتم إرسال البيانات لأول مرة من خلال الفورم قم بتخزين متغير والذى يدل على أنه تم إرسال البيانات في جلسة المستخدم. عندما يحاول المستخدم إرسال البيانات مرة أخرى تحقق إذا كانت هذه المعلومة موجودة في الجلسة؛ إذا كانت موجودة، فلا تسمح بإعادة إرسال البيانات. // في صفحة إرسال الفورم session_start(); if (isset($_SESSION['form_submitted'])) { // لا تسمح بإرسال البيانات مرة أخرى // يمكنك عرض رسالة خطأ أو إعادة توجيه المستخدم إلى صفحة أخرى } else { // معالجة البيانات هنا // ... $_SESSION['form_submitted'] = true; } استخدام من قاعدة البيانات: قم بإنشاء جدول يحوي على ال id الخاص بالمستخدم و عند إرسال البيانات تأكد هل هذا ال id موجود في الجدول أم لا إذا كان موجود فلا تقم بإضافة البيانات وإذا لم يكن موجود قم بإضافة البيانات و أيضا أضف ال id لخاص بالمستخدم في قاعدة البيانات .
- 4 اجابة
-
- 1
-
إن ال CSRF TOKEN يتم إرساله في ال Session من خلال لارافيل وأنت لا تقوم بإرسال ال Session في axios لذلك يحدث هذا الخطأ. أما المطورين الأخرين يرسلون ال Session لهذا لا يحدث أي خطأ لديهم . لهذا يجب إرسال ال Session والطريقة كما أخبرتك بها في الحل السابق.
-
هل ال api يتم إرساله إلى إطار عمل Laravel ؟ الخطأ الذى يظهر هو 419 وهذا الخطأ بسبب عدم إرسال ال CSRF TOKEN إلي الخادم لذلك يجب إرسالها . وال CSRF token هو عبارة عن token يتم توليده من خلال الخادم وإرساله إلى الواجهة الأمامية في بداية الطلب حتي عندما يتم إرسال طلب post أو delete أو put وهي الطلبات التي تقوم بتعديل البيانات فيجب إرسالها حتي يتم التأكد من أن الطلب موثوق منه. ولحل تلك المشكلة يجب تضمين ال cookies في الطلب حتي يتم إرساله إلى الخادم : axios.defaults.withCredentials = true; وتوجد طريقة أخري وهي إرسال ال token عن طريق ال headers هكذا ولكن يجب عليك الحصول على ال token وهو غالبا ما يكون في الصفحة من خلال عنصر input يحوي الإسم _token : axios.post('api', { data: { // بيانات الطلب } }, { headers: { 'X-CSRF-TOKEN': 'هنا يتم وضع ال token ويفضل وضعه من خلال جافاسكريبت' } }) .then(response => { // التعامل مع الاستجابة هنا }) .catch(error => { // التعامل مع الخطأ هنا }); وهنا مكان X-CSRF-TOKEN يجب وضع ال token وهذا من خلال الحصول عليه من جافاسكريب إذا كان بداخل عنصر فيتم إستدعاء العنصر هكذا مثلا : document.getElementById('csrf').value
-
يجب التفرقة بين عدد الإسكريبتات التي توجد على السيرفر و عدد الإسكريبتات التي يتم تشغيلها في ذات الوقت عن إرسال الطلب للخادم . فمن الممكن أن الخادم يحوي على آلاف من الإسكريبتات والأكواد و لكن يعتمد على الطلب الحالي كم إسكريبت يعمل . فإن كانت الأربع إسكريبتات تعمل منفصلة أو حتي معا فهما ليسو بالشئ الكبير الذى سيؤثر على الخادم والسرعة ولكن العامل الرئيسى هو مدي البيانات التي يتم معالجتها . فإن كان يوجد سكريبت منهم مثلا يقوم بتحميل بيانات من قاعدة البيانات ووضعها في ملف excel وتحميله أو حتي عمل تعديلات على هذه البيانات والبيانات كبيرة تتخطى عدة آلاف من البيانات فحينها ستجد مشاكل تحدث وبطئ وهذا سيزيد في حالة كان يوجد أكثر من مستخدم يستخدم الموقع والإسكريبت في ذات الوقت . ولكن خلاف ذلك كل شئ جيد لا تقلق
- 6 اجابة
-
- 1
-
نعم بالظبط ما تقوله صحيح ولنوضح معا أكثر . دور كل لغة: HTML (HyperText Markup Language): تستخدم لبناء هيكل الصفحات وإنشاء العناصر وتحديد المحتوى، مثل النصوص والصور والروابط. CSS (Cascading Style Sheets): تستخدم لتنسيق وتصميم الموقع مثل تحديد الألوان والخطوط و أماكن العناصر وأشكالها وحجهما. PHP: هي لغة برمجة تستخدم في جانب الخادم (server-side) تتيح بك بناء موقع متفاعل و ديناميكي من خلال حفظ وإظهار البيانات من قواعد البيانات والمعالجة الديناميكية للمحتوى. أما بالنسبة لجزء معالجة وتخزين البيانات : فكثرة البيانات المستلمة وسعة التخزين تعتمد في الغالب على الخادم الذي يتم استضافة الموقع عليه بما في ذلك سرعة وأمان الخادم وسعته التخزينية وأيضا يعتمد على الإسكريبت الخاص ب php الذى قمت ببناءه فمن الممكن أنك قمت ببناء سكريبت بطئ حيث يستخدم موارد كثيرة ويحتوي على منطق معقد الذى يحتاج إلى وقت طويل لمعالجته لذلك حتي لو كان الخادم سريع ولديه موارد كثيرة ولكن الإسكريبت الخاص بك بطئ ويعالج بيانات كثيرة فستجد بطئ في الإستخدام. أما بالنسبة إلى الأمان وحفظ البيانات: الأمان وحفظ البيانات يعتمدان على تنفيذ صحيح للبرمجة فمن الممكن أن الإسكريبت الخاص بك يحتوي على ثغرات مثل أشهر الثغرات وهى SQL Injection و الثغرات الأخري فإذا الأمان لا يقتصر فقط على الخادم بل على الإسكريبت الخاص بك وطريقة كتابته. أم بالنسبة إلى المسؤولية عن الأداء والسرعة: فكما وضحت لك الأداء والسرعة في التحميل تعتمد على كيفية بناء الإسكريبت الخاص بك والموارد الخاصة بالخادم.
- 6 اجابة
-
- 1
-
مرحبا عبدالرحمن . لا داعي للقلق ونعتذر لك عن أى تأخير فهو حاليا هنا ضغط على قسم الدعم ومن المحتمل حاليا أنه يتم مراجعة الأكواد والمشاريع الخاصة بك وبمجرد الإنتهاء سيتم الرد عليك إن شاء الله . وحاليا أنصحك بمراجعة الأساسيات سريعا و الدروس وذلك حتي تكون جاهزا للإختبار . بالتوفيق لك إن شاء الله
- 2 اجابة
-
- 1
-
وعليكم السلام ورحمة الله وبركاته. لا بالفعل ليس هناك حاجه لأن يحترف الشخص التقنيات الأساسية في تطوير الويب بشكل كامل قبل أن يبدأ في تعلم أطر العمل. يمكن أن يبدأ الشخص بالتعلم عندما يكون لديه أساسيات بلغات البرمجة مثل JavaScript وPHP وCSS، ومن ثم يمكنه الانتقال إلى دراسة أطر العمل المختلفة. وأيضا سؤالك خاطئ قليلا حيث أن إطار العمل يكون مبنى بناء على اللغة التي يوفر الإطار لها فليس هناك إطار عمل واحد فيه جميع اللغات . فمثلا في css فإطار عمل مثل bootstrap و tailwind مبنيان على css ولجعل العناصر متفاعلة في الموقع فهما يستخدمان javascript و يستخدمان مكتبة jquery . لذلك من يريد إستعمال bootstrap و tailwind فيجب ان تكون لديه الأساسيات الخاص ب css حتي يستطيع إستخدامهم بشكل جيد وإذا ما واجهته اى مشكلة يستطيع حلها. وأيضا في javascript فإطار عمل jquery او حتي react او غيرهم فيجب ان تكون ملما بأساسيات javascript. وكذلك الامر بالنسبة ل php فيوجد أطر عمل مثل laravel ولإستخدام اطر عمل php يجب على الاقل ان تكون لديك اساسيات لغة php ولكن لتصبح متمكنا في إطا العمل فيجب عليك ان تكون ملما بكل شئ في php حتي تستطيع ان تعرف كيف تم إنشاء لارافيل وهكذا ستستطيع العمل بكفاءة عليه وإستخدامه بافضل شئ ممكن . لهذا إذا كنت تريد العمل على إطار للغة php فلا بئس إذا لم تكن ملما ب css وjavascript حيث أطر عمل php خاصة فقط بالواجهة الخلفية ويمكن إستعمال قوالب جاهزة دون الحاجه إلى معرفة css و وjavascript . ويمكنك قراءة الاجوبة التالية لمزيد من التفاصيل:
- 4 اجابة
-
- 1
-
نعم من الممكن أن تحدث مشكلة إذا كانت البيانات كبيرة فحينها سيكون الملف كبيرا ومن الممكن إذا كان الخادم الذاكرة الخاصة به قليلة أو إستهلاك الموارد كبير ومتبقى موارد قليلة فقط . ولكن هذا يحدث إذا كانت البيانات بالآلاف و أعتقد أنك لن تصل لتلك الكمية الكبيرة من البيانات.
- 12 اجابة
-
- 1
-
نعم كما أخبرتك المكتبة PhpSpreadsheet تمكنك من إنشاء ملفات excel لذلك يمكنك إنشاء الملفات من خلال البيانات القادمة من ال form أو القادمة من قاعدة البيانات .
- 12 اجابة
-
- 1
-
ماذا تقصد بتحميلها على الإكسل ؟ إذا كنت تقصد أن تحضر البيانات من القاعدة ومن قم وضعها بداخل ملف إكسل و إرساله للمستخدم فنعم يمكنك إستخدام مكتبة PhpSpreadsheet لتحقيق ذلك حيث تمكنك من إنشاء ملفات excel وملئها بالبيانات التي تريدها
- 12 اجابة
-
- 1