Archive script
Hee iedereen,
ik heb een probleempje met een script voor mijn website. Het script is bedoeld voor een pagina die alle entries weergeeft van een bepaalde maand, die wordt gespecificeerd in de url. Als de maand niet wordt gespecificeerd dan worden alle entries weergeven. Dat is in ieder geval de bedoeling, maar hij geeft helemaal niks weer als er een maand wordt gespecificeerd.
Zou iemand mij kunnen helpen?
Bob
ik heb een probleempje met een script voor mijn website. Het script is bedoeld voor een pagina die alle entries weergeeft van een bepaalde maand, die wordt gespecificeerd in de url. Als de maand niet wordt gespecificeerd dan worden alle entries weergeven. Dat is in ieder geval de bedoeling, maar hij geeft helemaal niks weer als er een maand wordt gespecificeerd.
Zou iemand mij kunnen helpen?
Bob
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
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
<?php
mysql_connect ('localhost', 'db_username', 'db_password') ;
mysql_select_db ('db_name');
if (!isset($_GET['month'])) {
$result = mysql_query("SELECT timestamp, id, title FROM php_blog ORDER BY id DESC");
while ($row = mysql_fetch_array($result)) {
$date = date("j-n-Y H:i", $row['timestamp']);
$id = $row['id'];
$title = stripslashes($row['title']);
?>
<?php echo $date; ?> - <a href="article.php?id=<?php echo $id; ?>"><?php echo $title; ?></a></br>
<?php
}
}
}
else {
$month = (int)$_GET['month'];
}
$result = mysql_query("SELECT timestamp, id, title FROM db_name WHERE FROM_UNIXTIME(timestamp, '%F') = '$month' ORDER BY id DESC");
while ($row = mysql_fetch_array($result)) {
$date = date("l F d Y", $row['timestamp']);
$id = $row['id'];
$title = stripslashes($row['title']);
?>
<p><?php echo $date; ?><br /><a href="article.php?id=<?php echo $id; ?>"><?php echo $title; ?></a></p>
<?php
}
?>
mysql_connect ('localhost', 'db_username', 'db_password') ;
mysql_select_db ('db_name');
if (!isset($_GET['month'])) {
$result = mysql_query("SELECT timestamp, id, title FROM php_blog ORDER BY id DESC");
while ($row = mysql_fetch_array($result)) {
$date = date("j-n-Y H:i", $row['timestamp']);
$id = $row['id'];
$title = stripslashes($row['title']);
?>
<?php echo $date; ?> - <a href="article.php?id=<?php echo $id; ?>"><?php echo $title; ?></a></br>
<?php
}
}
}
else {
$month = (int)$_GET['month'];
}
$result = mysql_query("SELECT timestamp, id, title FROM db_name WHERE FROM_UNIXTIME(timestamp, '%F') = '$month' ORDER BY id DESC");
while ($row = mysql_fetch_array($result)) {
$date = date("l F d Y", $row['timestamp']);
$id = $row['id'];
$title = stripslashes($row['title']);
?>
<p><?php echo $date; ?><br /><a href="article.php?id=<?php echo $id; ?>"><?php echo $title; ?></a></p>
<?php
}
?>
Ik heb hetzelfde probleem. Mijn code verschilt een beetje maar komt op hetzelfde neer. Wanneer ik een $_GET['maand'] aanroep wordt er ook niets uit de database geladen. De datum is dan ook 1 januari 1970...
(mijn thread: http://www.phphulp.nl/php/forum/topic/archief-links/79461/)
Ik heb zelf nog geen succes maar zodra ik het weet laat ik wat weten in deze thread!
(mijn thread: http://www.phphulp.nl/php/forum/topic/archief-links/79461/)
Ik heb zelf nog geen succes maar zodra ik het weet laat ik wat weten in deze thread!
%F bestaat niet, ik denk dat je %m bedoeld. Je $month is zo te zien namelijk een int. Houd er wel rekening mee dat je dan eventueel een extra 0 meekrijgt (00 t/m 12).
Het beste zou je (als dat mogelijk is) de timestamps om kunnen zetten naar datetime. Timestamp is om veel redenen achterhaald. De belangrijkste zijn dat je het telkens moet converteren en dat het niet leesbaar is in de database.
Je moet ook even goed kijken naar de opbouw van je code. De tweede query wordt namelijk altijd uitgevoerd, ook als $_GET['month'] niet is meegegeven. Daarnaast is een deel van de code dubbel. Je kan het beste MySQL de juiste data laten selecteren en formatteren met de datetime functies. Dan krijg je meteen je data op een goede manier aangeleverd en hoef je niet die nog met PHP aan te gaan passen. Dan doel ik dus op "$date = date("l F d Y", $row['timestamp']);" e.d..
stripslashes en addslashes kan je beter niet gebruiken omdat dat problemen op kan leveren bij data met speciale tekens (weet niet meer precies wat het probleem was maar het heeft mij heel veel uren gekost). mysql_real_escape_string is de manier om data veilig te maken voor database opslag. Je hebt daarna ook geen problemen meer als je het uit de database wilt halen. Tot slot is het een beetje onzinnig om een extra variabele aan te maken voor $row['id'] en $row['title'].
Het beste zou je (als dat mogelijk is) de timestamps om kunnen zetten naar datetime. Timestamp is om veel redenen achterhaald. De belangrijkste zijn dat je het telkens moet converteren en dat het niet leesbaar is in de database.
Je moet ook even goed kijken naar de opbouw van je code. De tweede query wordt namelijk altijd uitgevoerd, ook als $_GET['month'] niet is meegegeven. Daarnaast is een deel van de code dubbel. Je kan het beste MySQL de juiste data laten selecteren en formatteren met de datetime functies. Dan krijg je meteen je data op een goede manier aangeleverd en hoef je niet die nog met PHP aan te gaan passen. Dan doel ik dus op "$date = date("l F d Y", $row['timestamp']);" e.d..
stripslashes en addslashes kan je beter niet gebruiken omdat dat problemen op kan leveren bij data met speciale tekens (weet niet meer precies wat het probleem was maar het heeft mij heel veel uren gekost). mysql_real_escape_string is de manier om data veilig te maken voor database opslag. Je hebt daarna ook geen problemen meer als je het uit de database wilt halen. Tot slot is het een beetje onzinnig om een extra variabele aan te maken voor $row['id'] en $row['title'].
Hé Bob, het is mij gelukt! Als je er onderhand nog niet uit bent kun je misschien een kijkje nemen in de thread die ik een tijd geleden was gestart.
(link staat in mn vorige comment)
Succes!
Nogmaals bedankt The Force!
(link staat in mn vorige comment)
Succes!
Nogmaals bedankt The Force!




