[php] Datums selecteren uit de db?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Laat ik meteen los barsten, ik heb een nieuws script die de datum van het nieuws item uit de db haalt. De datum is in de db gekomen door de date("d F Y"); en zo toegeveogt. Nu wil ik het nieuws uit de db halen, maar op dagen van elkaar scheiden, dus bijv het nieuws van maandag komt onder het kopje "maandag" te staan. Een voorbeeld:

Maandag 22 oktober
15:45 Tweakers.net organiseert grote lan-party
12:35 De punt van een tak afsnijden

Zondag 21 oktober
16:23 Eerste man op mars

enz..

Ik heb daarvoor het volgende script:

<?
// DIT IS DE DATA ONDER DE DATUM!!!!
$titel = "<table border=\"0\" width=\"100%\" cellpadding=\"1\" cellspacing=\"0\">\n <tr>\n<td width=\"40\" valign=\"bottom\"><span class=\"t1\">$seconden</a></td>\n<td width=\"520\"><a href=\"ShowNews.php3?id=$id\" class=\"t2\">$titel</a> <span class=\"t1\">($comment)</span></td>\n </tr>\n</table>";

if ($dag != "$lastdag") {
$lastdag = "$dag";

$maand_array = array("januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december");
$dagen_array = array("Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag");
$datum = $dagen_array[date("w", $tijd)] . date(" j ", $tijd) . $maand_array[date("n", $tijd) - 1] . date(" Y", $tijd);

// DIT IS DE DATUM (KOP)
echo "<p><table border=\"0\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n <tr>\n<td bgcolor=\"black\">\n<table border=\"0\" width=\"100%\" cellpadding=\"2\" cellspacing=\"1\">\n <tr>\n<td width=\"100%\" background=\"images/menubg.gif\"><span class=\"t2\"><font color=\"#CCCCFF\"><b>$datum</b></font></span></td>\n </tr>\n</table>\n</td>\n </tr>\n</table>";

}
echo "$titel";
?>

Dit script is niet van mijzelf, van een jongen gekregen die het ook zo gedaan heeft, alleen hij werkt niet. Ziet iemand mischien iets fouts?

Het probleem is dat hij de titel niet print :)

Alvast bedankt!

Acties:
  • 0 Henk 'm!

Verwijderd

Waar is je database query? Hoe ziet die eruit?

Acties:
  • 0 Henk 'm!

Verwijderd

Het is wel geinig als je zelf even aangeeft wat er nu precies fout gaat!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja sorry, rede staat nu bij de post :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De query:

$host = "localhost"; // Where the database is hosted normally localhost
$username = ""; // Username for your MySQL database
$password = ""; // The password for your MySQL database
$db_database = "t1"; // The name of the database

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

$showlist = mysql_query("SELECT * FROM bjdev ORDER BY id DESC");
while ($row = mysql_fetch_array($showlist)){
$id = $row["id"];
$titel = $row["titel"];
$naam = $row["naam"];
$datum = $row["datum"];
$tijd = $row["tijd"];
$bron = $row["bron"];
$nieuws = $row["nieuws"];

print "$tijd - <a href='nieuws.php?id=$id'>$titel</a><br>";
}
?>

Acties:
  • 0 Henk 'm!

Verwijderd

Op zondag 21 oktober 2001 12:11 schreef BlackjackBoZ het volgende:
De query:

$host = "localhost"; // Where the database is hosted normally localhost
$username = ""; // Username for your MySQL database
$password = ""; // The password for your MySQL database
$db_database = "t1"; // The name of the database

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

$showlist = mysql_query("SELECT * FROM bjdev ORDER BY id DESC");
while ($row = mysql_fetch_array($showlist)){
$id = $row["id"];
$titel = $row["titel"];
$naam = $row["naam"];
$datum = $row["datum"];
$tijd = $row["tijd"];
$bron = $row["bron"];
$nieuws = $row["nieuws"];

print "$tijd - <a href='nieuws.php?id=$id'>$titel</a><br>";
}
?>
Ik neem aan dat je de correcte username en password wel hebt ingevuld in je eigen script?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Natuurlijk ik laat ze alleen voor jullie weg ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Op zondag 21 oktober 2001 12:27 schreef BlackjackBoZ het volgende:
Natuurlijk ik laat ze alleen voor jullie weg ;)
Uiteraard; snap ik. Maar krijg je een foutmelding?

Acties:
  • 0 Henk 'm!

Verwijderd

Doe het met 2 queries:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$showdate = mysql_query("SELECT datum FROM bjdev ORDER BY datum DESC");
while ($row = mysql_fetch_array($showdate)){

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

$showtitel = mysql_query("SELECT id,tijd,titel FROM bjdev where datum='$row[0]' ORDER BY id DESC");
while ($titel_row = mysql_fetch_array($showtitel)){

echo $titel_row[1]." - <a href='ShowNews.php3?id=".$titel_row[0]."'>".$titel_row[2]."</a><br>";

}

echo "<br>";

}
?>

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Anchorman:

Ik heb het even getest, ik moet zeggen dat het er goed uitziet. Toeminste hij zegt op welke datum het gepost is. Maar hij plakt de titel er niet onder. Ik kopieer hier het resultaat:

19 October 2001
Array

15 October 2001
Array

14 October 2001
Array
Array


Hoe krijg ik voor die Array de titel in de plaats??

Acties:
  • 0 Henk 'm!

Verwijderd

print "$tijd - <a href='nieuws.php?id=$id'>$titel</a><br>";

je probeert hier volgens mij een array te printen, je moet nog een bepaald element uit de array selecteren.

Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb mijn bovenstaande berichtje veranderd, check het even. De reden dat je het woordje 'Array' kreeg was omdat ik niet had aangegeven welk element uit de array genomen moest worden.

Even kleine uitleg:
Door de functie 'mysql_fetch_array' haal je per regel die voldoet aan je query een array. Deze array is een soort variabele met verschilende elementen, als je bijv. de array hebt die $row heet geeft 'echo $row' het woordje 'array' terug, maar als je aangeeft welk element je van die array wilt hebben geeft 'ie die juist aan, zoals bijv. $row[1].

In dit geval heb ik met de query 3 elementen per array uit de db gehaald, nl 'id,tijd,titel', deze array benoem je $titel_row. Nu is $titel_row[0] dus id, $titel_row[1]=tijd en $titel_row=titel.

PS. Je kan ze ook $titel_row['id'] etc noemen, zelfde resultaat.

Succes

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor de uitleg en de aanpassingen je script werkt, voor laten we zeggen 95 % WANT dit is het resultaat:

19 October 2001
18:55 - Test

15 October 2001
8:22 - De Counter-Strike maps die op het WK gebruikt worden

14 October 2001
21:24 - Punkbuster toch niet over?
20:44 - Zaag bomen om in Serious Sam 2

14 October 2001
21:24 - Punkbuster toch niet over?
20:44 - Zaag bomen om in Serious Sam 2



Er zit een bug in, als er 2 news post onder 1 datum staan print hij die 2 keer. Net zoals hieronder, kun jij dit fixen>???

Acties:
  • 0 Henk 'm!

Verwijderd

O ja, ik had het even uit het hoofd gedaan allemaal. Als je zelf wat kennis van SQL hebt, kan je het vrij makkelijk oplossen. Ik zal het dit keer doen:

De eerste query moet je veranderen in:

SELECT DISTINCT datum FROM bjdev ORDER BY datum DESC

Uitleg:
In plaats van alle data (datums) uit de database te halen, wil je bij meerdere posts op 1 dag, de datum maar 1x hebben, je moet hiervoor de term DISTINCT gebruiken in je SQL query. Deze term zorgt ervoor dat alleen de van-elkaar-verschillende datums uit de db worden gehaald.

Acties:
  • 0 Henk 'm!

Verwijderd

Wanneer je order by datum doet, is distinct toch overbodig geworden?

Acties:
  • 0 Henk 'm!

Verwijderd

niet echt, dat is GROUP BY...

Acties:
  • 0 Henk 'm!

Verwijderd

Stom!, leesfoutje :)
Pagina: 1