جستجوی پیشرفته

ithelper

Member
سلام دوستان من میخوام کدی بنویسم که جستجوی پیشرفته داشته باشه... به این صورت که چندین آیتم برای انتخاب داشته باشد...هرکدام از اینها را انتخاب کرد باتوجه به همونا نتایج را نشان دهد. جستجو من از یک جدول هست. تابه حال به این شکل ننوشتم و معمولا سرچ های تکی داشتم. کسی می تونه منو کمک کنه؟؟؟؟ ممنون میشم دوستان.
 

Masoud1365

مدیر انجمن
باید کوئریتون رو مرج کنید به عنوان مثال :
PHP:
<?php

$SQL = "SELECT * FROM `table` WHERE";
if($_POST['name'])
    $SQL.=" `name` = ".$_POST['name'];
if($_POST['lastName'])
    $SQL.=" `lastName` = ".$_POST['lastName'];
if(...)
.
.
.
//Dar akhare az ba estefade az $SQL query migirim
?>
 

DaDaDooDoo

کاربر VIP
مسعود خان من توی پروژه قبلی از همین روش استفده کردم و جواب هم گرفتم ، اما به نظر خودم ساختار استاندارد و مناسبی نیست ( حرفه ای نیست ) ، آیا روش بهتری هم به جز مرج کردن کوئری هست ؟
 

Masoud1365

مدیر انجمن
کلا الگوریتمش به همین صورت هست !
من یه تیکه کد از یه پروژه هام رو میزارم ببینید !
این جوری من کار کردم
PHP:
$conditions = array();
            if($this->data['Reserf']['firstName']){
                $conditions['Reserf.firstName like'] = '%'.$this->data['Reserf']['firstName'].'%';
            }
            if($this->data['Reserf']['lastName']){
                $conditions['Reserf.lastName like'] = '%'.$this->data['Reserf']['lastName'].'%';
            }
            if($this->data['Reserf']['pnr']){
                $conditions['Reserf.id'] = $this->data['Reserf']['pnr'];
            }
            if($this->data['Reserf']['dfrday'] && $this->data['Reserf']['dfrmonth'] && $this->data['Reserf']['dfryear']){
                $dayFromReserve = $this->Timedate->changeDateType($this->data['Reserf']['dfrday'], $this->data['Reserf']['dfrmonth'], $this->data['Reserf']['dfryear']);
                $conditions['Reserf.salesDate >='] = $dayFromReserve;
            }
            if($this->data['Reserf']['durday'] && $this->data['Reserf']['durmonth'] && $this->data['Reserf']['duryear']){
                $dayUntilReserve = $this->Timedate->changeDateType($this->data['Reserf']['durday'], $this->data['Reserf']['durmonth'], $this->data['Reserf']['duryear']);
                $conditions['Reserf.salesDate <='] = $dayUntilReserve;
            }
            if($this->data['Reserf']['dfsday'] && $this->data['Reserf']['dfsmonth'] && $this->data['Reserf']['dfsyear']){
                $dayFromStart = $this->Timedate->changeDateType($this->data['Reserf']['dfsday'], $this->data['Reserf']['dfsmonth'], $this->data['Reserf']['dfsyear']);
                $conditions['Reserf.startDate >='] = $dayFromStart;
            }
            if($this->data['Reserf']['dusday'] && $this->data['Reserf']['dusmonth'] && $this->data['Reserf']['dusyear']){
                $dayFromStart = $this->Timedate->changeDateType($this->data['Reserf']['dusday'], $this->data['Reserf']['dusmonth'], $this->data['Reserf']['dusyear']);
                $conditions['Reserf.startDate <='] = $dayFromStart;
            }
 

DaDaDooDoo

کاربر VIP
ممنون مسعود خان ، البته من قصد زیر سوال بودن راه حل شما رو نداشتم ، فقط می خواستم بدونم راه کاربهتری هم وجود داره یا نه ... فکر می کنم الگوریتمی که توی پست آخر گذاشتید همون الگوریتمی هست که اول اشاره کردید فقط به صورت آبجکتی استفاده شده.
ممنون از راهنماییت
 

ithelper

