PDA

View Full Version : سوال: راهنمایی راجع به ساخت قسمت جستجو



farnaz.saeedi
جمعه 18 آذر 1390, 22:15 عصر
با سلام
دوستان من یه قسمت جستجو تو سایت دارم به این صورت که تو صفحه index یه فرم دارم که شامل فیلدهایی
مثل نام و استان و شهرستان و...است.که کاربر براساس یک یا چند فیلد میتونه جستجو انجام بده
اطلاعات فرم ارسال میشن به صفحه search.تو این صفحه بررسی میشه که اگه همه ی فیلدهای جستجو خالی بود بر میگرده صفحه اصلی و خطا میده
حالا مشکلم اینجاست که چطوری بفهمم کاربر چند تا از فیلدهارو پر کرده و براساس چه فیلدهایی میخاد جستجو انجام د؟چون میتونه فقط براساس اسم تنها جستجو کنه هم مثلا براساس اسم و استان ...
دستور sql و چطوری باید بنویسم که براساس فیلدهای پر شده جستجو انجام بده؟
با تشکر

pejman_view
جمعه 18 آذر 1390, 23:53 عصر
فیلدت مانند زیر است:

نام:
استان :
شهر:

و سپس جستجو را انجام می دهید؟

در کل دستور کوئری که باید بنویسید را من در آدرس زیر برای دیکشنری توضیح دادم برای موتور جستجو هم صادق است.
http://barnamenevis.org/showthread.php?316458-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%DB%8C%DA%A9-%D8%AF%DB%8C%DA%A9%D8%B4%D9%86%D8%B1%DB%8C-%D8%A8%D8%A7-%D8%AA%D8%B9%D8%AF%D8%A7%D8%AF-%DA%A9%D9%84%D9%85%D8%A7%D8%AA-%D8%AB%D8%A7%D8%A8%D8%AA&p=1389283&viewfull=1#post1389283

با آرزوی موفقیت

saina2006
جمعه 18 آذر 1390, 23:56 عصر
دوست عزیز دستور SQL رو بساز
اول از همه اگر فیلدی خالی بود قرار نیست سرچ بشه اما اگر مقداری داشت اونو به کد SQL اضافه کن و در آخر هم اجراش کن به همین سادگی

farnaz.saeedi
شنبه 19 آذر 1390, 01:33 صبح
دوست عزیز دستور SQL رو بساز
اول از همه اگر فیلدی خالی بود قرار نیست سرچ بشه اما اگر مقداری داشت اونو به کد SQL اضافه کن و در آخر هم اجراش کن به همین سادگی
میشه همین و که گفتین برای سه تا فیلد دستور Sqlشو بنویسید؟اینجوری متوجه نمیشم

farnaz.saeedi
شنبه 19 آذر 1390, 01:37 صبح
فیلدت مانند زیر است:

نام:
استان :
شهر:

و سپس جستجو را انجام می دهید؟

در کل دستور کوئری که باید بنویسید را من در آدرس زیر برای دیکشنری توضیح دادم برای موتور جستجو هم صادق است.
http://barnamenevis.org/showthread.php?316458-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%DB%8C%DA%A9-%D8%AF%DB%8C%DA%A9%D8%B4%D9%86%D8%B1%DB%8C-%D8%A8%D8%A7-%D8%AA%D8%B9%D8%AF%D8%A7%D8%AF-%DA%A9%D9%84%D9%85%D8%A7%D8%AA-%D8%AB%D8%A7%D8%A8%D8%AA&p=1389283&viewfull=1#post1389283

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

saina2006
شنبه 19 آذر 1390, 01:49 صبح
ساده است، برای مثال دستور کلی شما اینه:
SELECT * FROM tbl
حالا میخوایید اگر بعضی ها مقدار داشت سرچ بشه:

$sql="SELECT * FROM tbl";
$sqlModified=""
if(txt!=""){
$sqlModified.="Name=:name AND"}
if($sqlModified!=""){
$sql.=" WHERE " . $sqlModified}

الآن این شد دستور SQL و همی رو لازمه اجرا کنید. البته از راههای دیگه اصلاع ندارم این روشیه که خودم استفاده کردم و جواب گرفتم
این دستوری که من نوشتم شما باید برای فیلدهای خودتون بنویسید

farnaz.saeedi
شنبه 19 آذر 1390, 11:30 صبح
ساده است، برای مثال دستور کلی شما اینه:
SELECT * FROM tbl
حالا میخوایید اگر بعضی ها مقدار داشت سرچ بشه:

$sql="SELECT * FROM tbl";
$sqlModified=""
if(txt!=""){
$sqlModified.="Name=:name AND"}
if($sqlModified!=""){
$sql.=" WHERE " . $sqlModified}

