[php] nieuws indelen per dag

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Ben met php een nieuwssyteem aan het maken ( zoals velen anderen tegenwoordig ) voor een intranet.

Nu worden de berichten weergegeven onder elkaar. Nu willen ze liever dat de berichten per dag worden ingedeeld. Dus zoals bijvoorbeeld tweakers op de frontpage.

Jip en Janneke taal voorbeeld:

Maandag 16 december
bericht 24
bericht 23

Vrijdag 13 december
bericht 22
bericht 21

etc...

Heb met de search al de volgende postings gevonden die hier ook over gaan:
[rml][ php] Datums selecteren uit de db?[/rml]
[rml][ php] nieuwssysteem duidelijke markering per datum[/rml]

Deze geven niet de oplossing voor mijn probleem.

Ben nu wel zover dat de datum maar 1x wordt weergegeven maar de berichten komen er niet onder te staan.

Dit is de code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?PHP

// hier gegevens aangegeven voor connecten met database
$host = "localhost"; 
$username = ""; 
$password = ""; 
$db_database = "nieuws"; 


// daadwerkelijk connecten met database en selecteren database
mysql_connect("$host", "$username", "$password") 
or die("MySQL connectie mislukt."); 
mysql_select_db("$db_database") or die("Selecteren van database mislukt.");