Member
خیلی مرسی ی ی ی ی
کد من به این شکل هست :
PHP:
<form action="tvshow.php?page=1" method="post">
                        <fieldset>
              <table> 
              <tr> 
              <td>        
            جستجو بر اساس نام و خلاصه :
            </td>
            <td><input name="tag" type="text" id="tag" size="15"/></td>
             </tr>
             <tr>
           <td> نمایش بر اساس نوع محصول : </td>
            <td width="100">
            شعر<input type="checkbox" value="شعر" name="شعر"/>
            </td>
            <td width="100">
            قصه<input type="checkbox" value="قصه" name="قصه"/>
            </td>
            </tr>
            <tr>
            <td>
            نمایش بر اساس مجری :</td>
            <td width="100">
            شادونه<input type="checkbox" value="شادونه" name="شادونه"/>
            </td>
            <td width="100">
            سارا<input type="checkbox" value="سارا" name="سارا"/>
            </td>
            <td width="100">
            قاصدک<input type="checkbox" value="قاصدک" name="قاصدک"/>
            </td>
            <td width="100">
            ****گ<input type="checkbox" value="****گ" name="****گ"/>
            </td>
            <td width="100">
            فیتیله ای<input type="checkbox" value="فیتیله ای" name="فیتیله ای"/>
            </td>
            <td width="100">
            سایر<input type="checkbox" value="سایر" name="سایر"/>
            </td>
            </tr>
            <tr>
            <td>
            نمایش بر اساس زمان :</td>
            <td width="100">کمتر از :</td>
            <td><select>
            <option value="kamtar">-انتخاب کنید-</option>
            <option value="1" id="1" >1 دقیقه</option>
            <option value="2" id="2" >2 دقیقه</option>
            <option value="3" id="3" >3 دقیقه</option>
            <option value="4" id="4" >4 دقیقه</option>
            <option value="5" id="5" >5 دقیقه</option>
            </select></td>
            <td>&nbsp; </td>
            <td>بیشتر از :</td>
            <td><select>
            <option value="bishtar">-انتخاب کنید-</option>
            <option value="1" id="1" >1 دقیقه</option>
            <option value="2" id="2" >2 دقیقه</option>
            <option value="3" id="3" >3 دقیقه</option>
            <option value="4" id="4" >4 دقیقه</option>
            <option value="5" id="5" >5 دقیقه</option>
            </select></td>
   </tr>
            <tr><td>&nbsp;</td>
            <td><input type="submit" value="جستجو" /></td>
            </tr>
            </table>
            </fieldset>
            </form>


و جستجو یی که دارم به این شکل هست :


حالا چطور می تونم جستجو داشته باشم ؟ همون کدم چی میشه ؟ ممنون ن ن ن ن ن ....
 

پیوست ها

  • search.jpg
    search.jpg
    48.9 کیلوبایت · بازدیدها: 7

ithelper

Member
شکل ظاهری کدم به این شکل شد دوستان.... لطفا کمک کنید... پای آبرو درمیونه :دی
 

پیوست ها

  • search.jpg
    search.jpg
    44.7 کیلوبایت · بازدیدها: 8

plague

Member
شکل ظاهری کدم به این شکل شد دوستان.... لطفا کمک کنید... پای آبرو درمیونه :دی
الان مشکلتون کجاست ؟ دوستان گفتن چیکار کن


کد:
name="شادونه"
آخه چرا فارسی گزاشتی اسم ها رو ؟

اینا اشتباست
HTML:
            شادونه<input type="checkbox" value="شادونه" name="شادونه"/>
            </td>
            <td width="100">
            سارا<input type="checkbox" value="سارا" name="سارا"/>
            </td>
            <td width="100">
            قاصدک<input type="checkbox" value="قاصدک" name="قاصدک"/>
            </td>
            <td width="100">
            ****گ<input type="checkbox" value="****گ" name="****گ"/>
            </td>
            <td width="100">
            فیتیله ای<input type="checkbox" value="فیتیله ای" name="فیتیله ای"/>
            </td>
            <td width="100">
            سایر<input type="checkbox" value="سایر" name="سایر"/>

باید name همه رو یک چیز بزاری مثلا همه رو بزار

کد:
 name="mojry"
البته در صورتی که بتونه چند تا انتخاب کنه باید تبدیل به آرایه کنیش با گزاشتن براکت در انتهاش

نوع محوصل هم همینطوری باید نیم ها یکی باشه نه اینکه نیم های مختلفی داشته باشن


وقتی فرمت رو ارسال میکنی
چک میکنی چی ها ارسال شده هر کدوم ارسال شده اون رو توی کوئریت دخیل میکنی
مثلا
PHP:
sql="select * from `tbl` where ";
if(isset($_post['type']))
$sql .= "`mojry` = $_post['mojry']";
if(isset($_post['kamtar']) && isset($_post['bishtar']) )
$sql .= "`date` > $_post['BISHTAR'] AND `date` < $_post['kamtar'] ";
 

ithelper

