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

السؤال

نشر (معدل)

السلام عليكم ورحمة الله وبركاته 

تحيه طيبه للجميع 

لدي جدول لجمع اعجابات المستخدمون على الشكل التالي :

159247465560371.png

 

انا أقوم بعملية جمع اعداد الارقام في الحقل counts من خلال select count  في ملف الاتصال php لكل موضوع بشكل مستقل لني واضع جمله الشرطيه where markte_id = market_id 

 

مع العلم ان حقل useridsessin هذا id الخاص ب اليوزر حتى اعلم ان اليوزر رقم 5 قام بوضع اعجاب للموضوع رقم 99 مثلا 

ثم أقوم بعملية جلب العدد في الاندرويد وعرضه على شكل نص من خلال مكتبة volley الكود شغال ميه ميه الى هذا النقطة .

ولكن المشكلة الان فقط كيف يمكن جعل المستخدم قادر على الاعجاب بالموضوع لمره واحده فقط ؟ في حالة كان هذا المستخدم إعطاء اعجاب في السابق لهذا الموضوع فلا يستطيع ان يقوم بذلك من جديد 

كيف يمكنني التحقق من ذلك أي فكره لعمل ذلك يمكن استخدامها ؟

 

هذا كود volley المستخدم 

    private void Likes() {
        String HI ="http://=========/Like.php?markte_id=" + markte_id;
        StringRequest stringRequest=new StringRequest(Request.Method.GET, HI, new Response.Listener<String>() {
        
            @Override
            public void onResponse(String response) {
                try {
                    JSONObject jsonObject=new JSONObject(response);
                    JSONArray array=jsonObject.getJSONArray("data");

                    for (int i=0; i<array.length(); i++ ){
                        JSONObject ob=array.getJSONObject(i);
                  
                 
                        String count= ob.getString("count"); 
                        text_total_likes.setText(count);
                  
                       /*
                        if (count.equals("0")){

                            button10.setEnabled(true);
                            button10.setBackgroundResource(R.drawable.ic_favorite);
                        }else {
                            button10.setEnabled(false);
                            button10.setBackgroundResource(R.drawable.ic_favorite_black_24dp);
                        }
                        
                        */
                     

                    }
               
                } catch (JSONException e) {
                    e.printStackTrace();
                }

          


            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
        RequestQueue requestQueue= Volley.newRequestQueue(getContext());
        requestQueue.add(stringRequest);
    }

 

تم التعديل في بواسطة مروان مروان3

Recommended Posts

  • 1
نشر

قم بإضافة خانة لعدد الإعجابات لكل متجر في البداية ستكون الخانة تحتوي على 0 إعجاب، عند إضافة إعجاب قم بإدخاله لجدول الإعجابات وفي نفس الوقت إذهب لجدول المتاجر وأضف إعجاب لخانة الإعجابات للمتجر لتصبح الإعجابات 1، وعند حذف إعجاب إجعلها 0 وهكذا

لجعل المستخدم يعجب بالمتجر مرة واحدة قم بالخطوات التالية:

عند ضغط المستخدم في التطبيق على زر الإعجاب.

قم بإرسال طلب لنظام الخادم backend برقم المستخدم و رقم market كما تقوم به الآن

في جانب الخادم، قم أولًا بالتحقق من أن المستخدم سبق أو لم يسبق له الإعجاب بذلك market، عن طريق عمل where ب UserIdSessin و market_id.

select * from table where markte_id = x and UserIdSessin = y

إذا كان المستخدم سبق له الإعجاب بالمتجر قم بحذف هذا الإعجاب عن طريق خذفه من قاعدة البيانات.

DELETE from table where markte_id = x and UserIdSessin = y

أما إن كان المستخدم لم يسبق له الإعجاب قم بعمل إضافة لهذا السطر في قاعدة البيانات.

INSERT INTO table (markte_id, UserIdSessin) VALUES (x, y);

ملحوظة: قم بتعويض table بإسم الجدول وx وy برقم المتجر والمستخدم.

  • 0
نشر
بتاريخ 39 دقائق مضت قال محمد ربيع زليول:

قم بإضافة خانة لعدد الإعجابات لكل متجر في البداية ستكون الخانة تحتوي على 0 إعجاب، عند إضافة إعجاب قم بإدخاله لجدول الإعجابات وفي نفس الوقت إذهب لجدول المتاجر وأضف إعجاب لخانة الإعجابات للمتجر لتصبح الإعجابات 1، وعند حذف إعجاب إجعلها 0 وهكذا

لجعل المستخدم يعجب بالمتجر مرة واحدة قم بالخطوات التالية:

عند ضغط المستخدم في التطبيق على زر الإعجاب.

قم بإرسال طلب لنظام الخادم backend برقم المستخدم و رقم market كما تقوم به الآن

في جانب الخادم، قم أولًا بالتحقق من أن المستخدم سبق أو لم يسبق له الإعجاب بذلك market، عن طريق عمل where ب UserIdSessin و market_id.


select * from table where markte_id = x and UserIdSessin = y

إذا كان المستخدم سبق له الإعجاب بالمتجر قم بحذف هذا الإعجاب عن طريق خذفه من قاعدة البيانات.


DELETE from table where markte_id = x and UserIdSessin = y

أما إن كان المستخدم لم يسبق له الإعجاب قم بعمل إضافة لهذا السطر في قاعدة البيانات.


INSERT INTO table (markte_id, UserIdSessin) VALUES (x, y);

ملحوظة: قم بتعويض table بإسم الجدول وx وy برقم المتجر والمستخدم.

هلا بيك عزيزي

لماذا نقوم ب حذف الاعجاب اخوي؟

الا يكفي التحقق من وجوده مسبقا ثم تعطيل الزر على المستخدم؟

  • 0
نشر
بتاريخ الآن قال مروان مروان3:

هلا بيك عزيزي

لماذا نقوم ب حذف الاعجاب اخوي؟

الا يكفي التحقق من وجوده مسبقا ثم تعطيل الزر على المستخدم؟

طبعًا، كل الإمكانيات ممكنة.

لكن، لو أراد المستخدم إلغاء الإعجاب، كيف سيقوم بذلك في هذه الحالة؟

  • 0
نشر
بتاريخ 15 دقائق مضت قال محمد ربيع زليول:

طبعًا، كل الإمكانيات ممكنة.

لكن، لو أراد المستخدم إلغاء الإعجاب، كيف سيقوم بذلك في هذه الحالة؟

فعلا لم اتطرق ل هذا الامر او كانت فكرتي بشاشه منفصله ممكن تسميتها قائمة الاعجابات حتى يكون الامر اكثر تخصيص ولكن فكرتك اعجبتني ايضا

سوف اقوم بتطبيق الطريقه التي اعطيتني ايها عزيزي وساقوم بافادتك ب النتيجه باذن الله

  • 0
نشر

@محمد ربيع زليول

كل الشكر لك ي غالي الكود شغال تم حل المشكلة عدم ازدواجية تكرار الاعجاب من نفس اليوزر

ولكن كيف يمكن تغير الصوره لليوزر الان ؟ مثلا انا يوزر رقم اي دي 5 وسبق وان قمت بوضع اعجاب على هذا الموضوع من المفترض اشوف صورة مختلفة وفي حالة لم اضع اعجاب الصورة او الايقونة تكون مختلفة 

كيف يمكن عمل ذلك الان عزيزي ؟ اين يجب ان اضع الشرط وكيف تكون صيغة الشرط ؟  

 

  • 0
نشر
بتاريخ 10 دقائق مضت قال مروان مروان3:

@محمد ربيع زليول

كل الشكر لك ي غالي الكود شغال تم حل المشكلة عدم ازدواجية تكرار الاعجاب من نفس اليوزر

ولكن كيف يمكن تغير الصوره لليوزر الان ؟ مثلا انا يوزر رقم اي دي 5 وسبق وان قمت بوضع اعجاب على هذا الموضوع من المفترض اشوف صورة مختلفة وفي حالة لم اضع اعجاب الصورة او الايقونة تكون مختلفة 

كيف يمكن عمل ذلك الان عزيزي ؟ اين يجب ان اضع الشرط وكيف تكون صيغة الشرط ؟  

 

دائمًا في البرمجة هناك حلول مختلفة لعمل نفس الشيء، سأذكر لك حلًا من الحلول الممكنة، عندما تأتي بمعلومات المتاجر، قم بجلب معلومة إضافية وهي هل قام هذا المستخدم بعمل إعجاب أو لا، طبعًا ستقوم بهذا في جزء الخادم حسب اللغة البرمجية التي تشتغل بها.

المهم عند عرضك للمتاجر ستقوم بعمل شرط إذا كان المستخدم معجب بالمتجر ضع مثلًا قلبًا أحمر، وإن لم يكن المستخدم معجبًا بالمتجر قلب رمادي.

وعند ضغط المستخدم على إعجاب أو إلغاء إعجاب، قم بتغير هته المعلومة في التطبيق من صحيح إلى خطأ أو العكس.

  • 0
نشر
بتاريخ 1 ساعة قال محمد ربيع زليول:

دائمًا في البرمجة هناك حلول مختلفة لعمل نفس الشيء، سأذكر لك حلًا من الحلول الممكنة، عندما تأتي بمعلومات المتاجر، قم بجلب معلومة إضافية وهي هل قام هذا المستخدم بعمل إعجاب أو لا، طبعًا ستقوم بهذا في جزء الخادم حسب اللغة البرمجية التي تشتغل بها.

المهم عند عرضك للمتاجر ستقوم بعمل شرط إذا كان المستخدم معجب بالمتجر ضع مثلًا قلبًا أحمر، وإن لم يكن المستخدم معجبًا بالمتجر قلب رمادي.

وعند ضغط المستخدم على إعجاب أو إلغاء إعجاب، قم بتغير هته المعلومة في التطبيق من صحيح إلى خطأ أو العكس.

بامانه لم افهم جيد عليك ولكني حاولت ان اقوم بتالي ولم ينجح الامر

      if (UserIdSessin.equals(UserIdSessin) && (markte_id.equals(markte_id))){

                            button10.setEnabled(true);
                            button10.setBackgroundResource(R.drawable.ic_favorite);
                        }else {
                            button10.setEnabled(false);
                            button10.setBackgroundResource(R.drawable.ic_favorite_black_24dp);
                        }

وشرط مشابه لشرط الذي وضعته في كود اضافة الاعجاب ولكن الفرق وضعته في كود جلب بيانات الاعجاب من جدول الاعجابات الذي سبق ورفعت له صوره في الاعلى 

  • 1
نشر
بتاريخ 2 ساعات قال مروان مروان3:

بامانه لم افهم جيد عليك ولكني حاولت ان اقوم بتالي ولم ينجح الامر


      if (UserIdSessin.equals(UserIdSessin) && (markte_id.equals(markte_id))){

                            button10.setEnabled(true);
                            button10.setBackgroundResource(R.drawable.ic_favorite);
                        }else {
                            button10.setEnabled(false);
                            button10.setBackgroundResource(R.drawable.ic_favorite_black_24dp);
                        }

وشرط مشابه لشرط الذي وضعته في كود اضافة الاعجاب ولكن الفرق وضعته في كود جلب بيانات الاعجاب من جدول الاعجابات الذي سبق ورفعت له صوره في الاعلى 

في السطر الأول، تحاول مقارنة UserIdSessin مع UserIdSessin ومقارنة markte_id مع markte_id، هي نفس القيم، وإن قمت بمقارنتها ستكون المقارنة دئمًا صحيحة.

ما قصدته هو التالي:

أنت الآن تحضر مجموعة من البيانات من جانب الخادم، أفترض أن هذه البيانات هي متاجر، مثلًا وتقوم بإحضارها من قاعدة البيانات بالشكل التالي:

select * from markets

إما أن تقوم بتغير الإستعلام ليصبح بالشكل التالي:

SELECT markets.*, (SELECT COUNT(*) FROM table_name WHERE table_name.markte_id = markets.id and table_name.UserIdSessin = x) AS liked FROM markets

طبعًا مع تعويض:

  •  table_name بإسم جدول الإعجابات
  • markets بإسم جدول المتاجر
  • id بإسم حقل id لجدول المتاجر
  • x برقم المستخدم.

الآن أنت تملك حقل إضافيًا إسمه liked سيحتوي على قيمة 1 إذا كان المستخدم معجبًا بالمتجر و0 إذا كان غير معجب به.

هذا الحقل يمكنك من خلاله في جانب التطبيق معرفة هل المستخدم معجب أو غير معجب بالمتجر.

  • 0
نشر
بتاريخ 1 ساعة قال محمد ربيع زليول:

في السطر الأول، تحاول مقارنة UserIdSessin مع UserIdSessin ومقارنة markte_id مع markte_id، هي نفس القيم، وإن قمت بمقارنتها ستكون المقارنة دئمًا صحيحة.

ما قصدته هو التالي:

أنت الآن تحضر مجموعة من البيانات من جانب الخادم، أفترض أن هذه البيانات هي متاجر، مثلًا وتقوم بإحضارها من قاعدة البيانات بالشكل التالي:


select * from markets

إما أن تقوم بتغير الإستعلام ليصبح بالشكل التالي:


SELECT markets.*, (SELECT COUNT(*) FROM table_name WHERE table_name.markte_id = markets.id and table_name.UserIdSessin = x) AS liked FROM markets

طبعًا مع تعويض:

  •  table_name بإسم جدول الإعجابات
  • markets بإسم جدول المتاجر
  • id بإسم حقل id لجدول المتاجر
  • x برقم المستخدم.

الآن أنت تملك حقل إضافيًا إسمه liked سيحتوي على قيمة 1 إذا كان المستخدم معجبًا بالمتجر و0 إذا كان غير معجب به.

هذا الحقل يمكنك من خلاله في جانب التطبيق معرفة هل المستخدم معجب أو غير معجب بالمتجر.

شكرا لك عزيزي 

ربي يعطيك الف صحه وعافيه 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...