paginator help
http://net.tutsplus.com/tutorials/php/how-to-paginate-data-with-php/
een paginator gemaakt, alles loopt goed, maar er mist een belangrijk stuk in het script, namelijk het stuk waar in index.php de uitvoer ook degelijk beperkt word tot 10 per pagina, wat er nu gebeurd? op elke pagina komen nog steeds alle posts.
Ik zie deze fout ook wel in het script, maar weet niet hoe ik deze moet aanpassen zodat het correct verloopt, het script in paginator.class.php kunnen jullie zien op de tutorial link, en dit is wat ik heb voor de index.php:
voor de duidelijkheid: het query waar de dingen uitgehaald worden in de while heb ik hier niet meegegeven, indien jullie dit nodig hebben gelieve dit vriendelijk te vragen
En ja, ik gebruik nog mysql ipv mysqli, dit omdat ik voor ik dit aanpas mysqli fatsoenlijk onder de knie wil hebben, gelieve hier dus ook geen vragen meer over te stellen waarom mysql en geen mysqli, tenzei deze mijn vraag verderhelpen tot een oplossing, wat ik ten zeerste betwijfel.
Ik heb met volgende tutorial: een paginator gemaakt, alles loopt goed, maar er mist een belangrijk stuk in het script, namelijk het stuk waar in index.php de uitvoer ook degelijk beperkt word tot 10 per pagina, wat er nu gebeurd? op elke pagina komen nog steeds alle posts.
Ik zie deze fout ook wel in het script, maar weet niet hoe ik deze moet aanpassen zodat het correct verloopt, het script in paginator.class.php kunnen jullie zien op de tutorial link, en dit is wat ik heb voor de index.php:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
include('paginator.class.php');
$sql = 'SELECT post_content FROM posts WHERE post_topic = "' . mysql_real_escape_string($_GET['id']) . '"';
$resultaat = mysql_query($sql);
$pages = new Paginator;
$pages->items_total = mysql_num_rows($resultaat);
$pages->mid_range = 9;
$pages->paginate();
echo $pages->display_pages();
$sql = 'SELECT post_by FROM posts WHERE post_by = "'.mysql_real_escape_string($_GET['id']).'" ASC $pages->limit';
mysql_query($sql);
include('smileys.php');
while($posts_row = mysql_fetch_assoc($posts_result))
{
echo '<tr>
<td width=110px>' . ucfirst($posts_row['Username']) . '<br/>' . date('d-m-Y H:i', strtotime($posts_row['post_date'])) . '</td>
<td width=310px>' . parsesmileys(nl2br($posts_row['post_content'])) . '</td>
</tr>';
}
$sql = 'SELECT post_content FROM posts WHERE post_topic = "' . mysql_real_escape_string($_GET['id']) . '"';
$resultaat = mysql_query($sql);
$pages = new Paginator;
$pages->items_total = mysql_num_rows($resultaat);
$pages->mid_range = 9;
$pages->paginate();
echo $pages->display_pages();
$sql = 'SELECT post_by FROM posts WHERE post_by = "'.mysql_real_escape_string($_GET['id']).'" ASC $pages->limit';
mysql_query($sql);
include('smileys.php');
while($posts_row = mysql_fetch_assoc($posts_result))
{
echo '<tr>
<td width=110px>' . ucfirst($posts_row['Username']) . '<br/>' . date('d-m-Y H:i', strtotime($posts_row['post_date'])) . '</td>
<td width=310px>' . parsesmileys(nl2br($posts_row['post_content'])) . '</td>
</tr>';
}
voor de duidelijkheid: het query waar de dingen uitgehaald worden in de while heb ik hier niet meegegeven, indien jullie dit nodig hebben gelieve dit vriendelijk te vragen
En ja, ik gebruik nog mysql ipv mysqli, dit omdat ik voor ik dit aanpas mysqli fatsoenlijk onder de knie wil hebben, gelieve hier dus ook geen vragen meer over te stellen waarom mysql en geen mysqli, tenzei deze mijn vraag verderhelpen tot een oplossing, wat ik ten zeerste betwijfel.
Kristof Hendrickx op 15/09/2013 14:57:34:
Ik zie deze fout ook wel in het script, maar weet niet hoe ik deze moet aanpassen
Waar gaat het dan, volgens jou, fout?
Ik ga er van uit dat zo'n voorbeeldscript normaal gesproken werkt.
Waar is de foutafhandeling in je script bij de query's?
Als je gaat debuggen, wat verschijnt er dan?
Klopt $sql, wat zit er in $pages->items_total?
Kristof Hendrickx op 15/09/2013 14:57:34:
omdat ik voor ik dit aanpas mysqli fatsoenlijk onder de knie wil hebben,
Nu ben/blijf je bezig. Eerst dit werkend zien te krijgen en straks alles aanpassen en nog eens controleren. Begin dan bij het begin en zorg dat je eerst mysqli onder de knie hebt/krijgt (zoveel verschil zit er niet tussen mysql en mysqli). ;-)
Gewijzigd op 15/09/2013 15:17:10 door Obelix Idefix
Dan op regel 12:
while($posts_row = mysql_fetch_assoc($posts_result))
$post_results is dan waarschijnlijk het resultaat van de query die je hebt weg gelaten.
Om het totaal aantal posts te bepalen ga je die natuurlijk niet eerst allemaal selecteren en dan met num_rows het aantal rijen bepalen, maar met:
Dit staat ook zo uitgelegd in de tutorial waar je dit vandaan hebt.
Gewijzigd op 15/09/2013 16:40:05 door Ger van Steenderen
Ik weet dat het anders in de tutorial stond, maar mits te echo'en ontdekte ik dat de COUNT het om onbekende reden niet deed, dit is mijn oplossing hiervoor en het komt op hezelfde neer, ook dit saat in de tutorial dat het ook zo kan.
Probeer mij niet van gedacht te veranderen ivm mysql en mysqli, dit is mijn keuze, jullie kunnen mij niet overtuigen met de woorden: dit is beter, wel met de woorden: dat kan je er meer mee, en zoiets is mij nog door niemand gezegd, vandaar dat ik eerst het zo werkend wil krijgen.
Voor de rest dacht ik niet dat het nodig is de laatste query in een resultaat te zetten omdat als ik de limiet wil echo'en deze wel daaruit gehaald word (gok ik aangezien ik wel degelijk een resultaat krijg bij het echo'en)
Ik fomulier de vraag:
Hoe kan ik op de eerste pagina de eerste 10 posts plaatsen, op de 2de post 10 tem 20, ...
en dit kan uiteraard niet met per groep van 10 dit telkens opnieuw te schrijven, want je weet niet op voorhand hoeveel posts je hebt
Gewijzigd op 15/09/2013 18:36:09 door Kristof Hendrickx
Allemaal niet erg bevorderend.
Begin even opnieuw door nu WEL je hele script te plaatsen. Want je haalt resultaten uit $posts_result, maar op dit moment komt die variabele gewoon compleet uit de lucht vallen. Waar je uit zou moeten fetchen is de query met die limiet, maar die query draai je alleen, je fetcht er niet uit. Of dacht jij soms dat die limiet in de ene query wordt gezet en dan in de volgende query nog geldt? Zo ja, dan denk je fout.
Als je geholpen wil worden is het wel handig als je ons ook de gelegenheid geeft om te helpen.
Gewijzigd op 15/09/2013 18:54:06 door Erwin H
Je mag de query hebben, maar ik zeg nogmaals: die helpt je waarschijnlijk niet verder aangezien die niet met de paginator te maken heeft maar met de posts.
Ik dacht ook duidelijk te zijn dat het opviel waar er wat moest aangepast worden, een fout is het in principe niet, maar het is gewoon nog niet volledig af.
dit is de query samen met de uitvoering ervan:
Fetch eens voor de grap uit de query MET de limiet en kijk dan eens wat je krijgt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$sql = 'SELECT post_by FROM posts WHERE post_by = "'.mysql_real_escape_string($_GET['id']).'" ASC $pages->limit';
$posts_result = mysql_query($sql);
include('smileys.php');
while($posts_row = mysql_fetch_assoc($posts_result))
{
echo '<tr>
<td width=110px>' . ucfirst($posts_row['Username']) . '<br/>' . date('d-m-Y H:i', strtotime($posts_row['post_date'])) . '</td>
<td width=310px>' . parsesmileys(nl2br($posts_row['post_content'])) . '</td>
</tr>';
}
?>
$sql = 'SELECT post_by FROM posts WHERE post_by = "'.mysql_real_escape_string($_GET['id']).'" ASC $pages->limit';
$posts_result = mysql_query($sql);
include('smileys.php');
while($posts_row = mysql_fetch_assoc($posts_result))
{
echo '<tr>
<td width=110px>' . ucfirst($posts_row['Username']) . '<br/>' . date('d-m-Y H:i', strtotime($posts_row['post_date'])) . '</td>
<td width=310px>' . parsesmileys(nl2br($posts_row['post_content'])) . '</td>
</tr>';
}
?>
En dan nog met foutafhandeling etc.
JE TOONT OP DE PAGINA HET RESULTAAT VAN EEN QUERY DIE ALLE POSTS TOONT EN NIET VAN DE QUERY MET DE PAGINATION.
Toevoeging op 15/09/2013 19:06:29:
Sorry Erwin ;-)
Hopelijk heeft Kristof het door, uiteindelijk gaat het daarom ;-)
Maar als ik het goed begrijp moet ik gewoon de ASC $pages->limit nog bij in die query zetten? Voor mij geen probleem, nu weet ik ten minste waarom die juist in de query komt :)
En dan denk ik dat die query die ik al staan had in de eerste post overbodig is (de laatste query erin bedoel ik dan)
Ik ga je in ieder geval niet meer (proberen te) helpen. Succes.
kleine kleine jongen Obelix en Idefix, je hebt me hier niet geholpen want je begint enkel te zeuren over mysql en mysqli, wat niet het antwoord geeft op mijn vraag
Kristof Hendrickx op 15/09/2013 19:10:33:
Maar als ik het goed begrijp moet ik gewoon de ASC $pages->limit nog bij in die query zetten? Voor mij geen probleem, nu weet ik ten minste waarom die juist in de query komt :)
Uhm, echt goed begrijpen doe je het dan niet. ASC is een keyword voor de sortering van de resultaten (ASC staat voor ASCENDING, oplopend). Dat hoort nog bij de ORDER BY clausule in je query. Het limiteren van je resultaten doe je met een LIMIT clausule en die wordt gebouwd in je paginator class.
Als je de query wat netter uitschrijft krijg je dit:
Code (php)
1
2
3
4
5
2
3
4
5
SELECT post_by
FROM posts
WHERE post_by = "'.mysql_real_escape_string($_GET['id']).'"
ORDER BY .... ASC
LIMIT 0,10 (komt bij jou uit $pages->limit)
FROM posts
WHERE post_by = "'.mysql_real_escape_string($_GET['id']).'"
ORDER BY .... ASC
LIMIT 0,10 (komt bij jou uit $pages->limit)
En hier mist dus nog iets. Je had namelijk helemaal geen ORDER BY clausule in je query en dus zal dit nog wel misgaan. Ofwel die ASC weglaten, ofwel de ORDER BY clausule correct maken.
Gewijzigd op 15/09/2013 19:20:27 door Erwin H
Kristof Hendrickx op 15/09/2013 19:10:33:
Mensen, ik wist dat daar nog iets moest aangepast worden, en beledigen met de woorden slechtzienden kan al helemaal niet door de beugel, dat noem ik namelijk hetzelfde als beledigen met een handicap, en dat die je gewoon niet.
Ik had in een eerdere post al aangegeven waar naar mijn mening de fout lag.
Maar jij dacht het beter te weten, vandaar mijn frustratie.
Hierbij mijn excuses voor mijn sarcasme.
Bedankt Erwin, het probleem is nu opgelost :)
Ger van Steenderen op 15/09/2013 16:39:34:
En dan dit nog even verwerken.
Als er een goede reden achter zit ben ik zeker bereid dit aan te passen ;)
Ook mijn excuses voor mijn reactie, ik had zeker gezien wat je had gezegd, en dat was ivm de count, maar je zal wel al door hebben dat ik enkel dingen aanpas als deze echt voordeliger zijn dan de andere optie
Gewijzigd op 15/09/2013 20:14:23 door Kristof Hendrickx
SELECT COUNT(*) FROM ... haalt één gegeven op.
SELECT post_content FROM ... haalt alle gegevens op, en daarna wordt er dan geteld hoeveel gegevens dat zijn.
Dat is onnodig gebruik van resources.
In php doe je dit als volgt:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$count_rows = mysql_query("SELECT COUNT(*) FROM posts WHERE post_topic = " . (int) $_GET['id']);
$num_rows = mysql_fetch_row($count_rows);
$pages->items_total = $num_rows[0];
?>
$count_rows = mysql_query("SELECT COUNT(*) FROM posts WHERE post_topic = " . (int) $_GET['id']);
$num_rows = mysql_fetch_row($count_rows);
$pages->items_total = $num_rows[0];
?>