Paging in search results using php,mysql

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6230
Εγγραφή: 30 Νοέμ 2004 03:09

Paging in search results using php,mysql

Δημοσίευση από fafos » 21 Δεκ 2007 16:01

Gia vale auto:

Κώδικας: Επιλογή όλων

If($keyword == "") $keyword=$_GET["keyword"];
$page=$_GET["page"];
If($page == "") $page=1; 
prin to //get results from db in greek language

kwnos
Δημοσιεύσεις: 30
Εγγραφή: 21 Αύγ 2007 11:45
Τοποθεσία: ΠΑΤΡΑ

Paging in search results using php,mysql

Δημοσίευση από kwnos » 23 Δεκ 2007 21:08

Παιδιά τελικά με πολλές δοκιμές το πρόβλημα λύθηκε.

Για όλους μας ανεβάζς εδω το script "Paging search results using a keyword in search"

Κώδικας: Επιλογή όλων

<?php

   /* If no keyword is defined, present the search page instead&#58; */
   /* It is important the empty value in below form*/
       print "<tr>\n";
       print "<td>\n";
       print "<form  method='get' ACTION=paging.php> &#203;&#221;&#238;&#229;&#233;&#242; &#202;&#235;&#229;&#233;&#228;&#233;&#220;&#58;
              <input type='text' size='20' name='keyword' value ='' >\n";
       print "<input type='submit' value='&#193;&#237;&#225;&#230;&#222;&#244;&#231;&#243;&#231;'></form>\n";
       print "</td>\n";
       print "</tr>\n";
      
?>

<?
//connect to database
include&#40;'db.php'&#41;;

//get the keword from search field
$keyword = $_GET&#91;'keyword'&#93; ;

// ckeck if there is a keyword in search field
if&#40;$_GET&#91;'keyword'&#93; &#41;
&#123;

// how many rows to show per page
$rowsPerPage = 2;

// by default we show first page
$pageNum = 1;

// if $_GET&#91;'page'&#93; defined, use it as page number
if&#40;isset&#40;$_GET&#91;'page'&#93;&#41;&#41;
&#123;
  $pageNum = $_GET&#91;'page'&#93;;
&#125;

// counting the offset
$offset = &#40;$pageNum - 1&#41; * $rowsPerPage;

//take the empty value if keyword don't define
If&#40;$keyword == ""&#41; $keyword=$_GET&#91;"keyword"&#93;;
$page=$_GET&#91;"page"&#93;;
If&#40;$page == ""&#41; $page=1;

//get results from db in greek language
mysql_query&#40;"SET NAMES 'greek'"&#41;;

//define your db query
$query = "SELECT  oc.col_title_el AS title
          FROM    oa_collections oc
          WHERE   oc.col_url LIKE \"%$keyword%\"
          LIMIT $offset, $rowsPerPage";
$result = mysql_query&#40;$query&#41; or die&#40;'Error, query failed'&#41;;

// print the results of previous query
while&#40;$row = mysql_fetch_array&#40;$result&#41;&#41;
&#123;
   echo $row&#91;'title'&#93; . '<br>';
&#125;

//get results from db in greek language
mysql_query&#40;"SET NAMES 'greek'"&#41;;

// how many rows we have in database
$query   = "SELECT COUNT&#40;col_title_el&#41; AS numrows FROM oa_collections WHERE col_url LIKE \"%$keyword%\" ";
$result  = mysql_query&#40;$query&#41; or die&#40;'Error, query failed'&#41;;
$row     = mysql_fetch_array&#40;$result, MYSQL_ASSOC&#41;;
$numrows = $row&#91;'numrows'&#93;;

// how many pages we have when using paging?
$maxPage = ceil&#40;$numrows/$rowsPerPage&#41;;

// print the link to access each page
$self = $_SERVER&#91;'PHP_SELF'&#93;;

$nav  = '';

for&#40;$page = 1; $page <= $maxPage; $page++&#41;
&#123;
   if &#40;$page == $pageNum&#41;
  &#123;
      $nav .= " $page "; // no need to create a link to current page
   &#125;
   else
   &#123;
      $nav .= " <a href=\"$self?page=$page&keyword=$keyword\">$page</a> ";
  &#125;
&#125;


if &#40;$pageNum > 1&#41;
&#123;
   $page  = $pageNum - 1;
   $prev  = " <a href=\"$self?page=$page&keyword=$keyword\">&#91;Prev&#93;</a> ";

   $first = " <a href=\"$self?page=1&keyword=$keyword\">&#91;First Page&#93;</a> ";
&#125;
else
&#123;
   $prev  = '&nbsp;'; // we're on page one, don't print previous link
   $first = '&nbsp;'; // nor the first page link
&#125;

if &#40;$pageNum < $maxPage&#41;
&#123;
   $page = $pageNum + 1;
   $next = " <a href=\"$self?page=$page&keyword=$keyword\">&#91;Next&#93;</a> ";

   $last = " <a href=\"$self?page=$maxPage&keyword=$keyword\">&#91;Last Page&#93;</a> ";
