login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Archiefscript: hoe beginnen

Offline SimonDW - 30/01/2006 16:06 (laatste wijziging 16/02/2006 10:24)
Avatar van SimonDWNieuw lid Hoi allemaal!
Ik ben aan het proberen een archiefscript te schrijven dat moet werken met mijn nieuwsdatabase. Daar heb ik de datum in DATE formaat opgeslagen.
Het is de bedoeling om een archief te maken waar ik alle artikels, gesorteerd, kan weergeven.

Tot nu toe nog maar één site gezien die een archief naar mijn hart hebben ;)

26 antwoorden

Gesponsorde links
Offline timo - 30/01/2006 16:12
Avatar van timo PHP ver gevorderde als je zo'n uitgebreid iets wil wat ook alleen maar van een jaar en maand weergeeft ben je wel even bezig....
tips:
-Zet de datum in een array, zo kan je het jaar en maand apart opsplitsen....
verder: veel suc7!
heb even geen tijd om je met een flink stuk script te helpe....
Offline Joel - 30/01/2006 16:16 (laatste wijziging 30/01/2006 16:17)
Avatar van Joel Eigenaar Mijn archief werkt ook wel ongeveer zo:

http://www.site...els/nieuws

Alleen wordt er niet per maand geselecteerd, maar wordt een navigatiesysteem in de plaats gebruikt. Maar valt aan te passen.

Met volgende MySQL query zoek ik eerst alle unieke datums:

  1. SELECT DISTINCT(DATE_FORMAT(datum, '%Y-%m-%d')) AS datum FROM artikels


Dan is het gewoon een while loop gebruiken en alle artikels selecteren van die datum ($arr['datum'] in mijn geval)

  1. SELECT * FROM artikels WHERE DATE_FORMAT(datum, '%Y-%m-%d') = '".$arr['datum']."'
Offline SimonDW - 30/01/2006 16:51 (laatste wijziging 30/01/2006 16:54)
Avatar van SimonDW Nieuw lid @ Timo: moet ik dan mijn datum in stukken kappen? DD / MM / YYYY ?

@ Joël: dat ziet er ook niet slecht uit 
Is net wat ik zoek!! OMG! Jammer dat mijn PHP / SQL kennis niet zo goed is 
Offline Joel - 30/01/2006 18:14
Avatar van Joel Eigenaar Geraak je er niet uit ?
Offline SimonDW - 30/01/2006 19:11
Avatar van SimonDW Nieuw lid Joël,
Dit lukt:
  1. SELECT DISTINCT(DATE_FORMAT(datum, '%Y-%m-%d')) AS datum FROM artikels


Maar het uitlezen daarna lukt niet meer (daarmee bedoel ik de artikels die bij de datum horen).

De data die hij uitleest staat op één pagina, en dat is niet echt overzichtelijk. Bij jou is dat met pijltjes zodat je tussen verschillende pagina's kan klikken (is véél overzichtelijker)...

:s  maar ja, hoe doe je het ??
Offline webstab - 30/01/2006 20:04
Avatar van webstab PHP ver gevorderde Dan moet je met een navigatie script in LIMIT in je query werken. Bij de script vind je er goede.
Offline SimonDW - 02/02/2006 10:46 (laatste wijziging 06/02/2006 18:48)
Avatar van SimonDW Nieuw lid Bedankt webstab!!
Ik gebruik nu volgend script:
http://www.site...amp;id=624

Maar euh... ben er nog steeds niet uit hoe ik de data uitlees na dit:

  1. SELECT DISTINCT(DATE_FORMAT(datum, '%Y-%m-%d')) AS datum FROM artikels


Moet wel zeggen: heb dankzij Sitemasters al veel bijgeleerd 


EDIT:

Heb nu blijkbaar een probleempje met DISTINCT... Functie werkt blijkbaar niet meer...

Datum staat als YYYY/MM/DD in de database en sorteer ze ook zo, maar lees ze uit als DD/MM/YYYY

  1. <?
  2. include "database.php";
  3. $query = "SELECT DISTINCT WEEKDAY(datum) AS weekdag, DAYOFMONTH(datum) AS dag, MONTH(datum) AS maand, YEAR(datum) AS jaar, id FROM nieuws ORDER BY datum DESC";
  4.  
  5. $sql = mysql_query($query) or die (mysql_error());
  6. while ($obj = mysql_fetch_object($sql))
  7. {
  8. echo "$obj->dag-$obj->maand-$obj->jaar<br>";
  9. }
  10. ?>



EDIT 06/02

Phoe, dat probleem heb ik als volgt opgelost:
  1. <?
  2. include "database.php";
  3. $query = "SELECT DISTINCT(DATE_FORMAT(datum, '%d-%m-%Y')) AS datum FROM nieuws ORDER BY DATE_FORMAT(datum, '%Y-%m-%d') DESC";
  4. $sql = mysql_query($query) or die (mysql_error());
  5. while ($obj = mysql_fetch_object($sql))
  6. {
  7. echo "$obj->datum<br>";
  8. }
  9. ?>




Echter, ik krijg die while loop maar niet goed...

  1. SELECT * FROM nieuws WHERE DATE_FORMAT(datum, '%Y-%m-%d') = '".$arr['datum']."'


Iemand die een tip kan geven 
Offline timo - 06/02/2006 19:20 (laatste wijziging 06/02/2006 19:36)
Avatar van timo PHP ver gevorderde doe eens:
  1. <?php
  2. $whileloopquery = mysql_query("SELECT * FROM nieuws WHERE DATE_FORMAT(datum, '%Y-%m-%d')") OR die(mysql_error()); // selecteer de datum....
  3. while($arr = mysql_fetch_assoc($whileloopquery)) // maak van de query een array
  4. {
  5. echo $arr['datum']."<br />"; // echo de datums
  6. }
  7. mysql_free_result($whileloopquery); // en de resultaten clearen
  8. ?>

EDIT: Code geupdate, is nu wel goed....
Offline webstab - 06/02/2006 19:32 (laatste wijziging 06/02/2006 19:32)
Avatar van webstab PHP ver gevorderde Je bent een query vergeten.
Voeg eens tussen rij 2 en rij 3 de volgende regel
  1. $whileloopquery= mysql_query($whileloopquery) or die(mysql_error());
Offline timo - 06/02/2006 19:35
Avatar van timo PHP ver gevorderde oeps:$
Offline SimonDW - 06/02/2006 22:15 (laatste wijziging 07/02/2006 13:57)
Avatar van SimonDW Nieuw lid Bedankt Timo en Webstab!!

Werkt perfecto!!:D :D

EDIT

Het scriptje werkt, maar ik krijg allemaal mijn resultaten onder de datums te zien...
Niet in lijstjes-vorm.

Bijvoorbeeld alle artikels van datum X onder datum X, alle artikels van datum Y onder datum Y,...

Tiens tiens tiens...  

Ter info: dit is de code die ik gebruik:
  1. <?
  2. include "database.php";
  3. include "limit.php";
  4. $query = "SELECT DISTINCT(DATE_FORMAT(datum, '%d-%m-%Y')) AS datum, id, titel_nl FROM nieuws ORDER BY DATE_FORMAT(datum, '%Y-%m-%d') DESC LIMIT $offset, $aantal_items_per_pagina";
  5. $result = mysql_query($query);
  6. ?>
  7. <?
  8. while ($row = mysql_fetch_array($result)) {
  9. ?>
  10. <? print("$row[datum]") ?>
  11. <br>
  12. <?php
  13. $whileloopquery = mysql_query("SELECT * FROM nieuws WHERE DATE_FORMAT(datum, '%d-%m-%Y')") OR die(mysql_error());
  14. while($arr = mysql_fetch_assoc($whileloopquery))
  15. {
  16. echo $arr['titel_nl']."<br />";
  17. }
  18. mysql_free_result($whileloopquery);
  19. ?>
  20. <?
  21. }
  22. ?>
  23. <p>&nbsp;</p>
  24. <? navigatietonen(); ?>
Offline timo - 07/02/2006 14:55
Avatar van timo PHP ver gevorderde hoe bedoel je? krijg je een datum, daaronder alle nieuwberichten of alle datums en dan de nieuwsberichten? in beide gevallen kan k wel ff kijken....
Offline SimonDW - 07/02/2006 15:14
Avatar van SimonDW Nieuw lid Nu lees en sorteer ik eerst de datums.
Het is de bedoeling om onder elke datum de artikels van die datum te zetten (cfr. deze site).

