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

محمد_عاطف

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

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

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

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

    3

إجابات الأسئلة

  1. إجابة محمد_عاطف سؤال في ربط الداتابيس مع جافاسكربت عن طريق flask python كانت الإجابة المقبولة   
    اعتقد ان المشكلة لديكى فى جزء الحفظ فى قاعدة البيانات فلقد قمتى بالخطأ فى ترتيب ادخال البيانات .
    cur.execute("INSERT INTO products (ProductName, ExpiryDate, Ingredient) VALUES (%s, %s, %s)", (product_name, ingredient, date_value)) لاحظى انكى يجب ادخال اسم المنتج ثم تاريخ الانتهاء ثم المكونات . ولكنى قد قمتى بالتبديل بين التاريخ والمكونات.
    لذلك استبدلى السطر لديكى بهذا السطر .
    cur.execute("INSERT INTO products (ProductName, ExpiryDate, Ingredient) VALUES (%s, %s, %s)", (product_name,date_value ,ingredient)) واذا لم يحل المشكلة فاعقتد ان المشكلة لديكى فى قاعدة البيانات وللتاكد اكثر يجب ارسال رسالة الخطأ التى تظهر فى منفذ الاوامر لديكى 
  2. إجابة محمد_عاطف سؤال في طريقة تقليل بطئ اظهار الصفحة بسبب select مع 4000 option كانت الإجابة المقبولة   
    نعم توجد عدة طرق لحل تلك المشكلة و يجب حلها حتى تساعد فى جعل موقعك اسرع و يكون متوافق مع محركات البحث SEO .
    يمكنك حل تلك المشكلة عن طريق عدم تحميل ال options فى بداية الصفحة ولكن عند الضغط على select نقوم بارسال طلب AJAX للسيرفر نقوم منه بجلب بيانات ال options عن طريق الجافا سكريب وبعد تحميل الطلب نقوم بانشاء تلك ال options وهذا كود مثال للحل .
    <!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> </head> <body> <select id="select_id"> <option selected>Select</option> </select> <script> $(document).ready(function () { $("#select_id").one('click', function () { $.ajax({ url: "https://jsonplaceholder.typicode.com/users", type: 'GET', success: function (response) { var select = $('#select_id'); $.each(response, function (key, data) { select.append('<option value=' + data.id + '>' + data.email + '</option>'); }); } }); }) }); </script> </body> </html> هنا قمنا باستخدام مكتبة jquery لارسال الطلبات و انشاء ال options بعد رجوع الطلب .
    اولا يجب عليك انشاء عنوان لارجاع البيانات الخاصة بال select على السيرفر .
    واستخدام الكود السابق فى الواجهة الامامية مع استبدال العنوان الذى يتم ارسال الطلب له بالعنوان لديك وايضا طريقة انشاء ال option قم فقط باستبدال البيانات التى تريد وضعها والان عند الضغط على عنصر select سيتم ارسال الطلب وانشاء ال options تلقائيا.
     
    او يمكنك استخدام مكتبة select2 وهى جيدة لمثل هذه الحالات وتوجد بها خصائص جيدة مثل البحث و ايضا اظهار علامة التحميل بينما يتم ارسال الطلب للسيرفر.
  3. إجابة محمد_عاطف سؤال في مشكلة Failed to listen on 127.0.0.1:8000 (reason: ?) عند استخدام laravel herd كانت الإجابة المقبولة   
    هذا ليس المكان الخاص بال php.ini 
    من فضلك قم بالذهاب للمسار التالى 
    C:\Users\{user}\.config\herd\bin مع استبدال {user} باسم المستخدم لديك على الجهاز.

    ثم اذهب الى المجلد php على حسب الاصدار لديك . او فقط قم بتنفيذ هذا الامر وسيشير الى مكان ملف ال php.ini
    php --ini
     
    ثم قم بفتح php.ini وابحث عن variables_order وقم بتغيرها الى GPCS هكذا .
    variables_order = "GPCS" وذلك سيحل المشكلة ان شاء الله
  4. إجابة محمد_عاطف سؤال في سؤال عن برمجه تطبيق Desktop كانت الإجابة المقبولة   
    وعليكم السلام ورحمة الله وبركاته .
    ان لغه php واطار عمل لارافيل هو فى الاساس لبناء تطبيقات الويب ولكن توجد مكتبات لتحويل تطبيق الويب هذا الى desktop application ولكنه فى الاساس يعتبر تطبيق ويب .
    وهو شئ ليس سيئا ولكنه يعتمد على ما تريده انت فافضل لغه لبرمجة ال desktop application هى C# ASP.NET .
    ويمكنك سؤال المبرمج هل سيقوم بانشاء تطبيق ويب وتشغيله لديك على متصفح ؟ ام سيقوم بتحويل التطبيق الى ملف يمكن تثبيته ليعمل لديك على الجهاز .
    واذا كان التطبيق ستستعمله على جهاز واحد فالافضل هو تطبيق الويب من وجهة نظرى .
  5. إجابة محمد_عاطف سؤال في عربة التسوق لا تعمل كانت الإجابة المقبولة   
    الخطأ لديك فى هذا الملف  src\hook\cart\add-to-cart-hook.js فى مشروع الواجهة الامامية . فى سطر رقم 25 .
    if (item.availableColors.length >= 1) هنا انت تقوم بالتحقق من طول ال availableColors و هى ليست موجودة فى المتغير item لذلك يحدت الخطأ حيث لا يمكن استدعاء الخاصية length على undifined .
    والحل هو التحقق اولا من وجود ال availableColors هكذا .
    if (item.availableColors?.length >= 1) حيث ان علامة ال ? تتحقق اولا من ان القيمة ليست null او undefined قبل تنفيذ ما بعدها وهكذا تكون قد حلت المشكلة .
    و قد لاحظت ان معظم الاخطاء من هذا النوع حيث لا يقوم السيرفر الخلفى بارجاع البيانات التى تستخدمها فى الواجهة الامامية لذلك يجب عليك اولا التحقق من البيانات التى تعود لك من السيرفر قبل العمل عليها.
  6. إجابة محمد_عاطف سؤال في طريقة عمل infinite scroll بإستخدام livewire كانت الإجابة المقبولة   
    الامر بسيط ويوجد عدة طرق ولكن الافضل هو .
    اولا انشاء متغير يحمل المنشورات التى تم تحميلها الى الان حيث لا نريد فى كل مرة يصل المستخدم الى اخر الصفحة وناتى بالمنشروات من جديد , ونعطى قيمة افتراضية لهذا المتغير بمصفوفة فارغة .
    public $postCotainer = []; وايضا نقوم بانشاء متغيرين اخرين احدهما يحمل القيمة الافتراضية لعدد المنشورات التى سيتم تحميلها فى بداية الصفحة او حتى عند التمرير لاسفل الصفحة . والاخر يحمل عدد المنشورات الذى تم عرضها الى الان .
    public $take = 5; public $skip = 0; والان نقوم بانشاء استماع الى حدث التمرير جديد وفى الدالة نقوم بزيادة عدد المنشورات التى عرضها .
    protected $listeners = ['scrollPosts'=>'getMorePosts']; public function getMorePosts() { $this->skip += $this->take; } هكذا كل مرة يتم التمرير لاسفل الصفحة نقوم بزيادة العدد الذى تم عرضه .
    والان فى الدالة getPostsProperty نضع هذا الكود.
    public function getPostsProperty() { $ids = auth()->user()->following()->wherePivot('confirmed', true)->get()->pluck('id'); $this->postCotainer = array_merge($this->postCotainer,Post::whereIn('user_id', $ids)->latest()->skip($this->skip)->take($this->take)->get()->all()); return $this->postCotainer; } لاحظ هنا اننا اولا استخدمنا دالة array_merge وذلك لدمج المنشورات التى تم تحميلها سابقا الى المنشورات الجديدة الذى سوف يتم تحميلها .
    ولاحظ اننا فى الاستعلام الخاص بال sql اضفنا داليتن الاولى هى skip اى اننا لا نريد ان ناتى بعدد معين بالمنشورات وهى المنشورات التى تم تحميلها بالفعل ولذلك نمرر لها المتغير skip الذى يحمل عدد المنشروات الذى تم تحميلها الى الان. 
    والدالة take التى تسمح لنا باحضار عدد معين فقط من المنشورات ولذلك ارسلنا لها المتغير take الذى يحمل عدد المنشورات التى نريد عرضها .
    وبهذا نكون قد انتهينا من الكود الخلفى . ولكن ستجد مشكلة سوف تحدث فى الحدث الذى لديك toggleFollow فمثلا اذا قام المستخدم بالغاء متابعه او متابعه مستخدم جديد فان منشوراته التى تم تحميلها سابقا نريد ان نحذفها او عرضها . لذلك سنجعل عند استماع الى الحدث toggleFollow هو حذف جميع المنشورات التى تم تحميلها سابقا واعادة التحميل من جديد حتى لا تحدث تلك المشكلة.وهذا هو كود المكون كاملا بعد التعديل.
    <?php namespace App\Livewire; use Livewire\Component; use App\Models\Post; class PostsList extends Component { protected $listeners = ['toggleFollow' => 'resetPosts','scrollPosts'=>'getMorePosts']; public $take = 5; public $skip = 0; public $postCotainer = []; public function resetPosts() { $this->postCotainer = []; $this->take = 5; $this->skip = 0; } public function getPostsProperty() { $ids = auth()->user()->following()->wherePivot('confirmed', true)->get()->pluck('id'); $this->postCotainer = array_merge($this->postCotainer,Post::whereIn('user_id', $ids)->latest()->skip($this->skip)->take($this->take)->get()->all()); return $this->postCotainer; } public function getMorePosts() { $this->skip += $this->take; } public function render() { return view('livewire.posts-list'); } } اما فى الواجهة الامامية فسوف نضيف استماع الى حدث التمرير و التحقق من ان المستخدم قد قام بالتمرير الى اخر الصفحة . واذا كان قام بالتمرير الى اخر الصفحة نقوم بارسال الحدث scrollPosts الذى سوف يقوم باحضار المزيد من المنشورات وبذلك كلما قام بالتمرير ياتى بالمنشورات الجديد .
    <div class="w-[30rem] mx-auto lg:w-[95rem]"> @forelse($this->posts as $post) <livewire:post :post="$post" :wire:key="'post_'.$post->id" /> @empty <div class="max-w-2xl gap-8 mx-auto dark:text-gray-100"> {{ __('Start Following Your Friends and Enjoy.') }} </div> @endforelse </div> @script <script> window.onscroll = function(ev) { if ((window.innerHeight + Math.round(window.scrollY)) >= document.body.offsetHeight) { $wire.dispatch('scrollPosts'); } }; </script> @endscript وهكذا قد انتهينا من جميع الاكود ويمكنك استعمالها وستعمل معك . ويمكنك تغير القيمة الافتراضية للمتغير take على حسب عدد المنشورات التى تريدها حيث انا اعطيته قيمة ابتدائية ب 5
  7. إجابة محمد_عاطف سؤال في تحديث القيم عن طريق js كانت الإجابة المقبولة   
    كما توقعت . بالفعل هذه مشكلة فى jqeury حيث ان jquery فى اول مرة يتم استدعاء الدالة data للعنصر فانه يقوم بحفظها لديه و اذا تم التعديل عليها فان jquery لا يشعر بهذا التعديل اذا كان تم التعديل عليها بدونه . لذلك فانه عندما يقوم livewire باعادة بناء العنصر فان jquery لا يلاحظ انه تم تغير ال data-image_url لذلك الحل هو ان تقوم باستبدال السطر لديك بهذا السطر.
    $("#image_src").attr("src", $(this).attr('data-image_url'));  
    او يمكنك اضافة هذا السطر فى بداية الدالة حيث يجعل jquery يقوم بحذف ال data التى قام بحفظها مسبقا . وبذلك يقوم بانشائها مجددا عن اول مرة اخرى يتم استخدامها.
    $(document).on("click", ".show-image-modal", function () { $(this).removeData(); if ($(this).data('type_media') === "video") { $("#video_src").attr("src", $(this).data('video_url')); $("#image_src").hide(); $("#view_media_card_footer").show(); } else { $("#view_media_card_footer").hide(); $("#image_src").show(); $("#image_src").attr("src", $(this).data('image_url')); } $("#image_modal").modal("show"); });  
  8. إجابة محمد_عاطف سؤال في إعادة كتابة الروابط في ملف htaccess كانت الإجابة المقبولة   
    هلا اخى .
    كما اخبرتك سابقا يمكنك تعديل اى صفحة كما تشاء فقط قم بتغير القاعدة الخاصة فى ملف htaccess . وقد قمت بتعديل الملف ليتناسب مع هذه الروابط.
    .htaccess
  9. إجابة محمد_عاطف سؤال في سؤال عن تحديث vs code الجديد ؟ كانت الإجابة المقبولة   
    وعليكم السلام ورحمة الله وبركاته .
    بالفعل التحديث الجديد هذه الخاصية مزعجة بالفعل ويمكنك الغائها بطريقتين : 
    اولا قم بالضغط بالزر الايمن للفأرة على الكود الذى يقسم الصفحة وقم بالغاء sticky scroll .
     ثانيا من قائمة view اختر appearance ثم قم بالغاء sticky scroll .

  10. إجابة محمد_عاطف سؤال في مشكلة QRCode و image مع mPDF كانت الإجابة المقبولة   
    كما اخبرتك بالنسبة لموضوع الصور فهذا هو الحل 
    اما بالنسبة لجزء ظهور عنصر ال xml
    يمكنك استبدال السطر هذا 
    {!! QrCode::size(100)->generate(Request::url()); !!} بهذا الكود 
    {!! substr((string) QrCode::size(100)->generate(Request::url()),38) !!}
    وهذا الملف كاملا مرفق لك 
    index.blade.php
  11. إجابة محمد_عاطف سؤال في display maps and images in modal problems with livewire كانت الإجابة المقبولة   
    هذا الكود بعد التعديل 
    $(document).on("click", ".show-image-modal", function(){ if ($(this).data('type_media') === "video") { $("#video_src").attr("src", $(this).data('video_url')); $("#image_src").hide(); $("#view_media_card_footer").show(); } else { $("#view_media_card_footer").hide(); $("#image_src").show(); $("#image_src").attr("src", $(this).data('image_url')); } $("#image_modal").modal("show"); });  
  12. إجابة محمد_عاطف سؤال في minimum postive number function in cpp كانت الإجابة المقبولة   
    اولا اذا قمت بعمل comment لسطر ال return فى الدالة minpositive فان الكود لن يعمل وسيظهر لك خطأ لانك قد قمت بتعريف الدالة minpositive انها تقوم بارجاع رقم int و فى داخل الدالة لا تقوم بارجاع اى قيمة لذا سيظهر لك خطأ .
    ثانيا لتقوم بارجاع القيمة بطريقة dynamic لتقم باستخدام هذا الكود 
    int minpositive(int nums[], int size) { int check = nums[0]; for (int i = 0; i < size; i++) { if (nums[i] > 0 && abs(check) > nums[i]) { check = nums[i]; } } if (check < 0) return 0; return check; } اولا نقم بتعريف المتغير check باول قيمة فى المصفوفة (array) لانك اذا لم تقم بذلك سيحدث خطأ لنفترض انك قمت بتعريف check لياخذ قيمة 1 و ان ال array لا تحتوى على عنصر رقم 1 وان اصغر قيمة هى مثلا 5 كما فى المثال الخاص بكم ستجد ان القيمة التى سيتم ارجاعها من هذه الدالة هى 1 وهذا خطأ لذلك قمنا باخذ اول قيمة فى المصفوفة ثانيا ستجد انى قمت باضافة abs(check) بدلا من check لان اول قيمة فى المصفوفة من الممكن ان تكون سالبة لذلك ستكون اصغر من اى قيمة موجبة اخرى ولن يتحقق الشرط لذلك قمنا باضافة ذلك. اخيرا ستجدنى قمت باضافة هذا السطر if (check < 0) return 0; لانه فى حالة ان المصفوفة كانت جميعها ارقام سالبة فيجب ان يقوم بارجاع 0
  13. إجابة محمد_عاطف سؤال في إقتباس من مشكلة ملئ الحقول عن طريق ال JavaScript مع Livewire كانت الإجابة المقبولة   
    عند استخدام الحقول الخاصة لرفع الملفات فى livewire فانه يتعامل معها باختلاف عن الحقول النصية .
    حيث يقوم livewire برفع الملفات تلقائيا عن اختيار الملف فى مجلد مؤقت ويقوم ايضا بعمل validation عليه للتاكد من انه تم ادخال ملفات صحيحة كما قمت بتعريفها فى القواعد (rules)  ويوفر livewire لك ايضا دالة تستخدمها لتعرض للمستخدم الصورة التى تم رفعها ويمكنك استخدامها كالتالى . 
    @if ($contract) <img src="{{ $contract->temporaryUrl() }}"> @endif ولحل هذه المشكلة لديك يمكنك استخدام wire:ignore على العنصر الخاص بالخريطة مثل الكود التالى  .
    <div wire:ignore> {{-- هنا العناصر الخاصة بالخريطة --}} </div> وسيعمل معك جيدا ان شاء الله 
    حيث يقوم wire:ignore بتجاهل هذا العنصر ولا يقوم بتحديثه مع تحديث ال component
  14. إجابة محمد_عاطف سؤال في مشكلة ملئ الحقول عن طريق ال JavaScript مع Livewire كانت الإجابة المقبولة   
    حينما تقوم بملئ الحقول عن طريق ال javascript فهى فقط تقوم بتغير القيمة ولا تقوم بارسال الحدث (event) و livewire تقوم فقط بتحديث القيمة عند إرسال الحدث input ولذلك الحل سيكون عن طريق ارسال الحدث يدويا بعد تغير القيمة مثل هذا .
    // بعد كود تغير القيمة document.getElementById('latitude').dispatchEvent(new Event('input')) document.getElementById('longitude').dispatchEvent(new Event('input'))  
  15. إجابة محمد_عاطف سؤال في التعامل مع خرائط قوقل Google Maps Platform كانت الإجابة المقبولة   
    المشكلة كما اخبرتك منذ البداية ان العنصر map غير موجود .
    حيث ان الملف mapLeaflet.js يتم تنفيذه فى صفحة ال index حيث لا يوجد حتى الان العنصر map 
    لذلك الحل هو اول يجب عليك نقل هذا المتغير بداخل الدالة initMap 
    ثانيا ضع هذه الكود فى اخر صفحة ال modal اللتى تسمى  tents.blade.php
    @script <script> $wire.on('map_opend', (event) => { let interval_id = setInterval(() => { if ($('#map').length) { initMap(); clearInterval(interval_id); } }, 300); }); </script> @endscript وفى ملف TentComponent 
    نضع هذا السطر فى اخر دالة create و دالة edit
    $this->dispatch('map_opend'); ويمكنك ارجاع كل شئ كما كان قبل تعديل هذا الجزء 
     
    وستعمل جيدا ان شاء الله كما هو مرفق فى الصورة

  16. إجابة محمد_عاطف سؤال في كيفية التحقق من مفتاح أجنبي foreign Key في لارافيل Laravel؟ كانت الإجابة المقبولة   
    نعم توجد طريقة فى لارافيل تستخدم للتاكد من وجود القيمة في قاعدة البيانات .
    $validator = Validator::make($request->all(), [ // ... 'category_id' => 'exists:categories,id', ]); بعد كتابة exists: نقوم بتمرير اسم الجدول و إن كان العمود له اسم مختلف عن اسم العنصر المرسل نمرر بعدها اسم العمود
  17. إجابة محمد_عاطف سؤال في class list ( JavaScript ) استفسار كانت الإجابة المقبولة   
    الطريقة تعتمد على الكود الخاص بال HTML 
    فإن التلاعب بعناصر ال DOM تعتمد بشكل أساسي على طريقة كتابة ال HTML 
    فالطريقة الثانية تستخدم إن كان العنصر الذي يتم الضغط عليه هو ما نريد ان نقوم بحذف ال class الخاص به .
    بينما الطريقة الأولى إن لم يكن نفس العنصر الذي تم الضغط عليه
  18. إجابة محمد_عاطف سؤال في التعامل مع input من نوع time كانت الإجابة المقبولة   
    يمكنك إستخدام getElementById للحصول علي العنصر . ولإستخدام القيمة المختارة بواسطة العنصر يمكنك إستخدام .value 
    document.getElementById("timeSyart").value  
    ويمكنك إستخدام الأحداث وبهذا تستطيع تنفيذ ما تريد كلما تم إختيار أو تعديل الوقت .
    document.getElementById("timeSyart").addEventListener("input", (event)=>{ // هنا نقوم بكتابة الكود وسوف يتم تنفيذه كلما تم إختيار الوقت event.target.value // للحصول على قيمة الوقت });  
  19. إجابة محمد_عاطف سؤال في ما هو حل الخطأ IndexError: list index out of range في بايثون؟ كانت الإجابة المقبولة   
    معنى رسالة الخطأ ان المؤشر الخاص ب ال list خارج نطاق ال list .
    والخطأ هنا 
    حيث تقوم بإختيار عنصر من roundkeys و هي فارغة 
    يجب أن تقوم باستخدام roundkeys تحتوى على 32 عنصر لتفادى حدوث خطأ .
  20. إجابة محمد_عاطف سؤال في كيفية ترتيب النتائج بإستخدام علاقة من جدول آخر في لارافيل Laravel؟ كانت الإجابة المقبولة   
    لمعرفة أين يقع الخطأ فى جزء ال orderBy علينا معرفة كيف يقوم laravel بتحويل هذا الكود الى امر sql.
    إن laravel يقوم بتنفيذ امرين , للحصول اولا على UserProducts ثم بعد ذلك يقوم بتنفيذ امر اخر للحصول على ال products . لنرى كيف يقوم بتنفيذ ذلك 
    SELECT * FROM `user_products` WHERE `user_id` = 1; SELECT * FROM `products` WHERE `products`.`id` in (1) هنا اولا يقوم بتنفيذ السطر الاول للحصول على userProducts ثم بعد ذلك يأخذ ال id الخاص بال product ثم يقوم بتمريرها للسطر الثانى . ولذلك فإن orderBy ستكون خطأ لانه سيقوم بترتيب السطر الاول عن طريق products.type اللتى لا توجد فى هذه العملية .
    ولحل تلك المشكلة هناك اكثر من حل وقد اخترت لك اسهل طريقتين .
    إن كنت تريد ان تقوم بترتيب النتيجة دائما ب product.type فالحل الافضل ان تقوم بالترتيب فى ملف ال model  public function products() { return $this->hasMany(Product::class)->orderBy('type'); } وبذلك ستتاكد ان فى حالة استدعاء ال products ستكون مرتبة ب ال type .
    والطريقة الثانية عن طريق الدمج join 
    UserProducts::join('products',function($join) { $join->on('products.id', '=', 'user_product.product_id') ->where('user_product.user_id', '=', $user->id) ->where('user_product.count', '>', 0); })->orderBy('products.type')->get(); والافضل هنا ان تقوم باستخدام select لتحديد الاعمده التى تريدها حتى لا يحدث خطأ إن كان هناك اعمده لها نفس الاسم فى الجدولين
  21. إجابة محمد_عاطف سؤال في استفسار في eo.target جافاسكريبت كانت الإجابة المقبولة   
    const content = document.getElementsByClassName("content")[0]; هذا الجزء من الكود يستخدم للبحث فى جميع عناصر ال DOM الموجودة فى الصفحة و نتيجة تنفيذه هو إعادة كل العناصر التى تمتلك class يسمى content.
    const content = eo.target.parentElement.parentElement.getElementsByClassName( "content" )[0]; على العكس فإن هذا الكود يستخدم للبحث عن العناصر الابناء فى هذا العنصر فقط .
    توضيح : 
    1- eo.target هذا الجزء يستخدم للحصول على العنصر نفسه الذى هو item الذى بدوره هو ..plus .
    2- parentElement.parentElement. يستخدم للحصول على العنصر الاب للعنصر item وهنا استخدمت مرتان للحصول على الجد للعنصر item الذي هو q1 او q2 
    3- getElementsByClassName("content")[0] وهذا الجزء هو للحصول على الابناء للعنصر q1 او q2 
    والتى تحمل class يسمى content
     
    وهذا هو الحل الافضل لاننا نبحث عن العنصر contetn الابن الخاص بالسؤال
  22. إجابة محمد_عاطف سؤال في مافائدة الأمر COUNT(*) في SQL كانت الإجابة المقبولة   
    وعليكم السلام اخى .
    الأمر COUNT(*) يستخدم لمعرفة عدد البيانات الموجودة فى الجدول .
    إذا كنت تريد مثلا معرفة عدد جميع البيانات الموجودة فى الجدول تستخدم 
    SELECT COUNT(*) from `table` وإذا كنت تريد معرفة عدد بيانات محددة مثلا معرفة عدد المستخدمين اسمائهم مثلا أحمد نستخدم .
    SELECT COUNT(*) from `table` WHERE name = "أحمد"  
  23. إجابة محمد_عاطف سؤال في ظهور الخطأ Notice: Undefined index: name في PHP كانت الإجابة المقبولة   
    مرحبا أخى .
    هل هذا الخطأ يظهر لك عندما تقوم بإرسال ال form من هذه الصفحة ؟
    ام يظهر عندما تقوم بعمل تحويل من صفحة إلى صفحة ؟ -إن كان هذا ما يحدث هل يمكنك إرسال هذا الملف-
    الكود لا يوجد به خطأ ان كنت تقوم بإرسال ال form من هذه الصفحة .
    معنى رسائل التحذير الظاهرة هي أن المتغير $_POST لا توجد لديه هذه القيم 
    $_POST['name']; $_POST['price']; $_POST['details']; $_FILES['image']; وهذا سوف يحدث فقط ان كنت تقوم بإرسال form اخرى لهذا الملف .
    إن كان هذا فعلا ما يحدث فقم بإرسال ال form الاخرى لنفس الملف وإذا كنت تريد أن تقوم بعمل
    redirect لهذه الصفحة تستطيع ان تستخدم هذا الأمر
    header('Location: '.'/your_file_location'); // هنا تقوم بوضع مسار الملف  
  24. إجابة محمد_عاطف سؤال في كيفية تغيير صيغة التاريخ في نموذج model في لارافيل Laravel؟ كانت الإجابة المقبولة   
    كل ال models الخاصة بلارافيل تستطيع أن تقوم بتعديل شكل البيانات اللتى تريدها أن تعود من قاعدة البيانات عن طريق اضافة هذا المتغير فى ال model 
    protected $casts = [ 'any_variable' => 'date:Y-m-d', 'another_variable' => 'datetime:Y-m-d H:00', ] ويمكنك معرفة المزيد من طرق ال casting عن طريق laravel documentation 
    https://laravel.com/docs/8.x/eloquent-mutators#date-casting
  25. إجابة محمد_عاطف سؤال في ما السبب في خطأ Call to undefined function mysqli_real_escape_sting كانت الإجابة المقبولة   
    الخطأ هنا اخى 
    mysqli_real_escape_sting() // string not sting mysqli_real_escape_string() // correct  
    الكود الصحيح 
    $name = mysqli_real_escape_string($conn , $_POST['name']) ; $email = mysqli_real_escape_string($conn , $_POST['email']) ; $password = mysqli_real_escape_string($conn , $_POST['password']) ; $pass = mysqli_real_escape_string($conn , $_POST['password_re']) ;  
×
×
  • أضف...