الآن این شد دستور SQL و همی رو لازمه اجرا کنید. البته از راههای دیگه اصلاع ندارم این روشیه که خودم استفاده کردم و جواب گرفتم
این دستوری که من نوشتم شما باید برای فیلدهای خودتون بنویسید

کدی که نوشتم به اینصورته:


if (empty($ostan) && empty($city) && empty($name))
{
header("location:index.php");
}
else
{
$params='';
if ($ostan!='')
$params.="ostan=$ostan and";
if ($city!='')
$params.="city=$city and";
if ($name!='')
$params.="name=$name and";
$sql.="select code from user where .'$params'";
$query=mysql_query($sql);
$code=mysql_result($query,0);
}

که کار نمیکنه.کجارو اشتباه نوشتم؟
این قسمت فکر نمیکنید اشتباه باشه:


$sqlModified.="Name=:name AND"

چون اگه فقط یه فیلدو پر کرده باشه اون and آخر مشکل ساز نمیشه؟

pejman_view
شنبه 19 آذر 1390, 14:20 عصر
سلام
اولاً چون آخرین پارمتر شما این خط است:


$params.="name=$name and";

بنابراین نیاز به AND در این خط نیست.

و یک توضیح هم در رابطه با empty و isset بدم اگر استان شما بصورت عددی است ؛ استفاده از empty کاری صحیح نیست، چون در تابع empty اگر پارامتری باشد که ارزش آن پارامتر مساوی صفر باشد مقدار true را بر می گرداند.

با آرزوی موفقیت.

idocsidocs
شنبه 19 آذر 1390, 15:01 عصر
بهترین راه برای فرستادن مقادیر جستجو شده به صفحات دیگه چی هست؟

لطفا با دلیل توضیح بدید.

saina2006
شنبه 19 آذر 1390, 17:21 عصر
شما باید اگر رشته با AND تمام میشه AND رو حذف کنید و ; بزارید
این خط هم اشتباه

"select code from user where .'$params'"
اید به صورت زیر نوشته بشه

"select code from user where $params"
یا

"select code from user where " .$params

farnaz.saeedi
شنبه 19 آذر 1390, 18:47 عصر
من کدهامو به این شکل تغییر دادم:


$params=array();
if ($ostan!='')
$params[]="ostan='$ostan' and ";
if ($city!='')
$params[]="city='$city' and ";
if ($name!='')
$params[]="name='$name'";
$sql="select code from user where $params";
$query=mysql_query($sql);
$code=mysql_result($query,0);

اما این خطا رو میده:
Warning: mysql_result() expects parameter 1 to be resource, boolean given in

saina2006
شنبه 19 آذر 1390, 19:17 عصر
دوست عزیز دستور SQL درست نیست، دستوری که ساخته میشه رو اینجا بزار یا به تنهایی اجراش کن ببین کار میکنه یا نه
یه نکته رو هم باید بهت بگم:
اگر name خالی بود دوباره دستورت اشتباه میشه
آخر دستورات SQL باید ; باشه

farnaz.saeedi
شنبه 19 آذر 1390, 20:16 عصر
دوست عزیز دستور SQL درست نیست، دستوری که ساخته میشه رو اینجا بزار یا به تنهایی اجراش کن ببین کار میکنه یا نه
یه نکته رو هم باید بهت بگم:
اگر name خالی بود دوباره دستورت اشتباه میشه
آخر دستورات SQL باید ; باشه
خوب چکار کنم؟اینجوری که اگه هر کدوم از فیلدها خالی باشه با اشتباه میشه
آخر دستورات ; هست دیگه

saina2006
شنبه 19 آذر 1390, 20:57 عصر
خوب چکار کنم؟اینجوری که اگه هر کدوم از فیلدها خالی باشه با اشتباه میشه
آخر دستورات ; هست دیگه

شما وقتی کل رشته رو ساختی باید چک کنی ببینی با AND ختم میشه یا نه، اگر با AND تمام میشده باید AND را حذف کنی
من آخر دستورات SQL رو گفتم باید با ; تمام شه درستش اینه:


$sql="select code from user where $params;";

saina2006
شنبه 19 آذر 1390, 21:02 عصر
این نکته را هم فراموش کردم بگم که دستور آخر شما کاملا اشتباه
خروجیتون این میشه:
select code from user where Array
که به هیچ عنوان دستور SQL نیست
برای کد

$sql="select code from user where $params";

farnaz.saeedi
یک شنبه 20 آذر 1390, 11:26 صبح
دوست عزیز کدهامو به این شکل تغییر دادم و مشکلم حل شد.به هر حال ممنون از راهنماییتون


$params=array();
$sql="select code from user where";
if ($ostan!='')
$params[]="ostan='$ostan'";
if ($city!='')
$params[]="city='$city'";
if ($name!='')
$params[]="name='$name'";
$sql.=' '.implode(' AND ', $params);
$query=mysql_query($sql);
$code=mysql_result($query,0);