// datum selecteren met format: 18 12 2002
$showdate = mysql_query("SELECT DISTINCT date_format(datum,'%d %m %Y') 
as datum FROM berichten ORDER BY datum DESC");
while ($row = mysql_fetch_array($showdate)){


echo $row[0]."<br>";


// berichten selecteren die bij die datum horen
$showtitel = mysql_query("SELECT bericht,maatschappij,branche FROM 
berichten where datum='$row[0]' ORDER BY id DESC");
while ($titel_row = mysql_fetch_array($showtitel)){

echo " $titel_row[0] $titel_row[1] $titel_row[2] " ;

}

echo "<br>";

}
?>


Waar zit de fout in het script ? Wat mis ik in het script ? alle aanwijzingen zijn welkom

Verwijderd

Post hier even de foutmelding die je krijgt

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 01-04-2023
En laat eens de outputs zien van de queries die uitgevoerd worden...

Ook Knor is aangestoken met het ligfietsvirus!


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Verwijderd

ik zal zelf op een andere manier berichten opslaan, namelijk:

een extra kolom waarin de datum in een unix timestamp wordt opgeslagen.

met dit geven kun je een heleboel, namelijk;

je kunt er een datum uit generen,
je kunt er makkelijk mee rekenen,
je kan iets een uniek id geven.

Verwijderd

Topicstarter
Dat is het hem nu juist krijg geen foutmelding.
Het enige wat ik te zien krijg is:

19 12 2002

18 12 2002

17 12 2002


Meer niet, geen foutmelding of wat dan ook.
Haal ik DISTINCT weg uit de query krijg ik 6 keer 17 12 2002 te zien ipv 1. Dit klopt want er zijn ook 6 berichten geplaatst op die dag.

  • KrL
  • Registratie: Oktober 2001
  • Laatst online: 18-09 14:51

KrL

Foto foto..

Wat je nu doet is eerst je datum in een 'leesbaar' formaat outputten (met de date_format functie) en vervolgens gebruik je die 'leesbare' datum om op te selecteren.. En dan gaat het fout want mysql werkt met een ander datumformaat..

Verwijderd

Topicstarter
thomaske:

Dat klopt aardig alleen wil ik de datum erboven.

Krijg nu alleen niet de berichten te zien :(

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Verwijderd schreef op 19 December 2002 @ 15:55:
thomaske:

Dat klopt aardig alleen wil ik de datum erboven.

Krijg nu alleen niet de berichten te zien :(
code:
1
2
3
4
5
6
7
8
9
10
prev_jaar = 0

while (records) do
  if (record.jaar != prev_jaar) then
    print '<hr>';
    prev_jaar = record.jaar;
  end if

  print record.jaar & record.naam
end while


Dan zet je in de IF nog een print-regel waarbij de de datum print....

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Verwijderd

PHP:
1
2
$showtitel = mysql_query("SELECT bericht,maatschappij,branche FROM  
berichten where datum LIKE $row[0] ORDER BY id DESC");


probeer deze query eens.
om je query te kontroleren echo deze eens en post deze hier

[ Voor 28% gewijzigd door Verwijderd op 19-12-2002 15:59 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

doe liever zoiets, dat scheelt ook weer een tikkeltje databaseload:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$q = "
   SELECT 
      bericht,
   DATE_FORMAT(datum, '%d %m %Y')
   FROM  
      berichten 
   ORDER BY 
      datum DESC,
      id DESC
";

$result = mysql_query ( $q )
$lastDate = false;

while ( $row = mysql_fetch_assoc ( $result ) ) {
   if ( $lastDate != $row [ 'datum' ] ) {
      echo '<hr>', $row [ 'datum' ], '<br>';
      $lastDate = $row [ 'datum' ];
   }
   echo $row [ 'bericht' ], '<br>';
}

zoiets..
edit:

euh, ja, wat thomaske zegt, dus ;)

[ Voor 5% gewijzigd door drm op 19-12-2002 16:00 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • KrL
  • Registratie: Oktober 2001
  • Laatst online: 18-09 14:51

KrL

Foto foto..

("SELECT DISTINCT datum,date_format(datum,'%d %m %Y')
as nldatum FROM berichten ORDER BY datum DESC");
while ($row = mysql_fetch_array($showdate)){

echo $row[1]."<br>";

En de rest t zelfde laten.. Zo zou t moeten werken..

Verwijderd

Topicstarter
krl:

Wanneer ik de datum gewoon selecteer zoals in de database krijg ik de gehele timestamp terug.

Update: heb de leesbare datum nu ook geplaatst bij regel 27
Krijg nu foutmelding:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in d:\algemeen\portal\phpdev\www\data2.php on line 23

line 23 is hier dus line 27 waar ik de datum heb veranderd

Verwijderd

Topicstarter
Joehoe hij werkt !!!!

krl hij werkt moest natuurlijk as datum wel weghalen ( wat een koe ben ik // kan smiley niet vinden )

zal die aanpassingen van drm ook eens proberen

thx

  • ThaDaNo
  • Registratie: Mei 2002
  • Laatst online: 05-04-2023
|:( bedoel je :P

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
nee deze }:O :P

maar ben weer eens verder gaan knutselen en wil eigenlijk wel de datum als volgt weergeven:

vrijdag 20 december

naar aanleiding van dit topic: [rml][ php] datum in het nederlands[/rml]

heb eerst aangegeven hoe de timestamp moet worden weergegeven en daarna geplaatst in de query zie :

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?PHP
$host = "nt-klaveren"; 
$username = "root"; 
$password = ""; 
$db_database = "nieuws"; 

mysql_connect("$host", "$username", "$password") 
or die("MySQL connectie mislukt."); 
mysql_select_db("$db_database") 
or die("Selecteren van database mislukt.");


function NLDate($timestamp) 
{   $maanden = Array      ("dummy","Januari","Februari","Maart",
                         "April","Mei","Juni","Juli",
                         "Augustus","September","Oktober",
                         "November","December");  
 
$dagen = Array        ("Zondag","Maandag","Dinsdag","Woensdag",
                   "Donderdag","Vrijdag","Zaterdag"); 
  
$dag = $dagen[date("w",$timestamp)];   
$maand = $maanden[date("n",$timestamp)];   
return $dag . " " . date("j",$timestamp) . " 
" . $maand . " " . date("Y",$timestamp); 
} 
$now = mktime(0,0,0,date("n"),date("j"),date("Y")); $datum = 
NLDate($now); 



$showdate = mysql_query("SELECT DISTINCT date_format(datum,'$datum') as datum
FROM berichten ORDER BY datum DESC");
while ($row = mysql_fetch_array($showdate)){

echo "<font face='verdana' size='1'><b>$row[0]</b></font><br>";

$showtitel = mysql_query("SELECT bericht,maatschappij,branche 
FROM berichten where 
date_format(datum,'$datum')='$row[0]' ORDER BY id DESC");
while ($titel_row = mysql_fetch_array($showtitel)){

echo " <table width=545 border=0 cellpadding=0 cellspacing=0><tr><td width=365>
<font face='verdana' size='1'>$titel_row[0]</font></td><td width=105>
<font face='verdana' size='1'>$titel_row[1]</font></td><td width=75>
<font face='verdana' size='1'>$titel_row[2]</font></td></tr></table>" ;

}

echo "<br>";

}
?>


Nu geeft hij de datum wel netjes weer zoals ik wil maar nu niet meer opgedeeld in nieuwskolommen. Volgens mij doordat hij nu de datum van vandaag converteert naar mijn notatie en dan bovenaan plaatst.

Vrijdag 20 december 2002
bericht 25
bericht 24
bericht 23
bericht 22

Moet worden:

Vrijdag 20 december 2002
bericht 25

Donderdag 19 december 2002
bericht 24
bericht 23
Pagina: 1