جستجوی Multiple

EMIRATES

Active Member
با سلام

من یک پروژه ریل استیت رو دارم مینویسم.
در قسمت جستجو به مشکل پیدا کردم.

مشکل من اینه که در قسمت جستجو چندین عنوان داریم :

شهر :
منطقه:
نوع:
خواب:
قیمت:
الی:

و بعضی هاشون لیست باکس هست.

در صورتی که کاربر همه گزینه ها رو پاسخ بده یعنی مثلا :

شهر : دبی
منطقه: مردف
نوع : Pilot
خواب: 1
قیمت: 2000
الی: 10000

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

حالا من چون کلا 1 کوئری دارم وقتی همه گزینه ها پاسخ داده شده باشه :

PHP:
SELECT * FROM `projects` WHERE `area` = '$city' AND `location` LIKE '$location' AND `type` LIKE '$type' AND `rooms` LIKE '$rooms' AND `price` LIKE'$price' AND `sale`  LIKE '$buy'  AND `rent`  LIKE '$rent'  AND `pishkharid`  LIKE '$pishkharid' ORDER BY `id`

درسته. اما از اونجائی که "همه" مقدارش هیچ هست وقتی که کوئری گرفته بشه اینشکلی میشه :

PHP:
SELECT * FROM `projects` WHERE `area` = 'dubai' AND `location` LIKE '' AND `type` LIKE '' AND `rooms` LIKE '' AND `price` LIKE'' AND `sale` LIKE '1' AND `rent` LIKE '' AND `pishkharid` LIKE '' ORDER BY `id

یعنی اونایی که پاسخ نداده شده باشن '' میشه.

اما....... مای اس کیو ال میره ببینه اگه حتما خالی بود رکورد اون فیلد - نشون بده کوئری رو.

حالا من میخوام وقتی که ''' داخل کوئری بود, هرجا '' بود بعنی اینکه کاری ندارم این چیه و این هرچی بود بود.

به نظر شما چکار کنم تا مشکلم حل شه؟

با تشکر.
 
آخرین ویرایش:

ziXet

مدیر انجمن PHP/MYSQL
با سلام

من یک پروژه ریل استیت رو دارم مینویسم.
در قسمت جستجو به مشکل پیدا کردم.

مشکل من اینه که در قسمت جستجو چندین عنوان داریم :

شهر :
منطقه:
نوع:
خواب:
قیمت:
الی:

و بعضی هاشون لیست باکس هست.

در صورتی که کاربر همه گزینه ها رو پاسخ بده یعنی مثلا :

شهر : دبی
منطقه: مردف
نوع : Pilot
خواب: 1
قیمت: 2000
الی: 10000

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

حالا من چون کلا 1 کوئری دارم وقتی همه گزینه ها پاسخ داده شده باشه :

PHP:
SELECT * FROM `projects` WHERE `area` = '$city' AND `location` LIKE '$location' AND `type` LIKE '$type' AND `rooms` LIKE '$rooms' AND `price` LIKE'$price' AND `sale`  LIKE '$buy'  AND `rent`  LIKE '$rent'  AND `pishkharid`  LIKE '$pishkharid' ORDER BY `id`

درسته. اما از اونجائی که "همه" مقدارش هیچ هست وقتی که کوئری گرفته بشه اینشکلی میشه :

PHP:
SELECT * FROM `projects` WHERE `area` = 'dubai' AND `location` LIKE '' AND `type` LIKE '' AND `rooms` LIKE '' AND `price` LIKE'' AND `sale` LIKE '1' AND `rent` LIKE '' AND `pishkharid` LIKE '' ORDER BY `id

یعنی اونایی که پاسخ نداده شده باشن '' میشه.

اما....... مای اس کیو ال میره ببینه اگه حتما خالی بود رکورد اون فیلد - نشون بده کوئری رو.

