Volledige versie bekijken : Pagina's teamlijst



swaxmot
10 March 2008, 22:34
Yo,
Ik heb 2 teams op mijn spel: Derberan en NIU.
Nu heb ik een pagina gemaakt waar je alle leden van de teams kan zien, maar ik zou er iets willen inbouwen dat de leden per 30 gegroepeerd staan in verschillende pagina\'s en gesorteerd staan op naam.
Hoe doe ik zoiets?
Hier is zoals ik het nu heb:



<?php
$BesturingBestand = \"besturing.php\";
$OnderBestand = \"onder.php\";
// -------------------------------------------------
if(!file_exists($BesturingBestand)) { die(\"$BesturingBestand kan niet geopend worden!<br><br><i>Webmaster: verander dit bovenin $PHP_SELF.</i>\"); }
if(!file_exists($OnderBestand)) { die(\"$OnderBestand kan niet geopend worden!<br><br><i>Webmaster: verander dit bovenin $PHP_SELF.</i>\"); }
include($BesturingBestand);
?>
<link rel=\"stylesheet\" type=\"text/css\" href=\"../css.css\">
<h3>Teams</h3>
<br>
<?php
if(!$login) {
echo(\"Je moet ingelogd zijn om hier te komen!\");
include($OnderBestand);
exit;
}
?>

<?php
$team = $_GET[\'team\'];
if($team == \"NIU\") {
$team1 = mysql_query(\"SELECT * FROM `Leden` WHERE `Team`=\'NIU\' ORDER BY Gebruikersnaam DESC Limit 10000\");
echo \"<b>NIU</b><br><br><table width=100%><tr><td width=150><b>Gebruikersnaam</b></td><td width=150><b>Job</b></td><td><b>Aanvallen</b></td></tr>\";
while($team2 = mysql_fetch_object($team1)){
echo \"<table width=100%><tr><td width=150><a href=profiel.php?id=$team2->ID>$team2->Gebruikersnaam</a></td><td width=150>$team2->Job</td><td><a href=aanvallen.php?user=$team2->Gebruikersnaam>Aanvallen</a></tr>\";
{
echo \" </table>\";
}}}
else if($team == \"Derberan\") {
$team3 = mysql_query(\"SELECT * FROM `Leden` WHERE `Team`=\'Derberan\' ORDER BY Gebruikersnaam DESC Limit 10000\");
echo \"<b>Derberan</b><br><br><table width=100%><tr><td width=150><b>Gebruikersnaam</b></td><td width=150><b>Job</b><td><b>Aanvallen</b></td></tr>\";
while($team4 = mysql_fetch_object($team3)){
echo \"<table width=100%><tr><td width=150><a href=profiel.php?id=$team4->ID>$team4->Gebruikersnaam</a></td><td width=150>$team4->Job</td><td><a href=aanvallen.php?user=$team4->Gebruikersnaam>Aanvallen</a></tr>\";
{
echo \" </table>\";
}}}
else {
echo \"Er zijn 2 teams in Lords Of War: Derberan en NIU.<br><br>
<a href=\'teams.php?team=NIU\'>Klik hier om de leden van de <b>NIU</b> te bekijken.</a><br>
<a href=\'teams.php?team=Derberan\'>Klik hier om de leden van <b>Derberan</b> te bekijken.</a>\";}
?>

<?php
include($OnderBestand);
?>

Jelle
12 March 2008, 11:14
Er staan wat te veel backslashes in je code :)

Ik zal een eenvoudig voorbeeld geven van een paginering met volgende/vorige:

Allereerst haal je het paginanummer uit de URL, bv. $_GET['page']. Ik haal die door intval om hem op te kuisen en als er geen is, worddt het automatisch 0. Ook zet ik een $perpage variabele die het aantal items per pagina controleert.
Vervolgens berekenen we van welk item we willen starten ($start) en zetten we dit samen met het aantal items ($perpage) in de query.

En zo komen we tot:

$perpage = 30;
$page = intval($_GET['page']);

if ($page == 0)
{
$page = 1;
}

$start = $perpage * ($page - 1);

echo '<table width="100%"><tr><th>Gebruikersnaam</th><th>Job</th><th>Aanvallen</th></tr>';
$team1 = mysql_query("SELECT * FROM `Leden` WHERE `Team`= 'NIU' ORDER BY Gebruikersnaam DESC LIMIT $start, $perpage");
while($team2 = mysql_fetch_object($team1))
{
echo '<tr><td width="150"><a href="profiel.php?id=' . $team2->ID . '">' . $team2->Gebruikersnaam . '</a></td><td width="150">' . $team2->Job . '</td><td><a href="aanvallen.php?user=' . $team2->Gebruikersnaam . '">Aanvallen</a></td></tr>';
}
echo '</table>';

if ($page > 1)
{
$prev = $page - 1;
echo '<a href="' . $_SERVER["PHP_SELF"] . '?page=' . $prev . '">Vorige</a>&nbsp;';
}
$next = $page + 1;
echo '<a href="' . $_SERVER["PHP_SELF"] . '?page=' . $next . '">Volgende</a>';

Ik heb ineens ook je vreemde tabelstructuur gefixt. Je maakt twee tabellen, terwijl alles perfect in één kan.

Zoals je ziet is dit maar basic: je kan het nog uitbreiden met een extra COUNT query om het aantal totale items te weten en zo een betere paginering weer te kunnen geven. Nu zal de "volgende" immers altijd blijven doorgaan.

swaxmot
12 March 2008, 14:25
Bedankt al hiervoor, het is gelukt.
Maar hoe kan ik er ook iets bijzetten zodat als er maar 1 pagina is hij de volgende en vorige knoppen niet laat zien?
En alle pagina's genummerd op een rij tussen de volgende en vorige knoppen, zodat als je bijvoorbeeld 1000 leden hebt en je zet $perpage op 25, je niet 40 keer op volgende moet klikken maar direct naar pagina bijvoorbeeld 30 kan jumpen?

Jelle
12 March 2008, 17:02
Dan heb je die extra query dus nodig die het totaal aantal leden ophaalt zodat je ook het totale aantal pagina's kan berekenen.

Dit zou moeten werken:

$perpage = 30;

$gettotal = mysql_query("SELECT COUNT(*) FROM `Leden` WHERE `Team`= 'NIU' ");
list($totalcount) = mysql_fetch_row($gettotal);
$totalpages = ceil($totalcount / $perpage);

$page = intval($_GET['page']);

if ($page == 0)
{
$page = 1;
}

$start = $perpage * ($page - 1);

echo '<table width="100%"><tr><th>Gebruikersnaam</th><th>Job</th><th>Aanvallen</th></tr>';
$team1 = mysql_query("SELECT * FROM `Leden` WHERE `Team`= 'NIU' ORDER BY `Gebruikersnaam` DESC LIMIT $start, $perpage");
while($team2 = mysql_fetch_object($team1))
{
echo '<tr><td width="150"><a href="profiel.php?id=' . $team2->ID . '">' . $team2->Gebruikersnaam . '</a></td><td width="150">' . $team2->Job . '</td><td><a href="aanvallen.php?user=' . $team2->Gebruikersnaam . '">Aanvallen</a></td></tr>';
}
echo '</table>';

echo '<div align="center">';
if ($page > 1)
{
$prev = $page - 1;
echo '<a href="' . $_SERVER["PHP_SELF"] . '?page=' . $prev . '">Vorige</a>&nbsp;';
}

for ($i = 1; $i <= $totalpages; $i++)
{
$txt = $i;
if ($page != $i)
{
$txt = '<a href="' . $_SERVER["PHP_SELF"] . '?page=' . $i . '">' . $txt . '</a>';
}

echo $txt . '&nbsp;';
}

if ($page != $totalpages)
{
$next = $page + 1;
echo '<a href="' . $_SERVER["PHP_SELF"] . '?page=' . $next . '">Volgende</a>';
}
echo '</div>';

swaxmot
12 March 2008, 17:14
Bedankt, het is mij gelukt :D.
Alleen stond er een klein foutje in:

list($totalcount) = mysql_fetch_row($gettotal))
$totalpages = ceil($totalcount / $perpage);
Heb het verandert in

list($totalcount) = mysql_fetch_row($gettotal);
$totalpages = ceil($totalcount / $perpage);
en nu werkt het perfect :D.
Ik heb net op een ander forum gehoord dat ipv mysql_fetch_object mysql_fetch_assoc sneller werkt, maar hij wilt mij niet uitleggen hoe je dit moet doen.
Heeft hij gelijk?
En nog iets vergeten te vragen.
Hoe kan je ze ordenen op naam?

Jelle
13 March 2008, 01:19
Bedankt, het is mij gelukt :D.
Alleen stond er een klein foutje in:

list($totalcount) = mysql_fetch_row($gettotal))
$totalpages = ceil($totalcount / $perpage);
Heb het verandert in

list($totalcount) = mysql_fetch_row($gettotal);
$totalpages = ceil($totalcount / $perpage);
en nu werkt het perfect :D.

Aangepast, typfoutje ;)


Ik heb net op een ander forum gehoord dat ipv mysql_fetch_object mysql_fetch_assoc sneller werkt, maar hij wilt mij niet uitleggen hoe je dit moet doen.
Heeft hij gelijk?

Mysql_fetch_object is verouderd en inderdaad trager dan het modernere mysql_fetch_assoc dat meestal wordt gebruikt. Daarom dat ik in je vorige topic ook verward was door die objecten, zo'n methode is wat exotisch.

Je moet gewoon mysql_fetch_object veranderen naar mysql_fetch_assoc en je gebruikt bv. $team2['ID'] i.p.v. $team2->ID.

Op http://www.php.net/mysql_fetch_assoc vind je er alle informatie over en voorbeelden.


En nog iets vergeten te vragen.
Hoe kan je ze ordenen op naam?

Normaal gezien doet "ORDER BY `Gebruikersnaam` DESC" dat al. Je kiest een veld en ASC of DESC.

swaxmot
13 March 2008, 20:00
Hij sorteert ze wel, maar in omgekeerde volgorde.
Nu staat het er zo:
shootyouIngenieurVal aanJeroentjaIngenieurVal aanDrComedyIngenieurVal aanDarkDragonIngenieurVal aan
En assoc is gelukt, alweer bedankt ;).

Jelle
14 March 2008, 10:26
Hij sorteert ze wel, maar in omgekeerde volgorde.

In je SQL staat dan ook DESC (descending) en niet ASC (ascending). Die controleert de volgorde van sorteren.