Flutter Dev نشر 5 سبتمبر 2022 أرسل تقرير نشر 5 سبتمبر 2022 (معدل) قمت بوضع استعلام ويحتوي على شرطين WHERE احتاج ان اجعل الكود يعمل بشكل صحيح لو تحقق اول شرط ولم يتحقق الشرط الثاني بمعنى واحد اجباري وثاني اختياري بمعنى انا قمت بوضع الشرط الأول وهو جلب البيانات التي id لها يساوي كذا هذا شرط اجباري طبعا اما الثاني اجلب لي الداتا التي لونها اخضر مثلا هذا شرط اختياري حتى لو المستخدم لم يقم بأرساله الى ملف php الملف يجب ان يعمل بشكل صحيح الكود المستعمل كالتالي: <?php require_once 'con.php'; $id=$_GET['id']; $Uid=$_GET['Uid']; $sql="SELECT * FROM books where id = ? AND Uid=? " ; $stmt = $con->prepare($sql); $stmt->bind_param("ss",$id,$Uid); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows >0) { while($row[] = $result->fetch_assoc()) { $item = $row; $json = json_encode($item, JSON_NUMERIC_CHECK); } } else { $json = json_encode(["result" => "No Data Foun"]); } echo $json; $con->close(); ?> الشرط الأول هذا يجب ان يكون اجباري او الملف لن يعمل : $id=$_GET['id']; اما الشرط الثاني وهو الاختياري لا يهم الملف استقبله او لا وفي حالة استقباله يتم تنفيذه $Uid=$_GET['Uid']; كيف يمكن عمل ذلك ؟ هل توجد طريقة تم التعديل في 5 سبتمبر 2022 بواسطة Wael Aljamal توضيح السؤال 2 اقتباس
1 معاذ قره محمد نشر 5 سبتمبر 2022 أرسل تقرير نشر 5 سبتمبر 2022 يمكنك باستخدام الأمر $isTouch = isset($Uid); أن تتأكد إذا كان المتحول Uid معرفاً أم لا. ثم أضف if شرطية في حال كان معرفاً نفذ أمر جلب البيانات معه، وإذا كان غير معرفاً من دونه، أي عوضا عن الكود : $sql="SELECT * FROM books where id = ? AND Uid=? " ; اكتب الكود: if (isset($variable)) { $sql="SELECT * FROM books where id = ? AND Uid=? " ; }else { $sql="SELECT * FROM books where id = ?" ; } 1 اقتباس
1 Wael Aljamal نشر 5 سبتمبر 2022 أرسل تقرير نشر 5 سبتمبر 2022 ما فائدة الشرط الثاني منطقياً في الاستعلام؟ أرجو إعطاء مثال برأيي إضافة الشرط الثاني برمجيا لعبارة SQL $sql="SELECT * FROM books where id = ?"; if ($Uid) $sql .= "AND Uid=?" هكذا يصبح Uid اختياري بالشرط حسب إن أدخله المستخدم أم لا. وسوف تعدل الشيفرة أيضاً في bind_param وتمرير عدد متغيرات كما أسلفت <?php if (isset($Uid)) { $sql="SELECT * FROM books where id = ? AND Uid=? " ; $stmt = $con->prepare($sql); $stmt->bind_param("ss",$id,$Uid); }else { $sql="SELECT * FROM books where id = ?" ; $stmt = $con->prepare($sql); $stmt->bind_param("s",$id); } 1 اقتباس
1 Wael Aljamal نشر 5 سبتمبر 2022 أرسل تقرير نشر 5 سبتمبر 2022 بتاريخ منذ ساعة مضت قال مروان مروان3: اهلا اخي الفكرة انني سوف اجلب favorite من جدول ال favorite لو كان تم إضافة favorite للكتاب ولو لم يكن تم عمل favorite له يعمل skip له من فضلك تصوير قاعدة البيانات مع الجدولين و بعض البيانات فيهم ثم ذكر مثال، ربما الفكرة بشكل عام تطبيقها مختلف؟ هل id و uid من نفس الجدول؟ 1 اقتباس
1 معاذ قره محمد نشر 5 سبتمبر 2022 أرسل تقرير نشر 5 سبتمبر 2022 أهلا بك. بتاريخ 2 ساعات قال مروان مروان3: مرحبا اخي الكريم قمت بوضع الكود بشكل التالي: <?php require_once 'con.php'; $id='14'; $isTouch = isset($Uid); if (isset($Uid)) { $sql="SELECT * FROM books where id = ? AND Uid=? " ; }else { $sql="SELECT * FROM books where id = ?" ; } $stmt = $con->prepare($sql); $stmt->bind_param("ss",$id,$Uid); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows >0) { while($row[] = $result->fetch_assoc()) { $item = $row; $json = json_encode($item, JSON_NUMERIC_CHECK); } } else { $json = json_encode(["result" => "No Data Foun"]); } echo $json; $con->close(); ?> ولكني احصل على الخطاء التالي: Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in /home/home/****************php on line 30 on line 22 Notice: Trying to get property 'num_rows' of non-object in /home/****************php on line 30 {"result":"No Data Foun"} هذا تحذير وضعه المترجم والسبب بما أنه هناك احتمالين في البرنامج إما أن تأخذ متحولين id و Uid أو فقط id فيجب أن تتأكد من عدد المتحولات التي ستدخلها في bind_param إما أن تكون اثنين أو واحد فقط. // $stmt->bind_param("ss",$id,$Uid); استبدل هذا الكود بالشرط if (isTouch) { $stmt->bind_param("ss",$id,$Uid); } else{ $stmt->bind_param("ss",$id); } 1 اقتباس
0 Flutter Dev نشر 5 سبتمبر 2022 الكاتب أرسل تقرير نشر 5 سبتمبر 2022 بتاريخ 7 دقائق مضت قال معاذ قره محمد: يمكنك باستخدام الأمر $isTouch = isset($Uid); أن تتأكد إذا كان المتحول Uid معرفاً أم لا. ثم أضف if شرطية في حال كان معرفاً نفذ أمر جلب البيانات معه، وإذا كان غير معرفاً من دونه، أي عوضا عن الكود : $sql="SELECT * FROM books where id = ? AND Uid=? " ; اكتب الكود: if (isset($variable)) { $sql="SELECT * FROM books where id = ? AND Uid=? " ; }else { $sql="SELECT * FROM books where id = ?" ; } مرحبا اخي الكريم قمت بوضع الكود بشكل التالي: <?php require_once 'con.php'; $id='14'; $isTouch = isset($Uid); if (isset($Uid)) { $sql="SELECT * FROM books where id = ? AND Uid=? " ; }else { $sql="SELECT * FROM books where id = ?" ; } $stmt = $con->prepare($sql); $stmt->bind_param("ss",$id,$Uid); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows >0) { while($row[] = $result->fetch_assoc()) { $item = $row; $json = json_encode($item, JSON_NUMERIC_CHECK); } } else { $json = json_encode(["result" => "No Data Foun"]); } echo $json; $con->close(); ?> ولكني احصل على الخطاء التالي: Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in /home/home/****************php on line 30 on line 22 Notice: Trying to get property 'num_rows' of non-object in /home/****************php on line 30 {"result":"No Data Foun"} 1 اقتباس
0 Flutter Dev نشر 5 سبتمبر 2022 الكاتب أرسل تقرير نشر 5 سبتمبر 2022 بتاريخ منذ ساعة مضت قال Wael Aljamal: ما فائدة الشرط الثاني منطقياً في الاستعلام؟ أرجو إعطاء مثال برأيي إضافة الشرط الثاني برمجيا لعبارة SQL $sql="SELECT * FROM books where id = ?"; if ($Uid) $sql .= "AND Uid=?" هكذا يصبح Uid اختياري بالشرط حسب إن أدخله المستخدم أم لا. وسوف تعدل الشيفرة أيضاً في bind_param وتمرير عدد متغيرات كما أسلفت <?php if (isset($Uid)) { $sql="SELECT * FROM books where id = ? AND Uid=? " ; $stmt = $con->prepare($sql); $stmt->bind_param("ss",$id,$Uid); }else { $sql="SELECT * FROM books where id = ?" ; $stmt = $con->prepare($sql); $stmt->bind_param("s",$id); } اهلا اخي الفكرة انني سوف اجلب favorite من جدول ال favorite لو كان تم إضافة favorite للكتاب ولو لم يكن تم عمل favorite له يعمل skip له 1 اقتباس
0 Flutter Dev نشر 5 سبتمبر 2022 الكاتب أرسل تقرير نشر 5 سبتمبر 2022 بتاريخ 2 ساعات قال Wael Aljamal: من فضلك تصوير قاعدة البيانات مع الجدولين و بعض البيانات فيهم ثم ذكر مثال، ربما الفكرة بشكل عام تطبيقها مختلف؟ هل id و uid من نفس الجدول؟ اهلا اخي الكريم حقيقه كنت أحاول عمل اختصار لصفحات الاستعلام ولكن مثل ما ذكرت انت الفكرة أصبحت اصعب قليلا كنت اريد اعمل left join من الجدولين حيث انني لدي الجدول الأول المشار له في المشاركة أعلاه + جدول المفضلة ولكني تراجعت بعد تعقيد الفكرة وقمت بوضع استعلام لجدول المفضلة بشكل منفصل حتى لا يكون استعمله في مواقع مختلفة في التطبيق معقد كل الشكر لك اخي الكريم 1 اقتباس
السؤال
Flutter Dev
قمت بوضع استعلام ويحتوي على شرطين WHERE
احتاج ان اجعل الكود يعمل بشكل صحيح لو تحقق اول شرط ولم يتحقق الشرط الثاني بمعنى واحد اجباري وثاني اختياري
بمعنى انا قمت بوضع الشرط الأول وهو جلب البيانات التي id لها يساوي كذا هذا شرط اجباري طبعا
اما الثاني اجلب لي الداتا التي لونها اخضر مثلا هذا شرط اختياري حتى لو المستخدم لم يقم بأرساله الى ملف php الملف يجب ان يعمل بشكل صحيح
الكود المستعمل كالتالي:
الشرط الأول هذا يجب ان يكون اجباري او الملف لن يعمل :
$id=$_GET['id'];
اما الشرط الثاني وهو الاختياري لا يهم الملف استقبله او لا وفي حالة استقباله يتم تنفيذه
$Uid=$_GET['Uid'];
كيف يمكن عمل ذلك ؟ هل توجد طريقة
تم التعديل في بواسطة Wael Aljamalتوضيح السؤال
7 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.