حالا من میخوام وقتی که ''' داخل کوئری بود, هرجا '' بود بعنی اینکه کاری ندارم این چیه و این هرچی بود بود.

به نظر شما چکار کنم تا مشکلم حل شه؟

با تشکر.
خب شما باید query رو خودت بسازی ! یعنی اینکه اول بررسی کنی ببینی ست شده اون فیلد یا نه بعدش ببری تو mysql_query
 

EMIRATES

Active Member
با سلام

دوست عزیز این راه رو همون اول امتحان کردم اما میدونید چندین و چندتا if میخوره؟

برای همین این سوال رو کردم.

با تشکر.
 

Webber

Well-Known Member
سلام
پیشنهاد می کنم شما اول تمام ورودی ها رو در یک آرایه قرار بده.بعد sql ها رو هم در یک آرایه ی دیگر.بعد با یک حلقه چک کن که اگر ورودی پر شده باشد sql مربوط به اون ورودی رو به متغیر sqls اضافه کند.
موفق باشید
 

EMIRATES

Active Member
با سلام

پیشنهاد می کنم شما اول تمام ورودی ها رو در یک آرایه قرار بده
در همون متغیر ها که در Query مشاهده میکنید در آوردم.

د sql ها رو هم در یک آرایه ی دیگر.بعد با یک حلقه چک کن که اگر ورودی پر شده باشد sql مربوط به اون ورودی رو به متغیر sqls اضافه کند.
میتونید یک مثال با 2 کوئری برام بزنید.
شرمنده ها.

با تشکر.
 

Webber

Well-Known Member
سلام

PHP:
<html>
<body>
 <form method="post">
   <p><label>City:</label><input type="text" name="input[]" /></p>
   <p><label>Region:</label><input type="text" name="input[]" /></p>
   <p><label>Type:</label><input type="text" name="input[]" /></p>
   <p><label>Sleep!?:</label><input type="text" name="input[]" /></p>
   <p><label>Price range(min):</label><input type="text" name="input[]" /></p>
   <p><label>Price range(max):</label><input type="text" name="input[]" /></p>
   <input type="submit" name="send" value="Please search!" />
 </form>
 <?php
   if($_POST['send'])
   {
     $inputs=(array) $_POST['input'];
	 $sql[]="`area` = '$inputs[0]'";
	 $sql[]="`location` LIKE '$inputs[1]'";
	 $sql[]="`type` LIKE '$inputs[2]'";
	 $sql[]="`rooms` LIKE '$inputs[3]'";
	 $sql[]="`price` LIKE'$inputs[4]'";
	 $sql[]="`sale`  LIKE '$inputs[5]'";
	 $query='';
	 for($i=0;$i<count($inputs);$i++)
	 {
	   if($inputs[$i])
	   {
	    $query.= $i<=0?$sql[$i].' ':'AND '.$sql[$i].' ';
	   };
	 };
	 echo $query; 
   };
 ?>
</body>
</html>

دشمنان شرمنده
موفقیت
 

EMIRATES

Active Member
با سلام

متشکرم دوست عزیز مشکلم کاملا حل شد اما فقط یک اشکال وجود داره.

داخل حلقه ای که نوشتید اگه اولین مقدار یعنی همون شهر که در نمونه مشخص کردید رو بدیم این شکلی میشه :

`area` = 'dubai'

که کاملا درسته. اما اگه اولین گزینه رو پر نکنیم و دومین یا بقیه گزینه ها رو به تنهایی وارد کنیم یک AND اضافی به اولش میاد.
از دوستان اگه کسی راه حلی داره ممنون میشم کمکم کنه.

با تشکر.
 

Webber

Well-Known Member
سلام
یه تغییر کوچک لازم بود دوست عزیز::D
PHP:
 <?php
   if($_POST['send'])
   {
     $inputs=(array) $_POST['input'];
	 $sql[]="`area` = '$inputs[0]'";
	 $sql[]="`location` LIKE '$inputs[1]'";
	 $sql[]="`type` LIKE '$inputs[2]'";
	 $sql[]="`rooms` LIKE '$inputs[3]'";
	 $sql[]="`price` LIKE'$inputs[4]'";
	 $sql[]="`sale`  LIKE '$inputs[5]'";
	 $query='';
	 $sql_i=0;
	 for($i=0;$i<count($inputs);$i++)
	 {
	   if($inputs[$i])
	   {
	    $query.= $sql_i<=0?$sql[$i].' ':'AND '.$sql[$i].' ';
		$sql_i++;
	   };
	 };
	 echo $query; 
   };
 ?>
 

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

بالا