&#125;
else
&#123;
   $next = '&nbsp;'; // we're on the last page, don't print next link
   $last = '&nbsp;'; // nor the last page link
&#125;

// print the navigation link
echo $first . $prev . $nav . $next . $last;

//close db connection
mysql_close &#40;$db_m&#41;;


&#125;
else
&#123;


print "prepei na epileksete enan oro anazitisis";


&#125;

// ... and we're done!

?>
Δουλεύει άψογα.
Σας ευχαριστώ όλους.

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Paging in search results using php,mysql

Δημοσίευση από vassilism » 10 Ιαν 2008 23:11

Ρε παιδιά επειδή παιδεύομαι και εγώ με το ίδιο πράγμα, έχω μια απορία.
Εδώ η αναζήτηση γίνετε μόνο από ένα πεδίο.
Αν σε κάποια φόρμα είχες π.χ 5 πεδία τι θα έκανες για να λειτουργήσει το paging? :think:

Άβαταρ μέλους
papatzas
Δημοσιεύσεις: 227
Εγγραφή: 03 Δεκ 2005 14:23

Paging in search results using php,mysql

Δημοσίευση από papatzas » 11 Ιαν 2008 13:09

αν πέρναγες τα πεδία σε ένα array()... ?
:-)

Άβαταρ μέλους
w3Cy
Δημοσιεύσεις: 23
Εγγραφή: 02 Ιουν 2005 23:38

Paging in search results using php,mysql

Δημοσίευση από w3Cy » 11 Ιαν 2008 20:33

θα μπορούσες να χρησιμοποιήσεις sessions..

papatzas, δεν νομίζω να μπορείς να χρησιμοποιήσεις arrays στο $_GET..
Γιώργος

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Paging in search results using php,mysql

Δημοσίευση από vassilism » 13 Ιαν 2008 10:49

Δηλαδή με sesions πως θα μπορούσε να γίνει κάτι τέτοιο?

Άβαταρ μέλους
w3Cy
Δημοσιεύσεις: 23
Εγγραφή: 02 Ιουν 2005 23:38

Paging in search results using php,mysql

Δημοσίευση από w3Cy » 14 Ιαν 2008 00:05

Για να στείλεις για πρώτη φορά τα keywords της αναζήτησης στον server πρέπει να χρησιμοποιήσεις το $_GET.

Άρα αν έχεις 5 πεδία θα τα στείλεις στην μορφή:

Κώδικας: Επιλογή όλων

 /search.php?kw1=XX&kw2=XX&kw3=XX&kw4=XX&kw5=XX
Τώρα αυτά τα keywords μπορείς να τα φυλάξεις σε ένα array στo $_SESSION

Κώδικας: Επιλογή όλων

<?php
//Validate Input
$clean&#91;'kw1'&#93; = validation&#40;$_GET&#91;'kw1'&#93;&#41;;
&#91;...&#93;

session_start&#40;&#41;;

// create keywords array
$keywords=array&#40;$clean&#91;'kw1'&#93;, $clean&#91;'kw2'&#93;, $clean&#91;'kw3'&#93;, $clean&#91;'kw4'&#93;, $clean&#91;'kw5'&#93;, &#41;;
// add it to our session
$_SESSION&#91;'keywords'&#93;=$keywords; 
?>
Τώρα στα links που χρησιμοποιούμε για το pagination δεν χρειάζεται να προσθέτουμε τα 5 keywords. Αυτά μπορούμε να τα χρησιμοποιήσουμε από το $_SESSION.

Το link χρειάζεται μόνο τον αριθμό της σελίδας των αποτελεσμάτων.

π.χ.

Κώδικας: Επιλογή όλων

/search.php?page=1
Γιώργος

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Paging in search results using php,mysql

Δημοσίευση από vassilism » 16 Ιαν 2008 16:50

Για να πω την αλήθεια το προσπάθησα και μου φάνηκε βουνό.
Δεν ξέρω αν φταίει επειδή έχω και άλλη μια session που σε πάει σε μια σελίδα για login.
Αυτός είναι ο κώδικάς με την σελιδοποίηση.
Έτσι όπως είναι δουλεύουν όλα εκτός από όταν πατάς επόμενη σελίδα(εκεί πιάνει όλες τις εγγραφές και όχι αυτές της αναζήτησης).

Κώδικας: Επιλογή όλων

<? 
session_start&#40;&#41;; 
if&#40;!session_is_registered&#40;authenticated&#41;&#41;&#123; 
header&#40;"location&#58;login.php"&#41;; 
&#125; 
?>
<?php
$id = $_GET&#91;"id"&#93;;  
$title = $_GET&#91;"title"&#93;;
$category = $_GET&#91;"category"&#93;;
$date = $_GET&#91;"date"&#93;;
  
include &#40;'../config/dbconnect.php'&#41;;
// Get page 
$page = $_GET&#91;'page'&#93;; 

// If page is not defined we are on page 1 
if &#40;$page <= 0&#41; $page = 1; 

