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

Μια περιοχή όπου τα μέλη μας μπορούν να βάζουν τα PHP scripts που έχουν φτιάξει και θέλουν να τα μοιραστούν με τα υπόλοιπα μέλη.

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

Απάντηση
kalpatron
Δημοσιεύσεις: 44
Εγγραφή: 03 Απρ 2006 20:24

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

Δημοσίευση από kalpatron » 02 Μαρ 2008 22:58

Αν υπάρχει κάποιος που μπορεί να το κάνει, θα ήταν πολύ χρήσιμο!!! Χρησιμοποιώ παρόμοιο κώδικα, τον οποίο έχω παραμετροποιήσει αρκετά και αυτό που με βοηθάει - τουλάστον έτσι όπως το έχω κάνει εγώ - είναι ότι εμφανίζω τις σελίδες σε ένα drop-down, που μόλις διαλέξεις την σελίδα που θέλεις, σε στέλνει κατευθείαν!

everfrost
Δημοσιεύσεις: 3
Εγγραφή: 04 Μάιος 2007 22:21

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

Δημοσίευση από everfrost » 16 Αύγ 2010 17:44

Παιδιά ξέρει κανένας πως θα κάνουμε αυτό που είπε ο Βασίλης? Να δείχνει δηλαδή τα page links ανά πεντάδες?

nikdim
Δημοσιεύσεις: 41
Εγγραφή: 14 Ιούλ 2010 18:14

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

Δημοσίευση από nikdim » 16 Σεπ 2010 13:54

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

if (isset($_GET['id'])){$id=1;}else $id=2;

$page = $_GET['page'];

//mono ti proti fora tha ektelestei to parakato
if($page==1 && $id==1){$id=2;

$name=$_POST['name'];
$surname=$_POST['surname'];
............
}

nikdim
Δημοσιεύσεις: 41
Εγγραφή: 14 Ιούλ 2010 18:14

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

Δημοσίευση από nikdim » 08 Οκτ 2010 01:08

everfrost έγραψε:Παιδιά ξέρει κανένας πως θα κάνουμε αυτό που είπε ο Βασίλης? Να δείχνει δηλαδή τα page links ανά πεντάδες?
Για να μην δείχνει όλα τα αποτελέσματα αλλα +-2 απο τη τρέχον σελίδα τότε αντικαταστούμε το κομμάτι του κώδικα με το παρακάτω


//for ($pageList = 1; $pageList <= $pages+1; $pageList++)
for ($pageList = $page-2; $pageList <= $page+2; $pageList++)
{
if ($pageList != $page && $pageList<$pages+1&&$pageList>0)
{
// Link to page
//if($count_page<$count_page_3)
{echo "<a href="{$_SERVER['PHP_SELF']}?page={$pageList}" title="Go to page {$pageList}">{$pageList}</a> | ";}
//else {}
}
else
{
// Show curent page with strong markup
if($pageList<$pages+1&&$pageList>0)echo "<strong>{$pageList}</strong> | "; //apo prin ta link kai edw to noumero
}
}

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

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

Δημοσίευση από gvre » 14 Οκτ 2010 15:23

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

[snip]

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

[snip]
Διόρθωσέ το σε $pages = ceil($getDataLen / $lpr);

Άβαταρ μέλους
ΠΑΡΗΣ
Δημοσιεύσεις: 5
Εγγραφή: 16 Σεπ 2005 03:19
Τοποθεσία: ΧΑΛΚΙΔΑ
Επικοινωνία:

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

Δημοσίευση από ΠΑΡΗΣ » 10 Δεκ 2010 12:58

Σε site με καταχωρίσεις οχημάτων υπάρχει η δυνατότητα σελιδοποιήσεις μόνο των αγγελιών ενός χρήστη μέσω ΑΝΑΖΗΤΗΣΗΣ πχ (select dealer) . Πως θα εμφανίζω αυτά τα αποτελέσματα σε άλλη σελίδα χωρίς αναζήτηση ? Θα ήταν πολύτιμη η απάντηση σας, ευχαριστώ..!
Το μεγαλύτερο επίτευγμα του ανθρώπου μετά το web είναι το freestuff.gr

