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

السؤال

نشر

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

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

عذرا على الازعاج ولكن لدي استفسار..

استخدم مكتبة Volley + php file + mysql في تطبيقي للقيام بعملية الاتصال وتخزين البيانات وتعديل عليها وحذفها الخ..

قمت بعمل الملف التالي لحذف سجل بيانات معين اعتمادنا على id الخاص ب الماركة + الخاص ب اليوزر في ذلك الماركة فقط بمعنى لو اختلف id الخاص ب الماركة لا يتم حذف السجل فقد يكون المستخدم لديه سجلات في ماركة مختلف  ..

 <?php
 
	$servername = "localhost";
	$username = "root";
	$password = "";
	$dbname = "test";

	$conn = mysqli_connect($servername, $username, $password, $dbname);
	if ($conn) {
$markte_id = $_POST["markte_id"];
	$UserIdSessin = $_POST["UserIdSessin"];

		$sql = "DELETE from favorite where markte_id = markte_id and UserIdSessin =UserIdSessin";

		
		if(mysqli_query($conn, $sql))
		{
		
			echo json_encode(array('response' => 'DELETE OK'));
		} else {
			echo json_encode(array('response' => 'DELETE NO'));
		}
		
	} else {
		echo json_encode(array('response' => 'Connection Error'));
	}
	
	mysqli_close($conn);
?> 

والاتصال اليه بواسطة الكود  التالي :

    private void Deletefavaorit() {
        String i_upd_url = "http://=========/end/dr.php?markte_id=" + markte_id + "&UserIdSessin=" + UserIdSessin;
        StringRequest strreq = new StringRequest(Request.Method.POST,i_upd_url
                ,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String Response) {
                      Toast.makeText(getActivity(), Response , Toast.LENGTH_LONG).show();
                        Log.i(TAG, "ResponseTest"+Response.toString());
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError e) {
                e.printStackTrace();
            }
        });
        RequestQueue requestQueue = (RequestQueue) Volley.newRequestQueue(getActivity());
        requestQueue.add(strreq);
    }


}

المشكلة الان الكود شغال ولكن يقوم بعملية حذف لجميع السجلات الموجوده في قاعدة البيانات لدى محاولة حذف سجل معين 

ورد السيرفر يكون كالتالي :

 

    <font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
    <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined index: markte_id in C:\wamp64\www\end\dr.php on line <i>10</i></th></tr>
    <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
    <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
    <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0002</td><td bgcolor='#eeeeec' align='right'>401384</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\wamp64\www\end\dr.php' bgcolor='#eeeeec'>...\dr.php<b>:</b>0</td></tr>
    </table></font>
    <br />
    <font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
    <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined index: UserIdSessin in C:\wamp64\www\end\dr.php on line <i>11</i></th></tr>
    <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
    <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
    <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0002</td><td bgcolor='#eeeeec' align='right'>401384</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\wamp64\www\end\dr.php' bgcolor='#eeeeec'>...\dr.php<b>:</b>0</td></tr>
    </table></font>
    {"response":"DELETE OK"} 

 

طبعا انا الي فهمته بوجود مشكلة في :

Notice: Undefined index: markte_id
Notice: Undefined index: UserIdSessin

ولكني متاكد من تمرير البيانات من خلال url لمكتبة volley 

وقد قمت بتجربة ذلك كالتالي قمت بمشاهدة البيانات التي يتم ارسالها من خلال الرابط  :

          String i_upd_url = "http://======/end/dr.php?markte_id=" + markte_id + "&UserIdSessin=" + UserIdSessin;

Log.i(TAG, "ResponseTest"+i_upd_url.toString());

وكانت النتيجة كالتالي:

: ResponseTesthttp://=======/end/dr.php?markte_id=83&UserIdSessin=31

مع العلم 

markte_id = 83

UserIdSeein =31 

جميع البيانات صحيحه التي تم ارسالها في الرابط 

كما ان الجدول في قاعدة البيانات مكون من ثلاث حقول كالتالي:

favoriteID

markte_id

UserIdSessin

 

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

Recommended Posts

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

لما استخدم الكود الذي قمت بوضعه لي لا يتم الحذف ابدا

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

// إقتران الحذف  
private void Deletefavaorit(String markte_id, String UserIdSessin) {
        String i_upd_url = "http://=========/end/delete.php"; // رابط ملف الحذف
        StringRequest strreq = new StringRequest(Request.Method.POST,i_upd_url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String Response) {
                      Toast.makeText(getActivity(), Response , Toast.LENGTH_LONG).show();
                        Log.i(TAG, "ResponseTest"+Response.toString());
                    }
                }, new Response.ErrorListener() {
                      @Override
                      public void onErrorResponse(VolleyError e) {
                          e.printStackTrace();
                	  }
        		}){
                @Override
                protected Map<String, String> getParams() throws AuthFailureError {

                    Map<String,String> params = new HashMap<String,String>();
                    params.put("markte_id", markte_id);
                  	params.put("UserIdSessin", UserIdSessin);
                    return params;
                }
        	};
        RequestQueue requestQueue = (RequestQueue) Volley.newRequestQueue(getActivity());
        requestQueue.add(strreq);
    }

لا تنسى تضمين الكلاسات المستعملة و عند إستعمال الإقتران مرر له كل من markte_id و UserIdSessin على شكل string 
جرب و أخبرني بالنتيجة 

  • 1
نشر

مرحبا مروان 
أظن أن المشكلة في الإستعلام الخاص بالحذف فهو يكتب بهذا الشكل: 

<?php 

$markte_id = $_POST["markte_id"];
$UserIdSessin = $_POST["UserIdSessin"];

$sql = "DELETE FROM favorite WHERE markte_id = '".$markte_id."' AND UserIdSessin = '".$UserIdSessin."'";

تأكد من أن إسم الجدول هو favorite و يحتوي أيضا على الحقلين markte_id و UserIdSessin
بالتوفيق

  • 0
نشر (معدل)
بتاريخ 17 دقائق مضت قال عبود سمير:

مرحبا مروان 
أظن أن المشكلة في الإستعلام الخاص بالحذف فهو يكتب بهذا الشكل: 


<?php 

$markte_id = $_POST["markte_id"];
$UserIdSessin = $_POST["UserIdSessin"];

$sql = "DELETE FROM favorite WHERE markte_id = '".$markte_id."' AND UserIdSessin = '".$UserIdSessin."'";

تأكد من أن إسم الجدول هو favorite و يحتوي أيضا على الحقلين markte_id و UserIdSessin
بالتوفيق

لم ينجح الامر عزيز

لما استخدم الكود الذي قمت بوضعه لي لا يتم الحذف ابدا مع ظهور مسج مشابه للمسج الذي كان يظهر في الكود الخاص فيني

بعتقادي المشكلة في كود الفولي ولكن وين حقيقي لا اعلم 

بنسبه للجدول فهو يحتوي نعم على الحقول

حقيقي المشكله غريبه لم اجد لها تفسير او حل رغم كل المحاولات 

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

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


// إقتران الحذف  
private void Deletefavaorit(String markte_id, String UserIdSessin) {
        String i_upd_url = "http://=========/end/delete.php"; // رابط ملف الحذف
        StringRequest strreq = new StringRequest(Request.Method.POST,i_upd_url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String Response) {
                      Toast.makeText(getActivity(), Response , Toast.LENGTH_LONG).show();
                        Log.i(TAG, "ResponseTest"+Response.toString());
                    }
                }, new Response.ErrorListener() {
                      @Override
                      public void onErrorResponse(VolleyError e) {
                          e.printStackTrace();
                	  }
        		}){
                @Override
                protected Map<String, String> getParams() throws AuthFailureError {

                    Map<String,String> params = new HashMap<String,String>();
                    params.put("markte_id", markte_id);
                  	params.put("UserIdSessin", UserIdSessin);
                    return params;
                }
        	};
        RequestQueue requestQueue = (RequestQueue) Volley.newRequestQueue(getActivity());
        requestQueue.add(strreq);
    }

لا تنسى تضمين الكلاسات المستعملة و عند إستعمال الإقتران مرر له كل من markte_id و UserIdSessin على شكل string 
جرب و أخبرني بالنتيجة 

هلا فيك ي غالي 

تم حل المشكله فعلا 

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

ولكني اريد افهم شي منك لو تكرمت

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

  • 0
نشر
بتاريخ منذ ساعة مضت قال مروان مروان3:

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

مرحباً

عندما تريد إرسال بيانات من التطبيق للخادم يُستحسن عدم وضع البيانات في الرابط و إتباع نفس الطريقة التي وضعتها لك فوق لأن هذه هي الطريقة الصحيحة 

بالتوفيق

  • 0
نشر
بتاريخ 9 دقائق مضت قال عبود سمير:

مرحباً

عندما تريد إرسال بيانات من التطبيق للخادم يُستحسن عدم وضع البيانات في الرابط و إتباع نفس الطريقة التي وضعتها لك فوق لأن هذه هي الطريقة الصحيحة 

بالتوفيق

هل توجد مشكله بنسبه الى آمان البيانات حسب طريقتي ؟

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

هل توجد مشكله بنسبه الى آمان البيانات حسب طريقتي ؟

في حالة نوع الطلب أو Request Method من نوع Get يمكنك إستعمال ال params في الرابط أما في حالة نوع الطلب أو request method من نوع post أو put أو delete فالأحسن إستعمال الطريقة الثانية 

بالتوفيق 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...