Ik heb al een half uur liggen knoeien om een degelijke tabel te krijgen, maar helaas. De bedoeling is dat elke dag een nieuwe tabel krijgt. Kan iemand me verderhelpen aub?

<?php
if($datum != $cur_datum) {


print"<table border=0 align=left>";
print"<tr bordercolor=#084E89>";
print"<td height=26 valign=top bgcolor=#999999>";
print"$datum";
print"</td>";
print"</tr>";
$cur_datum = $datum;
}


print"<tr>";
print"<td align=left valign=top bgcolor=#BCBCBC>";

if ($opdracht != $cur_opdracht) {
print" <strong><font size=+1 face=verdana color=#0C5286> $opdracht</font></strong><br /><br />";
$cur_opdracht = $opdracht;
}
print" <font face=verdana><strong>Vak: </strong>$vak <br /> ";
print" <strong>Onderwerp:</strong> $onderwerp <br /> ";
print" <strong>Opgave:</strong> $opgave </font><br /><br /> ";
print"</td>";
print"</tr>";
print"</table>";
?>
Om te beginnen, hoe kom je aan de variabelen $datum en $opdracht? In welke variabele heb je de dagen staan waarvan je een nieuwe tabel wilt hebben?

Een klein voorbeeldje:
<?php
$dagen = array('maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag', 'zondag');

foreacht($dagen as $dag)
{
echo '<table>';
echo '<tr><td>'.$dag.'</td></tr>';
echo '</table>';
}
?>

Nu heb je iedere dag in een eigen tabel. Bedoel je zoiets of wat anders?
zet eens boven in je script:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
?>
Dit heb ik al staan, de gegevens worden uit de database gehaald. Maar er moet geen tabel komen voor een dag zonder iets in.

$datum = $dag[intval($Adate[3])] --> dit geeft altijd een fout, ik weet niet wat de waarde moet zijn waar die 3 staat.

<?php
while(list($id,$datum,$vak,$onderwerp,$opgave,$opdracht) = mysql_fetch_row($result)) {

$maand = array('', 'Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November',
'December' );
$dag = array('Zondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag', 'Zondag');


list($datum) = explode(' ',$datum);

$Adate = explode('-',$datum);
$datum = $dag[intval($Adate[3])] .' '. intval($Adate[2]) .' '. $maand[intval($Adate[1])] .' '. $Adate[0];

if($datum != $cur_datum) {


print"<table border=0 align=left>";
print"<tr bordercolor=#084E89>";
print"<td height=26 valign=top bgcolor=#999999>";
print"$datum";
print"</td>";
print"</tr>";
$cur_datum = $datum;
}


print"<tr>";
print"<td align=left valign=top bgcolor=#BCBCBC>";

if ($opdracht != $cur_opdracht) {
print" <strong><font size=+1 face=verdana color=#0C5286> $opdracht</font></strong><br /><br />";
$cur_opdracht = $opdracht;
}
print" <font face=verdana><strong>Vak: </strong>$vak <br /> ";
print" <strong>Onderwerp:</strong> $onderwerp <br /> ";
print" <strong>Opgave:</strong> $opgave </font><br /><br /> ";
print"</td>";
print"</tr>";
print"</table>";
?>
Zorg ervoor dat je je datum direct in het juiste formaat uit de database haalt. Dit doe je bijvoorbeeld met DATE_FORMAT():

SELECT DATE_FORMAT(datum, '%d-%m-%Y') as formatted_date
FROM tabel

Om de datum in het dd-mm-yyyy formaat op te halen. Als je alles in het nederlands wilt, is dat ook mogelijk alleen wordt de query dan even lastiger:
<?php
$sql = "
SELECT
CONCAT (
ELT ( DAYOFWEEK(datum),
'Zondag',
'Maandag',
'Dinsdag',
'Woensdag',
'Donderdag',
'Vrijdag',
'Zaterdag',
),
' ',
DAY(datum),
' ',
ELT ( MONTH(datum),
'Januari',
'Februari',
'Maart',
'April',
'Mei',
'Juni',
'Juli',
'Augustus',
'September',
'Oktober',
'November',
'December'
),
' ',
YEAR(datum)
) AS formatted_datum
FROM
tabel
";
?>

Dit geeft een datum terug in het formaat 'Vrijdag 24 November 2006'.
Dit is mijn huidige query, moet ik er dan 2 maken om het bovenstaande te kunnen toepassen?

<?php
$query="SELECT * FROM agenda WHERE DATE(datum) > CURDATE()
GROUP by datum,opdracht,vak,opgave,opdracht
";
?>
Nee hoor, dat kan gewoon in 1 query. Op dit moment gebruik je een * om alle velden te selecteren. Vul liever gewoon de kolomnamen in die je wilt selecteren, behalve als je echt daadwerkelijk ALLE kolommen wilt selecteren.

Waarom heb je daarnaast zo'n uitgebreide GROUP BY clause, dat is nergens voor nodig. Ook is het niet nodig om de DATE() functie rond 'datum' te gebruik in de WHERE clause. Als je met CURDATE() werkt wordt er alleen naar het DATE gedeelte gekeken.

<?php
$sql = "
SELECT
CONCAT (
ELT ( DAYOFWEEK(datum),
'Zondag',
'Maandag',
'Dinsdag',
'Woensdag',
'Donderdag',
'Vrijdag',
'Zaterdag'
),
' ',
DAY(datum),
' ',
ELT ( MONTH(datum),
'Januari',
'Februari',
'Maart',
'April',
'Mei',
'Juni',
'Juli',
'Augustus',
'September',
'Oktober',
'November',
'December'
),
' ',
YEAR(datum)
) AS formatted_datum,
opdracht,
vak,
opgave,
opdracht
FROM
agenda
WHERE
datum > CURDATE()
";
?>
[edit]foutje gecorrigeerd[/edit]
FOUT: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '), ' ', DAY(datum), ' ', ELT' at line 11

:S
Achter 'zaterdag' staat een komma te veel.
FOUT: FUNCTION onlinediary.ELT does not exist

PS: onlinediary = database
Welke antieke versie van MySQL gebruik je? 4.1 is toch eigenlijk wel een minimum vereiste, oudere versies kun je niet met droge ogen een database noemen.

Reageren