Άβαταρ μέλους
fraggiskos
Δημοσιεύσεις: 47
Εγγραφή: 08 Οκτ 2007 15:42

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

Δημοσίευση από fraggiskos » 23 Φεβ 2011 16:37

χρησημότατο script!!! Σ'ευχαριστώ πολύ
:respect:

tsalaki
Δημοσιεύσεις: 31
Εγγραφή: 09 Μαρ 2009 20:27

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

Δημοσίευση από tsalaki » 19 Αύγ 2011 13:44

Καλησπέρα σε όλους,

Προσπαθώ να κάνω σελιδοποίηση των αποτελεσμάτων από τη βάση. Ψάχνοντας στο ίντερνετ βρήκα διάφορα script για αυτό και έχω υλοποιήσει ένα μέρος της σελιδοποίησης. Ωστόσο έχω 2 προβλήματα:
Το πρώτο είναι ότι όταν πατάω να εμφανίσει τα αποτελέσματα της 2ης σελίδας για παράδειγμα δεν τα εμφανίζει. Τα αποτελέσματα δηλαδή παραμένουν ίδια σε όλες τις σελίδες και ειναι τα 5 πρώτα. Το δεύτερο πρόβλημα μου είναι ότι δεν ξέρω πως θα διορθώσω τα links των επόμενων σελίδων. Τι εννοώ..Εγώ έχω την index όπου κάνω include τη σελίδα στην οποία γίνεται το pagination. Πως θα διατηρήσω αυτή τη σύνδεση ώστε να βλέπω την index που θα περιέχει την σελίδα του pagination??Ο κώδικας μου είναι ο παρακάτω:

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

// Specify the maximum amount of results per page, you could add a drop down box where the end-user
	// can change it themselves
	$max=5;
	 
	$sql="SELECT count&#40;*&#41; AS count FROM diagnwsi";
	$result=mysql_query&#40;$sql&#41;;
	$count=mysql_fetch_assoc&#40;$result&#41;;
	 
	// This is part of the magic. First thing we do is take the amount of results returned &#40;$pic_count&#91;'count'&#93;&#41;
	// and then we divide it by the maximum amount of pics allowed per page.
	 
	// Then we run the ceil function on the result which will round the answer up to the next whole number.
	// This will give us the total number of pages that all the results will take.
	$total_page=ceil&#40;$count&#91;'count'&#93;/$max&#41;;
	
	// Check to make sure a page was passed and it is a number, if not set the page to the first one
	if &#40;isset&#40;$_GET&#91;'page'&#93;&#41; && is_numeric&#40;$_GET&#91;'page'&#93;&#41;&#41;
		$cur_page=$_GET&#91;'page'&#93;;
	else
		$cur_page=1;
	 
	// Now we need to verify that the page is within the range of pages that we have, if not set to the first one
	if &#40;$cur_page < 1 || $cur_page > $total_page&#41;
		$cur_page=1;
	// First we need to get the starting result id, this is simply done by getting the current page minus one
	// and then multiplying that by the maximum results you chose.
	$start_result = &#40;$cur_page - 1&#41; * $max_pics;
	 
	// Next comes the actual query
	$sql="SELECT * FROM diagnwsi LIMIT $start_result, $max";
	$result=mysql_query&#40;$sql&#41;;
	echo "<h4 align='justify'>Πίνακας διαγνώσεων</h4><br/>";
	echo "<p align='center'>Ακολουθεί ο πίνακας των καταχωρηθέντων διαγνώσεων στη βάση δεδομένων&#58;</p>";
	echo "<table border='1' align='center'>
	<tr>
	<th>Κωδικός Διάγνωσης</th>
	<th>Περιγραφή Διάγνωσης</th>
	</tr>";
	
	while&#40;$row = mysql_fetch_array&#40;$result&#41;&#41;
	  &#123;
		  echo "<tr>";
		  echo "<td>" . $row&#91;'kwdikos_dia'&#93; . "</td>";
		  echo "<td>" . $row&#91;'perigrafi_dia'&#93; . "</td>";
		  echo "</tr>";
	  &#125;
	echo "</table>";
	
	// First display the mandatory html, along with the current page, and how many total pages there are
	echo '
		<p align="center">
			Σελίδα&#58; <b>' . $cur_page . '</b> από <b>' . $total_page . '</b>
		</p>';
	 
	// Now if there is more than one page create the links for the other pages
	if &#40;$total_page > 1&#41;
	&#123;
		echo '<p align="center">';
	 
	// Give the first page to start counting to display all the pages upto the total pages
		$page_count = 1;
		while &#40; $page_count <= $total_page &#41;
		&#123;
	 
	// Check and see if the page link being created is the current page, because we don't need a link to the
	// current page
			if &#40; $page_count == $curr_page &#41;
			&#123;
				echo '
				<span style="font-weight&#58; bold;">' . $page_count . '</span>';
			&#125;
	 
