Extra $var waarder aan Pagination function toevoegen.
Ik had eerst een probleem om de positie mee te geven om zo de juiste navigation button current te krijgen. Na dit opgelost te hebben kom ik nu niet verder met overige waarders.
Post eerst even hier de code's:
function.php
pagination.php
Op pagination.php zien we een query staan die enige info ophaalt uit de url met de $_GET waarder. In de SELECT staat welke waarders eigenlijk mee gegeven moet worden aan de juiste navigation button. Alleen weet ik niet hoe ik dit voor elkaar moet krijgen. Dit is mede omdat ik niet zoveel met functions heb gewerkt.
Wat er eigenlijk zal moeten gebeuren is het volgende.
De function zal altijd 40 row's tellen van de huidige week.
Ook zal er dan 40 buttons gemaakt worden met een page= waarde. Deze page= waarde is gelijk aan de positie van het nummer.
Dus voorbeeld:
Navigatie button 10 = Positie 10
Navigatie button 36 = Positie 36
Nu moet de door de function gemaakte url overige waarde worden toegevoegd om de juiste gegevens te verkrijgen bij de weergave.
De url die eigenlijk zou gemaakt moeten worden is:
Deze url geld dus voor navigation button 5
Alleen hoe vraag ik dit op in de pagination.php of function.php en hoe verwerk ik dit in de url.
Waarder -> waarde
Waarders -> waardes
"In de SELECT staat welke waarders eigenlijk mee gegeven moet worden aan de juiste navigation button."
Dus
top40_optie.id, top40_optie.positie_h, top40_optie.artiest, top40_optie.titel
moet meegegeven worden aan de navigatie knop die op dit moment geactiveerd is ?!
of anders welke waardes heb je het over ?
"Ook zal er dan 40 buttons gemaakt worden met een page= waarde".
Welke waarde?
"Navigatie button 10 = Positie 10"
Blijkbaar de positie waarde. Dus top40_optie.positie_h uit je select ...
"Nu moet de door de function gemaakte url overige waarde worden toegevoegd om de juiste gegevens te verkrijgen bij de weergave."
Overige waardes? top40_optie.artiest, top40_optie.titel misschien?
Waaraan moeten deze worden toegevoegd ? Aan een knop?
De gegevens zijn niet beschikbaar in je pagination functie omdat je ze simpelweg nooit beschikbaar stelt.
Je doet eerst voordat je je pagination functie aanroept alle resultaten ophalen inclusief gegevens.
Daarna in je pagination functie doe je dezelfde query nog eens maar dan alleen om het aantal resultaten te tellen.
Je moet gewoon 1x alle gegevens ophalen, deze beschikbaar stellen in je pagination functie (bijvoorbeeld door het $result door te geven).
En dan om het aantal rijen te krijgen niet weer dezelfde query doen. Je kan het aantal rijen halen uit je $result of anders mysql_num_rows.
---
Je code is lastig te begrijpen en je vraagstelling & uitleg is ook lastig te begrijpen.
Wat je hier hebt gemaakt is echt super omslachtig. Je doet er goed aan om verschillende onderdelen van je code beter te scheiden.
---
Laat anders je HTML zien, je database structuur (en ook voorbeelden van data), je volledige query. Misschien als ik zin heb maak ik wel een script.
Gewijzigd op 07/09/2012 03:10:42 door Flip --
Flip -- op 07/09/2012 03:05:50:
Eerste wat ik even kwijt moet:
Waarder -> waarde
Waarders -> waardes
Waarder -> waarde
Waarders -> waardes
Doe het dan goed:
Waarder = waarde
Waarders = waarden. Ook al is waardes ook goed, waarden heeft de voorkeur.
Zie http://www.vandale.nl/opzoeken?pattern=waarde&lang=nn
Gewijzigd op 07/09/2012 09:12:14 door Eddy E
Het gaat hier om "waarde" als zijnde een waarde die je ergens aan toekent. Waardes is dan een prima meervoudsvorm. Sterker nog, bij de link die jij geeft zie je bij de 4e definitie als eerste meervoudsvorm "waardes" staan.
Kortom: je slaat de plank behoorlijk mis.
En niet alleen in het geval van de normen en waarden of de herbergier ;).
Dat het bij Van Dale vooraan staat zegt niets, aldus Van Dale.
Groene boekje zet waarden vooraan: http://woordenlijst.org/zoek/?q=waardes&w=w
Gewijzigd op 07/09/2012 09:42:43 door Eddy E
Waar staat dat "waarden" de voorkeur heeft? Ik kan dat nergens vinden...
Helaas kan ik dat stukje niet online vinden :(
Maar goed: laten we het weer even over het PHP-script hebben...... ook al geeft Flip heel wat goede punten aan. Zonder reactie van de topicstarter kan ik (en wil ik) er ook niet veel verder mee gaan.
Toevoeging op 07/09/2012 11:35:16:
Nog wel een puntje: http://translate.google.nl/#en/nl/values :D
On-Topic:
Ik heb deze script niet zelf gemaakt, ook vind ik de html uitkomst niet van belang in deze vraag stelling. Omdat het een vraag is over php en niet html.
Flip, ik bedoel idd de waarden die jij opnoemt in je topic.
Deze moeten aan de url mee gegeven worden. De waarde die page= heeft staan gelijk aan de positie van de track.
Er wordt toch van iedereen verwacht dat hij/zij correct schrijft? Hier ging het wel heel ver over een goede s of n. Daar heb je wel een punt in.
Als tip: kijk eens naar http_build_query(). Daarmee maak je redelijk makkelijk complexere URL's. Gooi al je waarden in een array (als die daar nog niet in staan) en gooi die eens door de functie.
Let wel dat er een maximumlengte is aan de URL. Ik dacht (uit mijn hoofd) 256 tekens.
Eddy Erkelens op 07/09/2012 11:34:34:
Denk aan "Waarden en normen" wat je goed kan vertalen naar "Inhouden en normen" en dus niet naar "Herbergiers en normen".
Waarden heeft in bovengenoemde context een andere betekenis dan jij doet suggereren.
Eddy Erkelens op 07/09/2012 11:34:34:
Helaas kan ik dat stukje niet online vinden :(
Scannen! Ik ben benieuwd naar jouw onomstotelijk bewijs :)
Remco schrubben op 07/09/2012 11:43:14:Voor op stellend. Vooropgesteld, Vind ik vind dat er te veel gehamert gehamerd word wordt op kleine spellings fouten spelfouten. Er word wordt totaal geen rekening gehouden met mensen die misschien wel dislectie hebben. En die mensen juist hun best doen doen juist hun best im om in de code of uitleg de fouten zo minimaal nodig proberen mogelijk te houden.
On-Topic:
Ik hebdeze dit script niet zelf gemaakt, ook. Ook vind ik de html uitkomst niet van belang in deze vraag stelling vraagstelling. Omdat het een vraag is over php en niet html.
Flip, ik bedoel idd de waarden die jij opnoemt in je topic.
Deze moeten aan de urlmee gegeven meegegeven worden. De waarde die page= heeft staan gelijk aan de positie van de track.
On-Topic:
Ik heb
Flip, ik bedoel idd de waarden die jij opnoemt in je topic.
Deze moeten aan de url
Ach je kunt het ook overdrijven he? Dit is echt niet allemaal aan mogelijke dislectie te wijten. Lees je stukje gewoon eerst even goed door, voordat je het definitief plaatst.
Gewijzigd op 07/09/2012 11:52:22 door Ozzie PHP
Ik zou de artiest en de titel niet meegeven in je url want, ik neem aan, dat als je de week weet en je weet de positie dat deze twee gegevens voldoende zijn om op te zoeken welke artiest en titel hierbij horen.
Verder blijft mijn vorige punt overeind:
Je gebruikt twee queries terwijl dit onnodig is.
Gewijzigd op 07/09/2012 11:55:04 door Flip --
Titel is ook nog niet heel erg noodzakelijk om mee te geven in url. Alleen de Artiest zou ik wel graag mee hebben in de url. Altans de artiest naam zal zichtbaar moeten zijn op het moment de info pagina van die artiest ook zichtbaar is, dit voor de google enz...
Zodra ik dus achter thuis pc zit zal ik code posten.
Je neemt aan dat meer GET variabelen in je URL je gaat helpen bij SEO. Ik betwijfel dit ten zeerste. Verder vind ik het persoonlijk geen best practise om redundante informatie in je url te zetten.
Zoals gezegd zal ik zodra ik thuis ben de html posten die de functie nu maakt en eventueel gewenste html code die ik zou willen krijgen.
Door even drukte kon ik niet eerder reageren.
Maar zoals besproken heb ik even op plaatscode.be 2 voorbeelden gezet.
Voorbeeld HTML code:
1e is het HTML deel die nu wordt gemaakt door de function.php Klik
2e is het HTML deel zoals ik hem zou verwachten/willen. Klik
Overige uitleg:
Zoals je ziet in het 2e voorbeeld zijn er extra $vars in de url.
jaar - week en artiest. Deze komen overeen met de velden in de database.
We zien ook de $var &page=39 staan. De page= wordt gebruikt voor de funtion.php om de pagina nummer te achter halen. Maar.... die 39 heeft eigenlijk 2 functie's.
- Functie 1 - Voor de function.php is dit de pagina nummer.
- Functie 2 - Voor de query en de database betekend de 39 de positie van de artiest in de week 36 en jaar 2012.
Voorbeeld database table:
Hier even een uit geklede database model. Ik heb alleen relevante velden laten staan.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+------------------------+
| table top40 |
+--------+------+--------+
| t40_id | jaar | weeknr |
+--------+------+--------+
| 1 | 2012 | 36 |
+--------+------+--------+
+---------------------------------------+
| table top40_optie |
+----+--------+-----------+-------------+
| id | t40_id | positie_h | artiest |
+----+--------+-----------+-------------+
| 39 | 1 | 39 | Dana Winner |
+----+--------+-----------+-------------+
| table top40 |
+--------+------+--------+
| t40_id | jaar | weeknr |
+--------+------+--------+
| 1 | 2012 | 36 |
+--------+------+--------+
+---------------------------------------+
| table top40_optie |
+----+--------+-----------+-------------+
| id | t40_id | positie_h | artiest |
+----+--------+-----------+-------------+
| 39 | 1 | 39 | Dana Winner |
+----+--------+-----------+-------------+
Uit eindelijke URL:
De url die de pagination uit schrijft in HTML is:
Gewenste url die ik door .htaccess omzet is
Ik hoop dat je hiermee iets meer info en inzicht hebt gekregen van het geen wat ik wil bereiken. Mocht je nog wat info nodig zijn, laat het mij weten en ik regel de info.
Gewijzigd op 09/09/2012 02:45:22 door remco schrubben
Remco schrubben op 09/09/2012 01:57:24:
Hier even een uit geklede database model. Ik heb alleen relevante velden laten staan.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+------------------------+
| table top40 |
+--------+------+--------+
| t40_id | jaar | weeknr |
+--------+------+--------+
| 1 | 2012 | 36 |
+--------+------+--------+
+---------------------------------------+
| table top40_optie |
+----+--------+-----------+-------------+
| id | t40_id | positie_h | artiest |
+----+--------+-----------+-------------+
| 39 | 1 | 39 | Dana Winner |
+----+--------+-----------+-------------+
| table top40 |
+--------+------+--------+
| t40_id | jaar | weeknr |
+--------+------+--------+
| 1 | 2012 | 36 |
+--------+------+--------+
+---------------------------------------+
| table top40_optie |
+----+--------+-----------+-------------+
| id | t40_id | positie_h | artiest |
+----+--------+-----------+-------------+
| 39 | 1 | 39 | Dana Winner |
+----+--------+-----------+-------------+
Ik denk dat je beter wat verder kunt door normaliseren:
Tabel top40
- t40_id
- jaar
- week
Tabel top40_pos
- t40_id(PK)
- pos_h(PK)
- song_id
Tabel songs
- song_id
- artist_id
- song_title
Tabel artists
- artist_id
- artist_name
Je kan zelfs de twee eerste tabellen kunnen samenvoegen tot één (als de eerste tabel alleen die informatie bevat die je nu toont):
Tabel top40
- week(PK)
- jaar(PK)
- pos_h(PK)
- song_id
Je krijgt dan deze query om de top 40 van een bepaald week/jaar op te halen:
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
SELECT
t.week,
t.jaar,
t.pos_h,
s.song_title,
a.artist_name
FROM
top40 AS t
INNER JOIN
songs AS s ON t.song_id = s.song_id
INNER JOIN
artists AS a ON s.artist_id = a.artist_id
WHERE
week = 36
AND
jaar = 2012
ORDER BY
t.pos_h
t.week,
t.jaar,
t.pos_h,
s.song_title,
a.artist_name
FROM
top40 AS t
INNER JOIN
songs AS s ON t.song_id = s.song_id
INNER JOIN
artists AS a ON s.artist_id = a.artist_id
WHERE
week = 36
AND
jaar = 2012
ORDER BY
t.pos_h
Met een beetje slimme SQL kan je zelfs die 'pagination' ook in de query samenstellen.
Gewijzigd op 09/09/2012 13:19:17 door Ger van Steenderen
Alleen ik ben al blij dat ik kan werken met 2 table. Laat staan dat ik met 4 moet gaan werken. Mijn kennis is daar helaas niet goed genoeg voor om jou voorbeeld te kunnen uitwerken.
Als je aan alles in het leven begint met 'kan ik niet' zul je nooit ergens komen, ga de uitdaging aan en probeer het gewoon! Queries heeft GER al bijna gegeven, ga elk keyword die je niet begrijpt (JOIN bijv. of ORDER BY) opzoeken en zo leren dat je het wel gaat begrijpen.
Ik heb ook de JOIN voorwaarden anders uitgeschreven, maakt het iets duidelijker (denk ik).
Ik ben bij de query trouwens gebaseerd op het model met 3 tabellen, dus de eerste twee heb ik samengevoegd.
Dit heet dus normaliseren, heel belangrijk bij het gebruik van databases.
Gewijzigd op 09/09/2012 13:39:22 door Ger van Steenderen
Het gaat er om, dat ik alleen een pagination moet maken voor de eigenaar en dus niet een heel script kan gaan herschrijven.
Ook gaat het er om dat ik in een korte tijd nooit kan leren hoe ik de gegevens in de tabellen ga krijgen zodra ik deze met een admin ga invoeren. Ik heb net het gebruik van transaction onder de knie voor 2 tabellen.
Kort gezegd: Gaat het niet om het stukje leren van nieuwe dingen, maar gaat het er om dat ik de tijd en ruimte niet heb van de eigenaar om alles om te gooien.
http://plaatscode.be/141899/
hier invoegen tussen regel 25 en 26:
tussen regel 48 en 49:
Regel 53 veranderen in:
----
http://plaatscode.be/141900/
Regel 2 veranderen in:
Regel 29, 41, 57, 73 vervangen door de volgende regels:
----
Echt een vieze oplossing dit,
echt echt ECHT slecht.
Dit is pruts werk.
Zou wel moeten werken.
Waarom is dit een slechte oplossing?
1. onnodige queries
2. geen database normalisatie
3. langere URL's terwijl dit niet nodig is
4. code ziet er niet uit (valt slecht te begrijpen / slecht te onderhouden)
5. pagination functie van het internet halen -> je hebt het zelf niet geschreven, je snapt het niet
6. ...
7. .. etc ..
hier invoegen tussen regel 25 en 26:
tussen regel 48 en 49:
Regel 53 veranderen in:
----
http://plaatscode.be/141900/
Regel 2 veranderen in:
Regel 29, 41, 57, 73 vervangen door de volgende regels:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$arg['jaar'] = $data[$counter-1]['top40.jaar'];
$arg['week'] = $data[$counter-1]['top40.weeknr'];
$arg['artiest'] = $data[$counter-1]['top40_optie.artiest'];
$arg['page'] = $counter;
$url2 = http_build_query($arg, '', '&');
$pagination.= '<li><a href="'.$url.$url2.'">'.$counter.'</a></li>';
?>
$arg['jaar'] = $data[$counter-1]['top40.jaar'];
$arg['week'] = $data[$counter-1]['top40.weeknr'];
$arg['artiest'] = $data[$counter-1]['top40_optie.artiest'];
$arg['page'] = $counter;
$url2 = http_build_query($arg, '', '&');
$pagination.= '<li><a href="'.$url.$url2.'">'.$counter.'</a></li>';
?>
----
Echt een vieze oplossing dit,
echt echt ECHT slecht.
Dit is pruts werk.
Zou wel moeten werken.
Waarom is dit een slechte oplossing?
1. onnodige queries
2. geen database normalisatie
3. langere URL's terwijl dit niet nodig is
4. code ziet er niet uit (valt slecht te begrijpen / slecht te onderhouden)
5. pagination functie van het internet halen -> je hebt het zelf niet geschreven, je snapt het niet
6. ...
7. .. etc ..
Gewijzigd op 09/09/2012 14:48:09 door Flip --