Nettere opmaak tabel

Status
Niet open voor verdere reacties.

jeroenth

Gebruiker
Lid geworden
19 sep 2009
Berichten
16
Hallo allemaal.

Ik heb een weekplanner die aangeeft op welke dag iemand beschikbaar is.
Echter de uitvoer ziet er niet zo netjes uit.
voorbeeld.jpg


De gegevens haal ik op uit een MySQL database met php het gaat erom geen lege vakken te hebben maar direct onder de dag de namen.
Het script dat ik gebruik ziet er zo uit:

Code:
$verbinding = mysql_connect ($host, $gebruiker, $wachtwoord);
$opdracht = "SELECT maandag, dinsdag, woensdag, donderdag, vrijdag, zaterdag, zondag  FROM $tabelnaam WHERE week = $week  ";
$resultaat = mysql_db_query ($dbnaam, $opdracht, $verbinding);


//maak een tabel
print ("<TABLE BORDER=1 WIDTH=\"75%\" CELLSPACING=2 CELLPADDING=2 ALIGN=CENTER>\n");
print ("<TR ALIGN=CENTER VALIGN=TOP>\n");
print ("<TD ALIGN=CENTER VALIGN=TOP>Week</TD>\n");
print ("<TD ALIGN=CENTER VALIGN=TOP>Maandag</TD>\n");
print ("<TD ALIGN=CENTER VALIGN=TOP>Dinsdag</TD>\n");
print ("<TD ALIGN=CENTER VALIGN=TOP>Woensdag</TD>\n");
print ("<TD ALIGN=CENTER VALIGN=TOP>Donderdag</TD>\n");
print ("<TD ALIGN=CENTER VALIGN=TOP>Vrijdag</TD>\n");
print ("<TD ALIGN=CENTER VALIGN=TOP>Zaterdag</TD>\n");
print ("<TD ALIGN=CENTER VALIGN=TOP>Zondag</TD>\n");
print ("</TR>\n");

//Schrijf resultaat naar het scherm
while ($rij = mysql_fetch_array ($resultaat) ) {

print ("<TR ALIGN=CENTER VALIGN=TOP>\n");
print ("<TD ALIGN=CENTER VALIGN=TOP>$week</TD>\n");
print ("<TD ALIGN=CENTER VALIGN=TOP>$rij[maandag]</TD>\n");
print ("<TD ALIGN=CENTER VALIGN=TOP>$rij[dinsdag]</TD>\n");
print ("<TD ALIGN=CENTER VALIGN=TOP>$rij[woensdag]</TD>\n");
print ("<TD ALIGN=CENTER VALIGN=TOP>$rij[donderdag]</TD>\n");
print ("<TD ALIGN=CENTER VALIGN=TOP>$rij[vrijdag]</TD>\n");
print ("<TD ALIGN=CENTER VALIGN=TOP>$rij[zaterdag]</TD>\n");
print ("<TD ALIGN=CENTER VALIGN=TOP>$rij[zondag]</TD>\n");
print ("</TR>\n");
}

Ik ben een beginner met php en sql
Wie helpt me een stukje op weg ?

De velden die ik in mijn database gebruik zijn id, week, maandag, dinsdag, woensdag, donderdag, vrijdag, zaterdag, zondag
 
je kan td's weg laten als ze leeg zijn, dus check of er een waarde in je variable staat van de personen zoniet dan moet ie geen td echoen. savé?

bijvoorbeeld:
PHP:
if($rij[maandag] != null)
     print ("<TD ALIGN=CENTER VALIGN=TOP>$rij[maandag]</TD>\n");
 
Hoi Cars

Als ik dat gebruik schuift alles op.
Geen lege velden meer maar de namen staan ook niet meer bij de juiste dagen.
 
als ik je goed begrijp wil je dat de lege vakjes weg gaan en de namen naar boven gaan,
toch?
 
Er zijn twee manieren om ervoor te zorgen dat je alles op één regel krijgt (want dat is toch de bedoeling?). De eerste is een concat query waarmee je de diverse strings aan elkaar kunt plakken, bijvoorbeeld zo:[sql]select group_concat(distinct(maandag)) as maandag,group_concat(distinct(dinsdag)) as dinsdag,group_concat(distinct(woensdag)) as woensdag,group_concat(distinct(donderdag)) as donderdag,group_concat(distinct(vrijdag)) as vrijdag,group_concat(distinct(zaterdag)) as zaterdag,group_concat(distinct(zondag)) as zondag from $tabelnaam where week=$week group by week[/sql]Maar als je die query uitvoert zul je zien dat ook de lege velden aan elkaar worden geknoopt door mysql wat resulteert in komma's op ongewenste plaatsen.

Een andere methode is om eerst alle personen bij de juiste dagen te zetten, bijvoorbeeld door alles eerst tijdelijk in een array te zetten. Voorbeeld:
PHP:
$sql = "select maandag, dinsdag, woensdag, donderdag, vrijdag, zaterdag, zondag  from $tabelnaam where week=$week";
$result = mysql_query($sql);
$test = array("maandag"=>array(),"dinsdag"=>array(),"woensdag"=>array(),"donderdag"=>array(),"vrijdag"=>array(),"zaterdag"=>array(),"zondag"=>array());
while ($row = mysql_fetch_array($result)) {
	if ($row["maandag"] <> "") { $test["maandag"][] = $row["maandag"]; }
	if ($row["dinsdag"] <> "") { $test["dinsdag"][] = $row["dinsdag"]; }
	if ($row["woensdag"] <> "") { $test["woensdag"][] = $row["woensdag"]; }
	if ($row["donderdag"] <> "") { $test["donderdag"][] = $row["donderdag"]; }
	if ($row["vrijdag"] <> "") { $test["vrijdag"][] = $row["vrijdag"]; }
	if ($row["zaterdag"] <> "") { $test["zaterdag"][] = $row["zaterdag"]; }
	if ($row["zondag"] <> "") { $test["zondag"][] = $row["zondag"]; }
}
mysql_free_result($result);
$tabel = "<table border=1>";
$tabel .= "<tr><td>".implode("</td><td>",array_keys($test))."</td></tr>\n";
$tabel .= "<tr>";
foreach (($test) as $dag => $data) {
	$tabel .= "<td>".((count($data) > 0)?implode(", ",$data):"&nbsp;")."</td>";
}
$tabel .= "</tr></table>";
echo $tabel;
Dit geeft het gewenste resultaat, maar is erg omslachtig. Voor een echt goed resultaat zul je er eerst voor moeten zorgen dat er geen lege velden in de database staan en vervolgens een (concat) query maken.
 
Ik ga wel eens met het invoer gedeelte aan de slag.
Dat lijkt me de handigste oplossing.

Geen lege plaatsen bij de invoer is denk ik makkelijker te realiseren met mijn beperkte php kennis.

In ieder geval bedankt voor de tips :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan