freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

Σελιδοποίηση αποτελεσμάτων από βάση δεδομένων


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » PHP Προγραμματισμός και εφαρμογές » PHP τα δικά μας scripts
Moderators:  PHP Moderators, Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 2 [28 Μηνύματα]      Bookmarks Tags: δεδομένωνβάση Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
Σελίδα:  1, 2 Επόμενο
ΑποστολέαςΜήνυμα
panosru
WebDev Moderator

Μέλος από: 13 Σεπ 2005
Βοηθήματα: 2
Scripts: 2
Μηνύματα: 256+

Περιοχή: Camp
View users profile
ΜήνυμαΣτις: 17 Απρ 2007 14:53    Θέμα: Σελιδοποίηση αποτελεσμάτων από βάση δεδομένων Απάντηση με παράθεση  Mark this post and the followings unread

Επειδή παρατήρησα ότι πολλοί χρηστες έχουν προβλήματα με το pagination είπα να γράψω στον λιγοστό χρόνο που έχω το τελευταίο καιρό ένα παράδειγμα, ίσος φανεί χρήσιμο σε μερικούς.

Προτού αρχίσω να δηλώσω πως δουλεύω με UTF8 γενικά, το παράδειγμα όμως δεν περιορίζεται εκεί απλά κάντε τις κατάλληλες αλλαγές για τα δικά σας character sets

Για το παράδειγμα δημιούργησα μια βάση και την ονόμασα paggination

SQL query:
κώδικας:
CREATE DATABASE `paggination` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;



Έπειτα δημιούργησα ένα πινακα με το όνομα `data`

SQL query:
κώδικας:
CREATE TABLE `data` (
   `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
   `user` VARCHAR( 100 ) NOT NULL
) ENGINE = MYISAM ;


Εφόσον δημιουργήσαμε τον πινακα πρέπει να βάλουμε δεδομένα.

Ας βάλουμε λοιπόν καμια εκατοστή ονόματα.
κώδικας:
INSERT INTO data (user) VALUES ('Mari'), ('Grace'), ('Davis'), ('Leigh'), ('Aimee'), ('Timon'), ('Jocelyn'), ('Uriah'), ('Xenos'), ('Rose'), ('Peter'), ('Irene'), ('Kimberly'), ('Baker'), ('Nicholas'), ('Carissa'), ('McKenzie'), ('Dustin'), ('Hiram'), ('Paloma'), ('Carl'), ('Brent'), ('Joseph'), ('Felicia'), ('Kaitlin'), ('Orlando'), ('Chanda'), ('Jayme'), ('Tucker'), ('Xyla'), ('Herman'), ('Kirk'), ('Fritz'), ('Martin'), ('Burke'), ('Geraldine'), ('Kristen'), ('Madison'), ('Dora'), ('Keelie'), ('Iris'), ('Alden'), ('Xavier'), ('Zelenia'), ('Blossom'), ('Michael'), ('Callum'), ('Quin'), ('Wesley'), ('Kitra'), ('Kadeem'), ('Boris'), ('Moana'), ('Abbot'), ('Imogene'), ('Charlotte'), ('Orson'), ('Lucian'), ('McKenzie'), ('Mary'), ('Leah'), ('Anne'), ('Clarke'), ('Troy'), ('Nicole'), ('Gary'), ('Devin'), ('Destiny'), ('Xanthus'), ('Kelsie'), ('Reed'), ('Hollee'), ('Kyla'), ('Preston'), ('Helen'), ('Merrill'), ('Indira'), ('Kieran'), ('Ingrid'), ('Harriet'), ('Beverly'), ('Vivian'), ('Joshua'), ('Rana'), ('Vladimir'), ('Ursula'), ('Xavier'), ('Mohammad'), ('Kelsey'), ('Maggie'), ('Francesca'), ('Bree'), ('Moses'), ('Kellie'), ('Alice'), ('Hayes'), ('Stuart'), ('Emerald'), ('Mason'), ('Shad');



Στην συνεχεια αν δουλεύουμε σε περιβάλλον PHP4 ο παρακάτω κώδικας είναι αυτός εκ τον οποιο θα παραδειγματιστούμε.
κώδικας:
<?php

// Connect to Database
$cID = @mysql_connect('localhost','root','admin');

// Select Database
mysql_select_db('paggination');

// Define Character set
mysql_query("SET CHARACTER SET 'utf8'",$cID);
mysql_query("SET NAMES 'utf8'",$cID);

// Get page
$page = $_GET['page'];

// If page is not defined we are on page 1
if ($page <= 0) $page = 1;

// Define how much lines per page we are showing (lpr = Lines Per Page)
$lpr = 25;

// Define start, depends on what page we are viewing
$start = ($page * $lpr) - $lpr;

// Define our queries (qp1, qp1 {= Query Part 1 / Query Part 2})
$qp1 = "SELECT * FROM `data`";
$qp2 = sprintf("%s ORDER BY `id` DESC LIMIT %d,%d",$qp1,$start,$lpr);

// Count all rows from `data` table
$getDataLen = mysql_num_rows(mysql_query($qp1));

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

// Get ALL from table `data`
$getData = mysql_query($qp2,$cID);

// Show users
while ($rows = mysql_fetch_assoc($getData))
{
   echo $rows['user'].'<br />';
}
echo '<hr />';

// Define First Page link
if ($page > 1)
   echo "<a href=\"{$_SERVER['PHP_SELF']}?page=1\" title=\"Go to first page\">First Page</a> | ";

// Define previous link
if ($page > 1)
   echo "<a href=\"{$_SERVER['PHP_SELF']}?page=".($page - 1)."\" title=\"Go to page ".($page - 1)."\">Previous</a> | ";
   
// List pages
for ($pageList = 1; $pageList <= $pages; $pageList++)
{
   if ($pageList != $page)
   {
      // Link to page
      echo "<a href=\"{$_SERVER['PHP_SELF']}?page={$pageList}\" title=\"Go to page {$pageList}\">{$pageList}</a> | ";
   }
   else
   {
      // Show curent page with strong markup
      echo "<strong>{$pageList}</strong> | ";
   }
}

// Define next link
if ($page != ceil($pages))
   echo "<a href=\"{$_SERVER['PHP_SELF']}?page=".($page + 1)."\" title=\"Go to page ".($page + 1)."\">Next</a> | ";

// Define Last Page link
if ($page != ceil($pages))
   echo "<a href=\"{$_SERVER['PHP_SELF']}?page=".ceil($pages)."\" title=\"Go to last page\">Last Page</a> ";
   
   
// Close link to database
mysql_close($cID);
?>


Αν δουλεύουμε σε περιβάλλον PHP5 (5.1 και πάνω) ναι μεν ο παραπάνω κώδικας λειτουργεί χωρίς καμια διαφορα και στην PHP5 αλλα θα ήταν καλύτερο να εκμεταλλευτούμε τις νέες μας δυνατότητες οποτε ο παρακάτω κώδικας είναι για PHP5
κώδικας:
<?php

// Connect to Database (dbh = Data Base Handler)
/**
 * PDO::ATTR_PERSISTENT is set to true because of, php.net/pdo says:
 * Many web applications will benefit from making persistent connections to database servers.
 * Persistent connections are not closed at the end of the script, but are cached and re-used
 * when another script requests a connection using the same credentials.
 * The persistent connection cache allows you to avoid the overhead of establishing
 * a new connection every time a script needs to talk to a database, resulting in a faster web application.
 */
$dbh = new PDO('mysql:host=localhost;dbname=paggination','root','admin', array(PDO::ATTR_PERSISTENT => true));

// Define Character set
$dbh->query("SET CHARACTER SET 'utf8'");
$dbh->query("SET NAMES 'utf8'");

// Get page
$page = $_GET['page'];

// If page is not defined we are on page 1
if ($page <= 0) $page = 1;

// Define how much lines per page we are showing (lpr = Lines Per Page)
$lpr = 25;

// Define start, depends on what page we are viewing
$start = ($page * $lpr) - $lpr;

// Define our queries (qp1, qp1 {= Query Part 1 / Query Part 2})
$qp1 = "SELECT * FROM `data`";
$qp2 = sprintf("%s ORDER BY `id` DESC LIMIT :start,:limit",$qp1);

// Prepare our queries
$q1 = $dbh->prepare($qp1);
$q2 = $dbh->prepare($qp2);

// Bind params to q2 (Query 2)
$q2->bindParam(':start',$a);
$q2->bindParam(':limit',$b);


// Execute queries

// Execute Query 1
$q1->execute();

// Execute Query 2

// Define params for Query 2
$a = $start;
$b = $lpr;
$q2->execute();


// Count all rows from `data` table
/**
 * I would like to use rowCount function but as shown at php.net...
 *
 * If the last SQL statement executed by the associated PDOStatement was a SELECT statement,
 * some databases may return the number of rows returned by that statement.
 * However, this behaviour is not guaranteed for all databases and should not be relied on for
 * portable applications.
 *
 * We could use $getDataLen = $q1->rowCount(); but it returns me a zero so we use the folowing
 *
 * I fetch all data with PDO::FETCH_NUM, just because here we don't need any data to display.
 */
$getDataLen = count($q1->fetchAll(PDO::FETCH_NUM));

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

// Get ALL from table `data`
$getData = $q2->fetchAll(PDO::FETCH_ASSOC);

// Define usersShow function for array walker
function usersShow (&$item, $key, $params)
{
   echo $params.$item['user'].'<br />';
}

// Create array walker
array_walk($getData,'usersShow','User : ');

// Adding a seperator
echo '<hr />';

// Define First Page link
if ($page > 1)
   echo "<a href=\"{$_SERVER['PHP_SELF']}?page=1\" title=\"Go to first page\">First Page</a> | ";

// Define previous link
if ($page > 1)
   echo "<a href=\"{$_SERVER['PHP_SELF']}?page=".($page - 1)."\" title=\"Go to page ".($page - 1)."\">Previous</a> | ";
   
// List pages
for ($pageList = 1; $pageList <= $pages; $pageList++)
{
   if ($pageList != $page)
   {
      // Link to page
      echo "<a href=\"{$_SERVER['PHP_SELF']}?page={$pageList}\" title=\"Go to page {$pageList}\">{$pageList}</a> | ";
   }
   else
   {
      // Show curent page with strong markup
      echo "<strong>{$pageList}</strong> | ";
   }
}

// Define next link
if ($page != ceil($pages))
   echo "<a href=\"{$_SERVER['PHP_SELF']}?page=".($page + 1)."\" title=\"Go to page ".($page + 1)."\">Next</a> | ";
   
// Define Last Page link
if ($page != ceil($pages))
   echo "<a href=\"{$_SERVER['PHP_SELF']}?page=".ceil($pages)."\" title=\"Go to last page\">Last Page</a> ";
   
?>


Αυτά από μένα, οτιδήποτε απορίες κτλ υπάρχουν ποστάρετε εδώ.

Για να γεμίσω τον πινακα με δεδομένα χρησιμοποίησα ένα web application το οποιο βρήκα τυχαία στο internet και πλέον είναι από τα favorites μου.
Το app αυτό ονομάζεται Data Generator και είναι εκπληκτικά βολικό όταν είναι να κανεις beta testing και ψάχνεσαι για δεδομένα!

PS: Τα comments στον κώδικα ουσιαστικά αναλύουν το παράδειγμα, τα έγραψα στα αγγλικά επειδή προοριζόταν για άλλο θέμα εξαρχής οποτε το ποστάρω και εδώ.

Last edited by panosru on 29 Ιουλ 2007 15:49, edited 1 time in total
panosru
WebDev Moderator

Μέλος από: 13 Σεπ 2005
Βοηθήματα: 2
Scripts: 2
Μηνύματα: 256+

Περιοχή: Camp
View users profile
ΜήνυμαΣτις: 26 Απρ 2007 01:28    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

To metafero sto PHP τα δικά μας scripts gia na exete kalyterh prosbash s' ayto. Telika fanike xrhshmo se kanenan?
midas


Μέλος από: 25 Μαη 2007
Μηνύματα: 25

View users profile
ΜήνυμαΣτις: 22 Ιουν 2007 12:00    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

To βρήκα πολύ χρήσιμο, μιας και μόλις έχω ξεκινήσει να γράφω δυναμικές σελίδες!

Ευχαριστώ!
vassilism


Μέλος από: 17 Μαρ 2007
Βοηθήματα: 7
Templates: 1
Scripts: 4
Μηνύματα: 256+


View users profile Visit posters website
ΜήνυμαΣτις: 21 Ιουλ 2007 21:08    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Panosru σ’ευχαριστούμε πολύ γιαυτό το script.
Δεν είναι απλά χρήσιμο αλλά χρησιμότατο.
Έχω όμως μια απορία.
Προσπαθώ να κάνω link και να με πηγαίνει στην πρώτη και την τελευταία σελίδα, αλλά δεν τα καταφέρνω. Μπορείς να βοηθήσεις?

_________________
Αγγελίες - Aggelia.eu
panosru
WebDev Moderator

Μέλος από: 13 Σεπ 2005
Βοηθήματα: 2
Scripts: 2
Μηνύματα: 256+

Περιοχή: Camp
View users profile
ΜήνυμαΣτις: 25 Ιουλ 2007 01:55    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Ela file mou nai pes mou ligo perisoteres leptomeries omos. An katalaba kala psaxneis na breis ena tropo na baleis first page kai last page sosta? An nai me thn 1h euakria tha to ftiakso kai tha ananeoso tous parapano kodikes kai gia php4 kai gia php5 gia na to deis pos ginete, kai fysika tha balo comments me epeksighsh opos kai sta parapano.
vassilism


Μέλος από: 17 Μαρ 2007
Βοηθήματα: 7
Templates: 1
Scripts: 4
Μηνύματα: 256+


View users profile Visit posters website
ΜήνυμαΣτις: 25 Ιουλ 2007 20:06    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Αυτό ακριβώς εννοώ.
Σ'ευχαριστώ εκ των προτέρων.

_________________
Αγγελίες - Aggelia.eu
panosru
WebDev Moderator

Μέλος από: 13 Σεπ 2005
Βοηθήματα: 2
Scripts: 2
Μηνύματα: 256+

Περιοχή: Camp
View users profile
ΜήνυμαΣτις: 29 Ιουλ 2007 15:50    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Ok, ta prosthesa stous parapano kodikes, se diaforetika if statments tha mporousan na mpoun kai sta if statments ton next kai previous links antistoixa, anyway tropopoihste ta opos sas boleyoun.
_Invisible_


Μέλος από: 16 Νοε 2006
Scripts: 2
Μηνύματα: 256+

Περιοχή: Greece
View users profile
ΜήνυμαΣτις: 10 Αυγ 2007 12:25    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Καλός ο panos! Το pagination είναι πραγματικά πολύ χρήσιμο, γιατί πχ σε ένα search δεν μπορείς να πετάξεις 50 εκατομμύρια αποτελέσματα σε μία σελίδα... Θα βάζεις 25 results per page.

Πολλές εφαρμογές χρησιμοποιούν paging και είναι πολύ χρήσιμο.
vassilism


Μέλος από: 17 Μαρ 2007
Βοηθήματα: 7
Templates: 1
Scripts: 4
Μηνύματα: 256+


View users profile Visit posters website
ΜήνυμαΣτις: 14 Αυγ 2007 19:11    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Pano σ'ευχαριστούμε πολύ που έκατσες και ασχολήθηκες.
Είναι πάρα πολύ χρήσιμό αυτό το script.

_________________
Αγγελίες - Aggelia.eu
avr_freak


Μέλος από: 13 Αυγ 2006
Μηνύματα: 70

View users profile Visit posters website
ΜήνυμαΣτις: 11 Σεπ 2007 08:36    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

panorsu thanks gia to scriptaki me apallaxe apo polli basano ... Etsi gia kathara logous gnosis mporis na exigisis pos doulevei se adres grammes ?

Thanks again man !!!

_________________
Φοιτητικές Αγγελίες
p_pan


Μέλος από: 11 Φεβ 2007
Βοηθήματα: 2
Scripts: 7
Μηνύματα: 256+

Περιοχή: Άστεγος!
View users profile
ΜήνυμαΣτις: 30 Σεπ 2007 22:39    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

mprabo re.... polu sosta ekanes kai to egraces.. epanilimenes fores eixa zitisei na m ejigisi kapoios pos ginete na kanei selidopoihsh se dedomena proerxomena apo basi dedomenon alla oloi me paretrepan se kapoia allh selida p sto telos den ebgaza apotelesma.... ontos an kai den to polu ecaxa to script s mprabo kai mono gia tin protoboulia s...

_________________
Αγράματος...
Risk


Μέλος από: 02 Μαη 2006
Μηνύματα: 256+
Περιοχή: Κάπου εδώ γύρω...
View users profile Visit posters website
blog flickr facebook linkedin sync del.icio.us 
ΜήνυμαΣτις: 02 Οκτ 2007 19:59    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Respect panosru! Έγινε ήδη bookmarking!!!

_________________
p_pan


Μέλος από: 11 Φεβ 2007
Βοηθήματα: 2
Scripts: 7
Μηνύματα: 256+

Περιοχή: Άστεγος!
View users profile
ΜήνυμαΣτις: 03 Νοε 2007 22:21    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

hello...
panosru 8a h8ela na s po oti to script exei ena la8aki... stin for pou exeis ftiajei gia na emfanizete h lista me tis selides... den emfanizei tin teleutaia... dld...
as poume oti exoume sinolo 6 selides...
emfanizei apo 1 eos 5 kai stin pemti emfanizei pali link gia next page pou se paei stin 6 kai teleutaia selida... mipos mporeis na boh8iseis gt den katafera na kano tpt...

_________________
Αγράματος...
afroditi590


Μέλος από: 08 Ιαν 2007
Μηνύματα: 123

View users profile
ΜήνυμαΣτις: 16 Ιαν 2008 13:15    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Σε ευχαριστώ πολύ για το πολύ χρήσιμο και αναλυτικό script. Respect! Respect!

p_pan εγώ για να δείχει και την τελευταία σελίδα άλλαξα κάτι στη for, πρόσθεσα το +1 και έτσι δίχνει και την τελευταία σελίδα

κώδικας:

// List pages
for ($pageList = 1; $pageList <= $pages+1; $pageList++)
{
   if ($pageList != $page)
   {
      // Link to page
      echo "<a href=\"{$_SERVER['PHP_SELF']}?page={$pageList}\" title=\"Go to page {$pageList}\">{$pageList}</a> | ";
   }
   else
   {
      // Show curent page with strong markup
      echo "<strong>{$pageList}</strong> | ";
   }
}
vassilism


Μέλος από: 17 Μαρ 2007
Βοηθήματα: 7
Templates: 1
Scripts: 4
Μηνύματα: 256+


View users profile Visit posters website
ΜήνυμαΣτις: 21 Φεβ 2008 21:53    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Θα ήθελα να κάνω μια ερώτηση.

Μπορούμε να προσαρμόσουμε το παραπάνω script έτσι ώστε να δείχνει τις σελίδες πχ ανά 5?

Δηλαδή εκεί που κάνει αυτό:
First Page |Previous | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Next |Last Page
Να κάνει αυτό:
First Page |Previous | 1 2 3 4 5 Next |Last Page
Μετά:
First Page |Previous | 6 7 8 9 10 Next |Last Page
Μετά:
First Page |Previous | 11 12 13 14 15 Next |Last Page

_________________
Αγγελίες - Aggelia.eu
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 2 [28 Μηνύματα] Σελίδα:  1, 2 Επόμενο
Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » PHP Προγραμματισμός και εφαρμογές » PHP τα δικά μας scripts
Τώρα είναι 04 Δεκ 2016 14:09 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos