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

[PHP MYSQL] تنفيذ شرط في حالة عدم وجود قيمة في استعلام قاعدة البيانات

محمد المصري12

السؤال

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

عندي جدول اسمه order_collar 

محتواه كما في الصورة

2021-09-05_15-21-22.thumb.jpg.1360ab88f90abff5cb3be4d892fd3eff.jpg

 و عندي جدول آخر اسمه orders به حقل اسمه collar  ، هذا الحقل مرتبط بجدول order_collar  فيأخذ اما قيمة 0 في حال عدم وجود اي بيانات تم ادخالها فيه ، و ياخذ الرقم 1 بمجرد ان يقوم المستخدم بادخال بيانات فيه ( عن جدول order_collar اتحدث )

طيب الان المستخدم قام بادخال بيانات في جدول order_collar و تم تغيير حقل collar في جدول order بنجاح 

قمت ببرمجة زر حذف جماعي يقوم بحذف كل البيانات في جدول order_collar ثم يذهب لحقل collar و يعطيه القيمه 0 من جديد كالتالي

$order = $_POST['order'];

//$id = $_POST['id'];

$result = $conn->query("DELETE FROM order_collars WHERE order_id='$order'");

$result2 = $conn->query("UPDATE orders SET collar=0 WHERE id='$order'");

if ($result == true) {
echo "done";
} else{
echo "Errormessage: %s\n". $conn->error;
}

و العملية ممتازة

المشكلة الان ، كما في الصورة

2021-09-05_15-21-22.thumb.jpg.1360ab88f90abff5cb3be4d892fd3eff.jpg

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

ما اريده ان اخبر البرنامج به ، ان يقوم بعد الحذف بعمل استعلام لجدول order_collar ، فان كان هناك بيانات ظاهرة لا يقوم بعمل اي تعديل في حقل collar بجدول order 

اما لو لم يجد اي نتائج للاستعلام ، اذهب لحقل collar و قم يتغييره إلى صفر 

الكود كالتالي

$id = $_POST['id'];

$order = $_POST['order'];

// Delete Query
$result = $conn->query("DELETE FROM order_collars WHERE id='$id'");

// check Query
$ask = $conn->query("select * from order_collars WHERE order_id='$id'");
// check if you fount zero result excuse $result2
if (mysqli_num_rows($ask) == 0) {

    $result2 = $conn->query("UPDATE orders SET collar=0 WHERE id='$order'");
}

if ($result == true) {
echo "done";
} else{
echo "Errormessage: %s\n". $conn->error;
}

 

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

انا عاوزه ما ينفذش استعلام result2 إلا لما يعمل فحص الاول لجدول order_collars و ما يلاقيش نتائج ، لكن لو لقا نتائج للاستعلام ما ينفذوش

شكرا لكم

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 2

مجرد تفكير منطقي

$id = $_POST['id']; //  من المفترض ان هذا هو الاي دي الخاص بالعنصر نفسه

$order = $_POST['order']; // و من المفترض ان هذا هو رقم الطلب الذي بداخله يوجد هذا العنصر

اول خطوة تتأكد من انك قمت بتمرير قيمة ال id للعنصر ( و ليس للطلب ) بشكل سليم و نفترض ان ده حصل بالفعل 

يبقى الشرط في تعليمة الحذف هايتنفذ مش هايقول لأ 

$result = $conn->query("DELETE FROM order_collars WHERE id='$id' ");

لفت انتباهي هنا الخلل ده و اظنه سبب المشكلة

$ask = $conn->query("select * from order_collars WHERE order_id='$id' ");
                                                       --------------

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

مثلا id العنصر نفسه زي ما شفت في الصورة اللي حضرتك ارفقتها 

29 , 30 , 31 و كلهم مخصصين للطلب رقم 11

يبقى انا عاوزة احدد من الجدول كل البيانات المرتبطة بالطلب رقم 11 مش بال 29 و ال 30 و ال 31

و عشان كده هو ما بينفذش تعليمة ال update لانه الشرط اللي بناء عليه هاينفذ التعليمه دي لم يتحقق

جرب اربط الاستعلام بتاع التحديد ب اي دي الطلب مش العنصر

$ask = $conn->query("select * from order_collars WHERE order_id='$order' ");
                                                       --------------

كده الاستعلام هايكون منطقي و صحيح 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

إذا كان يوجد سجلات لها نفس قيمة order_id فيمكنك حذف السجل ثم يمكنك استخدام استعلام 

ORDER BY DESC LIMIT 1

ليتم فحص آخر سجل هل يساوي id قيمة order_id و بالتالي الاستعلام التالي يكون 

$ask = $conn->query("select * from order_collars WHERE order_id='$id' ORDER BY order_id DESC LIMIT 1");

و بناء عليه يتم تعديل حقل collar  أو لا , هل يمكنك تجربة ذلك وأخباري بالنتيجة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1
بتاريخ 11 دقائق مضت قال محمد المصري5:

$id = $_POST['id'];

$order = $_POST['order'];

// Delete Query
$result = $conn->query("DELETE FROM order_collars WHERE id='$id' ");

// check Query
$ask = $conn->query("select * from order_collars WHERE order_id='$id' ORDER BY DESC LIMIT 1");

// check if you fount zero result excuse $result2
if (mysqli_num_rows($ask) == 0 ){
    $result2 = $conn->query("UPDATE orders SET collar=0 WHERE id='$order'");
}

if ($result == true) {
echo "done";
} else{
echo "Errormessage: %s\n". $conn->error;
}

 

هل يمكنك إرفاق صورة من الجدولين في قاعدة البيانات ؟ 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

تفضل اخي تعبتك معايا 11.jpg.12770ed1fe0d703b5ea19307b4d4fcc0.jpg

 

2.thumb.jpg.4615731223dad17157e7f565c5e0a23e.jpg

زي ما حضرتك ملاحظ id رقم 11 اللي هو الامر بيتم عليه واخد رقم 0 رغم انه المفروض طالما فيه بيانات في الجدول التاني ما ياخدش الرقم صفر نهائي

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1
بتاريخ 51 دقائق مضت قال محمد المصري5:

تفضل اخي تعبتك معايا 

زي ما حضرتك ملاحظ id رقم 11 اللي هو الامر بيتم عليه واخد رقم 0 رغم انه المفروض طالما فيه بيانات في الجدول التاني ما ياخدش الرقم صفر نهائي

هل يمكنك طباعة عدد السجلات قبل التعديل بهذا الشكل 

$ask = $conn->query("select * from order_collars WHERE order_id='$id' ORDER BY DESC LIMIT 1");

echo mysqli_num_rows($ask) ;

و أخباري بالنتيجة ؟ 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

نعم يوجد سجلات لها نفس قيمة ال order_id و المستخدم من خلال الواجهة الخاصة بالبرنامج يحذف كل سجل على حدة 

نفذت التعديل اخي لكن نفس المشكلة 

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

 

$id = $_POST['id'];

$order = $_POST['order'];

// Delete Query
$result = $conn->query("DELETE FROM order_collars WHERE id='$id'");

// check Query
$ask = $conn->query("select * from order_collars WHERE order_id='$id' ORDER BY order_id DESC LIMIT 1");

// check if you fount zero result excuse $result2
if (mysqli_num_rows($ask) == 0) {

    $result2 = $conn->query("UPDATE orders SET collar=0 WHERE id='$order'");
}

if ($result == true) {
echo "done";
} else{
echo "Errormessage: %s\n". $conn->error;
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 1 دقيقة مضت قال محمد المصري5:

نعم يوجد سجلات لها نفس قيمة ال order_id و المستخدم من خلال الواجهة الخاصة بالبرنامج يحذف كل سجل على حدة 

نفذت التعديل اخي لكن نفس المشكلة 

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

 


$id = $_POST['id'];

$order = $_POST['order'];

// Delete Query
$result = $conn->query("DELETE FROM order_collars WHERE id='$id'");

// check Query
$ask = $conn->query("select * from order_collars WHERE order_id='$id' ORDER BY order_id DESC LIMIT 1");

// check if you fount zero result excuse $result2
if (mysqli_num_rows($ask) == 0) {

    $result2 = $conn->query("UPDATE orders SET collar=0 WHERE id='$order'");
}

if ($result == true) {
echo "done";
} else{
echo "Errormessage: %s\n". $conn->error;
}

 

حاول طباعة قيمة 

mysqli_num_rows($ask)

و معرفة ماذا ترجع لك , لأنه يبدو أنه ترجع رقم 0 فلذلك ينفذ الشرط , يجب أن يكون لا يساوي صفر الشرط , بسبب أنه يوجد سجل.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

مظبوط ، قمت بطباعتها و ادتني رقم 1 و لما شلت ال limit ادتني 4 اللي هما عدد القيم

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

  • 0
بتاريخ 18 دقائق مضت قال بلال زيادة:

هل حُلت المشكلة ؟ 

كلا ما زالت قائمة ، و هذا غريب
 

if (mysqli_num_rows($ask) == 0) {

    $result2 = $conn->query("UPDATE orders SET collar=0 WHERE id='$order'");
}

الان انا بقوله لما ناتج mysqli_num_rows($ask) يطلع معاك صفر نفذ الاستعلام result2

طيب الان ناتج mysqli_num_rows($ask) بيديك رقم 4 

بتنفذ الاستعلاااام لييييه ؟؟؟

ده اللي مجنني

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 27 دقائق مضت قال محمد المصري5:

كلا ما زالت قائمة ، و هذا غريب
 


if (mysqli_num_rows($ask) == 0) {

    $result2 = $conn->query("UPDATE orders SET collar=0 WHERE id='$order'");
}

الان انا بقوله لما ناتج mysqli_num_rows($ask) يطلع معاك صفر نفذ الاستعلام result2

طيب الان ناتج mysqli_num_rows($ask) بيديك رقم 4 

بتنفذ الاستعلاااام لييييه ؟؟؟

ده اللي مجنني

لا تقم بإزالة  LIMIT يبدو أنك تقوم بكتابة استعلام ما بشكلٍ خاطىء , هل يمكنك إرفاق الكود كاملاً ؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
$id = $_POST['id'];

$order = $_POST['order'];

// Delete Query
$result = $conn->query("DELETE FROM order_collars WHERE id='$id' ");

// check Query
$ask = $conn->query("select * from order_collars WHERE order_id='$id' ORDER BY DESC LIMIT 1");

// check if you fount zero result excuse $result2
if (mysqli_num_rows($ask) == 0 ){
    $result2 = $conn->query("UPDATE orders SET collar=0 WHERE id='$order'");
}

if ($result == true) {
echo "done";
} else{
echo "Errormessage: %s\n". $conn->error;
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 5 ساعات قال محمد المصري5:

النتيجة رقم 1

المشكلة أنه يرجع رقم 1 لعدد السجلات ولكن كيف ينفذ الشرط ما دام أن رقم السجلات لا يساوي صفر, هل يمكنك إرفاق كامل المشروع مع قاعدة البيانات ؟ 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 10 ساعات قال علياء المهندس:

مجرد تفكير منطقي


$id = $_POST['id']; //  من المفترض ان هذا هو الاي دي الخاص بالعنصر نفسه

$order = $_POST['order']; // و من المفترض ان هذا هو رقم الطلب الذي بداخله يوجد هذا العنصر

اول خطوة تتأكد من انك قمت بتمرير قيمة ال id للعنصر ( و ليس للطلب ) بشكل سليم و نفترض ان ده حصل بالفعل 

يبقى الشرط في تعليمة الحذف هايتنفذ مش هايقول لأ 


$result = $conn->query("DELETE FROM order_collars WHERE id='$id' ");

لفت انتباهي هنا الخلل ده و اظنه سبب المشكلة


$ask = $conn->query("select * from order_collars WHERE order_id='$id' ");
                                                       --------------

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

مثلا id العنصر نفسه زي ما شفت في الصورة اللي حضرتك ارفقتها 

29 , 30 , 31 و كلهم مخصصين للطلب رقم 11

يبقى انا عاوزة احدد من الجدول كل البيانات المرتبطة بالطلب رقم 11 مش بال 29 و ال 30 و ال 31

و عشان كده هو ما بينفذش تعليمة ال update لانه الشرط اللي بناء عليه هاينفذ التعليمه دي لم يتحقق

جرب اربط الاستعلام بتاع التحديد ب اي دي الطلب مش العنصر


$ask = $conn->query("select * from order_collars WHERE order_id='$order' ");
                                                       --------------

كده الاستعلام هايكون منطقي و صحيح 

كلام مظبوط 100 % و اتحلت المشكلة بفضل الله

شكرا لكم جميعا

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...