آموزش پی اچ پی -> قسمت ششم ، ایجاد جستجوگر در دیتابیس
نویسنده : مهرداد دیزاین | تاریخ ارسال : یکشنبه 28 / 10 / 1388 | 15 : 21 | تعداد بازدید : 420
سلام دوستان
،
امروز آموزش ساخت یک جستجو در بانک اطلاعاتی رو آموزش میدیم.
توی این قسمت با Request ها و بازیابی اطلاعات از دیتا بیس آشنا می شویم.
خوب اول یه فرم نیاز داریم که فرم جستجوی ما می شود:
كد بالا رو توي يه فايل با پسوند html ذخيره كنيد.
حالا برنامه phpMyAdmin رو باز میکنیم و یه دیتابیس جدید و توی اون یه جدول جدید می سازیم (البته اگه جدولی که می خواییم توش بگردیم وجود نداشته باشه).
براي ساخت جدول از SQL زير استفاده كنيد:
(توي phpMyAdmin پس از انتخاب ديتا بيس مورد نظر بر روي SQL كليك كنيد و كد بالا رو اونجا كپي كنيد بعد بر روي Go كليك كنيد تا جدول مورد نظر ساخته بشه)
بعد از اين كه جدول text رو ساختيد روي Insert كليك كنيد و چند تا ركورد توي جدول وارد كنيد.(فعلا سعي كنيد لاتين وارد كنيد تا بعد ...)
خوب حالا ما يه فرم جستجو داريم و يه جدول كه يه سري اطلاعات توي اونه و ميخواييم توي اون جستجو كنيم ...
* خوب بريم سراغ ساختن فايل search.php كه مهمترين قسمت كاره ؛
يه ويرايشگر مثل notepad يا Dream Weaver باز كنيد.
موقعي كه كاربر بر روي دكمه search توي فايل html اولي كليك ميكنه اون فرم و تمامي اشيايي كه روي اونه با مقاديرشان ميان تو سرور و فايل search.php كه ما براش تعيين كرديم.
يه آرايه هست كه مال خود php هست و تمامي مقادير فرم ارسال شده توي اون قرار ميگيره مثلا مقدار Edit Box ي كه نام اون رو q گذاشتيم ميره توي اين :
اين GET براي موقعي به كار ميره كه فرم ما با method ـ get ارسال شده اگه با post ارسال شده بود از POST استفاده ميكرديم (دقت كنيد كه بايد با حروف بزرگ نوشته بشن).
خوب حالا كه ميدونيم كه كاربر چي وارد كرده پس ميريم سراغ قسمت بعد.
راستي تا يادم نرفته بگم اگه يه كاربر شيطون اومد از راه ديگه اي فايل search.php رو باز كرد مثلا آدرس اون رو توي Address Bar نوشت ... اونوقت چيزي به نام
براي اين كار بايستي از تابعي به نام isset استفاده كنيم ، اينطوري :
اين تابع در صورتي كه همچين متغيري وجود داشته باشه مقدار true بر ميگردونه و در غير اين صورت false بر مي گردونه. پس ما توي خطوط اولي فايلمون اون رو چك ميكنيم.
در صورتي كه كاربر از طريق فرم به اين صفحه منتقل نشده باشه يه پيغام خطا چاپ مي كنيم.
خوب حالا بايد چك كنيم كه كاربر مقدار مورد جستجو رو خالي نگذاره با اين :
وقتی به اینجا میرسیم دیگه مطمئنیم که کاربر از طریق فرم به اینجا اومده چون اگه اینطور نبود در خطوط بالایی با دستور die برنامه به پايان مي رسيد و به اينجا نمي رسيديم.
* خوب حالا كارهاي پايگاه داده (جستجو):
اول از همه كد هاي ارتباط با ديتابيس رو كه قبلا توضيح داده شده رو مينويسيم :
خوب حالا كه اتصال با موفقيت انجام شد، بريم سراغ SQL :
دقت كنيد كه ما جستجو را بر اساس فيلد title از جدول text انجام ميديم و هر ركوردي كه فيلد title اون خود اون يا قسمتي از اون برابر چيزي باشه كه كاربر وارد مي كنه را برامون پيدا ميكنه.
خوب حالا query رو اجرا ميكنيم :
اگه تا حالا همه چيز با موفقيت انجام شده باشه با اجراي خط بالا نتايج جستجو را با استفاده از متغير SearchResult به دست مي آوريم . اول از همه بياييد ببينيم جيتجوي ما چند تا نتيجه داشته :
خط بالا تعداد نتايج را در متغير TotalResults مي ريزه .
خوب حالا تعداد نتايج به دست آمده رو چك ميكنيم كه اگه نتيجه اي در بر بوده اون(ها) رو چاپ كنيم و اگه نبود پيغام مناسب چاپ كنيم:
خوب حالا نتايج رو چاپ ميكنيم :
اول بايد بدونيم كه براي دستيابي به نتايج يك query بايد از تابع mysql_result استفاده ميكنيم. با مثال بهتر متوجه مي شويد:
توي حلقه بالا تابع mysql_result رو ميبينيم كه با سه ورودي فراخوني شده ورودي اول متغيري هست كه نتيجه اجراي Query رو توي اون ريختيم ، ورودي دوم شماره ركودي است كه توي جستجوي ما پيدا شده و از صفر شروع ميشه (چون ممكنه كه جستجوي ما چند ركورد را پيدا كند بايستي توي حلقه اونا رو يكي يكي چاپ كنيم) ، ورودي سوم انديس فيلد (ستون) جدول ما است كه اون هم از صفر شروع ميشه.
و اين هم سورس كامل امروز :
-------------
نكته : فايل html ي كه اول ساختيم و فايل search.php رو توي يه فولدر مشترك باشند.
توجه : اين اگه خواستيد از اين كد توي وبسايتتون استفاده عملي بكنيد حتما با من مشورت كنيد ، به اين دليل كه چون اين كد جنبه آموزشي داره مسائل امنيتي توي اون رعايت نشده كه خيلي پيچيده نشه.
در ضمن : اين خيلي ساده است فقط براي يه مورد جستجو انجام ميده با تلاش بيشتر ميتونيد query هاي پيچيده بنويسيد و خيلي كاراي ديگه بكنيد مثلا مدت زمان جستجو رو به دست بياريد يا كلمه هاي كليدي كه مورد جستجو قرار گرفته رو توي نتايج رنگي نشون بديم و ...
موفق و پيروز باشيد.
کلمات کلیدی : آموزش پی اچ پی ، جستجو ، آموزش ایجاد جستجو
سلام دوستان
امروز آموزش ساخت یک جستجو در بانک اطلاعاتی رو آموزش میدیم.
توی این قسمت با Request ها و بازیابی اطلاعات از دیتا بیس آشنا می شویم.
خوب اول یه فرم نیاز داریم که فرم جستجوی ما می شود:
کد:
<form method="get" action="search.php">
<p>
<input type="text" name="q" size="20">
<input type="submit" value="Search" name="searchBtn">
</p>
</form>
<p>
<input type="text" name="q" size="20">
<input type="submit" value="Search" name="searchBtn">
</p>
</form>
كد بالا رو توي يه فايل با پسوند html ذخيره كنيد.
حالا برنامه phpMyAdmin رو باز میکنیم و یه دیتابیس جدید و توی اون یه جدول جدید می سازیم (البته اگه جدولی که می خواییم توش بگردیم وجود نداشته باشه).
براي ساخت جدول از SQL زير استفاده كنيد:
کد:
CREATE TABLE `text` (
`id` INT NOT NULL AUTO_INCREMENT ,
`title` VARCHAR( 255 ) NOT NULL ,
`body` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;
`id` INT NOT NULL AUTO_INCREMENT ,
`title` VARCHAR( 255 ) NOT NULL ,
`body` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;
(توي phpMyAdmin پس از انتخاب ديتا بيس مورد نظر بر روي SQL كليك كنيد و كد بالا رو اونجا كپي كنيد بعد بر روي Go كليك كنيد تا جدول مورد نظر ساخته بشه)
بعد از اين كه جدول text رو ساختيد روي Insert كليك كنيد و چند تا ركورد توي جدول وارد كنيد.(فعلا سعي كنيد لاتين وارد كنيد تا بعد ...)
خوب حالا ما يه فرم جستجو داريم و يه جدول كه يه سري اطلاعات توي اونه و ميخواييم توي اون جستجو كنيم ...
* خوب بريم سراغ ساختن فايل search.php كه مهمترين قسمت كاره ؛
يه ويرايشگر مثل notepad يا Dream Weaver باز كنيد.
موقعي كه كاربر بر روي دكمه search توي فايل html اولي كليك ميكنه اون فرم و تمامي اشيايي كه روي اونه با مقاديرشان ميان تو سرور و فايل search.php كه ما براش تعيين كرديم.
يه آرايه هست كه مال خود php هست و تمامي مقادير فرم ارسال شده توي اون قرار ميگيره مثلا مقدار Edit Box ي كه نام اون رو q گذاشتيم ميره توي اين :
کد:
$_GET["q"]
اين GET براي موقعي به كار ميره كه فرم ما با method ـ get ارسال شده اگه با post ارسال شده بود از POST استفاده ميكرديم (دقت كنيد كه بايد با حروف بزرگ نوشته بشن).
خوب حالا كه ميدونيم كه كاربر چي وارد كرده پس ميريم سراغ قسمت بعد.
راستي تا يادم نرفته بگم اگه يه كاربر شيطون اومد از راه ديگه اي فايل search.php رو باز كرد مثلا آدرس اون رو توي Address Bar نوشت ... اونوقت چيزي به نام
کد:
$_GET["q"]
وجود نداره و برنامه به ما اررور ميده، همچنين توي جاهايي كه چيزي رو قراره ثبت
كنيم (Insert) نبايد ركورد خالي ثبت بشه ...براي اين كار بايستي از تابعي به نام isset استفاده كنيم ، اينطوري :
کد:
if(isset($_GET["q"]))
{
...
}
{
...
}
اين تابع در صورتي كه همچين متغيري وجود داشته باشه مقدار true بر ميگردونه و در غير اين صورت false بر مي گردونه. پس ما توي خطوط اولي فايلمون اون رو چك ميكنيم.
کد:
if(!isset($_GET["q"]))
die("The Search key word is not set!");
die("The Search key word is not set!");
در صورتي كه كاربر از طريق فرم به اين صفحه منتقل نشده باشه يه پيغام خطا چاپ مي كنيم.
خوب حالا بايد چك كنيم كه كاربر مقدار مورد جستجو رو خالي نگذاره با اين :
کد:
$key = $_GET["q"];
if($key == "")
die("The Search key word must be entered!");
if($key == "")
die("The Search key word must be entered!");
وقتی به اینجا میرسیم دیگه مطمئنیم که کاربر از طریق فرم به اینجا اومده چون اگه اینطور نبود در خطوط بالایی با دستور die برنامه به پايان مي رسيد و به اينجا نمي رسيديم.
* خوب حالا كارهاي پايگاه داده (جستجو):
اول از همه كد هاي ارتباط با ديتابيس رو كه قبلا توضيح داده شده رو مينويسيم :
کد:
$DbConn = mysql_connect("localhodt", "root", "" ) or die(mysql_error());
mysql_select_db("test",$DbConn) or die("Can Not Select DataBase Because: ". mysql_error());
mysql_select_db("test",$DbConn) or die("Can Not Select DataBase Because: ". mysql_error());
خوب حالا كه اتصال با موفقيت انجام شد، بريم سراغ SQL :
کد:
$sql = "SELECT * FROM `text`
WHERE `title` LIKE "%".$key ."%" ";
WHERE `title` LIKE "%".$key ."%" ";
دقت كنيد كه ما جستجو را بر اساس فيلد title از جدول text انجام ميديم و هر ركوردي كه فيلد title اون خود اون يا قسمتي از اون برابر چيزي باشه كه كاربر وارد مي كنه را برامون پيدا ميكنه.
خوب حالا query رو اجرا ميكنيم :
کد:
$SearchResult = mysql_query($sql) or die(mysql_error(). "<br />SQL: ". $sql);
اگه تا حالا همه چيز با موفقيت انجام شده باشه با اجراي خط بالا نتايج جستجو را با استفاده از متغير SearchResult به دست مي آوريم . اول از همه بياييد ببينيم جيتجوي ما چند تا نتيجه داشته :
کد:
$TotalResults = mysql_num_rows($SearchResult);
خط بالا تعداد نتايج را در متغير TotalResults مي ريزه .
خوب حالا تعداد نتايج به دست آمده رو چك ميكنيم كه اگه نتيجه اي در بر بوده اون(ها) رو چاپ كنيم و اگه نبود پيغام مناسب چاپ كنيم:
کد:
if($TotalResults <= 0)
die("Not found any record for your key word!");
die("Not found any record for your key word!");
خوب حالا نتايج رو چاپ ميكنيم :
اول بايد بدونيم كه براي دستيابي به نتايج يك query بايد از تابع mysql_result استفاده ميكنيم. با مثال بهتر متوجه مي شويد:
کد:
for($i = 0; $i != $TotalResults; $i++ )
{
//<!-- Start of Print Results...
$TextTitle = mysql_result($SearchResult, $i, 1);
$TextBody = mysql_result($SearchResult, $i, 2);
print($TextTitle ." ==> ". $TextBody ."<br /><br />");
//End of Print Results. -->
}
{
//<!-- Start of Print Results...
$TextTitle = mysql_result($SearchResult, $i, 1);
$TextBody = mysql_result($SearchResult, $i, 2);
print($TextTitle ." ==> ". $TextBody ."<br /><br />");
//End of Print Results. -->
}
توي حلقه بالا تابع mysql_result رو ميبينيم كه با سه ورودي فراخوني شده ورودي اول متغيري هست كه نتيجه اجراي Query رو توي اون ريختيم ، ورودي دوم شماره ركودي است كه توي جستجوي ما پيدا شده و از صفر شروع ميشه (چون ممكنه كه جستجوي ما چند ركورد را پيدا كند بايستي توي حلقه اونا رو يكي يكي چاپ كنيم) ، ورودي سوم انديس فيلد (ستون) جدول ما است كه اون هم از صفر شروع ميشه.
و اين هم سورس كامل امروز :
کد:
<?php
if(!isset($_GET["q"]))
die("The Search key word is not set!");
$key = $_GET["q"];
if($key == "")
die("The Search key word must be entered!");
$DbConn = mysql_connect("localhodt", "root", "" ) or die(mysql_error());
mysql_select_db("test",$DbConn) or die("Can Not Select DataBase Because: ". mysql_error());
$sql = "SELECT * FROM `text`
WHERE `title` LIKE "%".$key ."%" ";
$SearchResult = mysql_query($sql) or die(mysql_error(). "<br />SQL: ". $sql);
$TotalResults = mysql_num_rows($SearchResult);
if($TotalResults <= 0)
die("Not found any record for your key word!");
for($i = 0; $i != $TotalResults; $i++ )
{
//<!-- Start of Print Results...
$TextTitle = mysql_result($SearchResult, $i, 1);
$TextBody = mysql_result($SearchResult, $i, 2);
print($TextTitle ." ==> ". $TextBody ."<br /><br />");
//End of Print Results. -->
}
?>
if(!isset($_GET["q"]))
die("The Search key word is not set!");
$key = $_GET["q"];
if($key == "")
die("The Search key word must be entered!");
$DbConn = mysql_connect("localhodt", "root", "" ) or die(mysql_error());
mysql_select_db("test",$DbConn) or die("Can Not Select DataBase Because: ". mysql_error());
$sql = "SELECT * FROM `text`
WHERE `title` LIKE "%".$key ."%" ";
$SearchResult = mysql_query($sql) or die(mysql_error(). "<br />SQL: ". $sql);
$TotalResults = mysql_num_rows($SearchResult);
if($TotalResults <= 0)
die("Not found any record for your key word!");
for($i = 0; $i != $TotalResults; $i++ )
{
//<!-- Start of Print Results...
$TextTitle = mysql_result($SearchResult, $i, 1);
$TextBody = mysql_result($SearchResult, $i, 2);
print($TextTitle ." ==> ". $TextBody ."<br /><br />");
//End of Print Results. -->
}
?>
-------------
نكته : فايل html ي كه اول ساختيم و فايل search.php رو توي يه فولدر مشترك باشند.
توجه : اين اگه خواستيد از اين كد توي وبسايتتون استفاده عملي بكنيد حتما با من مشورت كنيد ، به اين دليل كه چون اين كد جنبه آموزشي داره مسائل امنيتي توي اون رعايت نشده كه خيلي پيچيده نشه.
در ضمن : اين خيلي ساده است فقط براي يه مورد جستجو انجام ميده با تلاش بيشتر ميتونيد query هاي پيچيده بنويسيد و خيلي كاراي ديگه بكنيد مثلا مدت زمان جستجو رو به دست بياريد يا كلمه هاي كليدي كه مورد جستجو قرار گرفته رو توي نتايج رنگي نشون بديم و ...
موفق و پيروز باشيد.
کلمات کلیدی : آموزش پی اچ پی ، جستجو ، آموزش ایجاد جستجو