AlirezaGSD
پنج شنبه 07 شهریور 1387, 00:51 صبح
سلام و درود
فایلی با نام index.php با محتویات زیر در دسترس است :
<?
php if( isset($_GET['q']) ) { include('includes/search_code.php'); } ?>
فایلی هم با نام search_code.php برای جستجو داخل دیتابیس با محتویات زیر :
<?php
require_once('includes/config.php');
require_once('includes/Paginator.class.php');
$startTime = microtime(true);
//Connecting, selecting database
$db_link = mysql_connect(DB_HOST, DB_USER, DB_PASS);
if (!$db_link) {
die("Could not connect: " . mysql_error());
}
mysql_select_db(DB_NAME) or die("Could not select database");
if (strlen($_GET['q']) < MIN_QUERY_LENGTH || $_GET['q'] == "Search...") {
$error_msg =
"<p>".
"ERROR: There was a problem processing your request<br/>".
"<ul><li>1. Query IS SHort</li><li>2. You tried divert client validation</li></ul>".
"</p>";
die($error_msg);
}
$queryString = $_GET['q'];
$queryString = strtolower(trim($queryString));
$queryString = mysql_real_escape_string($queryString);
$queryString = htmlentities($queryString);
$PAGER_currentPage = (isset($_GET['pg'] )) ? $_GET['pg'] : 1;
$queryCount = "SELECT count(furl) as count
FROM logs
WHERE filename LIKE '%" .$queryString. "%'";
$rs = mysql_query($queryCount);
$row = mysql_fetch_assoc($rs);
$PAGER_totalHits = $row['count'];
//echo $PAGER_totalHits;
$PAGER_lastPageNumber = ceil($PAGER_totalHits / PG_ITEMS_PER_PAGE);
//Set lastPageNumber if there aren't any results
if($PAGER_lastPageNumber == 0) {
$PAGER_lastPageNumber = 1;
$PAGER_currentPage = 1;
}
//Prevent out of range page numbers supplied through the URL
else
if($PAGER_currentPage > $PAGER_lastPageNumber) {
$PAGER_currentPage = $PAGER_lastPageNumber;
}
else
if($PAGER_currentPage <= 0){
$PAGER_currentPage = 1;
}
$offset = ($PAGER_currentPage - 1) * PG_ITEMS_PER_PAGE;
//Display Paginator at the top
if( DISPLAY_PAGER == true) {
if($PAGER_totalHits > PG_ITEMS_PER_PAGE){
Paginator::paginate( $PAGER_currentPage,
$PAGER_totalHits,
PG_ITEMS_PER_PAGE,
"index.php?q=".$_GET['q']."&pg=");
}
}
$query =
"SELECT filename, furl, filesize
FROM logs
WHERE filename LIKE '%" .$queryString. "%'
ORDER BY fdate
LIMIT " .$offset. ", " .PG_ITEMS_PER_PAGE;
// Performing SQL query
$rs = mysql_query($query);
echo "<table cellpadding='0px' cellspacing='0px'>";
echo "<tr class='header-row'><td>Picture Name</td><td>Total</td></tr>";
$rowCounter = 0;
$searchQuery = $_GET['q'];
while($row = mysql_fetch_assoc($rs)) {
$fileName = substr($row['filename'], 0, 100);
$fileName = str_ireplace($searchQuery, "<span class='search-marker'>{$searchQuery}</span>", $fileName );
echo "<tr class='";
print( ($rowCounter++ % 2 == 0) ? "odd-row'>": "even-row'>");
echo "<td style='width: 730px;'>";
echo "<span class='label'>File: </span>";
echo $fileName;
echo "<br />";
echo "<span class='label'>URL: </span>";
echo "<a href='" .$row['furl']. "' title='" .$row['furl']. "'>" .substr($row['furl'], 0, 100). "</a>";
echo "</td>";
echo "<td style='width: 50px;'>" .round(($row['filesize']/1048576), 2). "</td>";
echo "</tr>";
}
echo "</table>";
//Display Paginator at the bottom
if( DISPLAY_PAGER == true) {
if($PAGER_totalHits > PG_ITEMS_PER_PAGE){
Paginator::paginate( $PAGER_currentPage,
$PAGER_totalHits,
PG_ITEMS_PER_PAGE,
"index.php?q=".$_GET['q']."&pg=");
}
}
//Closing connection
mysql_close($db_link);
$endTime = microtime(true);
echo "<div id='search-timer'>";
printf ("Search took %f seconds", $endTime - $startTime);
echo "</div>";
?>
همان طور که مشاهده میکنید برنامه برای یک جستجو نوشته شده که اطلاعات مربوط به دیتابیس را هم از فایل config.php که محتوی موارد زیر است میگیرد :
<?php
// DB Settings
define("DB_HOST", "localhost");
define("DB_NAME", "My DB_NAME");
define("DB_USER", "My DB_USER");
define("DB_PASS", "My DB_PASS");
// Pager Settings
define("DISPLAY_PAGER", true);
define("PG_ITEMS_PER_PAGE", 20);
// Search Restrictions
define("MIN_QUERY_LENGTH", 8);
?>
اما سوال:
قصد دارم تا با تغییر دادن برنامه طوری که شما راهنمایی بفرمایید امکان جستجو و همان پروسه بالا داخل یک دیتابیس دیگر هم اضافه کنم . به عبارت دیگر برنامه داخل 2 دیتابیس مختلف با دو نام و USEE جدا جستجو کند اما نتایج را به صورت یکجا نشان بدهد. بنده هیچ اطلاعی از برنامه نویسی PHP ندارم و اگر لطف کنید و بگویید که کد مورد نیاز چه چیزی هست و باید به کجا اضافه بشود واقعا" لطف خیلی خیلی بزرگی کرده اید.
فایلی با نام index.php با محتویات زیر در دسترس است :
<?
php if( isset($_GET['q']) ) { include('includes/search_code.php'); } ?>
فایلی هم با نام search_code.php برای جستجو داخل دیتابیس با محتویات زیر :
<?php
require_once('includes/config.php');
require_once('includes/Paginator.class.php');
$startTime = microtime(true);
//Connecting, selecting database
$db_link = mysql_connect(DB_HOST, DB_USER, DB_PASS);
if (!$db_link) {
die("Could not connect: " . mysql_error());
}
mysql_select_db(DB_NAME) or die("Could not select database");
if (strlen($_GET['q']) < MIN_QUERY_LENGTH || $_GET['q'] == "Search...") {
$error_msg =
"<p>".
"ERROR: There was a problem processing your request<br/>".
"<ul><li>1. Query IS SHort</li><li>2. You tried divert client validation</li></ul>".
"</p>";
die($error_msg);
}
$queryString = $_GET['q'];
$queryString = strtolower(trim($queryString));
$queryString = mysql_real_escape_string($queryString);
$queryString = htmlentities($queryString);
$PAGER_currentPage = (isset($_GET['pg'] )) ? $_GET['pg'] : 1;
$queryCount = "SELECT count(furl) as count
FROM logs
WHERE filename LIKE '%" .$queryString. "%'";
$rs = mysql_query($queryCount);
$row = mysql_fetch_assoc($rs);
$PAGER_totalHits = $row['count'];
//echo $PAGER_totalHits;
$PAGER_lastPageNumber = ceil($PAGER_totalHits / PG_ITEMS_PER_PAGE);
//Set lastPageNumber if there aren't any results
if($PAGER_lastPageNumber == 0) {
$PAGER_lastPageNumber = 1;
$PAGER_currentPage = 1;
}
//Prevent out of range page numbers supplied through the URL
else
if($PAGER_currentPage > $PAGER_lastPageNumber) {
$PAGER_currentPage = $PAGER_lastPageNumber;
}
else
if($PAGER_currentPage <= 0){
$PAGER_currentPage = 1;
}
$offset = ($PAGER_currentPage - 1) * PG_ITEMS_PER_PAGE;
//Display Paginator at the top
if( DISPLAY_PAGER == true) {
if($PAGER_totalHits > PG_ITEMS_PER_PAGE){
Paginator::paginate( $PAGER_currentPage,
$PAGER_totalHits,
PG_ITEMS_PER_PAGE,
"index.php?q=".$_GET['q']."&pg=");
}
}
$query =
"SELECT filename, furl, filesize
FROM logs
WHERE filename LIKE '%" .$queryString. "%'
ORDER BY fdate
LIMIT " .$offset. ", " .PG_ITEMS_PER_PAGE;
// Performing SQL query
$rs = mysql_query($query);
echo "<table cellpadding='0px' cellspacing='0px'>";
echo "<tr class='header-row'><td>Picture Name</td><td>Total</td></tr>";
$rowCounter = 0;
$searchQuery = $_GET['q'];
while($row = mysql_fetch_assoc($rs)) {
$fileName = substr($row['filename'], 0, 100);
$fileName = str_ireplace($searchQuery, "<span class='search-marker'>{$searchQuery}</span>", $fileName );
echo "<tr class='";
print( ($rowCounter++ % 2 == 0) ? "odd-row'>": "even-row'>");
echo "<td style='width: 730px;'>";
echo "<span class='label'>File: </span>";
echo $fileName;
echo "<br />";
echo "<span class='label'>URL: </span>";
echo "<a href='" .$row['furl']. "' title='" .$row['furl']. "'>" .substr($row['furl'], 0, 100). "</a>";
echo "</td>";
echo "<td style='width: 50px;'>" .round(($row['filesize']/1048576), 2). "</td>";
echo "</tr>";
}
echo "</table>";
//Display Paginator at the bottom
if( DISPLAY_PAGER == true) {
if($PAGER_totalHits > PG_ITEMS_PER_PAGE){
Paginator::paginate( $PAGER_currentPage,
$PAGER_totalHits,
PG_ITEMS_PER_PAGE,
"index.php?q=".$_GET['q']."&pg=");
}
}
//Closing connection
mysql_close($db_link);
$endTime = microtime(true);
echo "<div id='search-timer'>";
printf ("Search took %f seconds", $endTime - $startTime);
echo "</div>";
?>
همان طور که مشاهده میکنید برنامه برای یک جستجو نوشته شده که اطلاعات مربوط به دیتابیس را هم از فایل config.php که محتوی موارد زیر است میگیرد :
<?php
// DB Settings
define("DB_HOST", "localhost");
define("DB_NAME", "My DB_NAME");
define("DB_USER", "My DB_USER");
define("DB_PASS", "My DB_PASS");
// Pager Settings
define("DISPLAY_PAGER", true);
define("PG_ITEMS_PER_PAGE", 20);
// Search Restrictions
define("MIN_QUERY_LENGTH", 8);
?>
اما سوال:
قصد دارم تا با تغییر دادن برنامه طوری که شما راهنمایی بفرمایید امکان جستجو و همان پروسه بالا داخل یک دیتابیس دیگر هم اضافه کنم . به عبارت دیگر برنامه داخل 2 دیتابیس مختلف با دو نام و USEE جدا جستجو کند اما نتایج را به صورت یکجا نشان بدهد. بنده هیچ اطلاعی از برنامه نویسی PHP ندارم و اگر لطف کنید و بگویید که کد مورد نیاز چه چیزی هست و باید به کجا اضافه بشود واقعا" لطف خیلی خیلی بزرگی کرده اید.