در جستجوی پیشرفته توسط php ما قابلیت های زیادی برای فیلتر کردن داده های mysql داریم. با این قابلیت ها ما یک کوئری sql با شرط برای ساخت یک جستجوی پیشرفته استفاده می کنیم .
در فرم جستجو ، ما تعدادی وردودی برای جتسجوی دقیق یا جستجوی فقط یکی از کلمه های داده شده در جمله داریم ، همچنین انتخاب ستون در هر کدام از جستجو ها باید مشخص شود.
فرم html جستجوی پیشرفته
کد html زیر شامل فیلد هایی برای جستجو است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<form name="frmSearch" method="post" action="index.php"> <input type="hidden" id="advance_search_submit" name="advance_search_submit" value="<?php echo $advance_search_submit; ?>"> <div class="search-box"> <label class="search-label">With Any One of the Words:</label> <div> <input type="text" name="search[with_any_one_of]" class="demoInputBox" value="<?php echo $with_any_one_of; ?>" /> <span id="advance_search_link" onClick="showHideAdvanceSearch()">Advance Search</span> </div> <div id="advanced-search-box" <?php if(empty($advance_search_submit)) { ?>style="display:none;"<?php } ?>> <label class="search-label">With the Exact String:</label> <div> <input type="text" name="search[with_the_exact_of]" id="with_the_exact_of" class="demoInputBox" value="<?php echo $with_the_exact_of; ?>" /> </div> <label class="search-label">Without:</label> <div> <input type="text" name="search[without]" id="without" class="demoInputBox" value="<?php echo $without; ?>" /> </div> <label class="search-label">Starts With:</label> <div> <input type="text" name="search[starts_with]" id="starts_with" class="demoInputBox" value="<?php echo $starts_with; ?>" /> </div> <label class="search-label">Search Keywords in:</label> <div> <select name="search[search_in]" id="search_in" class="demoInputBox"> <option value="">Select Column</option> <option value="title" <?php if($search_in=="title") { echo "selected"; } ?>>Title</option> <option value="description" <?php if($search_in=="description") { echo "selected"; } ?>>Description</option> </select> </div> </div> <div> <input type="submit" name="go" class="btnSearch" value="Search"> </div> </div> </form> |
ساخت شرط ها جستجو در php
این کد ورودی های فرم را دریافت و شرط های کوئری MySQL را برای جستجو می سازد. اگر کاربر ستون مورد نظر را برای جستجو انتخاب کند پس شرط جستجو بر روی آن ستون اعمال می شود . در غیر اینصورت ما جستجو را بر روی تمامی ستون ها انجام می دهیم. .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
<php $conn = mysqli_connect("localhost", "root", "", "blog_samples"); $with_any_one_of = ""; $with_the_exact_of = ""; $without = ""; $starts_with = ""; $search_in = ""; $advance_search_submit = ""; $queryCondition = ""; if(!empty($_POST["search"])) { $advance_search_submit = $_POST["advance_search_submit"]; foreach($_POST["search"] as $k=>$v){ if(!empty($v)) { $queryCases = array("with_any_one_of","with_the_exact_of","without","starts_with"); if(in_array($k,$queryCases)) { if(!empty($queryCondition)) { $queryCondition .= " AND "; } else { $queryCondition .= " WHERE "; } } switch($k) { case "with_any_one_of": $with_any_one_of = $v; $wordsAry = explode(" ", $v); $wordsCount = count($wordsAry); for($i=0;$i<$wordsCount;$i++) { if(!empty($_POST["search"]["search_in"])) { $queryCondition .= $_POST["search"]["search_in"] . " LIKE '%" . $wordsAry[$i] . "%'"; } else { $queryCondition .= "title LIKE '" . $wordsAry[$i] . "%' OR description LIKE '" . $wordsAry[$i] . "%'"; } if($i!=$wordsCount-1) { $queryCondition .= " OR "; } } break; case "with_the_exact_of": $with_the_exact_of = $v; if(!empty($_POST["search"]["search_in"])) { $queryCondition .= $_POST["search"]["search_in"] . " LIKE '%" . $v . "%'"; } else { $queryCondition .= "title LIKE '%" . $v . "%' OR description LIKE '%" . $v . "%'"; } break; case "without": $without = $v; if(!empty($_POST["search"]["search_in"])) { $queryCondition .= $_POST["search"]["search_in"] . " NOT LIKE '%" . $v . "%'"; } else { $queryCondition .= "title NOT LIKE '%" . $v . "%' AND description NOT LIKE '%" . $v . "%'"; } break; case "starts_with": $starts_with = $v; if(!empty($_POST["search"]["search_in"])) { $queryCondition .= $_POST["search"]["search_in"] . " LIKE '" . $v . "%'"; } else { $queryCondition .= "title LIKE '" . $v . "%' OR description LIKE '" . $v . "%'"; } break; case "search_in": $search_in = $_POST["search"]["search_in"]; break; } } } } $orderby = " ORDER BY id desc"; $sql = "SELECT * FROM links " . $queryCondition; $result = mysqli_query($conn,$sql); ?> |
می توانید با انجام تغییرات آن را توسعه بدید و در پروژه های خود استفاده کنید . موفق باشید
سلام تشکر بابت زحماتت جهت آموزش
من یک سوال دارم
من یک جدول دارم ۳ فیلد داره برند ،نوع و مدل
حالا من جستجو زدم که برند=سامسونگ ونوع =گوشی و مدل = s10
حالا این شرط رو میاره
من چطوری جستجو بزنم برند سامسونگ باشه مدل s10 ولی نوع مهم نباشه همه گوش یا تبلت و…
که البته با php نوشتم
مرسی متشکر
سلام.
اولین کار اینه که داخل خود phpmyadmin با mysql کدش رو بنویسید و تست کنید اگر درست بود بعد روی php قرار بدید اینطوری خیلی سریعتر به نتیجه میرسید
اگه میخواید مثلا نام باشه بقیه مهم نباشه شرط های where رو باید or بزارید
سلام خسته نباشید .مقاله مفیدی بود .
یک سوال داشتم . چطوری مشابه ترین متن که حدود یک خط میشه رو از بین متن های زیاد پیدا کنیم ؟
سایت من کارش اینه که همه محصولات یک فروشگاه اینترنتی رو میگیره . و من میخوام این محصولات رو فهرست بندی کنم و قیمت و اسم محصول رو داخل محصولات خودم نشون بدم . مثله سایت ترب .
من فقط نمیدونم چطوری میشه اسم محصولات اون سایت هارو با اسم محصولات خود مقایسه کنم و مشابه ترین محصول رو پیدا کنم .و قیمت و اسم محصول فروشگاه مورد نظر رو داخل فهرست محصول سایت خودم بیارم .
ممنون میشم بهم کمک کنید ؟
سلام. ممنون. خوشحالیم که مفید واقع شده.
دستور like در sql رو کامل باید یاد بگیرید
سلام چگونه کلمات کلیدی (کلمات اصلی یا مهم) که کاربر سرچ می کنه رو بگیریم مثلا کاربر سرچ می کنه
ساخت لیست tdo با php در اینجا tdo مهمه و php و کمی هم لیست
با و … مهم نیس
سلام.
در اینصورت باید در جدول مطالب در دیتابیس یک فیلد به نام کلمات کلیدی تعریف کنید و کویری sql رو بر اساس این اینجام بدید
یه سوال دیگه داشتم. من موتور داخلی جستجو رو نوشتم وقتی اسم مورد نظرم رو کامل تایپ می کنم دقیقا همون رو میاره ولی وقتی مثلا می نویسم خانه و … هر چیزی که ،و، داره یا فاصله بین کلماتش داره رو هم به عنوان نتیجه نشون می ده که خیلی مطلوب نیست. چطور میشه این مشکل رو حل کرد از explode استفاده کردم.
اینو دیگه باید بر اساس منطق و نیاز خودتون بنویسید ولی بهتره که با explode فقط کلمات رو با فاصله از هم جدا کنید و نیاز نیست حرف به حرف جدا کنید. مثلا explode(‘ ‘,$search) پس سعی کنید کلمات رو با فاصله جدا کنید و داخل دیتابیس جستجو کنید
من دقیقا همین کار رو کردم ولی نتایج بی ربط نشون می داد. به جای فاصله از / استفاده کردم دقیقا درست شد و نتایج رو دقیق و کامل نشون داد. البته هیچ منطقی براش ندارم.
سلام. من موتور جستجو برای سایت درست کردم. و نتایج رو هم به درستی نشون میده فقط نمی دونم چطوری به اون نتایج لینک بدم که به صفحه مورد نظر بره. یعنی href رو باید از پایگاه داده بخونه ولی نمی دونم با چه دستوری.
سلام. نتایج رو که از پایگاه داده می خونید. حالا آدرس اون نتایج چی هستند اگر مثلا پست بلاگ هست آدرسش به چه صورته اگر مثلا بصورت site.com/post.php?id=1 هست که شما باید فقط اون آیدی که از دیتابیس برگشته رو با همین الگو داخل تگ a قرار بدید.
اون نتایج محصولات هستن. توی دیتابیس یه رکورد به نام url دارم از نوع text که آدرس صفحه تک تک محصولات هست. حالا تایتل نتایجم رو میاره ولی نمی دونم اگه بخام لینک بدم توی قسمت href چی بزارم که کاربر بتونه علاوه بر مشاهده نتیجه به اون صفحه منتقل بشه.
ادرس رو هم به صورت زیر نوشتم
http://site.com/mypage.php قرار دادم که الان که توی لوکال هست به جای site.com لوکال هاست نوشتم.
همانطوری که تایتل رو قرار میدید مقدار url هم قرار بدید کار سختی نیست. اگر تونستید تایتل رو بزارید دیگه url رو هم میتونید بزارید به اینصورت TITLE
متاسفانه نمیشه.
برای نمایش نتایج از for استفاده کردم. قبل echo نمایش محصولات هم تگ a قرار دادم. آدرس اون صفحات رو چطوری توی href قرار بدم. یعنی باز از حلقه استفاده کنم؟
خیر. توی هر تکرار حلقه شما کل اطلاعات محصول رو دارید پس در کنار همونجایی که تایتیل رو نمایش میدید اونجا url هم قرار بدید همین
ممنون. مشکلم حل شد. لطف کردین.
سلام خسته نباشید
ببخشید من میخوام داخل سایتم جستجو بزارم و طوری بشه که کاربر جستجو میکنه مثلا php بره به یک صفحه دیگه و کل مطالب مربوط به php را نشون بده
سلام ممنون
دقیقا در این مطلب هم موردی که میخواید آموزش داده شده.
اون صفحه ای که میخواید رو میتونید از بخش action در form کد html تغییر بدید
موفق باشید.
سلام در فروشگاه اینترنتی که نوشتم منو و زیر منو دارم لیست اصلی منو شامل برندهاست و زیر مجموعه ها شامل یک دسته بندی دیگر است
خواستم ببینم چطور می تونم جستجو رو بر اساس منو و زیر منو انجام بدم
مثلا اگر فقط روی سامسونگ کلیک کردم از پایگاه داده تمام برندهای سامسونگ رو برام بیاره و اگر روی سامسونگ>دیجیتال کلیک کردم ابزارهای دیجیتال مربوط به سامسونگ رو برام بیاره
به عبارت ساده تر چطور بر اساس دو یا چند آی دی از پایگاه داده جستجو کنم
سلام. از دستور شرطی where استفاده کنید و چندین شرط رو بصورت or یا and بکار ببرید.
موفق باشید.
سلام من دارم روی موتور جستجوی یه سایت خبری کار می کنم.
به این شکل که کاربر موضوع مورد نظرش رو انتخاب می کنه. مثلاً ورزشی و بعد عنوانی که دنبالش می گرده رو وارد می کنه. حالا سایت باید بین خبرهای ورزشی دنبال عنوانی که کاربر وارد کرده بگرده. این دستور msql هستش که کار نمی کنه.
SELECT * FROM NEWS WHERE
news_subject=’$user_favorit_subject’ AND news_title LIKE ‘%$user_input_title%’
سلام. ابتدا سعی کنید بعد از مقدار دهی شدن متغییر ها در کویری sql اون رو چاپ کنید و عینا همان رو ببرید داخل phpmyadmin اجرا کنید تا ببینید چه مشکلی وجود دارد.
$sql = SELECT * FROM NEWS WHERE
news_subject=’$user_favorit_subject’ AND news_title LIKE ‘%$user_input_title%’
echo $sql;
همچنین داخل خود phpmyadmin در بخش جستجو میتونید یکبار دیگر امتحان کنید و اگر اوکی بود کویری ساخته شده توسط phpmyadmin رو داخل برنامه خودتون استفاده کنید.
موفق باشید.
عالللی دمتون گرم مخصوصا قرار دادن دانلود pdf
خوشحالم که مفید واقع شده. موفق و پیروز باشید.