Scripts

Automatische Paginanummering

Dit script kan automatisch rows uit een database in verschillende pagina's zetten. Denk bijvoorbeeld aan een ledenlijst, een gastenboek of een fotoalbum. Het geeft nu heel simpel wat informatie weer over het aantal rows, hoeveel rows per pagina en daarna hoeveel pagina's hij dan aanmaakt. Daarna 2varianten van paginaverdeling en als laatste een voorbeeld om alles echo'en. Ik heb nu wat gastenboek-entrys gebruikt maar je kan natuurlijk honderden toepassingen bedenken. In die laatste while kan je alles laten doen met wat hij uit de database haalt. Verder kan je het ook een beetje verbouwen zodat hij het niet ui een database haalt, maar bijvoorbeeld bestanden telt in een map of uit een txt de informatie haalt. Je kan zelf met een dropdown-menutje instellen hoeveel rows per pagina je wil zien, dit vind je terug in de array in de code. Deze waardes kan je natuurlijk veranderen/aanvullen. Succes ermee! --edit op 14/08/06 om 12:18am-- Een paar kleine schoonheidsfoutjes eruit gehaald, update met functies volgt nog een keer! --edit op 17/08/06 om 5:18pm-- Hele nieuwe versie geschreven, met functies en een betere opbouw/layout. Ook heb ik mijn MySQL table toegevoegd, wel zo handig om wat linken te kunnen leggen!

automatische-paginanummering
[code]
<?php
//connect
    mysql_connect("***","***","***");
    mysql_select_db("***");
//Retrieve and create the $each and $each_array vars
    if(isset($_GET['each'])&&is_numeric($_GET['each'])) $each = $_GET['each'];
    else $each = 10;
    $each_options = array("5", "10", "15", "20");
//Create the $counter var
    $query = mysql_query("select count(*) as num from test");
    $counter = mysql_result($query, 0, "num");
//Create the $pages var
    $pages = $counter / $each;
    $pages = ceil($pages);
//Check on witch page you are now
    if(isset($_GET['pag'])&&$_GET['pag'] <= $pages&&$_GET['pag']>0&&is_numeric($_GET['pag'])) $pag = $_GET['pag'];
    else $pag = 1;
//Get the results from the database
    $first_result = $pag * $each - $each;
    $query = mysql_query("select * from test limit ".$first_result.", ".$each);

function render_each_dropdown($each_options,$each)
{
    echo '<form action="index.php">';
    echo '<select name="each" onchange="this.form.submit();">'."\n";
    foreach($each_options as $item)
    {
        echo '<option value="'.$item.'"';
        if($item==$each) echo ' selected';
        echo '>'.$item.'</option>'."\n";
    }
    echo '</select></form>';
}
function render_arrow($kind,$pag,$pages,$each)
{
    $pag_back = $pag-1;
    $pag_next = $pag+1;
    if($kind == "back")
    {
        echo '<a ';
        if($pag > 1) echo 'href="index.php?pag='.$pag_back.'&each='.$each.'"';
        echo '><<</a>';
    }
    if($kind == "forward")
    {
        echo '<a ';
        if($pag < $pages) echo 'href="index.php?pag='.$pag_next.'&each='.$each.'"';
        echo '>>></a>';    
    }
}
function render_pagenumbers($pag,$pages,$each)
{
    $i = 1;
    while($i<=$pages)
    {
        echo '<a ';
        if($i!=$pag) echo 'href="index.php?pag='.$i.'&each='.$each.'"';
        echo '>'.$i.'</a>&nbsp;&nbsp;';
        $i++;
    }
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    <title>Pages test</title>
    <style type="text/css" media="all">
    <!--
    #Comment        {    float: left;
                        margin: 5px 50px 0px 0px;
                        padding: 2px 0px;
                        background-color: #C3C3C3;
                        width: 100%;    }

    #Comment .date    {    color: #CCFFCC;
                        font-size: 11px;    }
    -->
    </style>    
</head>
<body>
<?php
//Echo the information about the table and settings
    echo 'aantal rows: '.$counter."<br />\n";
    echo 'Aantal rows per pagina: '.$each."<br />\n";
    echo 'Aantal pagina\'s: '.$pages."<br />\n";
    echo "<br />\n";
        render_each_dropdown($each_options,$each);
        render_arrow(back,$pag,$pages,$each);
    echo $pag;
        render_arrow(forward,$pag,$pages,$each);
    echo "<br />\n";
        render_pagenumbers($pag,$pages,$each);
//echo the rows
    while($r=mysql_fetch_array($query))
    {    
        $id=$r["id"];
        $name=$r["name"];
        $text=$r["text"];
        $date=$r["date"];
        $time=$r["time"];   
        echo '<div id="Comment"><b>'.$name.'</b><br>'.$text.'<br><span class="date">'.$date.' | '.$time.' (<a href="index.php?edit='.$id.'">'.$id.'</a>)</span></div><br>';
    }
?>
</body>
</html>[/code]

Dan heb ik dit zelf als MySQL table gebruikt:
[code]
CREATE TABLE `test` (
  `id` int(11) NOT NULL auto_increment,
  `name` text collate utf8_bin NOT NULL,
  `text` text collate utf8_bin NOT NULL,
  `date` text collate utf8_bin NOT NULL,
  `time` text collate utf8_bin NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `id_2` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=75 ;[/code]
Toelichting:
id :: de ID van de row, vult hij automatisch in
name :: de naam van de poster (zelf op te geven in een form oid)
text :: de input vanuit een textarea, bedoeld als gastenboek reactie
date/time :: deze heb ik gebruikt om timestamps toe te voegen binnen mijn gastenboek

Deze table is verre van efficient en goed ingericht, ik weet het. Het was een van mijn eerste SQL projectjes, een simpel gastenboek waar je simpel op kon reageren en kon deleten. Ik heb deze tabel opnieuw gebruikt, hier had ik nog een entry of 60 instaan.

Reacties

0
Nog geen reacties.