Met boverstaande code leest hij de datum's uit zoals het moet, maar plaatst hij onder elke datum de volledige inhoud van nieuws_nl

Raar hoor!

Offline timo - 07/02/2006 15:28
Avatar van timo PHP ver gevorderde zeker als je nieuws_nl nergens echo't ^^ probeer eens bij de 2e query ook die limit's in te stellen....
Offline SimonDW - 07/02/2006 15:33
Avatar van SimonDW Nieuw lid
Citaat:
zeker als je nieuws_nl nergens echo't probeer eens bij de 2e query ook die limit's in te stellen....


Schrijffoutje van mij, moet zijn titel_nl, die echo ik op lijn 16

Heb bij die 2de query dezelfde LIMIT's ingesteld... Echter zonder resultaat 
Offline timo - 07/02/2006 15:43
Avatar van timo PHP ver gevorderde waarom in je 2e query dat WHERE gedoe.... dat slaat namelijk niet eg ergens op.... je kan beter de datum in een query zetten en die while steeds herhalen voor hoeveel result je krijgt voor die datum... dus met een for iets...
Offline SimonDW - 07/02/2006 15:47
Avatar van SimonDW Nieuw lid Heb die 2de query overgenomen uit uw $whileloopquery...

Jammer dat mijn MySQL-kennis niet zo goed is 
Offline Rens - 07/02/2006 16:31
Avatar van Rens Gouden medaille

Crew algemeen
  1. $whileloopquery = mysql_query("SELECT * FROM nieuws WHERE DATE_FORMAT('".$row['datum']."', '%d-%m-%Y')") OR die(mysql_error());

Denk dat dat beter werkt.
Je had, denk ik, $row['datum'] moeten gebruiken, ipv datum.
Offline timo - 07/02/2006 18:00 (laatste wijziging 07/02/2006 18:00)
Avatar van timo PHP ver gevorderde had gwn het met die whileloop dingen gedaan maar de query van jou overgenomen... hier een ook beetje opgeklaarde code: (met query van Rensjuh)
  1. <?
  2. include "database.php";
  3. include "limit.php";
  4. $query = "SELECT DISTINCT(DATE_FORMAT(datum, '%d-%m-%Y')) AS datum, id, titel_nl FROM nieuws ORDER BY DATE_FORMAT(datum, '%Y-%m-%d') DESC LIMIT $offset, $aantal_items_per_pagina";
  5. $result = mysql_query($query);
  6. while ($row = mysql_fetch_array($result)) {
  7. print("$row[datum]") ?>
  8. <br>
  9. <?php
  10. $whileloopquery = mysql_query("SELECT * FROM nieuws WHERE DATE_FORMAT('".$row['datum']."', '%d-%m-%Y')") OR die(mysql_error());
  11. while($arr = mysql_fetch_assoc($whileloopquery))
  12. {
  13. echo $arr['titel_nl']."<br />";
  14. }
  15. mysql_free_result($whileloopquery);
  16. }
  17. ?>
  18. <p>&nbsp;</p>
  19. <? navigatietonen(); ?>
Offline SimonDW - 07/02/2006 18:46 (laatste wijziging 07/02/2006 18:47)
Avatar van SimonDW Nieuw lid timo, ik heb de code moeten aanpassen want hij hield blijkbaar geen rekening meer met de DISTINCT functie.

Ze ziet er nu zo uit:
  1. <?
  2. include "database.php";
  3. include "limit.php";
  4. $query = "SELECT DISTINCT(DATE_FORMAT(datum, '%d-%m-%Y')) AS datum FROM nieuws ORDER BY DATE_FORMAT(datum, '%Y-%m-%d') DESC LIMIT $offset, $aantal_items_per_pagina";
  5. $result = mysql_query($query);
  6. while ($row = mysql_fetch_array($result)) {
  7. print("$row[datum]") ?>
  8. <br>
  9. <?php
  10. $whileloopquery = mysql_query("SELECT * FROM nieuws WHERE DATE_FORMAT('".$row['datum']."', '%d-%m-%Y')") OR die(mysql_error());
  11. while($arr = mysql_fetch_assoc($whileloopquery))
  12. {
  13. echo $arr['titel_nl']."<br />";
  14. }
  15. mysql_free_result($whileloopquery);
  16. }
  17. ?>
  18. <p>&nbsp;</p>
  19. <? navigatietonen(); ?>


Maarrrrr, het probleem is (en blijft) dat hij geen titels wil uitlezen die bij de data horen :s

Ik lees nu perfect de data uit (zelfs al zijn er meerdere artikels gepost op één datum, hij geeft maar één datum weer), maar hij geeft de titels niet weer.

Zou moeten werken zoals het nieuws op Sitemasters, maar ik zit er blijkbaar nog ver af 

http://www.site...els/nieuws
Offline timo - 07/02/2006 19:35 (laatste wijziging 07/02/2006 19:37)
Avatar van timo PHP ver gevorderde
  1. print("$row[datum]")

is fout, vervangen door:
  1. echo $row['datum'];

was niet afgesloten met een ;, verder schijnt echo() sneller te zijn en variabelen altijd buiten quotes...
en zet eens bovenaan je script:

dan kunnen dit soort schoonheidsfoutjes minder snel optreden....
Offline SimonDW - 07/02/2006 22:34 (laatste wijziging 07/02/2006 23:58)
Avatar van SimonDW Nieuw lid thanks timo, maar doet jammer genoeg niets aan de uitlezing van de gegevens die bij de datum hoort 

Is hier geen php/mysql crack aanwezig die het probleem(pje) kan oplossen???
Offline Richard - 08/02/2006 08:40
Avatar van Richard Crew algemeen ik denk dat je het beter zo kunt doen:

- de titels ophalen
- doorlopen, stack van maken:
  1. $stack = array (
  2. 'datum' => array (
  3. 'titel1', 'titel2'
  4. );
  5. );


en deze dan weer doorlopen dmv foreach.
Offline SimonDW - 08/02/2006 10:29
Avatar van SimonDW Nieuw lid Het werkt! Oef!!

  1. <?
  2. include "database.php";
  3. include "limit.php";
  4. $query = "SELECT DISTINCT(DATE_FORMAT(datum, '%d-%m-%Y')) AS datum FROM nieuws ORDER BY DATE_FORMAT(datum, '%Y-%m-%d') DESC LIMIT $offset, $aantal_items_per_pagina";
  5. $result = mysql_query($query);
  6. while ($row = mysql_fetch_array($result)) {
  7. print("<b>$row[datum]</b><br />");
  8. ?>
  9. <?php
  10. $whileloopquery = mysql_query("SELECT * FROM nieuws WHERE DATE_FORMAT(datum, '%d-%m-%Y') = '".$row['datum']."'") OR die(mysql_error());
  11. while($arr = mysql_fetch_assoc($whileloopquery))
  12. {
  13. print("$arr[titel_nl]<br />");
  14. }
  15. mysql_free_result($whileloopquery);
  16. }
  17. ?>
  18. <p>&nbsp;</p>
  19. <? navigatietonen(); ?>


Volgende uitdaging: de datum weergeven als
WEEKDAG / DAGVANMAAND / MAAND / JAAR

Maand = januari i.p.v. 01

Offline timo - 08/02/2006 17:02
Avatar van timo PHP ver gevorderde kijk eens hier ;) je moet de datum anders invoegen en selecteren....
Offline SimonDW - 10/02/2006 17:07 (laatste wijziging 14/02/2006 20:13)
Avatar van SimonDW Nieuw lid mmm, handig!
nu wordt er goed uitgelezen én goed weergegeven thanks Timo!


Volgende uitdaging... zal denk ik niet zo eenvoudig zijn...
Op de eerste pagina een menu voor het jaartal, als dat aangeklikt is een menu voor de maanden... om op deze manier het archief te kunnen raadplegen volgens jaar en volgens maand...

EDIT...
Ahummm... 
Het uitlezen volgens maand / jaar is blijkbaar niet zo simpel...

Iemand die me op de sporen kan zetten 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.39s