Hier kom ik niet uit: stel je een tabel gereedschap voor, en een tabel uitlenen. De tabel gereedschap bevat 2 velden, gereedschap_ID en naam (bijv. id=3 naam=hamer). De tabel uitlenen bevat 4 velden, waaronder gereedschap_ID, uitleendatum en inleverdatum. Nu wil ik in php een html tabel maken die zichtbaar maakt wanneer een gereedschap is uitgeleend.

Ik heb het volgende script verzonnen, maar dat voldoet niet. Je krijgt nl. wel netjes een html-tabel met voor iedere dag een kolom en voor ieder stuk gereedschap een rij, en alle uitleendagen worden aangegeven door een grijze kleur en een X. Maar het gaat mis als een gereedschap meer dan eenmaal per maand wordt uitgeleend en ingeleverd .

Dit is het script, wat dus werkt bij eenmaal uitlenen per maand:
<?php

//dit gaat natuurlijk straks uit een select vak komen
$maand=oktober;
//eerst kalender maken
if($maand=='oktober'){
$aantaldagen=31;
}

//eerst de maandkalender maken
print("oktober");
print("<table border=1 bordercolor=black cellspacing=0 cellpadding=0><tbody><tr><td>gereedschap</td>");
for ( $dag = 1; $dag <= $aantaldagen; $dag += 1) {
print("<td>$dag</td>");
}
print("</tr>");

//nu per stuk gereedschap de zaak regelen
$host="localhost";
$gebruiker="*****";
$wachtwoord="*****";

$DBNaam="test";


$Verbinding= mysql_connect($host, $gebruiker, $wachtwoord);
$Opdracht= "SELECT * from gereedschap order by naam ASC";
$Resultaat = mysql_db_query($DBNaam,$Opdracht,$Verbinding);
//lus per kamer
while($Rij=mysql_fetch_array($Resultaat)){
$gereedschap=$Rij['naam'];
$gereedschap_ID=$Rij['gereedschap_ID'];
//ieder gereedschap krijgt 1 rij
print("<tr><td>$gereedschap</td>");
//hieronder per gereedschap de uitleenmomenten eruit halen

$Opdrachtres= "SELECT * from uitlenen WHERE gereedschap_ID=$gereedschap_ID";
$Resultaatres = mysql_db_query($DBNaam,$Opdrachtres,$Verbinding);


//A
while($Rijres=mysql_fetch_array($Resultaatres)){

$gereedschap=$Rijres['gereedschap'];
$uitleendatum=$Rijres['uitleendatum'];
$inleverdatum=$Rijres['inleverdatum'];

$uitleen = explode ("-", $uitleendatum);

$uitleendag=$uitleen[2];

$inlever = explode ("-", $inleverdatum);

$inleverdag=$vertrekdatum[2];


for ( $dag = 1; $dag <= $aantaldagen; $dag += 1) {
if($dag>=$uitleendag AND $dag<=$inleverdag){
$bgcolor="silver";
$waarde="X";
}else{
$bgcolor="white";
$waarde="";
}
print("<td bgcolor=$bgcolor>$waarde</td>");
}


}
//A
print("</td></tr>");


}
//eind lus per gereedschap
print("</tbody></table>");
?>

Maar nu zit ik dus klem: want als een hamer 2 maal wordt uitgeleend, dan worden er weer 31 cellen aan een rij toegevoegd. En als ik binnen de lus een nieuw erij laat beginnen dan krijgt een tweemaal uitgeleende hamer ook 2 rijen. ik zoek dus een manier om eerst per gereedschap alle uitleen en inleverdata te verzamelen (dus enkele malen de while-lus doorlopen) en die waarden in variabelen op te slaan om daarna pas de rij met cellen te schrijven.
Inloggegevens verwijderd.

SanThe.
Als ik je goed begrijp wil je een overzicht van uitleen data PER gereedschap. Kun je dan niet gewoon je query aanpassen naar:

<?php
$sql = "SELECT * from uitlenen WHERE gereedschap_ID = " . $gereedschap_ID . " ORDER BY gereedschap";
?>

Vervolgens sla je de gereedschap_ID op in een variabele en kijk je of hij veranderd. Zo niet, dan is een 'hamer' bijvoorbeeld twee keer uitgeleend:

<?php

while ($row = mysql_fetch_array($res))
{
if (empty($uitleen))
$uitleen = 1;
elseif (!empty($gereedschap) && $gereedschap != $row['gereedschap'])
{
echo 'Bovenstaande gereedschap werd ' . $uitleen . ' keer uitgeleend.';
$uitleen = 1;
}
else
$uitleen++;

if (empty($gereedschap) || (!empty($gereedschap) && $gereedschap != $row['gereedschap']))
{
$gereedschap = $row['gereedschap'];

echo '<h2>' . $row['gereedschap'] . '</h2>';
}

echo '<p>Uitleen datum: ' . $row['uitleendatum'] . '<br />';
echo 'Inlever datum: ' . $row['inleverdatum'] . '</p>';
}

?>

Ook nog een mooie counter ingebouwd :P Succes!
Ja, dat is inderdaad mooi. Hier ga ik op door. Bedankt Bas. Ook voor de counter.

Reageren