جست و جو در دیتا بیس

oliver

Member
سلام
می خوام برای سایتم بخش جست و جو بسازم اما نمی دونم باید چی کار کنم !
یعنی توی دستور Sql موندم !
می شه کمک کنید !
متشکرم
 

Zanguei

Member
سلام
این یک روش است. با توجه به اطلاعات بازگشتی از فرم جستجو متغیر search$ مقدار میگیره. البته یادتون باشه مسائل امنیتی رو حتما رعایت کنید.
PHP:
if(isset($_POST['form_search']))
{
 $search="SELECT * FROM lib_books INNER JOIN lib_categories ON (cat_id=bk_cat) WHERE 1 ";
 if(isset($_POST['bk_isbn']) && $_POST['bk_isbn']!='')
 {
  $search.="and bk_isbn = '".$_POST['bk_isbn']."' ";
 }
 if(isset($_POST['bk_title']) && $_POST['bk_title']!='')
 {
  $search.="and bk_title like '%".$_POST['bk_title']."%' ";
 }
 if(isset($_POST['bk_author']) && $_POST['bk_author']!='')
 {
  $search.="and bk_author like '%".$_POST['bk_author']."%' ";
 }
 if(isset($_POST['bk_description']) && $_POST['bk_description']!='')
 {
  $search.="and bk_description like '%".$_POST['bk_description']."%' ";
 }
 if(isset($_POST['bk_cat']) && $_POST['bk_cat']!='')
 {
  $search.="and bk_cat = '".$_POST['bk_cat']."' ";
 }
 $search.="ORDER BY bk_cat, bk_title";
}
else
{
 $search="SELECT * FROM lib_books INNER JOIN lib_categories ON (cat_id=bk_cat) ORDER BY bk_cat, bk_title";
}
 
آخرین ویرایش:

Zanguei

Member
باز هم سلام
محتملا شما php کار نیستید؟! درست حدس زدم؟ به هر حال یک توضیح کوتاه:
فرض بر این است که ما بانکی داریم که مشخصات کتابهایی را در خودش نگهداری میکند. برای دستیابی به اطلاعات و جستجوی کتاب یا کتابهایی خاص در یک صفحه php از یک فرم جستجو استفاده می کنیم که شامل فیلدهایی که در بانک اطلاعات هم داریم باشه. فیلدهایی مثل کد بین المللی کتاب، عنوان کتاب، نام مولف یا مترجم و .... نمونه ای از کد html مربوط به فرم در زیر آمده است
HTML:
              <form action="" method="post" name="form1" id="form1">
                <table align="center" cellpadding="3" dir="rtl">
                  <tr>
                    <th colspan="2" align="center" nowrap="nowrap" bgcolor="#BDDFE1">جستجو</th>
                    </tr>
                  <tr>
                    <td align="right">کد بین المللی:</td>
                    <td align="right"><input type="text" name="bk_isbn" value="" size="32" /></td>
                  </tr>
                  <tr>
                    <td align="right">عنوان:</td>
                    <td align="right"><input type="text" name="bk_title" value="" size="32" /></td>
                  </tr>
                  <tr>
                    <td align="right">مولف/مترجم:</td>
                    <td align="right"><input type="text" name="bk_author" value="" size="32" /></td>
                  </tr>
                  <tr>
                    <td align="right" valign="top">توضیحات:</td>
                    <td align="right"><textarea name="bk_description" cols="50" rows="5"></textarea></td>
                  </tr>
                  <tr>
                    <td colspan="2" align="center"><input name="submit" type="submit" value="   جستجو   " /></td>
                  </tr>
                </table>
                <input name="form_search" type="hidden" id="form_search" value="form1" />
              </form>

خوب پس از ارسال و submit شدن فرم میتونیم با خصیصه action اطلاعات رو به همین صفحه یا صفحه دیگری بفرستیم. عذر میخوام اگر مطالب ساده ای رو هم میگم. چون شما نگفتید چی رو متوجه نشید که من همونا رو فقط توضیح بدم. به هر حال معمولا اطلاعات به همین صفحه ارسال میشه. در اینجا من از متد post در فرم استفاده کردم و اطلاعات ارسال شده را هم با آرایه POST_$ گرفتم. در کد php بالا من پس از مطمئن شدن از اینکه اطلاعات ارسال شده اند مقدار اولیه ای برای متغیر search$ در نظر گرفتم یعنی تا WHERE 1 و تا اینجا هیچ اشکال و خطایی در کد SQL وجود ندارد. حالا یکی یکی فیلدهای جستجو شده رو چک می کنیم اگر کاربر آنها را موقع جستجو پر کرده باشه دستور sql مربوطه رو به دستور sql اولیه که در متغیر search$ ذخیره کرده بودیم اضافه می کنیم. (همون and bk_isbn و الی آخر) برای هر فیلد اینکار تکرار میشه. و نهایتا دستور مربوط به مرتب سازی رو به اون اضافه می کنم. (همون ORDER BY). اگر که صفحه برای اولین بار باز شده یعنی کاربر هنوز چیزی را جستجو نکرده باشه هم در قسمت else شرط متغیر search$ رو مقداردهی اولیه میکنم تا تمامی رکوردها رو نمایش بده البته میتونید محدودیت نمایش در تعداد رکورد ها رو هم داشته باشید که حتما خودتون از من وارد تر هستید. بعد از داشتن کد sql اون رو به تابع mysql_query میفرستیم و نتیجه رو در صفحه نمایش میدیم. والسلام.
موفق باشید.
 

oliver

Member
ممنون !
البته من خیلی هم مبتدی نیستم ! ولی خوب دستت درد نکنه !
اشکال از خودم بود !
توضیحات مفصلت هم ممنون
 

oliver

Member
فقط یه مورد که متوجه نمی شم !
ببین من فقط یه دونه فیلد دارم که به نام $search ارسال می شه ! یا حالا هر چیز دیگه !
حالا تو کد شما من فقط از این کد زیر استفاده می کنم !
if(isset($_POST['form_search']))
{
$search="SELECT * FROM lib_books INNER JOIN lib_categories ON (cat_id=bk_cat) WHERE 1 ";
if(isset($_POST['bk_isbn']) && $_POST['bk_isbn']!='')
{
$search.="and bk_isbn = '".$_POST['bk_isbn']."' ";
}
مشکلم اینه که نمی دونم cat_id=bk_cat این دوتا چی هستن ؟
 

جدیدترین ارسال ها

بالا