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

كل الأنشطة

تحدث تلقائيًا

  1. الساعة الماضية
  2. المشكلة على الأغلب تتعلق بإعدادات البريد الإلكتروني في بيئة الاستضافة، فعند إرسال البريد الإلكتروني في بيئة الإنتاج، قد تكون هناك إعدادات ناقصة أو غير صحيحة في ملف `settings.py` الخاص بمشروع Django. لذا تأكد من إعدادات البريد الإلكتروني في `settings.py` لتكون كالتالي: EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.gmail.com' EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = 'your-email@gmail.com' EMAIL_HOST_PASSWORD = 'your-email-password' DEFAULT_FROM_EMAIL = EMAIL_HOST_USER لضمان أنك تستطيع رؤية الأخطاء التي تحدث عند محاولة إرسال البريد الإلكتروني، يمكنك تمكين تسجيل الأخطاء في Django. أضف الكود التالي إلى `settings.py`: import os LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': os.path.join(BASE_DIR, 'debug.log'), }, }, 'loggers': { 'django': { 'handlers': ['file'], 'level': 'DEBUG', 'propagate': True, }, }, } فهو سيسمح بتتبع الأخطاء التي تحدث عند محاولة إرسال البريد الإلكتروني من خلال ملف `debug.log`.
  3. اليوم
  4. هل يمكنك فتح ال console عن طريق الضغط على CTRL + SHIFT + J وإخباري هل يظهر خطأ عند محاولة إرسال ال form واذا كان يظهر خطأ هل يمكنك إرساله , وايضا هل يوجد خطأ فى ال log الخاص بالاستضافه ؟ من الممكن أن يكون الخطأ فى ال captcha لذلك حاول حذف هذين السطرين مؤقتا . وايضا قم بإستبدال هذ السطر بالكود التالي: if True: ومحاولة إرسال ال form مرة أخرى وإخبارى بالنتيجة
  5. اواجهة مشكلة عدم ارسال ايميل من الاستضافة و في localhost يقوم بالارسال بدون اي مشكلة views.py تحتوي على ثنين من form و اضفت لهم captcha ... انا قمت بازالة المفتاح السري للcaptcha def home(request): if request.method == 'POST': form_type = request.POST.get('form_type', '') # Common reCAPTCHA validation for both forms recaptcha_response = request.POST.get('g-recaptcha-response') data = { 'secret': '**********************', 'response': recaptcha_response } r = requests.post('https://www.google.com/recaptcha/api/siteverify', data=data) result = r.json() if result['success']: if form_type == 'contact_form': # Fetch data from Contact Us page name = request.POST.get('name', '') email = request.POST.get('email', '') subject = request.POST.get('subject', '') message = request.POST.get('message', '') # Save in database data = Contact(name=name, email=email, subject=subject, message=message) data.save() # Send an email send_mail( f'New Contact: {subject}', f'From: {name}, Email: {email}\n\nMessage:\n{message}', email, ['support@webside.ca'], fail_silently=False, ) messages.success(request, 'Your message has been sent. Thank you!') return redirect('home') elif form_type == 'application_form': first_name = request.POST.get('firstName', '') last_name = request.POST.get('lastName', '') status = request.POST.get('status', '') phone = request.POST.get('phone', '') email = request.POST.get('email', '') postal_code = request.POST.get('postalCode', '') province = request.POST.get('province', '') agreement = request.POST.get('flexCheckIndeterminate') == 'on' data = Apply(first_name=first_name, last_name=last_name, status=status, phone=phone, email=email, postal_code=postal_code, province=province, agreement=agreement) data.save() send_mail( f'New Apply', f'From: {first_name} {last_name}, Status: {status}, Phone: {phone}, Email: {email}, Postal Code: {postal_code}, Province: {province}\n\nHas agreed to contact: {"Yes" if agreement else "No"}', email, ['admin@webside.ca'], fail_silently=False, ) return JsonResponse({'success': True}) else: # Handle the case where CAPTCHA is not successfully completed messages.error(request, 'Invalid reCAPTCHA. Please try again.') return JsonResponse({'success': False}, status=400) return render(request, 'pages/home.html') كود html: هذه form تكون على شكل نافذة منبثقة عند النقر على زر معين تعرض form <div class="modal fade" id="formModal" tabindex="-1" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">Apply Now</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <form method="post" id="applyForm"> {% csrf_token %} <div class="mb-3"> <input type="hidden" name="form_type" value="application_form"> <label for="firstName" class="form-label">First Name*</label> <input type="text" class="form-control" id="firstName" name="firstName" required> </div> <div class="mb-3"> <label for="lastName" class="form-label">Last Name*</label> <input type="text" class="form-control" id="lastName" name="lastName" required> </div> <div class="mb-3"> <label for="status" class="form-label">Status*</label> <select class="form-control" id="status" name="status" required> <option value="">Select Status</option> <option value="Canadian Citizen">Canadian Citizen</option> <option value="Permanent Resident">Permanent Resident</option> <option value="Refugee">Refugee</option> <option value="Work Permit">Work Permit</option> <option value="Visitor Visa">Visitor Visa</option> <option value="International Student">International Student</option> </select> </div> <div class="mb-3"> <label for="userPhone" class="form-label">Phone</label> <input type="number" class="form-control" id="userPhone" name="phone"> </div> <div class="mb-3"> <label for="userEmail" class="form-label">Email*</label> <input type="email" class="form-control" id="userEmail" name="email" required> </div> <div class="mb-3"> <label for="postalCode" class="form-label">Postal Code</label> <input type="text" class="form-control" id="postalCode" name="postalCode"> </div> <div class="mb-3"> <label for="province" class="form-label">Province</label> <select class="form-control" id="province" name="province"> <option value="">Select Province</option> <option value="Alberta">Alberta</option> <option value="British Columbia">British Columbia</option> <option value="Manitoba">Manitoba</option> <option value="New Brunswick">New Brunswick</option> <option value="Newfoundland and Labrador">Newfoundland and Labrador</option> <option value="Nova Scotia">Nova Scotia</option> <option value="Ontario">Ontario</option> <option value="Prince Edward Island">Prince Edward Island</option> <option value="Quebec">Quebec</option> <option value="Saskatchewan">Saskatchewan</option> <option value="Northwest Territories">Northwest Territories</option> <option value="Nunavut">Nunavut</option> <option value="Yukon">Yukon</option> </select> </div> <div class="mb-3"> <input class="form-check-input" type="checkbox" value="on" id="flexCheckIndeterminate" name="flexCheckIndeterminate" required> <label class="form-check-label" for="flexCheckIndeterminate"> I agree to be contacted by email </label> </div> <div class="g-recaptcha" data-sitekey="6LeV7rApAAAAANhHYmNEky9nNreToYW3fJonpSar"></div> <br> <span class="loader"></span> <button type="submit" class="btn btn-primary">Submit</button> </form> <!-- Success Message, hidden initially --> <div id="successMessage" style="display: none;"> <div class="content"> <div class="wrapper-1"> <div class="wrapper-2"> <h1>Thank you!</h1> <p>We will contact you as soon as possible</p> <button class="go-home" onclick="window.location.href='/';"> go home </button> </div> </div> </div> </div> </div> </div> </div> </div> كود جافا سكريبت: document.getElementById('applyForm').addEventListener('submit', function (e) { e.preventDefault(); const formData = new FormData(this); const submitButton = this.querySelector('button[type="submit"]'); const loader = document.querySelector('.loader'); submitButton.disabled = true; loader.style.display = 'block'; // Display the loader fetch("{% url 'home' %}", { method: 'POST', body: formData, headers: { 'X-Requested-With': 'XMLHttpRequest' }, }).then(response => { if (!response.ok) throw new Error('Network response was not ok'); return response.json(); }).then(data => { if (data.success) { $('#applyForm').hide(); // Hide the form $('#successMessage').show(); // Show success message } else { throw new Error('Failed to submit'); } }).catch(error => { alert(error.message); }).finally(() => { loader.style.display = 'none'; // Hide the loader submitButton.disabled = false; }); });
  6. تستخدم النجمة (*) هنا كعامل ضرب في المعادلة الرياضية. دعني أوضح ذلك بشكل مفصل: def discount(self, ratio): self.price = self.price - self.price * ratio في هذا المثال، الدالة `discount` تقوم بحساب خصم معين على السعر الحالي `self.price` باستخدام النسبة المئوية `ratio`. النجمة (*) هنا تعني ضرب `self.price` في `ratio`. إليك خطوة بخطوة ما يحدث: `self.price * ratio` يقوم بحساب القيمة التي تمثل الخصم بناءً على النسبة `ratio`. `self.price - self.price * ratio` يطرح قيمة الخصم من السعر الأصلي. فمثلا، إذا كان `self.price` يساوي 100 و`ratio` يساوي 0.2 (أي 20%)، فإن العملية الحسابية ستكون: self.price = 100 - 100 * 0.2 وهذا يعني: self.price = 100 - 20 لذلك، السعر الجديد بعد الخصم سيكون 80. وهكذا.
  7. مرحباً , هذه الدالة تقوم بعمل تخفيض وفق نسبة معينة , فلاحظ أنه يقوم بطرح من price الكلي القيمة التالية : self.price * ratio والتي تعني " حاصل جداء السعر بنسبة التخفيض " , أي كمثال اذا قمنا بتمرير السعر 100 , ونسبة التخفيض 0.20 , فسوف يكون التعبير كالتالي : 100 - 100 * 0.20 وسوف تقوم الدالة بإرجاع النتيجة = 80
  8. رمز أو مُشغل operator النجمة في لغات البرمجة يعني عملية الضرب، وفي الكود المقصود إجراء عملية ضراء السعر price في النسبة ratio. للتوضيح: print(2*3) سيكون الناتج 6.
  9. ممكن توضيح ماهي فائدة النجمة هنا
  10. في الكود الذي أرسلته، الدالة `finder` تستخدم معاملين، الأول هو `iterable` وهو عبارة عن قائمة أو مجموعة تحتوي على عناصر يمكن تكرارها. في هذا المثال، `iterable` هو قائمة `words` التي تحتوي على لغات البرمجة (مثل "python" و "php" و "java" و "ruby") فهذا المعامل هو ما نبحث فيه عن العناصر المطابقة. أما `text` هو النص الذي نريد البحث عنه في بداية كل عنصر من عناصر `iterable` وفي هذا المثال، `text` هو الحرف "p" وهذا المعامل يحدد الشرط الذي نبحث عنه في العناصر. بالنسبة ل`finder` تأخذ `iterable` و `text`. وداخل `finder`، هناك دالة `find` التي تتحقق مما إذا كان أي عنصر في `iterable` يبدأ بالنص `text` أما `filter` يستخدم `find` لتصفية العناصر في `iterable` بناءً على الشرط المحدد والنتيجة النهائية هي قائمة بالعناصر التي تبدأ بالنص `text`.وهذا هو الكود بعد التصحيح: words = ["python", "php", "java", "ruby"] def finder(iterable, text): def find(item): return str(item).startswith(text) return list(filter(find, iterable)) result = finder(words, "p") print(result) والنتيجة النهائية ستكون: ['python', 'php'] وبهذا الشكل، الكود يقوم بإرجاع جميع العناصر في `words` التي تبدأ بالحرف "p".
  11. أولاً iterable و text تستخدم كمتغيرات أو معاملات في دالة finder ويمكن تبسيط الكود كالتالي بالنسبة لمعامل iterable هو القائمة التي سيتم البحث فيها عن العناصر التي تبدأ بالنص text. في الكود القائمة words سيتم البحث فيها. أما بالنسبة ل text هو النص الذي سيتم البحث عن العناصر التي تبدأ به في القائمة iterable. في المثال سيتم البحث عن العناصر التي تبدأ بحرف "p". في دالة filter تم تمرير الدالة find لتطبيقها على كل عنصر من القائمة words والتي تم تمريرها كمعامل يسمى iterable لذلك فإن دالة finder تعتمد على دالة filter في ترشيح العناصر ولكن من خلال تعريف دالة أخرى find لمهمة الترشيح بدلا من كتابة الشرط مباشرة.
  12. iterable و text هما معاملات Parameters في الدالة finder، حيث يتم تمرير قيم مُعرفات أو وسائط Arguments لهم عند استدعاء الدالة. وiterable هو القائمة words التي تحتوي القائمة على العناصر (السلاسل) التالية: "python", "php", "java", "ruby". عند تمرير words إلى دالة finder، يتم تكرار كل عنصر (سلسلة) في القائمة للتحقق من بدءه بالنص المحدد. والنص المحدد نمرره من خلال معامل text حيث نمرر "p" إلى دالة finder واستخدام النص (الحرف) كمعيار لتصفية العناصر في iterable (القائمة). return True: إذا بدأ العنصر بـ "p"، فهذا يرجع True. return False: إذا لم يبدأ العنصر بـ "p"، فهذا يرجع False.
  13. words =["python", "php", "java", "ruby"] def finder (iterable, text): def find(login): for i in login: if str(i).startswith(text): return True return False return list(filter(find, iterable)) result = finder(words, "p") print(result) # ما فائدة iterable vs text
  14. بعد الإنتهاء من الدورة ستكون لديك المهارات اللازمة للحصول على وظيفة في مجال الذكاء الإصطناعي حيث تقوم الدورة بتعليمك المهارات اللازمة ولكن يجب أن تعلم أن الأمر يعتمد عليك أيضاً في إتباع الخطوات المطلوبة وبناء التطبيقات الموجودة بالدورة وبالبحث عن العمل بشكل إحترافي وذلك يتم بتوجيهات وإرشادات من قبل مركز المساعدة بالطبع حيث يتم إنشاء سيرة ذاتية إحترافية من قبل الأكاديمية ومع ذلك إذا لم تستطع الحصول على عمل يتم إرجاع المبلغ كاملاً بدون أي مشكلة يفضل الإطلاع على الإجابات التالية
  15. المشكلة هو أنه لا يوجد جدول باسم "properties" في قاعدة البيانات "aqarjrla_db". هل حدث الخطأ بينما كان المشروع يعمل بشكل سليم؟ أي لم تقم بأية تعديلات؟ إن كنت تقوم برفع المشروع بنفسك، فعليك تنفيذ أم التهجير لإنشاء الجداول في قاعدة البيانات، وستجد تفصيل هنا:
  16. السلام عليكم لدي مشروع لارفيل وتم رفعة علي الاستضافة , وتم عمل قاعدت البيانات وربطها بالموقع المشكلة بعد ذلك ان ملف الsql غير موجود ولا اعرف من اين اتي به لان ده موقع كان مبرمجه لي احد الاشخاص من فترة وليس لدي باك اب من السيكول الخطأ SQLSTATE[42S02]: Base table or view not found: 1146 Table 'aqarjrla_db.properties' doesn't exist شكرا جزيلا
  17. البرمجيات الخبيثة/الفيروسات تشبه أي برنامج آخر. فهي مجرد قائمة من التعليمات التي سيقوم المعالج بتنفيذها، بغض النظر عن ماهيتها وعن التقنيات التي تستخدم لجعل هذه البرمجيات قابلة للتخفي مثلاً. الفيروسات تستخدم هذه التعليمات فقط للقيام بأعمال ضارة. على سبيل المثال، الأمر "rm -rf /" يحذف جميع البيانات على القرص، لذلك إذا قام فيروس بتشغيل هذا الأمر، فسيكون ذلك كارثيًا. وبالنسبة للغات البرمجة فاختيار لغة البرمجة وأسلوب التنفيذ يعتمد بشكل كبير على الهدف المحدد من الفيروس أو البرمجية الخبيثة فمثلاً هناك بعض الفيروسات تصيب الأجهزة عبر محركات أقراص USB، وهذا يتطلب برمجة منخفضة المستوى مثل لغة التجميع (Assembly). وهناك فيروسات تستهدف أنظمة التشغيل والوظائف الأساسية باستخدام لغات البرمجة C/C++ وذلك للأداء العالي والوصول إلى موارد النظام. قد يتم استخدام اللغات النصية مثل Visual Basic Script أو Python أو JavaScript في الفيروسات التي تستغل تطبيقات مثل تطبيقات الويب.
  18. تم التوضيح في التعليقات السابقة أنه يوجد إختيارات عديدية ولكل اختيار مميزات وعيوب ويمكنك الإختيار بينهم كما يلي أولاً بالنسبة ل C# فهي شائعة للغایة لتطبیقات سطح المكتب لأنھا مدعومة مباشرة من مايكروسوفت ومدمجة بشكل جيد مع إطار عمل .NET. فھي تسمح بإنشاء واجھات مستخدم رسومیة بسھولة. وبالنسبةل C++ تستخدم لبناء اللتطبیقات التي تحتاج أداء عالي مثل الألعاب وبرمجیات الوسائط المتعددة . كما أنھ یسمح بالوصول مباشرة إلى وظائف نظام التشغیل التي قد تكون مھمة لبعض التطبیقات. و لغة C تستخدم لتطویر البرمجیات المنخفضة المستوى حیث یكون التفاعل المباشر مع الأجھزة ضرورياً. ولھا عبء تشغیلي صغیر لكنھا أقل إنتاجیة من اللغات الحدیثة. وبشكل ملخص، فإن لغات مثل C# و VB.NET ھي الأنسب لمعظم البرمجیات التجاریة لویندوز بسبب إنتاجیتھم ودعمھم للواجھات الغنیة وقاعدة مطوريھم الواسعة. بالرغم من أھمیة C++ لا تزال قائمة للمھام التي تحتاج لأداء عالي. ویعتمد الاختیار أيضا على عوامل مثل خبرة المطور ومتطلبات المنصة والجداول الزمنیة وما إلى ذلك.
  19. بمجرد تثبيت مكتبة django-PayPal وظهور الجدول الجديد في صفحة admin، فإن الخطوات الأساسية قد تمت بنجاح. ومع ذلك، لضمان استقبال إشعارات الدفع بشكل صحيح، قد تحتاج إلى بعض الخطوات الإضافية. تكوين PayPal IPN Settings: تأكد من تكوين إعدادات PayPal IPN بشكل صحيح داخل حسابك على PayPal. يمكنك العثور على هذه الإعدادات في قسم "تكوين IPN" داخل حساب PayPal الخاص بك. تكوين عنوان الإشعار في مشروع Django: يجب عليك تكوين عنوان URL الذي سترسل إليه PayPal إشعارات الدفع. يجب أن يتم ذلك في ملف urls.py الخاص بتطبيق Django الخاص بك. يمكنك استخدام django-PayPal لتسهيل هذه العملية. اختبار الدفعات: قم بإجراء اختبارات للتأكد من أن كل شيء يعمل بشكل صحيح. يمكنك استخدام وضع Sandbox المتوفر من PayPal لإجراء اختبارات دون الحاجة إلى استخدام الأموال الحقيقية. معالجة الإشعارات: بمجرد استقبال إشعارات الدفع، يجب عليك كتابة معالج لها في تطبيق Django الخاص بك. يمكنك استخدام django-PayPal لتبسيط هذه العملية أيضًا. باختصار، على الرغم من أنك قد أتممت الخطوات الأساسية بنجاح، إلا أن هناك خطوات إضافية يمكن أن تحتاج إليها لضمان عملية استقبال الإشعارات ومعالجتها بشكل صحيح. اولا: تكوين PayPal IPN Settings: ادخل إلى حساب PayPal الخاص بك. انتقل إلى "الإعدادات" (Settings) واختر "تكوين IPN" (IPN setup). أدخل عنوان URL الذي سيستقبل فيه إشعارات الدفع من PayPal. يجب أن يكون هذا العنوان مثل "https://example.com/paypal/ipn/". اختر نوع الإشعارات التي ترغب في استقبالها (عادةً "Payment"). تكوين عنوان الإشعار في مشروع Django: في ملف urls.py في تطبيق Django الخاص بك، يمكنك تكوين عنوان URL لاستقبال إشعارات PayPal IPN: # urls.py from django.urls import path from yourapp.views import paypal_ipn_view urlpatterns = [ path('paypal/ipn/', paypal_ipn_view, name='paypal-ipn'), ] في هذا المثال، يُفترض أن لديك دالة paypal_ipn_view في ملف views.py لمعالجة الإشعارات. اختبار الدفعات: يمكنك استخدام Sandbox من PayPal لإجراء اختبارات دون أي تأثير على الأموال الحقيقية. يمكنك استخدام بيانات اعتماد اختبار موفرة من PayPal. معالجة الإشعارات: يجب عليك كتابة معالج لإشعارات PayPal IPN. إليك مثالًا بسيطًا باستخدام مكتبة django-PayPal # views.py from django.http import HttpResponse from paypal.standard.models import ST_PP_COMPLETED from paypal.standard.ipn.signals import valid_ipn_received def paypal_ipn_view(sender, **kwargs): ipn_obj = sender if ipn_obj.payment_status == ST_PP_COMPLETED: # تم دفع المبلغ بنجاح # هنا يمكنك كتابة رمزك لمعالجة الدفعة بنجاح pass else: # لم يتم دفع المبلغ بنجاح pass return HttpResponse("OK") valid_ipn_received.connect(paypal_ipn_view) هذا المثال يقوم بتحديد دالة paypal_ipn_view كمعالج للإشعارات الصحيحة التي يتم استقبالها من PayPal. يمكنك تخصيص هذه الدالة بحسب احتياجاتك لمعالجة الدفعات بشكل صحيح.
  20. هل ممكن توضح لي وظيفة هذا البرنامج حتي اعطيك الحل الافضل
  21. ما هو الإطار الذي تم به بناء التطبيق وهل هو تطبيق هاتف أم تطبيق ويب؟ عامًة يتم تصميم الواجهة وتقسيم الـ Layout الخاص بها إلى أقسام، ثم ربط تلك الأقسام بـ API بحيث يتم جلب البيانات الخاصة بذلك من قاعدة البيانات وعرضها مع الصور والبيانات وخلافه. لو كان تطبيق للهاتف، فتستطيع مثلاً في Flutter استخدام الـ Widgets و Grid لتقسيم الواجهة ستجد تفصيل أكثر هنا: https://docs.flutter.dev/ui/layout
  22. يمكنك تصميم قاعدة بيانات تحتوي على جداول لكل قسم مثل المطاعم والماركت والأقسام الأخرى، ثم تقوم بإنشاء واجهة مستخدم ديناميكية باستخدام تقنيات مثل React أو Angular أو Vue.js لعرض الأقسام المختلفة بناء على البيانات المستلمة من الواجهة الخلفية (Backend). في الواجهة الخلفية، يمكنك إنشاء واجهة برمجة تطبيقات (API) باستخدام Node.js أو Django للتواصل مع قاعدة البيانات وتحديد القسم المناسب لعرضه عند فتح التطبيق. للبحث عن مصادر باللغة الإنجليزية، يمكنك استخدام الكلمات المفتاحية مثل "Dynamic Section Rendering in Mobile Apps" و "Conditional Component Rendering in React/Angular/Vue.js" و "Backend API Design for Dynamic Content" و "User Preference Based Content Display in Mobile Applications" لكني أنصح بمراجعة التوثيقات الرسمية فهي تغنيك عن البحث الكثير.
  23. قم بإنشاء نسخة احتياطية من بياناتك (تصديرها) قبل القيام بالتغييرات وذلك في حال استخدام MySql بطريقة بسيطة بالذهاب الى phpmyadmin واختبار قاعدة البيانات المطلوبة وثم القيام بصدير ينتج ملف ذو لاحقة sql توجد فيه نسخة احطياتية لبياناتك ويوجد طرق اخرى لكن هذه اسهل واحدة . وعندما تريد استردادها قم بimport الى قاعدة بيانات فارغة واختيار الملف الذي قمت بتصديره مسبقا. يمكن اضافة الحقل الجديد دون مشاكل عبر طريقتين نعطي مثال اضافة phone_number الى نموذج ال User وداخل تابع up قم باضافة الحق الجديد عن طريق : اضافة الحقل في ملف الترحيل لكن يجب وضع له قيمة افتراضية مما يعطي كل البيانات القديمة هذه القيمة الافتراضية: قم باجراء التعليمة التي تقوم بانشاء ملفmigration جديد يوجد في المسار database/migrations php artisan make:migration add_phone_number_users_table ثم وضع قيمة افتراضية داخل الجدول الاتي ولتكن 55555 public function up() { Schema::table('users', function (Blueprint $table) { $table->integer('phone_number')->default(55555); }); } ينتج اضافة حقل جديد لكل البيانات القديمة مع قيمة 55555 لكل المستخدمين . او بوضع الحقل اسمح بان يكون null عبر public function up() { Schema::table('users', function (Blueprint $table) { $table->integer('phone_number')->nullable(); }); } ينتج اضافة حقل جديد لكل البيانات القديمة تأخذ قيمة null لكل المستخدمين . بعدها تنفيذ امر تهجير البيانات php artisan migrate وهذا تكون اضفت حقل جديد دون التاثير على البيانات
  24. لدي تطبيق مطاعم واريد عندما يفتح التطبيق يظهر اقسام اخرى حسب الحاجة مثلا ماركت .... تقنيا ومنطق برمجة كيف افعل ذلك ؟ وكيف ابحث عن مصادر بالانجليزي تشرح هذا الموضوع ؟ وشكرا لكم
  1. عرض المزيد
×
×
  • أضف...