Member
مرسی دوست عزیز... خیلی به من لطف کردید...من الان از نحوه ی کلی کا کامل متوجه شدم چی هست... اما نمیتونم بنویسمش :( یعنی همش ایراد داره... اگه تک تک بهم بگید برای هر قسمت چه کنم. خیلی ممنون میشم.
 

plague

Member
ببینید ارسال فرم یکی از مفاهیم پایه و ابتدایی هست که توی هر کتاب یا آموزش پی اچ پی هست من نمیتونم برای شما توضیح بدم لطفا یه مطالعه در این ضمینه داشته باشید و اگه بعد از اون هم مشکل داشتیدو ظاهرا دارید کدتون رو اینجا بزارید تا رفع اشکال بشه
 

ithelper

Member
دوست عزیز...ممنونم از راهنمایتون.منظورم فرم نویسی نبود...کد جستجو بود....الان این کدی که زمانی که داره جستجو میکنه...ادامه اش چه باید کنم؟
PHP:
$query = "SELECT * FROM $tbl_name WHERE";
 if($_POST['noe'])
    $query.=" `product` = ".$_POST['noe'];
 if($_POST['mojri'])
    $query.=" `storyteller` = ".$_POST['mojri'];

مرسی.
 

Masoud1365

مدیر انجمن
بعد از این مرحله دیگه کوئریتون آماده شده !
باید ازش استفاده کنید :دی
مثال :
PHP:
$connection = "DATA BASE CONNECTION";
$SQL = "Your Search Query";
$result = $connection->query($SQL);
 

mtchabok

Member
دوست عزیز...ممنونم از راهنمایتون.منظورم فرم نویسی نبود...کد جستجو بود....الان این کدی که زمانی که داره جستجو میکنه...ادامه اش چه باید کنم؟
PHP:
$query = "SELECT * FROM $tbl_name WHERE";
 if($_POST['noe'])
    $query.=" `product` = ".$_POST['noe'];
 if($_POST['mojri'])
    $query.=" `storyteller` = ".$_POST['mojri'];
مرسی.
سلام
اگه فیلدهای product و storyteller از نوع عددی هستن کارتون درسته ولی اگه رشته باشن باید به صورت زیر کوئری رو درست کنین :
PHP:
<?php
$query = "SELECT * FROM $tbl_name WHERE";
 if($_POST['noe'])
    $query.=" `product` = '".$_POST['noe']."'";
 if($_POST['mojri'])
    $query.=" `storyteller` = '".$_POST['mojri']."'";
 

ithelper

Member
متشکر از راهنمایی های همگی
دوستان من با کمک شما این کد و گذاشتم... اما میگه invalid query :-؟ چرا آخه؟

PHP:
$query = "SELECT * FROM tv WHERE";
    if($_POST['noe'])
        $query.=" `product` = '".$_POST['noe']."'";
    if($_POST['mojri'])
        $query.=" `storyteller` = '".$_POST['mojri']."'";
    $result = mysql_query($query) or die ('invalid query');
    $count = mysql_num_rows($result);
 

mtchabok

Member
PHP:
    $query = "";
    if($_POST['noe'])
        $query.=($query?' and ':'')." `product` = '".$_POST['noe']."'";
    if($_POST['mojri'])
        $query.=($query?' and ':'')." `storyteller` = '".$_POST['mojri']."'";
    $result = mysql_query("SELECT * FROM tv WHERE ".$query) or die ('invalid query');
    $count = mysql_num_rows($result);
 

ithelper

Member
ایول ل ل ل ل ل ل ..... آقا مرسی ی ی ی ی ی ی
فقط این یک ارور ه ریزی داره... اونم اینکه اگه یک کدومشو تیک نزنیم... این ارور و میده... یعنی حتما باید همش تیک بخوره تا درست جواب بده...

Notice: Undefined index: mojri in E:\wamp\www\test\tvshow.php on line 91

آقا دست شما مرسی ی ی ی ی...فراوان :دی
 

ithelper

Member
بعد یک ارور ه دیگه هم اینکه اگه تو قسمت مجری ها 2تا تیک بخوره...اونیکه تعداد بیشتری ازش رکورد هستو نشون میده....یعنی چندانتخابی نیست...بازم ممنون....
 

mtchabok

Member
PHP:
    $query = "";
    if(!empty($_POST['noe']))
        $query.=($query?' and ':'')." `product` = '".mysql_real_escape_string(trim($_POST['noe']))."'";
    if(!empty($_POST['mojri']))
        $query.=($query?' and ':'')." `storyteller` = '".mysql_real_escape_string(trim($_POST['mojri']))."'";
    $result = mysql_query("SELECT * FROM tv WHERE ".$query) or die ('invalid query');
    $count = mysql_num_rows($result);
 

ithelper

Member
یعنی آخرشی ی ی ی ی ی ی شما .... مرسی ی ی ی ی ی
الان فقط یک ایرادی داره اونم اینه که چندتا تیک بخوره....فقط یکی رو نشون میده.....مثلا تو قسمت مجری هم فیتیله بخوره هم سایر...اونی که تعداد بیشتری رکورد داره رو نشون میده....تابع جالبی بود :دی ممنونم.....
البته قبلا دوستان گفتن اگر براکت [ ] اضافه کنم... درست میشه... اما نشد:-؟
بازم ممنون ن ن ن ن ن ن ن ن ن از وقتی که گذاشتین و کمکم کردین.... به هرچی میخوای برسی ی ی ی ی....
 

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

بالا