كيفية انشاء صندوق بحث وربطه بقاعدة البيانات وعرض النتائج في جدول اسفل صندوق البحث
انشاء صندوق بحث بلغة php
يعتبر محرك البحث من أهم المميزات تميز اى اسكربت ذو برمجة راقية , فمحرك البحث يعتبر الأداة المثالية للوصول السريع لما يبحث عنه زائر موقعك. ولعل أهم شيء في برمجة اي اسكربت هو سهولة الاستخدام من قبل الزائر.
من خلال هذا الشرح ستتعرف على كيفية برمجة محرك بحث داخلي يقوم بالبحث في قواعد البيانات عن اي كلمة او جملة تكتبها في محرك البحث الداخلي بالموقع ,ويمكنك من خلال هذا الشرح أن تقوم بعمل خاصية البحث فى اي اسكربت تقوم ببرمجته مهما كانت عدد جداوله ومهما كانت عدد حقوله , افهم فكرة الشرح وطبقها في حالتك
خطوات تطبيق الشرح:
1-انشاء قاعدة بيانات كمثال حتى يتم البحث فيها
2-انشاء ملف form.htm الخاص بعمل مستطيل البحث
3-انشاء ملف style.css الخاص بتجميل شريط البحث
4-انشاء ملف mysql.php الخاص بالاتصال ومحاكاة قاعدة البيانات وتنفيذ عملية البحث فى الجداول والحقول
5-انشاء ملف processform.php الذى سوف يقوم تنفيذ الكلمة او الجملة التى تم كتابتها فى محرك البحث ليتم البحث عنها
اولا: انشاء قاعدة البيانات
سوف نقوم بانشاء قاعدة بيانات وراح نسميها users, وبداخلها سوف ننشأ جدول اسمه users وعدد حقوله 5 حقول
-id
-firstname
-lastname
-comments
تمام الحين راح ندخل بعض البيانات فى هذا الجدول حتى نستخدمها كمثال للبحث عنها
وهكذا نكون انتهينا من انشاء قاعدة البيانات ………
يوجد خطوة مهمة جدا وهى اننا نريد ان نقوم بعمل Index من النوع fulltext
للجدول الذي سنبحث فيه
ولعمل ذلك فقط قم بعمل هذا الامر من خلال اختيار زر sql لتنفيذ أمر sql
[mysql]
ALTER TABLE users ADD FULLTEXT(firstname, lastname, comments);
[/mysql]
بحيث سيكون الناتج كالصورة الاتية:
ثانيا: انشاء ملف form.htm
وهو عبارة عن صفحة الفورم الخاصة بمستطيل البحث الذى سوف سيكون محرك البحث
وانا استخدمت بعض الجافا اسكربت لتعطي لمسة جمالية للفورم وجعلنا action هذا الفورم
هو تنفيذ ملف processform.php الذى سوف يُشرح فيما بعد
كود ملف form.htm
[html]
محرك بحث
// <![CDATA[
window.onload=function(){
if(document.getElementById&&document.
getElementsByTagName&&document.createElement){
var sfield=document.getElementsByTagName('form')[0].elements[0];
if(!sfield){return};
sfield.onfocus=function(){this.value=”};
sfield.onblur=function(){
if(!this.value){this.value=’ادخل الكلمة المراد البحث عنها’};
}
}
}
// ]]>
محرك البحث فى قاعدة البيانات
[/html]
ثالثا: انشاء ملف style.css
سوف نقوم بتجميل الفورم الخاص بنا فى الصفحة السابقة
وهذا هو كود الملف
[css]
body{
background: #ccc;
margin: 0;
padding: 0;
}
h1{
width: 375px;
padding: 10px;
margin-left: auto;
margin-right: auto;
background: #339;
font: normal 18px Arial, Helvetica, sans-serif;
color: #fff;
border: 1px solid #000;
text-align: center;
}
h2{
font: bold 18px Arial, Helvetica, sans-serif;
color: #339;
}
p{
font: normal 10pt Arial, Helvetica, sans-serif;
color: #000;
}
a:link,a:visited{
font: normal 10pt Arial, Helvetica, sans-serif;
color: #00f;
text-decoration: none;
}
a:hover{
color: #f00;
text-decoration: underline;
}
.maincontainer{
width: 375px;
padding: 10px;
margin-left: auto;
margin-right: auto;
background: #f0f0f0;
border: 1px solid #000;
}
.rowcontainer{
padding: 10px;
margin-bottom: 10px;
background: #ccf;
}
.searchbox{
width: 200px;
font: normal 12px Arial, Helvetica, sans-serif;
color: #000;
}
.searchbutton{
width: 80px;
font: bold 12px Arial, Helvetica, sans-serif;
color: #000;
}
[/css]
رابعا: انشاء ملف mysql.php
طبعا هذا هو أهم ملف سوف يكون فى درسنا, والذى سوف ينفذ عملية البحث فى قاعدة البيانات عن الكلمة او الجملة التى تريد البحث عنها
الملف عبارة عن كلاس تقوم بتنفيذ عدة عمليات متكاملة منها
1-الاتصال بقاعدة البيانات
2-تنفيذ عملية البحث للكلمة او الجملة المراد البحث عنه
كود ملف mysql.php
[php]
<!–?php // define ‘MySQL’ class class MySQL{ private $conId; private $host; private $user; private $password; private $database; private $result; const OPTIONS=4; public function __construct($options=array()){ if(count($options)!=self::OPTIONS){ throw new Exception(‘Invalid number of connection parameters’); } foreach($options as $parameter=–>$value){
if(!$value){
throw new Exception(‘Invalid parameter ‘.$parameter);
}
$this->{$parameter}=$value;
}
$this->connectDB();
}
// connect to MySQL
private function connectDB(){
if(!$this->conId=mysql_connect($this->host,$this->user,$this->password)){
throw new Exception(‘Error connecting to the server’);
}
if(!mysql_select_db($this->database,$this->conId)){
throw new Exception(‘Error selecting database’);
}
}
// run query
public function query($query){
if(!$this->result=mysql_query($query,$this->conId)){
throw new Exception(‘Error performing query ‘.$query);
}
return new Result($this,$this->result);
}
public function escapeString($value){
return mysql_escape_string($value);
}
}
// define ‘Result’ class
class Result {
private $mysql;
private $result;
public function __construct(&$mysql,$result){
$this->mysql=&$mysql;
$this->result=$result;
}
// fetch row
public function fetchRow(){
return mysql_fetch_assoc($this->result);
}
// count rows
public function countRows(){
if(!$rows=mysql_num_rows($this->result)){
return false;
}
return $rows;
}
// count affected rows
public function countAffectedRows(){
if(!$rows=mysql_affected_rows($this->mysql->conId)){
throw new Exception(‘Error counting affected rows’);
}
return $rows;
}
// get ID form last-inserted row
public function getInsertID(){
if(!$id=mysql_insert_id($this->mysql->conId)){
throw new Exception(‘Error getting ID’);
}
return $id;
}
// seek row
public function seekRow($row=0){
if(!is_int($row)||$rowresult,$row)){
throw new Exception(‘Error seeking data’);
}
}
}
?>
[/php]
رابعا : انشاء ملف processform.php
وهذا الملف هو اللى راح ينفذ عملية البحث
كود ملف processform.php
[php]
<!–?php // include MySQL-processing classes require_once ‘mysql.php’; try{ // connect to MySQL $db=new MySQL(array (‘host’=–>’localhost’,’user’=>’root’,’password’=>’root’,
‘database’=>’users’));
$searchterm=$db->escapeString($_GET['searchterm']);
$result=$db->query("SELECT firstname, lastname,comments FROM
users WHERE MATCH(firstname,lastname,comments) AGAINST
(‘$searchterm’)");
if(!$result->countRows()){
echo ‘
لاتوجد اى نتيجة,ارجع للخلف وعاود البحث مرة أخرى
‘;
}
else{
// display search results
echo ‘
Your search criteria
returned ‘.$result->countRows().’ results.
‘;
while($row=$result->fetchRow()){
echo ‘
First Name:
’.$row['firstname'].’
Last Name:
’.$row['lastname'].’
Comments:
’.$row['comments'].’
‘;
}
}
echo ‘
‘;
}
catch(Exception $e){
echo $e->getMessage();
exit();
}
?>
[/php]
شرح الاجزاء المطلوب تعديلها بما يناسب طلبك:
1- اولا تغيير بيانات الاتصال بقاعدة البيانات من خلال هذا السطر
[php]
$db=new MySQL(array
(‘host’=>’localhost’,’user’=>’root’,’password’=>’root’,
‘database’=>’users’));
[/php]
2- تغيير اسم الجدول والاعمدة المراد البحث فيها , وذلك من خلال هذا السطر
[php]
$result=$db->query("SELECT firstname, lastname,comments FROM
users WHERE MATCH(firstname,lastname,comments) AGAINST
(‘$searchterm’)");
[/php]
تم وضع لغة الكود بين معقوفتين لتوضيح الأمر ... هذا كل شيء بالتوفيق في برمجة محرك بحث يتناسب وموقعك
التعليقات