Archive script
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
}
?>
(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!
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'].
(link staat in mn vorige comment)
Succes!
Nogmaals bedankt The Force!