البحث المتقدم في مكتبة الكترونية بالاعتماد على عدة حقول بحيث يهمل الحقل الذي ليس به قيمة من شرط جملة الاستعلام...
و هي تحتاج الى الكثير من العمليات الشرطية و الاحتمالات.
مثلا لو كان لديك مربعي نص txt_1 و txt_2 فعليك كتابة 2*2 = 4 جملة شرطية ..
و تخيل مثلا لو كان لديك في فورم البحث 20 مربع نص و 4 قوائم انزلاقية مثلا و غيرها من خيارات البحث , عندئذ ستحتاج الى مئات الجمل الشرطية للخروج بجملة الاستعلام SQL و ما يرافقها من خربطة وو جع راس.
الحل يكمن في عمل ميثود لكل حقل من حقول البحث في الفورم (أدوات ASP.NET) , بحيث يعيد الميثود الخاص بكل كونترول احدى قيمتين : اما القيمة المخزنة في الكونترول أو لاشيء("") , وهذا مثال للتوضيح :
تخيل معي ان فورم البحث يحتوي على DropDownList باسم DDL و 3 مربعات نص باسم TXT_1 & TXT_2 & TXT_3 .
طبعا نحن نريد جملة SQL واحدة من كل هذه العملية ..
كود PHP:
protected void Button1_Click(object sender, EventArgs e)
{
string Str_SQL = "";
Str_SQL = "SELECT somethings FROM somwhere " + GettWhere() + GettTXT_1() + GettTXT_2() + GettTXT_3() + GettDDL();
//
// --- اتصل بقاعدة البيانات بالاعتماد على جملة السكيوال المولدة اعلاه و افعل ما يحلو لك
//
Response.Write(Str_SQL); //---لمشاهدة جملة الاستعلام المولدة
}
//------------------- قيمة TXT_2 ----------------------
string GettTXT_2()
{
if (!(TXT_2.Text==""))
{
if (TXT_1.Text == "") { return " related to TXT_2 DataBase field =" + TXT_2.Text; }
else { return " AND related to TXT_2 DataBase field =" + TXT_2.Text; } // AND/OR Whatever u like...
}
else
{ return ""; }
}
//------------------- قيمة TXT_3 ----------------------
string GettTXT_3()
{
if (!(TXT_3.Text == ""))
{
if ((TXT_1.Text == "") & (TXT_2.Text == "")) { return " related_to_TXT_3_database_field =" + TXT_2.Text; }
else { return " AND related_to_TXT_3_database_field =" + TXT_3.Text; }
}
else
{ return ""; }
}
string GettDDL()
{
if (!(DDL.SelectedIndex == 0)) // غير الشرط حسب منطق كودك
{
if ((TXT_1.Text == "") & (TXT_2.Text == "")) { return " related_to_DDL_database_field =" + DDL.SelectedItem.Value; }
else { return " AND related_to_DDL_database_field =" + DDL.SelectedItem.Value; }
}
else
{ return ""; }
}
string GettWhere()
{
if ((TXT_1.Text == "") & (TXT_2.Text == "") & (TXT_3.Text == "") & (DDL.SelectedIndex == 0))
{ return ""; }
else
{ return " where "; }
}