PHP gevorderde |
|
Ik heb jouw script aangepast zodat deze een paginanummering heeft, en tevens diverse verbeterpunten aangepast.
Bestudeer het eens goed, en zie dat het eigenlijk vrij simpel is.
<?php
//verbeterpunten:
//<? vervangen door <?php, alleen <? levert op sommige servers problemen op, en zou dus problemen opleveren bij een evt. verhuizing.
//<tr></tr> toegevoegd aan de eerste tabel
//de query's netter/duidelijker opgeschreven
//de query's en de resultset in een aparte variabele gezet, dit maakt eventueel debuggen gemakkelijker.
//de enkele quotes rond de variabelen in de query weggehaald, bij numerieke waardes is dit niet nodig.
//de mogelijkheid tot mysql injection (hacken) weggenomen door de informatie uit de url te neutraliseren.
//het in een variabele zetten van de username verkort met een simpele functie.
//aanpassingen:
//de query aanpassen zodat er max. 50 resultaten per keer worden opgehaald.
//de query aanpassen zodat aan de hand van het huidige paginanummer, de juiste 50 records opgehaald worden.
//tellen hoeveel resultaten er in totaal zijn en a.d.h.v. dat aantal het aantal pagina's bepalen.
//onderaan de pagina een rij met paginanummers toegevoegd met een for loop.
require_once('db.php');
?>
<link href="inculde/style.css" rel="stylesheet" type="text/css">
<table width="74%" border="0">
<tr>
<td width="6%">Status</td>
<td width="38%">Title</td>
<td width="13%">Spotter</td>
<td width="13%">Datum</td>
<td width="30%">Categorie</td>
</tr>
</table>
<?php
$aantalperpagina = 50;
if ($_GET['pagina'] != '' && ctype_digit($_GET['pagina']))
{
$start = ($_GET['pagina']-1) * $aantalperpagina;
}
else
{
$start = 0;
}
$query = "SELECT
*
FROM
info
WHERE
cat=".mysql_real_escape_string($_GET['cat'])."
LIMIT ".$start.",".$aantalperpagina."";
$result = mysql_query($query) or die(mysql_error());
while($info = mysql_fetch_assoc($result))
{
$query = "SELECT
user_name
FROM
fusion_users
WHERE
user_id = ".$info['poster'];
$result = mysql_query($query) or die(mysql_error());
$username = mysql_result($result,0,'user_name');
?>
<table width="74%" border="0">
<tr>
<td width="6%"><img src="http://usenet2go.org/site/images/status/<?=$info['status']?>.gif"></td>
<td width="38%"><?=$info['title']?></td>
<td width="13%"><? echo $username ?></td>
<td width="13%"><?=$info['datum']?></td>
<td width="30%"><img src="http://usenet2go.org/site/images/cat/<?=$info['cat']?>.gif"></td>
</tr>
</table>
<?php
}
$query = "SELECT
COUNT(*) AS aantal
FROM
info
WHERE
cat=".mysql_real_escape_string($_GET['cat']);
$result = mysql_query($query) or die(mysql_error());
$totaalaantal = mysql_result($result,0,'user_name');
$aantalpaginas = ceil($totaalaantal / $aantalperpagina);
for ($i=1; $i<=$aantalpaginas; $i++)
{
if ($_GET['pagina'] == $i)
{
echo '<b><a href="pagina.php?pagina='.$i'">'.$i.'</a></b>';
}
else
{
echo '<a href="pagina.php?pagina='.$i'">'.$i.'</a>';
}
echo ' ';
}
?>
<?php //verbeterpunten: //<? vervangen door <?php, alleen <? levert op sommige servers problemen op, en zou dus problemen opleveren bij een evt. verhuizing. //<tr></tr> toegevoegd aan de eerste tabel //de query's netter/duidelijker opgeschreven //de query's en de resultset in een aparte variabele gezet, dit maakt eventueel debuggen gemakkelijker. //de enkele quotes rond de variabelen in de query weggehaald, bij numerieke waardes is dit niet nodig. //de mogelijkheid tot mysql injection (hacken) weggenomen door de informatie uit de url te neutraliseren. //het in een variabele zetten van de username verkort met een simpele functie. //aanpassingen: //de query aanpassen zodat er max. 50 resultaten per keer worden opgehaald. //de query aanpassen zodat aan de hand van het huidige paginanummer, de juiste 50 records opgehaald worden. //tellen hoeveel resultaten er in totaal zijn en a.d.h.v. dat aantal het aantal pagina's bepalen. //onderaan de pagina een rij met paginanummers toegevoegd met een for loop. require_once('db.php'); ?> <link href="inculde/style.css" rel="stylesheet" type="text/css"> <table width="74%" border="0"> <tr> <td width="6%">Status</td> <td width="38%">Title</td> <td width="13%">Spotter</td> <td width="13%">Datum</td> <td width="30%">Categorie</td> </tr> </table> <?php $aantalperpagina = 50; if ($_GET['pagina'] != '' && ctype_digit($_GET['pagina'])) { $start = ($_GET['pagina']-1) * $aantalperpagina; } else { $start = 0; } $query = "SELECT * FROM info WHERE LIMIT ".$start.",".$aantalperpagina.""; { $query = "SELECT user_name FROM fusion_users WHERE user_id = ".$info['poster']; ?> <table width="74%" border="0"> <tr> <td width="6%"><img src="http://usenet2go.org/site/images/status/<?=$info['status']?>.gif"></td> <td width="38%"><?=$info['title']?></td> <td width ="13%"><? echo $username ? ></td > <td width="13%"><?=$info['datum']?></td> <td width="30%"><img src="http://usenet2go.org/site/images/cat/<?=$info['cat']?>.gif"></td> </tr> </table> <?php } $query = "SELECT COUNT(*) AS aantal FROM info WHERE $aantalpaginas = ceil($totaalaantal / $aantalperpagina); for ($i=1; $i<=$aantalpaginas; $i++) { if ($_GET['pagina'] == $i) { echo '<b><a href="pagina.php?pagina='.$i'">'.$i.'</a></b>'; } else { echo '<a href="pagina.php?pagina='.$i'">'.$i.'</a>'; } echo ' '; } ?>
Ik heb het overigens niet getest, maar je hebt dan nu in ieder geval een opzet om verder te kunnen. |