Al rommelend met een scriptje loop ik tegen een probleempje op.
in onderstaand script wil ik de datum van een agenda item vergelijken met de datum van vandaag om deze zodoende wel of niet weer te geven.
Op zich werkt voor de data 27-03-2008 en 28-03-2008 dit maar als ik een datum als 07-07-2008 invoer wordt deze niet weergegeven.
Iemand enig idee ?

<link rel='stylesheet' type='text/css' href='css/style.css'/>
<link rel='stylesheet' type='text/css' href='css/agenda.css'/>
<?php

include("dbconnect.php");

?>

  <?

$qSelect_berichten  = mysql_query('SELECT * FROM agenda  ORDER BY jaar,maand,dag ASC') or die (mysql_error()); 




  while($aBerichten = mysql_fetch_array($qSelect_berichten)) 

{
	

$vandaag = date("dmY");
$dag = $aBerichten['dag'];
$maand= $aBerichten['maand'];
$jaar= $aBerichten['jaar'];
$datum = $dag . $maand . $jaar ;
if($datum<$vandaag){
	
	echo'';

	} 
	else if($datum==$vandaag){
	echo'<table width="400px" class="vandaag" border="0" cellspacing="0" cellpadding="0">
              <tr> 
                <td class="agendadatum">'.$aBerichten['dag'].'-'.$aBerichten['maand'].'-'.$aBerichten['jaar'].'</td>
				
                <td class="agendaitems"><a href="agendaitemn.php?id='.$aBerichten['id'].'">'.$aBerichten['titel'].'</a></td>
	            
                <td class="agendaorkest">
				'.$aBerichten['HO'].'';?>
	   <? echo ''.$aBerichten['DO'].'';?><? if($aBerichten['DO']=="DO") { echo ' '; } ?>
	   <? echo ''.$aBerichten['JO'].'';?><? if($aBerichten['JO']=="JO") { echo ' '; } ?>
	   <? echo ''.$aBerichten['JSG'].'';?><? if($aBerichten['JSG']=="JSG") { echo ' '; } ?>	
	   <? echo ''.$aBerichten['SG'].'';?><? if($aBerichten['SG']=="SG") { echo ' '; } ?>	
	   <? echo ''.$aBerichten['OO'].'';?><? if($aBerichten['OO']=="OO") { echo ' '; } ?>	
	   <? echo ''.$aBerichten['OTB'].'';?><? if($aBerichten['OTB']=="OTB") { echo ' '; } ?>	
	   <? echo ''.$aBerichten['MZK'].'';?><? if($aBerichten['MZK']=="MZK") { echo ' '; } ?>	
	   <? echo ''.$aBerichten['Allen'].'';?><? if($aBerichten['Allen']=="Allen") { echo ' '; } ?>	
	  <? echo' </td>
              </tr>
            </table>';}
		else if($datum>$vandaag){
	echo'
	
	<table width="400px" class="agendarow" border="0" cellspacing="0" cellpadding="0">
              <tr> 
                <td class="agendadatum">'.$aBerichten['dag'].'-'.$aBerichten['maand'].'-'.$aBerichten['jaar'].'</td>
				
                <td class="agendaitems"><a href="agendaitemn.php?id='.$aBerichten['id'].'">'.$aBerichten['titel'].'</a></td>
	            
                <td class="agendaorkest">
				'.$aBerichten['HO'].'';?>
	   <? echo ''.$aBerichten['DO'].'';?><? if($aBerichten['DO']=="DO") { echo ' '; } ?>
	   <? echo ''.$aBerichten['JO'].'';?><? if($aBerichten['JO']=="JO") { echo ' '; } ?>
	   <? echo ''.$aBerichten['JSG'].'';?><? if($aBerichten['JSG']=="JSG") { echo ' '; } ?>	
	   <? echo ''.$aBerichten['SG'].'';?><? if($aBerichten['SG']=="SG") { echo ' '; } ?>	
	   <? echo ''.$aBerichten['OO'].'';?><? if($aBerichten['OO']=="OO") { echo ' '; } ?>	
	   <? echo ''.$aBerichten['OTB'].'';?><? if($aBerichten['OTB']=="OTB") { echo ' '; } ?>	
	   <? echo ''.$aBerichten['MZK'].'';?><? if($aBerichten['MZK']=="MZK") { echo ' '; } ?>	
	   <? echo ''.$aBerichten['Allen'].'';?><? if($aBerichten['Allen']=="Allen") { echo ' '; } ?>	
	  <? echo' </td>
              </tr>
            </table>';}
		
			}
 ?>

Gelieve de code in [ignore]
[/ignore] tags te plaatsen :-) Gebruik hiervoor de "Edit" knop.
Waarom sla je alles los op? Een datum is een datum. Een jaar, maand en een dag is kan ook in één veld worden opgeslagen. Je kunt dan in de query al controleren (in de where clause) of een bericht wel of niet geSELECTeerd wordt.
Ik ben in het begin aan de slag gegaan met de opbouw van de database en heb ze (helaas) los op laten slaan en dit door het hele zooitje verweven.... Echter is het formaat nu wel zo dat Date dezelfde output heeft als de losse velden. DIt mag het probleem dus niet veroorzaken.
Met andere woorden: maak een DATE veld aan in je database. Dan kun je bijv dit doen:

SELECT veld1, veld2
FROM tabelnaam
WHERE CURDATE() >= datum
Offtopic: CURDATE() mag je ook schrijven als CURRENT_DATE, dat is een SQL-constante die ook in andere databases werkt.

Ps. Waarom lege content echoen? ''. kun je net zo goed weglaten, scheelt weer overbodige code en dus krijg je een kleine kans op bugs.
ff een Noob vraag,

Kan ik in phpmyadmin de velden dag, maand en jaar gewoon omzeten naar type DATE of is dat weer te simpel gedacht ?
De velden dag, maand en jaar weggooien en dan een nieuw veld aanmaken met de naam 'datumtijd' (of iets dergelijks) en die dan een DATETIME type meegeven.
Dan loop ik opnieuw vast.... Ik heb in de admin sectie een selec menu voor de items dag maand en jaar. Dit krijg ik naar mijn idee niet netjes in 1 veld gepropt. Derhalve loop ik vast op het enkele DATE type.
Of weer een denkfout ?
Denk het wel, aangezien je het samen kunt stellen:
<?php
$datumtijd = $_POST['jaar'] . $_POST['maand'] . $_POST['dag'] . ' ' . date('H:i:s');

/* en dan heeft $datumtijd het volgende formaat: 00000000 00:00:00 
 Met de eerste acht nullen de datum (jaar, maand en dag) die je via het 
 formulier ophaalt en de laatste zes nullen de tijd (de huidige tijd).
 Het is volgens mij ook mogelijk om alleen de datum (dus:
 $datumtijd = $_POST['jaar'] . $_POST['maand'] . $_POST['dag']) op te slaan
 in een DATETIME type.
*/ 
Maar dan met een - tussen jaar-maand en maand-dag

<?php
$datumtijd = $_POST['jaar'] .'-'. $_POST['maand'] .'-'. $_POST['dag'] . ' ' . date('H:i:s');
?>
Tevens zul je met checkdate() in PHP moeten nagaan of de datum wel een geldige datum is, MySQL kan pas sinds versie 5.0 (en alleen wanneer e.e.e.a. goed is geconfigureerd, wat zelden het geval is) een broodje aap van een datum onderscheiden. Dat zal je dan corrupte data opleveren... Extra controles in PHP zijn dus noodzakelijk. Kost je extra tijd, maar dat is een keuze wanneer je voor MySQL kiest.

Reageren