eerste query tonen???

Plaats reactie
Gebruikersavatar
Pi R²
Elite Poster
Elite Poster
Berichten: 811
Lid geworden op: 03 jan 2003, 17:15
Locatie: Sint-Niklaas
Contacteer:

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
Lang Leve Mijn Eigen! Het geheim voor een lang leven: niet stoppen met ademen
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

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
airzimmy
Erelid
Erelid
Berichten: 1047
Lid geworden op: 19 sep 2002, 14:01
Contacteer:

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 ;)
Gebruikersavatar
Pi R²
Elite Poster
Elite Poster
Berichten: 811
Lid geworden op: 03 jan 2003, 17:15
Locatie: Sint-Niklaas
Contacteer:

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...
Lang Leve Mijn Eigen! Het geheim voor een lang leven: niet stoppen met ademen
Gebruikersavatar
Pi R²
Elite Poster
Elite Poster
Berichten: 811
Lid geworden op: 03 jan 2003, 17:15
Locatie: Sint-Niklaas
Contacteer:

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.
Lang Leve Mijn Eigen! Het geheim voor een lang leven: niet stoppen met ademen
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

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 ;)
Plaats reactie

Terug naar “Development”