login  Naam:   Wachtwoord: 
Registreer je!
 Nota's op tutorial:

Tutorials > PHP > Pagina navigatie in PHP en MySQL
Pagina:

Reacties op de tutorial Pagina navigatie in PHP en MySQL


Offline  dwalende
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

Offline  Thomas
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.

Offline  dwalende
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 .= " &nbsp;&nbsp; " . $output_num . "&nbsp;&nbsp;";
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>

Offline  taftse
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."&amp;";
}
}
}
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

Offline  JPW120
Gepost op: 22 augustus 2007 - 12:12
HTML interesse

Ik zie alleen een 1 staan verder niks

Offline  Thomas
Gepost op: 22 augustus 2007 - 12:56
Moderator

Dat kan .

Offline  JPW120
Gepost op: 23 augustus 2007 - 09:01
HTML interesse

 Maar in de database zit wel meer dan 3 records dus wat doe ik fout
  1. <?php
  2. require("db.php"); // maak verbinding met de database
  3. $res1 = mysql_query("SELECT COUNT(id) FROM users") or die("res1: ".mysql_error()); // vraag het AANTAL items op
  4. $items_totaal = mysql_result($res1, 0); // het totaal aantal items
  5. mysql_free_result($res1); // geef het resultaat vrij
  6.  
  7. $items_per_pagina = 5; // vrij te kiezen
  8. $aantal_paginas = ceil($items_totaal / $items_per_pagina); // het aantal items per pagina
  9.  
  10. // de huidige pagina opvragen
  11. $huidige_pagina = 0; // default
  12. if(isset($_GET['p']) && is_numeric($_GET['p']) && $_GET['p'] > 0 && $_GET['p'] < $aantal_paginas) {
  13. $huidige_pagina = $_GET['p'];
  14. }
  15.  
  16. // items van de huidige pagina ophalen
  17. $offset = $huidige_pagina * $items_per_pagina;
  18. $res2 = mysql_query("SELECT * FROM nieuws ORDER BY id DESC LIMIT ".$offset.","
  19. .$items_per_pagina) or die("res2:". mysql_error());
  20.  
  21. /*
  22. doe hier iets met de gegevens in $res2
  23. ...
  24. */
  25.  
  26. // resultaten vrijgeven
  27.  
  28.  
  29. // navigatie
  30. for($i = 0; $i < $aantal_paginas; $i++) {
  31. if($huidige_pagina == $i) {
  32. // huidige pagina is niet klikbaar
  33. echo "<b>".($i+1)."</b>";
  34. } else {
  35. // een andere pagina dan de huidige is wel klikbaar
  36. echo "<a href=\"".$_SERVER['PHP_SELF']."?p=".$i."\">".($i+1)."</a>";
  37. }
  38. // deel-streepje tussen alle items
  39. if($i < $aantal_paginas - 1) {
  40. echo " - ";
  41. }
  42. }
  43. ?>

en de db.php (die is toch bijna bij iedereen gelijk   )
  1. <?php
  2. $host = "localhost"; // je hostname, meestal localhost
  3. $user = "root"; // je username
  4. $pass = ""; // je wachtwoord
  5. $dbas = "users"; // je database-naam
  6.  
  7. // connect naar database
  8. if(mysql_connect($host, $user, $pass)) {
  9. // selecteer database
  10. } else {
  11. // connecten naar database is mislukt
  12. echo "Failed to connect to database.";
  13. }
  14. ?>

Offline  Thomas
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.

Offline  JPW120
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)

Offline  ikki007
Gepost op: 18 september 2007 - 18:52
Gouden medailleGouden medaille

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?

Offline  Eggknobble
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

Offline  Thomas
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.

Offline  TotempaaltJ
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:
  1. $res2 = mysql_query("SELECT * FROM tabel ORDER BY id DESC LIMIT ".
  2. $offset.",".(($_GET['p'] + 1 ) * $items_per_pagina)

Offline  Thomas
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?

Offline  OB82
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


Offline  Thomas
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:
  1. // initialiseer
  2. $totaal = 0;
  3. $vk = 7.99;
  4. while ($row = mysql_fetch_whatever($res)) {
  5. $totaal = $totaal + $row['prijs'] * $vk;
  6. }
of iets dergelijks.

En blijkbaar kan het geen kwaad om $row['prijs'] ff te debuggen... 

Offline  Kevin
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.

Offline  thomasje
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?

Offline  Gezienus
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? 

Pagina:

Enkel aanvullende informatie is welkom. Geen prijzende of afkeurende reacties.
 
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.328s