Hallo,

Ik ben momenteel bezig met een scipt waar iemand zijn uren verantwoording op kan bijhouden. Nu heb ik hier (tot nu toe) een redelijk simpel script voor geschreven.
De persoon kan op een maand klikken en krijgt daarna de desbetreffende maand te zien. Nu wil ik op de datums dat er al iets ingevuld is de achtergrond blauw hebben. Dit lukt ook.

Het probleem is echter als er op meer als 1 datum iets ingevuld wordt dan laat die alleen maar 1 datum blauw en niet meerdere.

Dit is het scipt is kwestie


<font face="Arial, Helvetica, sans-serif">
<?php
if ( $_SESSION['uid'] < 1 ) {
	echo "Je bent niet ingelogd";
} else {
	if ( !$_GET['uur'] ) {
	  $jaar = date("Y");
	  $maand = date("m");
	  
 	?>
    <table width="900" cellspacing="5">
      <tr>
        <td colspan="3" align="center" valign="middle" bgcolor="#34669A"><h1>Urenverantwoording <?php echo $jaar; ?></h1></td>
      </tr>
      <tr>
        <?php if ( $maand == '01' ) { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#996600"><?php } else { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#0099FF"><?php } ?><b>		<?php echo "<a href=\"?page=urenverantwoording&uur=01&typen=maand\">Januarie</a>" ?> </b></td>
        <?php if ( $maand == '02' ) { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#996600"><?php } else { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#0099FF"><?php } ?><b><?php echo "<a href=\"?page=urenverantwoording&uur=02&typen=maand\">Februarie</a>" ?></b></td>
        <?php if ( $maand == '03' ) { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#996600"><?php } else { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#0099FF"><?php } ?><b><?php echo "<a href=\"?page=urenverantwoording&uur=03&typen=maand\">Maart</a>" ?></b></td>
	  </tr>
      <tr>
        <?php if ( $maand == '04' ) { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#996600"><?php } else { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#0099FF"><?php } ?><b><?php echo "<a href=\"?page=urenverantwoording&uur=04&typen=maand\">April</a>" ?></b></td>
        <?php if ( $maand == '05' ) { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#996600"><?php } else { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#0099FF"><?php } ?><b><?php echo "<a href=\"?page=urenverantwoording&uur=05&typen=maand\">Mei</a>" ?></b></td>
        <?php if ( $maand == '06' ) { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#996600"><?php } else { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#0099FF"><?php } ?><b><?php echo "<a href=\"?page=urenverantwoording&uur=06&typen=maand\">Juni</a>" ?></b></td>
	  </tr>
      <tr>
        <?php if ( $maand == '07' ) { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#996600"><?php } else { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#0099FF"><?php } ?><b><?php echo "<a href=\"?page=urenverantwoording&uur=07&typen=maand\">Juli</a>" ?></b></td>
        <?php if ( $maand == '08' ) { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#996600"><?php } else { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#0099FF"><?php } ?><b><?php echo "<a href=\"?page=urenverantwoording&uur=08&typen=maand\">Augustes</a>" ?></b></td>
        <?php if ( $maand == '09' ) { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#996600"><?php } else { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#0099FF"><?php } ?><b><?php echo "<a href=\"?page=urenverantwoording&uur=09&typen=maand\">September</a>" ?></b></td>
	  </tr>
      <tr>
        <?php if ( $maand == '10' ) { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#996600"><?php } else { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#0099FF"><?php } ?><b><?php echo "<a href=\"?page=urenverantwoording&uur=10&typen=maand\">Oktober</a>" ?></b></td>
        <?php if ( $maand == '11' ) { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#996600"><?php } else { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#0099FF"><?php } ?><b><?php echo "<a href=\"?page=urenverantwoording&uur=11&typen=maand\">November</a>" ?></b></td>
        <?php if ( $maand == '12' ) { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#996600"><?php } else { ?><td width="300" height="30" align="center" valign="middle" bgcolor="#0099FF"><?php } ?><b><?php echo "<a href=\"?page=urenverantwoording&uur=12&typen=maand\">December</a>" ?></b></td>
	  </tr>
	
    </table>

    <?php
  } else {
	  $type = $_GET['typen'];
	  $maand = $_GET['uur'];
	  $jaar = date("Y");
	  
	  if ( $type == "maand" ) {
		  $db = "deb60170_" . $_SESSION['uid'];
			mysql_select_db($db);
		
		$date = time();
		$day = date("d", $date);
		$month = $maand;
		$year = date("Y" , $date);
		
		$first_day = mktime(0,0,0, $month, 1 , $year);
		
		$title = date('F', $first_day);
		
		$day_of_the_week = date('D', $first_day);
		
		switch($day_of_the_week) {
			case "Sun" : $blank = 0; break;
			case "Mon" : $blank = 1; break;
			case "Tue" : $blank = 2; break;
			case "Wed" : $blank = 3; break;
			case "Thu" : $blank = 4; break;
			case "Fri" : $blank = 5; break;
			case "Sat" : $blank = 6; break;
		}
		
		$days_in_month = cal_days_in_month(0, $month, $year);
		
		?>
        <table border="6" width="394" align="center">
        <tr><th colspan="60"><?php echo $title; echo $year; ?> </th></tr>  
        <tr><td width="62">Z</td>
        	<td width="62">M</td>
            <td width="62">D</td>
            <td width="62">W</td>
            <td width="62">D</td>
            <td width="62">V</td>
            <td width="62">Z</td>
            </tr>      
        <?php
		$day_count = 1;
		
		?> <tr> <?php
		
		while ( $blank > 0 ) {
			echo "<td>"; echo "</td>";
			$blank = $blank - 1;
			$day_count++;
		}
		$day_num = 1;
		
		while ( $day_num <= $days_in_month ) {
			$sql = mysql_query("SELECT * FROM `uren` WHERE `maand` = '$month'");
			$row = mysql_fetch_assoc($sql);
			if ( $day_num == $row['dag'] ) {
			echo "<td bgcolor='#3399FF'>" . $day_num . "</td>";
			} else {
			echo "<td>" . $day_num . "</td>";
			}
			
			
			$day_num++;
			$day_count++;
			
			if ( $day_count > 7 ) {
				echo "<tr></tr>";
				$day_count = 1;	
			}
		}
		
		while ( $day_count > 1 && $day_count <= 7 ) {
			echo "<td></td>";
			$day_count++;
		}
		  echo "</tr></table>";
	  }

  }

}

	
	
?>
</font>


De oplossing is waarschijnlijk makkelijk maar zo heel erg lang ben ik nog niet met scripts bezig dus als iemand me kan helpen zou dat zeer welkom zijn :D

Groeten Jaap
Is het misschien omdat ik een while functie gebruik. mischien kan ik een foreach gebruiken
Je moet proberen om altijd te redeneren als volgt:

- Bovenaan de php-logica (volledig onder controle hebben)
- Dan pas, onderaan, HTML naar de gebruiker sturen.


Jij probeert zo veel mogelijk de dingen te doen waar de code voor de HTML staat. Probeer die twee altijd zo veel mogelijk uit elkaar te trekken.

bv.
<?php
if ( $type == "maand" ) {
$db = "deb60170_" . $_SESSION['uid'];
mysql_select_db($db);
?>

Op lijn 44 beslis je of je al dan niet een database wil aanspreken.
Maar ondertussen staat de hoofding van de tabel er al.

Je zou eigenlijk al in de eerste 3 a 4 lijnen moeten weten of je een database nodig hebt of niet.
Meer structuur steken in de logica.

---

Je haalt nu je data op binnenin een while. Bij elke iteratie ga je opnieuw de database aanspreken. Dat is niet efficiƫnt.
(Het is al helemaal niet efficiƫnt dat je * gebruikt in de query; dat je trouwens verschillende records kan hebben op 1 dag ... terwijl je juist wil weten: 'gebeurt er iets die dag'? Nu stuurt mySQL hopen gegevens op die je niet nodig hebt.)


Wat denk je van deze aanpak:
- je weet over welke maand het gaat
- je haalt met 1 query de datums op waarop iets gebeurt.
Zoiets:
<?php
$sql = mysql_query("
SELECT dag
FROM uren
WHERE maand = '$month'
GROUP BY dag
ORDER BY dag
");
?>

- Je steekt die resultaten in een array.
- Je overloopt de dagen van de maand, waarbij je dus de <table> opbouwt.
Bij elke dag ga je snuffelen in de array. Als er die dag iets gebeurt, kleur je zo; anders kleur je anders ...

oke dat is inderdaad een hele goede tip hier kan ik weer mee vooruit.

Ontzettend bedankt!

[size=xsmall]Toevoeging op 21/09/2012 15:12:10:[/size]

Oke ik heb nog 1 vraag.

Hoe vergelijk ik dan die array met mijn waarde.

Zo heb ik gecheckt dat de array werkte

while ($dagen = mysql_fetch_array($sql)) {
		 foreach ($dagen as $dag ) {
			 echo $dag;
			 echo "<br>";
		 }


maar als ik dus dit met elkaar vergelijk verandert er niks van kleur

while ( $day_num <= $days_in_month ) {
			
			if ( $dagen['dag'] == $day_num ) {
				
				echo "<td bgcolor='#00FFFF'>" . $day_num . "</td>";
			} else {
			echo "<td>" . $day_num . "</td>";
			}
oke ik heb een simpele test geschreven om de oplossing hierboven aangegeven maar kan iemand mij vertellen waarom dit niet werkt als ik van tevoren een test array heb gemaakt met 3 waardes en hij met de in_array functie blijkbaar niet in de array zoekt?


$dagen = array('11', '12', '22');
		 
	 print_r($dagen);
		$date = time();
		$day = date("d", $date);
		$month = $maand;
		$year = date("Y" , $date);
		
		$first_day = mktime(0,0,0, $month, 1 , $year);
		
		$title = date('F', $first_day);
		
		$day_of_the_week = date('D', $first_day);
		
		switch($day_of_the_week) {
			case "Sun" : $blank = 0; break;
			case "Mon" : $blank = 1; break;
			case "Tue" : $blank = 2; break;
			case "Wed" : $blank = 3; break;
			case "Thu" : $blank = 4; break;
			case "Fri" : $blank = 5; break;
			case "Sat" : $blank = 6; break;
		}
		
		$days_in_month = cal_days_in_month(0, $month, $year);
		
		?>
        <table border="6" width="394" align="center">
        <tr><th colspan="60"><?php echo $title; echo $year . "<br>"; print_r($dagen);  ?> </th></tr>  
        <tr><td width="62">Z</td>
        	<td width="62">M</td>
            <td width="62">D</td>
            <td width="62">W</td>
            <td width="62">D</td>
            <td width="62">V</td>
            <td width="62">Z</td>
            </tr>      
        <?php
		$day_count = 1;
		
		?> <tr> <?php
	
		while ( $blank > 0 ) {
			echo "<td>"; echo "</td>";
			$blank = $blank - 1;
			$day_count++;
		}
		$day_num = 1;
		
		
		while ( $day_num <= $days_in_month ) {
			$dagen = array(11, 12, 22);
			if(in_array($dag_num , $dagen)) {
				
				echo "<td bgcolor='#00FFFF'>" . $day_num . "0" . "</td>";
			} else {
			echo "<td>" . $day_num . "</td>";
			}
		
			$day_num++;
			$day_count++;
			
			
			
		
			
			if ( $day_count > 7 ) {
				echo "<tr></tr>";
				$day_count = 1;	
			}
		
		}
		
		while ( $day_count > 1 && $day_count <= 7 ) {
			echo "<td></td>";
			$day_count++;
		}
	
		  echo "</tr></table>";
	  }

  }

}

	
	
?>

Reageren