Εδώ πρέπει να αλλάχθει το link:

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

// Otherwise create the links for the additional pages and point them back to the current php page
	// Make sure you pass all the needed variables that were passed initially
			else
			&#123;
				echo '
				<a href="' . $_SERVER&#91;'PHP_SELF'&#93; . '&amp;page=' . $page_count . '">
				' . $page_count . '
			</a>';
			&#125;
	 
	// Up the $page_count for the while statement and then close the while statement
		$page_count++;
		&#125; 
	echo '</p>';
	&#125;
?>

Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

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

Δημοσίευση από Christianago » 20 Αύγ 2011 01:07

Νομιζω οτι εχεις ξεχασει να μας δωσες το javascript ή html αρχειο καθως ειδα μερικα υποπτα GET στον κωδικα οπως το παρακατω:

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

$_GET&#91;'page'&#93;
Επισης χρησιμοποιεις καποιες μεταβλητες χωρις να τις εχεις ορισει πρωτα οπως την παραδωθε:

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

$max_pics
Ο 2ος κωδικας τι αντιπροσωπευει; τον καλεις απο καπου; Περιμενουμε νεα σου.

tsalaki
Δημοσιεύσεις: 31
Εγγραφή: 09 Μαρ 2009 20:27

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

Δημοσίευση από tsalaki » 20 Αύγ 2011 11:26

Η μεταβλητή max_pics ήταν λάθος που είχε ξεφύγει και μόλις το διόρθωσα. :) Όσο για το δεύτερο κώδικα:

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


// Otherwise create the links for the additional pages and point them back to the current php page 
   // Make sure you pass all the needed variables that were passed initially 
         else 
         &#123; 
            echo ' 
            <a href="' . $_SERVER&#91;'PHP_SELF'&#93; . '&amp;page=' . $page_count . '"> 
            ' . $page_count . ' 
         </a>'; 
         &#125; 
    
   // Up the $page_count for the while statement and then close the while statement 
      $page_count++; 
      &#125; 
   echo '</p>'; 
   &#125; 
?>
Ουσιαστικά εδώ πρέπει να δώσω το κατάλληλο link για να μου εμφανίζει εκεί που θέλω και όπως θέλω όλες τις σελίδες με τα αποτελέσματα. Το πρόβλημα που έχω εδώ είναι το εξής:
Έχω την index.php στην οποία κάνω include τις εκάστοτε σελίδες που θέλω.Μια από τις σελίδες αυτές είναι και η desease_add.php στην οποία εμφανίζω όλο τον πίνακα με τις ασθένειες (εκεί χρειάζεται το pagination) και δίνω τη δυνατότητα στο χρήστη να προσθέσει μια νέα μετά από τη συμπλήρωση της φόρμας. Εγώ σε αυτό το κομμάτι του κώδικα παραπάνω πρέπει να καθορίσω το link στο οποίο θα εμφανίζονται τα αποτελέσματα. Εγώ αυτό που θέλω να ορίσω με κάποιο τρόπο είναι να βρίσκομαι σε όλες τις σελίδες των αποτελεσμάτων εδώ:

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

"index.php?page=desease_add"
και όταν αλλάζει η σελίδα των αποτελεσμάτων να συμβαίνει κάτι τέτοιο:

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

desease_add.php?page= '. $page_count . '
Δεν ξέρω αν είναι κατανοητό αυτό που θέλω να κάνω και το πρόβλημα που έχω. Η index είναι ουσιαστικά όλο το template της σελίδας μου. Αν βάλω στο link για τα αποτελέσματα απλά αυτό:

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

desease_add.php?page= '. $page_count . '
εμφανίζεται σωστά μεν από πλευράς προγραμματισμού λάθος όμως από πλευράς παρουσίασης γιατί δεν έχω διατηρήσει όλη την υπόλοιπη σελίδα όπως τη θέλω.

Σε κάθε περίπτωση ευχαριστώ πάρα πάρα πολύ για την βοήθεια!

Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

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

Δημοσίευση από Christianago » 20 Αύγ 2011 22:07

Να πω την αληθεια μπερδευτηκα λιγο με αυτο που θες να υλοποιησεις σε σχεση με το script σου που ειναι straight forward.
Παρακατω ειναι λιγο παραλλαγμενο το script που κανει τη σελιδοποιηση για 1 μονο πινακα με τροπο πιο απλο πιστευω.
Διαφορες: mysqli αντι για mysql και οπου γραφει στο σχολιο αντικατασταση εισαγεις τα δικα σου δεδομενα.
Δεν καταλαβα ο χρηστης πως αλληλεπιδρα με τη φορμα και τη σελιδοποιηση επειτα.
Οταν λες ο χρηστης θα προσθετει μια νεα, εννοεις ασθενεια;

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

<?php

$db = mysqli_connect&#40;'localhost', '', '', ''&#41;; //αντικατασταση στοιχεια συνδεσης + ΒΔ 
mysqli_query&#40;$db, "SET names 'greek'"&#41;;
header&#40;'Content-Type&#58; text/html; charset=greek'&#41;;

$result = mysqli_query&#40;$db, "SELECT * FROM table"&#41;; //αντικατασταση

$countPages = mysqli_num_rows&#40;$result&#41;;

$pageURL = "http&#58;//".$_SERVER&#91;"SERVER_NAME"&#93;.$_SERVER&#91;"REQUEST_URI"&#93;; //URL σελιδας
   
if &#40;strpos &#40;$pageURL, "?"&#41; === false || strpos &#40;$pageURL, "1"&#41;&#41; //ελεγχος URL
$currPage = 1; //1η σελιδα
else $currPage = substr&#40;$pageURL, -1&#41;; //υπολοιπες συμφωνα με την καταληξη του URL

$maxPages = 5;

//τα αποτελεσματα ξεκινουν απο τη γραμμη...
if &#40;$currPage == 1&#41;
$offset = 0;
else $offset = $maxPages * $currPage - $maxPages; 

$sql = "SELECT * FROM table LIMIT $offset, $maxPages"; //αντικατασταση

$result = mysqli_query&#40;$db, $sql&#41;;

echo "<h4 align='justify'>Πίνακας διαγνώσεων</h4><br/><p align='center'>Ακολουθεί ο πίνακας των καταχωρηθέντων διαγνώσεων στη βάση δεδομένων&#58;</p><table border='1' align='center'><tr><th>Κωδικός Διάγνωσης</th><th>Περιγραφή Διάγνωσης</th></tr>";
   
while&#40;$row = mysqli_fetch_array&#40;$result&#41;&#41;&#123;
echo "<tr><td>" . $row&#91;''&#93; . "</td>"; //αντικατασταση
echo "<td>" . $row&#91;''&#93; . "</td></tr>"; //αντικατασταση
&#125;

$allPages = $countPages / $maxPages;

echo "</table><p align=center> Σελίδα&#58; <b> $currPage </b> από <b> $allPages </b><br><br>";

$i = 1;

while &#40;$i <= $allPages&#41;&#123;
echo '<a href="' . $_SERVER&#91;'PHP_SELF'&#93; . '?page=' . $i . '">' . $i . '</a> &nbsp;'; 
$i++; 
&#125;
 
echo '</p>';
   
?>

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

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

Δημοσίευση από gvre » 21 Αύγ 2011 12:38

Christianago έγραψε:

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

<?php
$result = mysqli_query&#40;$db, "SELECT * FROM table"&#41;; //αντικατασταση
$countPages = mysqli_num_rows&#40;$result&#41;;
?>
Για να μετρήσεις τις εγγραφές που επιστρέφει ένα query χωρίς το LIMIT, χρησιμοποιείς COUNT(*) ή found_rows σε συνδιασμό με το SQL_CALC_FOUND_ROWS (αυτό παίζει μόνο σε MySQL).
Το SELECT * είναι πολύ αργό, ειδικά σε πίνακες με πολλές εγγραφές.

Άβαταρ μέλους
Aretousa2009
Δημοσιεύσεις: 31
Εγγραφή: 05 Ιούλ 2009 02:52

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

Δημοσίευση από Aretousa2009 » 28 Μαρ 2012 01:11

Προσπαθησα και εγώ να κάνω την σελιδοποίηση σύμφωνα με το πρώτο post. Η function sprintf() αλλά και η printf() μου χτυπόυσε error λέγοντας ότι είναι πολύ λίγες οι εγγραφές.
Την έβγαλα! :P
H function mysql_fetch_assoc μία έπαιζε μία όχι (για τιν ώρα λειτουργεί! :) )
παραθέτω τμήμα του κώδικα μου να μου πείτε αν γίνεται τι είναι αυτό που κάνω λάθος και η σελιδοποίση δεν γίνεται. (Επίσης η μπάρα της σελιδοποίσης είναι κάθετη και όχι οριζόντια,σωστα?)

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

		<?php
$page=$_GET&#91;'page'&#93;;
if &#40;$page <= 0&#41; $page=1;
$lines=6;
$start=&#40;$page * $lines &#41; - $lines;				
		
		$query = "SELECT * FROM products"; 
		$ok=mysql_query&#40;$query,$link&#41;;
$how_rows=mysql_num_rows&#40;mysql_query&#40;$query&#41;&#41;;
$pages=$how_rows/$lines;

echo $how_rows; 
echo "<br>";
echo $pages;

		
			echo "<table border=1>";
			echo "<td> Όνομα αντικειμενου </td>";
			echo "<td> Περιγραφή 			</td>";
			echo "<td> Κωδικός 			   </td>";
			echo "<td> Τιμή 					</td>";
			echo "<td> </td>";
			echo "<tr>";

		
				while &#40;$row = mysql_fetch_assoc&#40;$ok&#41; &#41; 
					&#123;
						
				 echo "<td>";echo $row&#91;'pro_name'&#93;;echo "</td>";
				 echo "<td>";echo $row&#91;'pro_desc'&#93;;echo "</td>";
				 echo "<td>";echo $row&#91;'code'&#93;;echo "</td>";
				 echo "<td>";echo $row&#91;'price'&#93;;echo "</td>";
				 echo "<td> 	<form method='post' action='deletes.php'>	
						  			<input type='submit' value='Delete' class='button' />
						 			</form>
						</td>";
				 echo "<tr>";	
					&#125; 
	 				echo "</table>";
					
			&#125;
			
				echo '<hr />';

			?>  
:hammer: :hammer: :hammer:

Απάντηση

Επιστροφή στο “PHP τα δικά μας scripts”

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

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