Pagina 1 van 1

eerste query tonen???

Geplaatst: 01 maa 2003, 16:39
door Pi R²
Mensen, ik heb weer een phpP :(

Ik heb dus een gastenboek die tot nu toe perfect werkte :D , maar het onestetische is dat hij alle berichten uit dat gastenboek gewoon onder elkaar zet. Door ORDER BY 'id' DESC in de query te zetten, worden de berichtjes omgedraaid, en dan werkt dat weer. Tot zo ver alles in orde.

Maar mijn gastenboek zal behoorlijk veel gebruikt worden, dus wil ik er iets inbouwen om de berichten per 15 te tonen.

daar heb ik deze code voor:

Code: Selecteer alles

$rij = $_GET["pagina"]*5;

$query = "SELECT * WHERE 1 ORDER BY `id` DESC LIMIT ".$rij.", 15" ;

$result = mysql_query($query) or die("FOUT : ". mysql_error());

while ($bericht = mysql_fetch_array($result,MYSQL_NUM)){
         printf($bericht[0] ....

// de array bericht zal schonekes uitgewerkt in de lay out zitten en getoond worden zolang er berichten zijn in de array, ge weet wel.
}


Als je dus de pagina opent, en je geeft een GET-variabele mee die een nummer bevat, zal hij dus op gastenboek.php?pagina=0 de laatste 15 berichten ophalen en tonen. Op pagina=1 zal hij de volgende 15 berichten tonen (te beginnen vanaf bericht 15...)

Het probleem is echter, dat ik slechts 14 berichten per pagina te zien krijg. De berichten 0, 15, 30, 45 ... worden als het ware niet getoont.

Nu heb ik 2 vraagjes :
- snapt er iemand mijnen uitleg?
- En zoja, wat doet ge eraan?

PS : ik heb ook al eens met while(list($a, $b, $c...) = mysql_fetch_row($result))... geprobeert, maar dat geeft dezelfde problemen.

Ik hoop dat ge mij zoals altijd weer kunt helpen :wink:

Bedankt op voorhand!

De oppervlakte

Geplaatst: 01 maa 2003, 17:44
door meon
Uw SQL is niet correct, maar ik denk dat dat een typfout hier is, toch? Zo zal je waarschijnlijk iets bedoelen als

Code: Selecteer alles

$query = "SELECT * FROM tabel ORDER BY `id` DESC LIMIT ".$rij.",15;";


Leg eens even uit waarom je in het begin pagina maal 5 doet? Moet dat niet x 15 zijn?

Vergeet niet dat een tabel begint bij rij 0 en niet bij rij 1 ...

Ik heb even je ding eens in Dreamweaver uitgewerkt (jawel, dreamweaver kan dit zelf ;-)) en dat zag er als volgt uit:

Code: Selecteer alles

<?php require_once('Connections/oConn.php'); ?>
<?php
$currentPage = $HTTP_SERVER_VARS["PHP_SELF"];

$maxRows_gastenboek = 15;
$pageNum_gastenboek = 0;
if (isset($HTTP_GET_VARS['pageNum_gastenboek'])) {
  $pageNum_gastenboek = $HTTP_GET_VARS['pageNum_gastenboek'];
}
$startRow_gastenboek = $pageNum_gastenboek * $maxRows_gastenboek;

mysql_select_db($database_oConn, $oConn);
$query_gastenboek = "SELECT * FROM guestbook";
$query_limit_gastenboek = sprintf("%s LIMIT %d, %d", $query_gastenboek, $startRow_gastenboek, $maxRows_gastenboek);
$gastenboek = mysql_query($query_limit_gastenboek, $oConn) or die(mysql_error());
$row_gastenboek = mysql_fetch_assoc($gastenboek);

if (isset($HTTP_GET_VARS['totalRows_gastenboek'])) {
  $totalRows_gastenboek = $HTTP_GET_VARS['totalRows_gastenboek'];
} else {
  $all_gastenboek = mysql_query($query_gastenboek);
  $totalRows_gastenboek = mysql_num_rows($all_gastenboek);
}
$totalPages_gastenboek = ceil($totalRows_gastenboek/$maxRows_gastenboek)-1;

$queryString_gastenboek = "";
if (!empty($HTTP_SERVER_VARS['QUERY_STRING'])) {
  $params = explode("&", $HTTP_SERVER_VARS['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_gastenboek") == false &&
        stristr($param, "totalRows_gastenboek") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_gastenboek = "&" . implode("&", $newParams);
  }
}
$queryString_gastenboek = sprintf("&totalRows_gastenboek=%d%s", $totalRows_gastenboek, $queryString_gastenboek);
?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<p>
  <?php do { ?>
  <?php echo $row_gastenboek['bericht']; ?>
 
  <!-- Hier zet je al je layout-achtige dingen en zo, met inhoud uit de database -->
 

  <br>
  <?php } while ($row_gastenboek = mysql_fetch_assoc($gastenboek)); ?>
</p>
<p>
  <?php if ($pageNum_gastenboek > 0) { // Show if not first page ?>
  <a href="<?php printf("%s?pageNum_gastenboek=%d%s", $currentPage, 0, $queryString_gastenboek); ?>">First</a>
  <a href="<?php printf("%s?pageNum_gastenboek=%d%s", $currentPage, max(0, $pageNum_gastenboek - 1), $queryString_gastenboek); ?>">Previous</a>
  <?php } // Show if not first page ?>
  <?php if ($pageNum_gastenboek < $totalPages_gastenboek) { // Show if not last page ?>
  <a href="<?php printf("%s?pageNum_gastenboek=%d%s", $currentPage, min($totalPages_gastenboek, $pageNum_gastenboek + 1), $queryString_gastenboek); ?>">Next</a>
  <a href="<?php printf("%s?pageNum_gastenboek=%d%s", $currentPage, $totalPages_gastenboek, $queryString_gastenboek); ?>">Last</a>
  <?php } // Show if not last page ?>
  - Showing <?php echo ($startRow_gastenboek + 1) ?> to <?php echo min($startRow_gastenboek + $maxRows_gastenboek, $totalRows_gastenboek) ?> from <?php echo $totalRows_gastenboek ?> records</p>

</body>
</html>
<?php
mysql_free_result($gastenboek);
?>


Ik zat zelf ook al met dat probleem, met het verschil dat m'n query variabel is, ik moet dat nog eens tegoei uitzoeken...
Hopelijk heb je iets aan bovenstaande code ;)

--meon

Geplaatst: 01 maa 2003, 19:05
door airzimmy
http://www.everlasting.be/hhc/?page=oudlln doet ongeveer hetzelfde en ik geef gewoon het startitem voor de volgende pagina mee, even simpel of moeilijk ;)

Geplaatst: 01 maa 2003, 19:39
door Pi R²
Ik doe maal 5, omdat ik om mijn eigen werk te besparen, maar 15 rijen in mijn database gezet heb, en als ik direct met 15 werk, kan ik niet zien of dat het voor volgende pagina's ook werkt.

Het idee is (natuurlijk moet er FROM de tabel instaan, typfoutje):

Code: Selecteer alles

$query = "SELECT * FROM tabel ORDER BY `id` DESC LIMIT ".$rij.",15";


Als je de eerste pagina bekijkt, dan is dat gewoon gastenboek_bekijken.php . De get variabele is dan leeg, 0 dus.
0 * 15 = 0

In de database zal men dus invullen : LIMIT 0, 15 => selecteren vanaf de eerste rij (rij 0) tot 15 volgende.

Op volgende pagina, gastenboek_bekijken.php?pagina=1
=> 1*15 = 15 ==> LIMIT 15, 15 => selecteren vanaf 16e rij (rij 15) tot de 15 volgende enzoverder.

in jouw sript zit er ook zo een berekening in :

Code: Selecteer alles

$maxRows_gastenboek = 15; 
$pageNum_gastenboek = 0;
if (isset($HTTP_GET_VARS['pageNum_gastenboek'])) {
  $pageNum_gastenboek = $HTTP_GET_VARS['pageNum_gastenboek'];
}
$startRow_gastenboek = $pageNum_gastenboek * $maxRows_gastenboek;


Verder lijkt dat nogal overeen te komen met wat ik verder in mijn script gezet heb, maar het mijn is korter. Ik zal uw code eens proberen, ies zien of ik nog altijd hetzelfde voorheb...


Wat airzimmy betreft : het startitem voor de volgende pagina geef ik ook mee, zoals uw pagina, maar het startitem blijkt er zelf nooit in opgenomen te worden...

Geplaatst: 01 maa 2003, 20:13
door Pi R²
Raar maar waar, het is opgelost. Ik heb een simpelere pagina die ik eerder al eens gemaakt had in de plaats geplakt, en stap voor stap de zaken aangepast die nodig waren, en ineens werkt dat wel. Waarschijnlijk een komma of quote over het hoofd gezien. Daar zit ik dan al weken naar te zoeken.

Geplaatst: 01 maa 2003, 21:32
door meon
Hoe vaak dat DAT al is voorgekomen, niet willen werken, de boel opnieuw maken en dan wél. Meestal is dat idd een stom ding als een aanhalingsteken of iets dergelijks.

Ach ja, het is dus opgelost. Nice ;)