Tutorials >
PHP >
Pagina navigatie in PHP en MySQL
|
Gepost op: 24 februari 2007 - 22:21 |
|
|
|
Nieuw lid
|
ik ben pas begonnen met php en het is nog wat acadabra voor mijn,
als ik dit script gebruik krijg ik netjes de pagina nummers in mijn adres balk,ik krijg op ieder pagina het zelfde te zien.
Hoe kan ik de pagina's uit mijn database oproepen en weergeven in de brouwser?
graag u hulp,ik kom er niet uit hoe het verder moet |
|
|
|
Gepost op: 02 maart 2007 - 20:09 |
|
|
|
Moderator
|
Dit is niet echt een navigatiesysteem voor een complete website, maar meer een navigatie-script voor het opdelen van query-resultaten uit de database (maar net iets anders als jij denkt, dus).
Bijvoorbeeld het opdelen van zoekresultaten over meerdere pagina's, of produkten. Je hebt bijvoorbeeld 100 zoekresultaten, en die wil je meestal niet op één pagina tonen. Dit script is met name bedoeld om dat soort resultaten te verdelen over meerdere pagina's.
Waar jij naar op zoek bent zal zoiets (Pagina Systeem van Rens) zijn, of deze (Pagina Include van Darrow).
Ik raad je ook aan het commentaar bij deze scripts te lezen. |
|
|
|
Gepost op: 04 maart 2007 - 20:42 |
|
|
|
Nieuw lid
|
Dat bedoel ik niet om een pagina op te roepen ,maar als je op een pagina bent,zoals je op veel pagina's ziet onderaan ziet
"vorige 1-2-3-4-5 volgende"
die de gegevens uit een database halen
Hier een voorbeeld van het script,maar ik krijg het niet voor elkaar om de gegeven van de database in beeld te krijgen.
misschien dat iemand dat mijn kan uitleggen
<html>
<head>
<title>New document</title>
</head>
<body>
<?php
function navigatie($currentpage,$totalpages,$url)
{
$output = '';
$output_num = '';
// both = 4 of meer
if (($currentpage - 4) > 0 && ($currentpage + 4) < $totalpages) {
for($a = ($currentpage-4);$a <= ($currentpage+4);$a++) {
if ($a == $currentpage) {
$output_num .= ' <b>[' . $a .']</b> ';
} else {
$output_num .= ' <a href="' . $url . $a . '">' . $a . '</a> ';
}
}
if (($currentpage - 4) == 1) {
$first = false;
} else {
$first = true;
}
if (($currentpage + 4) == $totalpages) {
$last = false;
} else {
$last = true;
}
// left = 4 of meer
} elseif (($currentpage - 4) > 0) {
$math = $totalpages - $currentpage;
$start_temp = 9 - $math;
$start = $currentpage - $start_temp;
if ($start < 1) {
$start = 1;
}
for($a = $start;$a <= $totalpages;$a++) {
if ($a == $currentpage) {
$output_num .= ' <b>[' . $a .']</b> ';
} else {
$output_num .= ' <a href="' . $url . $a . '">' . $a . '</a> ';
}
}
$last = false;
$first = true;
// right = 4 of meer
} elseif (($currentpage + 4) < $totalpages) {
if ($totalpages > 9) {
$loop = 9;
} else {
$loop = $totalpages;
}
for($a = 1;$a <= $loop;$a++) {
if ($a == $currentpage) {
$output_num .= ' <b>[' . $a .']</b> ';
} else {
$output_num .= ' <a href="' . $url . $a . '">' . $a . '</a> ';
}
}
$last = true;
$first = false;
// none = 4 of meer
} else {
for($a = 1;$a <= $totalpages;$a++) {
if ($a == $currentpage) {
$output_num .= ' <b>[' . $a .']</b> ';
} else {
$output_num .= ' <a href="' . $url . $a . '">' . $a . '</a> ';
}
}
$last = false;
$first = false;
}
if ($first == true) {
$output .= ' <b><a href="' . $url . '1">[eerste]</a></b> ';
}
if ($currentpage != 1) {
$output .= ' <b><a href="' . $url . ($currentpage-1) .' ">[vorige]</a></b> ';
}
$output .= " " . $output_num . " ";
if ($currentpage != $totalpages) {
$output .= ' <b><a href="' . $url . ($currentpage+1) . ' ">[volgende]</a></b> ';
}
if ($last == true) {
$output .= '<b><a href="' . $url . $totalpages . ' ">[laatste]</a></b> ';
}
return $output;
}
$itemsperpage = 30;
$totalrecords = 1000; // dit kan een aantal records zijn uit de database
$totalpages = ceil($totalrecords/$itemsperpage);
if (!IsSet($_GET['p'])) {
$currentpage = 1;
} else {
$currentpage = ceil($_GET['p']);
}
if ($currentpage < 1 || $currentpage > ceil($totalpages)) {
$output = 'Helaas, deze pagina bestaat niet.';
} else {
$output = navigatie($currentpage,$totalpages,'?p=');
$output .= '<br /><br />Pagina: ' . $currentpage;
}
?>
<html>
<head>
<title>Navigatie</title>
<style type="text/css">
* {
font-family : verdana, tahoma, sans-serif;
font-size : 12px;
}
body {
background-color : #fff;
margin : 10px;
padding : 0px;
}
</style>
</head>
<body>
<?php
echo $output;
?>
</body>
</html> |
|
|
|
Gepost op: 18 juni 2007 - 20:23 |
|
|
|
Lid
|
ik zit ook met het probleem om mijn paginas op de volgende manier te laten zien
vorige (1)-2-3-4-5-6 volgende
(1 is de pagina waar de persoon op is)
vorige 1-2-3-4-5-(6)-7-8-9-10-11 volgende
(6 is de pagina waar de persoon op is )
vorige 2-3-4-5-6-(7)-8-9-10-11-12 volgende
(7 is de pagina waar de persoon op is )
vorige7-8-9-10-11-(12) volgende
(12 is de pagina waar de persoon op is en 12 is de laatste pagina)
ik ben 4 uur bezig geweest om uit te zoeken hoe ik het zo kon krijgen en heb meer dan 10 verschillende nav scripts uit elkaar gehaald
ik heb onderhand de vorige en volgende links kunnen maken
maar de rest werkt nogsteeds niet
Code:
####################################################################
# config
####################################################################
$sort = 'ASC';
$table_config = array();
$table_config['columns'] = 2; // how many columns are there per page
$table_config['columns_with'] = 290; // with of columns
$table_config['table_width'] = 580; // what is the total with of the table
$table_config['column_hight'] = 50; // how high is each column
//$table_config['cellspacing'] = 4; // howmany spaces are there between the cells(defult is 3 for best results)
$table_config['max_items'] = 20; // what is the maximum amount of items per page
//$table_config['border'] = 0; // how big is the border
$table_config['max_text_length']= 70;
$table_config['max_links'] = 12;
######################################################################
#db conection
######################################################################
$connect = mysql_connect("localhost","sitemasters","be") or die("coud not connect to mysql server ");
mysql_select_db("twsweb-int_com", $connect) or die ("coud not conect to databace");
#######################################################################
# vanaf hier begint het navigatie script
#######################################################################
function querystring($nav_var) {
$qstring = "?"; // de querystring
if(sizeof($_GET) > 1 || !in_array($nav_var, array_keys($_GET))) {
// meer queryvariabelen te onthouden dan enkel $_GET[$nav_var]
foreach($_GET as $k => $v) {
if($k != $nav_var) {
$qstring .= $k."=".$v."&";
}
}
}
return $qstring;
}
if ($_GET['cat']=='') {$_GET['cat']= '1';}
else{
$SQL_1= mysql_query("SELECT * FROM tws_games_category WHERE category_id = '".$_GET['cat']."'") or die(mysql_error());
$result = mysql_fetch_array($SQL_1);
$games_category = $result['category_name'];
}
if ($games_category == 'all') {
$query = "SELECT COUNT(id) FROM tws_games WHERE 1=1 ".$where."";
} else {
$query = "SELECT COUNT(id) FROM tws_games WHERE `cat` = '".$games_category."' ".$where."";
}
$res1 = mysql_query($query)or die("res1:".mysql_error());
$total_items = mysql_result($res1, 0);
$number_of_pages = ceil($total_items/$table_config['max_items']);
if (isset($_GET['pg']) && is_numeric($_GET['pg']) && $_GET['pg'] > 1 && $_GET['pg'] < $number_of_pages) {
$present_page = $_GET['pg'];
}else{
$present_page = 1;
}
$gamesperpage = $table_config['max_items'];
$limitstart = ($present_page-1) * $gamesperpage;
$limitnum = $gamesperpage;
$q = $_SERVER['PHP_SELF'].querystring("pg");
if ($present_page > 1) {
$i = 1;
echo "<a href=\"".$q."pg=".$i."\"><<<</a> ";
}else {
echo"<b><<<</b> ";
}
if ($present_page > 1) {
$i = $present_page - 1;
echo " <a href=\"".$q."pg=".$i."\">< previous</a> ";
}else{
echo" <b>< previous</b> ";
}
$i = 1;
for ($i = 1; $i <$number_of_pages; $i++){
if ($present_page == $i) {
echo"<b>".$i."</b>";
}else{
echo "<a href=\"".$q."pg=".$i."\">".$i."</a>";
}
if ($i < $number_of_pages -1) {
echo " | ";
}
}if ($present_page < ($number_of_pages-1)) {
$i = $present_page + 1;
echo " <a href=\"".$q."pg=".$i."\"> Next ></a>";
}else{
echo"<b> Next ></b>";
}
if ($present_page < ($number_of_pages-1)) {
$i = $number_of_pages -1;
echo " <a href=\"".$q."pg=".$i."\">>>></a>";
}else{
echo" <b>>>></b>";
}
hoop dat iemand mij hier mee kan helpen |
|
|
|
Gepost op: 22 augustus 2007 - 12:12 |
|
|
|
HTML interesse
|
Ik zie alleen een 1 staan verder niks |
|
|
|
Gepost op: 22 augustus 2007 - 12:56 |
|
|
|
Moderator
|
Dat kan . |
|
|
|
Gepost op: 23 augustus 2007 - 09:01 |
|
|
|
HTML interesse
|
Maar in de database zit wel meer dan 3 records dus wat doe ik fout
<?php
require("db.php"); // maak verbinding met de database
$res1 = mysql_query("SELECT COUNT(id) FROM users") or die("res1: ".mysql_error()); // vraag het AANTAL items op
$items_totaal = mysql_result($res1, 0); // het totaal aantal items
mysql_free_result($res1); // geef het resultaat vrij
$items_per_pagina = 5; // vrij te kiezen
$aantal_paginas = ceil($items_totaal / $items_per_pagina); // het aantal items per pagina
// de huidige pagina opvragen
$huidige_pagina = 0; // default
if(isset($_GET['p']) && is_numeric($_GET['p']) && $_GET['p'] > 0 && $_GET['p'] < $aantal_paginas) {
$huidige_pagina = $_GET['p'];
}
// items van de huidige pagina ophalen
$offset = $huidige_pagina * $items_per_pagina;
$res2 = mysql_query("SELECT * FROM nieuws ORDER BY id DESC LIMIT ".$offset.","
.$items_per_pagina) or die("res2:". mysql_error());
/*
doe hier iets met de gegevens in $res2
...
*/
// resultaten vrijgeven
mysql_free_result($res2);
// navigatie
for($i = 0; $i < $aantal_paginas; $i++) {
if($huidige_pagina == $i) {
// huidige pagina is niet klikbaar
echo "<b>".($i+1)."</b>";
} else {
// een andere pagina dan de huidige is wel klikbaar
echo "<a href=\"".$_SERVER['PHP_SELF']."?p=".$i."\">".($i+1)."</a>";
}
// deel-streepje tussen alle items
if($i < $aantal_paginas - 1) {
echo " - ";
}
}
?>
<?php require("db.php"); // maak verbinding met de database $items_totaal = mysql_result($res1, 0); // het totaal aantal items $items_per_pagina = 5; // vrij te kiezen $aantal_paginas = ceil($items_totaal / $items_per_pagina); // het aantal items per pagina // de huidige pagina opvragen $huidige_pagina = 0; // default if(isset($_GET['p']) && is_numeric($_GET['p']) && $_GET['p'] > 0 && $_GET['p'] < $aantal_paginas) { $huidige_pagina = $_GET['p']; } // items van de huidige pagina ophalen $offset = $huidige_pagina * $items_per_pagina; $res2 = mysql_query("SELECT * FROM nieuws ORDER BY id DESC LIMIT ".$offset."," /* doe hier iets met de gegevens in $res2 ... */ // resultaten vrijgeven // navigatie for($i = 0; $i < $aantal_paginas; $i++) { if($huidige_pagina == $i) { // huidige pagina is niet klikbaar echo "<b>".($i+1)."</b>"; } else { // een andere pagina dan de huidige is wel klikbaar echo "<a href=\"".$_SERVER['PHP_SELF']."?p=".$i."\">".($i+1)."</a>"; } // deel-streepje tussen alle items if($i < $aantal_paginas - 1) { } } ?>
en de db.php (die is toch bijna bij iedereen gelijk )
<?php
$host = "localhost"; // je hostname, meestal localhost
$user = "root"; // je username
$pass = ""; // je wachtwoord
$dbas = "users"; // je database-naam
// connect naar database
if(mysql_connect($host, $user, $pass)) {
// selecteer database
mysql_select_db($dbas) or die(mysql_error());
} else {
// connecten naar database is mislukt
echo "Failed to connect to database.";
exit;
}
?>
<?php $host = "localhost"; // je hostname, meestal localhost $user = "root"; // je username $pass = ""; // je wachtwoord $dbas = "users"; // je database-naam // connect naar database // selecteer database } else { // connecten naar database is mislukt echo "Failed to connect to database."; } ?>
|
|
|
|
Gepost op: 23 augustus 2007 - 11:31 |
|
|
|
Moderator
|
Ik vermoed dat je 5 of minder records hebt?
Dan wordt alleen <b>1</b> afgedrukt.
Anders geeft $items_per_pagina een kleinere waarde (minder dan het aantal records dat in je database zit), dan zou je pagina-navigatie er wat uitgebreider uit moeten zien.
Overigens heeft het niet zoveel zin om de pagina-navigatie af te drukken als je minder items hebt dan $items_per_pagina, want deze worden dan al alle afgedrukt. |
|
|
|
Gepost op: 23 augustus 2007 - 19:29 |
|
|
|
HTML interesse
|
Daar had je gelijk in. Nu zie ik alleen een 1 - 2 (als link en verder niks) |
|
|
|
Gepost op: 18 september 2007 - 18:52 |
|
|
|
PHP ver gevorderde
|
Dan heb je dus meer dan 5 en minder of precies 10 records.
Over de tut: Is ctype_digit niet beter in dit geval ipv is_numeric?
|
|
|
|
Gepost op: 01 april 2008 - 01:41 |
|
|
|
Nieuw lid
|
Goede avond/middag,
Ik heb een kleine vraag over de functie gedeelte in dit script:
Wat moet ik allemaal invullen om de variable die ik van mijn eerste pagina heb door te sturen naar de volgende pagina.
Ik heb het dus zo:
test.php daar tik ik een variable in en stuur hem door naar mijn "act" pagina.
Ik krijg door de script wel de eerste pagina te zien met de informatie maar zo gauw ik naar de 2de pagina wilt gaan van de tabel kan hij geen informatie weergeven uit de tabel.
Ik heb wel begrepen dat het "functie" gedeelte daar oplossing voor moet geven maar ik kan het helaas niet ontcijferen
Met vriendelijk groet,
EggKnobble |
|
|
|
Gepost op: 02 april 2008 - 10:24 |
|
|
|
Moderator
|
Als je informatie over meerdere pagina's wilt onthouden, kun je dit alleen doen via sessies, cookies, een formulier of via de URL (pagina.php?var1=waarde1&var2=waarde2 etc.).
Een functie "kent" alleen variabelen tijdens het gebruik van de functie. Als een functie is afgerond, worden de bijbehorende variabelen vrijgegeven.
Een script werkt hetzelfde: Als een script is afgerond (je pagina is geladen), worden alle variabelen / al het geheugen wat is gebruikt, vrijgegeven.
Daarnaast is HTTP "stateless", oftewel HTTP onthoudt van zichzelf helemaal niets van pagina A als je naar pagina B navigeert, tenzij je dus expliciet informatie doorstuurt via formulier, URL, cookie of sessie. |
|
|
|
Gepost op: 20 mei 2008 - 17:22 |
|
|
|
PHP interesse
|
Er is een klein foutje: $items_per_pagina staat achter de komma van limit 0 , 5 (bijv)
Dit klopt alleen als de pagina 0 is, anders als de pagina 1 is, wordt het limit 5 , 5
Dat klopt niet.
Moet dus dit worden:
$res2 = mysql_query("SELECT * FROM tabel ORDER BY id DESC LIMIT ".
$offset.",".(($_GET['p'] + 1 ) * $items_per_pagina)
$res2 = mysql_query("SELECT * FROM tabel ORDER BY id DESC LIMIT ". $offset.",".(($_GET['p'] + 1 ) * $items_per_pagina)
|
|
|
|
Gepost op: 30 mei 2008 - 17:18 |
|
|
|
Moderator
|
LIMIT 0,5
wil zeggen vanaf item 0, 5 artikelen (dus 0 t/m 4)
LIMIT 5,5
wil zeggen vanaf item 5, 5 artikelen (dus 5 t/m 9)
Bij mijn weten klopt dit wel. Heb je dit getest? |
|
|
|
Gepost op: 13 augustus 2008 - 20:15 |
|
|
|
Nieuw lid
|
$query = "SELECT prijs FROM orders";
$LinkID = mysql_connect("$hostname", "$username", "$password") or die("MySQL Connectie mislukt");
mysql_select_db("$dbname") or die("verkeerde database"); $result = mysql_query($query)or die(mysql_error());
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$vk = 7.99;
$totaal = $row['prijs'] * $vk;
}
echo $prijs;
echo $totaal;
gekke is dat de $prijs wordt well weer geveven, maar als ik het met $vak vermenigvuldig dat $totaal = 0;
helppppppppppppppppp
|
|
|
|
Gepost op: 05 september 2008 - 00:13 |
|
|
|
Moderator
|
Waarschijnlijk bevat het laatste query-resultaat een prijs die gelijk aan 0 is? Je onthoudt namelijk niet wat $totaal in totaal is.
Ik zou eerlijk gezegd zoiets verwachten:
// initialiseer
$totaal = 0;
$vk = 7.99;
while ($row = mysql_fetch_whatever($res)) {
$totaal = $totaal + $row['prijs'] * $vk;
}
// initialiseer $totaal = 0; $vk = 7.99; while ($row = mysql_fetch_whatever($res)) { $totaal = $totaal + $row['prijs'] * $vk; }
of iets dergelijks.
En blijkbaar kan het geen kwaad om $row['prijs'] ff te debuggen... |
|
|
|
Gepost op: 16 oktober 2008 - 09:05 |
|
|
|
Crew Ajax/REST
|
Om eerlijk te zijn ben ik het eens met FangorN wat je var $totaal betreft. |
|
|
|
Gepost op: 29 mei 2009 - 20:03 |
|
|
|
MySQL beginner
|
Hoe kan je dit script het beste aanpassen om maar de eerste 5 en de 5 na de huidige pagina weer te geven? |
|
|
|
Gepost op: 23 november 2009 - 21:11 |
|
|
|
Lid
|
De paginanummering wordt nu allen boven in beeld weergegeven. Hoe krijg ik dit ook onder in beeld? |
|
|
Enkel aanvullende informatie is welkom. Geen prijzende of afkeurende reacties. |
|
|
|