// Define how much lines per page we are showing &#40;lpr = Lines Per Page&#41; 
$lpr = 2; 

// Define start, depends on what page we are viewing 
$start = &#40;$page * $lpr&#41; - $lpr; 

// Define our queries &#40;qp1, qp1 &#123;= Query Part 1 / Query Part 2&#125;&#41; 
$query = "SELECT * FROM `uploads` WHERE id LIKE '%$id%' AND title LIKE '%$title%' AND category LIKE '%$category%' AND date LIKE '%$date%'"; 


$qp2 = sprintf&#40;"%s ORDER BY `id` DESC LIMIT %d,%d",$query,$start,$lpr&#41;; 

// Count all rows from `data` table 
$getDataLen = mysql_num_rows&#40;mysql_query&#40;$query&#41;&#41;; 

// Calculate how many pages will be shown 
$pages = $getDataLen / $lpr; 

// Get ALL from table `data` 
$getData = mysql_query&#40;$qp2&#41;; 

$Rec = mysql_query&#40;$query&#41;; 
$tot_Rec = mysql_num_rows&#40;$Rec&#41;; 

if &#40;$tot_Rec < 1&#41;
echo "<p><font class=text1>Δεν βρέθηκαν εγγραφές</font></p>";
if&#40;$tot_Rec == 1&#41;
echo "<p><font class=text1>Βρέθηκε ".$tot_Rec." εγγραφή</font></p>";
if&#40;$tot_Rec > 1&#41;
echo "<p><font class=text1>Βρέθηκαν ".$tot_Rec." εγγραφές</font></p>";

while &#40;$rows = mysql_fetch_assoc&#40;$getData&#41;&#41; 
&#123;  
echo&#40;"</p><font class=text1>". $rows&#91;"id"&#93; ." </font>"&#41;;
echo&#40;"</p><font class=text1>". $rows&#91;"title"&#93; ." </font>"&#41;;
echo&#40;"<font class=text1>". $rows&#91;"category"&#93; ." </font>"&#41;;
echo&#40;"<font class=text1>". $rows&#91;"date"&#93; ." </font>"&#41;;
&#125;  



//pagination
if&#40;$tot_Rec > 0&#41;&#123;
// Define First Page link 
if &#40;$page > 1&#41; 

   echo "<a href=\"&#123;$_SERVER&#91;'PHP_SELF'&#93;&#125;?page=1\" class=\"selidopoiisi\">|<< Αρχή   </a>";    
    
// Define previous link 
if &#40;$page > 1&#41; 
   echo "<a href=\"&#123;$_SERVER&#91;'PHP_SELF'&#93;&#125;?page=".&#40;$page - 1&#41;."\" class=\"selidopoiisi\">< Προηγούμενη   </a>"; 
    
// List pages 
for &#40;$pageList = 1; $pageList <= $pages+1; $pageList++&#41; 
&#123; 
   if &#40;$pageList != $page&#41; 
   &#123; 
      // Link to page 
      echo "<a href=\"&#123;$_SERVER&#91;'PHP_SELF'&#93;&#125;?page=&#123;$pageList&#125;\" class=\"selidopoiisi\">&#123;$pageList&#125;</a>"; 
   &#125; 
   else 
   &#123; 
      // Show curent page with strong markup 
      echo "<font class=text1>&#91;&#123;$pageList&#125;&#93;</font>"; 
   &#125; 
&#125; 

// Define next link 
if &#40;$page != ceil&#40;$pages&#41;&#41; 
   echo "<a href=\"&#123;$_SERVER&#91;'PHP_SELF'&#93;&#125;?page=".&#40;$page + 1&#41;."\" class=\"selidopoiisi\"> Επόμενη >   </a>"; 

// Define Last Page link 
if &#40;$page != ceil&#40;$pages&#41;&#41; 
   echo "<a href=\"&#123;$_SERVER&#91;'PHP_SELF'&#93;&#125;?page=".ceil&#40;$pages&#41;."\" class=\"selidopoiisi\">   Τέλος >>|</a> "; 
   &#125; 
?>

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6230
Εγγραφή: 30 Νοέμ 2004 03:09

Paging in search results using php,mysql

Δημοσίευση από fafos » 16 Ιαν 2008 20:59

Patrida!!!!

ekei pou exeis ta page links ({$_SERVER['PHP_SELF']}?page=1 klp) prepei na doseis ta get ton allon variables.. px.:

Κώδικας: Επιλογή όλων

&#123;$_SERVER&#91;'PHP_SELF'&#93;&#125;?page=1&id = " .urlencode&#40;$id&#41; . "&title=" .urlencode&#40;$title&#41; . "&category=" .urlencode&#40;$category&#41; . "&date=" .urlencode&#40;$date&#41; . "

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Paging in search results using php,mysql

Δημοσίευση από vassilism » 17 Ιαν 2008 00:51

Πατρίδα σευχαριστώ για τη βοήθεια. :D
Δεν μου δούλεψε αλλά πιστεύω με λίγη προσπάθεια θα το φτιάξω.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες