Goedenavond allemaal,

Ik ben bezig met een agenda te maken in PHP, nu werkt inprincipe alles, geeft de juiste dagen weer en lege ruimtes als de eerste dag van de maand op een andere dag valt, etc.

Maar nu wil ik ook een optie om bij een bepaalde dag een afspraak neer te zetten.
Ik heb voor het testen even een DB en tabel aangemaakt, die wat gevuld met gegevens, alleen nu heb ik het probleem bij het laten zien van de afspraken op de dagen.
Als ik bijvoorbeeld, op de 17de in Januari een afspraak heb, moet dat worden laten zien.

Nu lukt het mij wel om 1 afspraak te laten zien, alleen zodra er meerder afspraken zijn, gaat dit mis.

Misschien is het verhaal niet helemaal duidelijk, ik zal voor de duidelijkheid ook wat PHP code mee sturen.

PHP:

<?php


//alle maanden in array zetten
//wordt later gebruikt
$maanden = array("Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","October","November","December");

//pak de maand en datum uit de get global
//maar eerst kijken of ze wel bestaan
if(!isset($_GET['maand']) && !isset($_GET['jaar'])){
	$_GET['maand'] = date('n');
	$_GET['jaar'] = date('Y');
} 

//stukje beveiliging, globale get variabeles moeten int zijn
if(is_numeric($_GET['maand']) && is_numeric($_GET['jaar'])){

//volgende en vorige berekeningen maken
$maand = $_GET['maand'];
$jaar = $_GET['jaar'];

//geef maand volgende en vorige
$volgende_maand = $maand + 1;
$vorige_maand = $maand - 1;

//geef jaar volgende en vorige, NIET BEREKENEN
$volgende_jaar = $jaar;
$vorige_jaar = $jaar;

//als de maand 0 is dan wordt maand 12 en jaar -1
if($vorige_maand == 0){
	$vorige_maand = 12;
	$vorige_jaar = $jaar-1;
}

//kijk waar maand op is, dit beinvloed jaar variabele
if($volgende_maand == 13){
	$volgende_maand = 1;
	$volgende_jaar = $jaar + 1;
}
//echo maand en jaar, $maand komt uit de array $maanden, $maanden telt 11, $maand telt 12, dus -1
echo '
<center><h1>' . $maanden[$maand - 1] . ' ' . $jaar .'</h1></center>
<table colspan=7 align="center" height=500 width=800 border=1>
	<tr>	
		<td><b>Zondag</b></td>
		<td><b>Maandag</b></td>
		<td><b>Dinsdag</b></td>
		<td><b>Woensdag</b></td>
		<td><b>Donderdag</b></td>
		<td><b>Vrijdag</b></td>
		<td><b>Zaterdag</b></td>
	</tr>
';

//geef de unix timestamp voor de maand en jaar van nu
$tijdnu = mktime(0,0,0,$maand,1,$jaar);
//kijk hoeveel dagen er maximaal in de maand zitten (bijv; 31,30)
$max_aantal_dagen = date('t', $tijdnu);
//geef de maand van vandaag, (KOMT IN ASSOC ARRAY), wday nodig
$datum_maand = getdate($tijdnu);
//pak de begin dag, wday geeft nummers van 0 tot 6, 0 voor zondag, 6 voor zaterdag
//bepaal de start dag van de maand
$start_dag_maand = $datum_maand['wday'];
//pak de datum van vandaag, alleen de dag
$datum_vandaag = date('d');

mysql_connect('xxx','xxx','xxx') or die(mysql_error());
mysql_select_db('xxx') or die(mysql_error());

/* ----------------------------------------------------------------- */
$query = mysql_query("SELECT * FROM afspraken") or die(mysql_error());

while($row = mysql_fetch_assoc($query)){
	
	$naam =	$row['naam'];
	$omschrijving = $row['omschrijving'];
	$date = $row['datum'];	
	$exp = explode('-', $date);
		
	
		
}	
/* ------------------------------------------------------------------ */

echo '<br/>';
print_r($exp);
//begin for loop om de maand structuur op te zetten
for($i = 0; $i<($max_aantal_dagen + $start_dag_maand); $i++){
	
	//als er geen rest overblijft, dus 0, dan is er een nieuwe week begonnen
	//($datum_maan['wday'] = 0, zondag - 6, zaterdag
	// 0 = begin van de week
	// 6 = einde van de week
	if($i % 7 == 0){ 
		echo '<tr>';
	}
	//als i kleiner is dan start dag, dan vallen die dagen niet in de maand
	//wat dus betekend dat het een leeg vakje nodig heeft
	if($i < $start_dag_maand){
		echo '<td>&nbsp;</td>';
	//als de dag gelijk is aan de berekening, dan maak die dag bold(<b></b>)
	}elseif(($i - $start_dag_maand + 1) == $datum_vandaag){
		echo '<td><b><u>' . ($i - $start_dag_maand + 1) . '</u></b></td>';
	//zo niet, dan moeten de dagen van de maand er in komen te staan
	//deze dagen worden niet bold (<b></b>)
	//voorbeeld van berekening, $i = 5, $start_dag_maand = 5
	//berekening wordt, 5 - 5 + 1, = 1, dus dat is de eerste dag van de maand
	}else{
		echo '<td>'; 
			if($exp[2] == ($i - $start_dag_maand + 1) && $exp[1] == ($maand) && $exp[0] ==($jaar)){
				echo ($i - $start_dag_maand + 1) . '<br><font size=1>'  . $naam . '<br>' . $omschrijving . '</font>';
			}else{	
				echo ($i - $start_dag_maand + 1);
			}	
		echo '</td>';
	}
	//als $i op een rest van 6 uitkomt, dan moet de rij afgesloten worden
	//($datum_maand['wday']) = 0, zondag - 6, zaterdag.
	// 6 = einde van de week, 0 is begin van de week
	if($i % 7 == 6){
		echo '</tr>';
	}
}
//uiteindelijk de tabel afsluiten
echo '</table>';
echo '
<table  align="center">
	<tr>
		<td><a href="agenda.php?maand='. $vorige_maand . '&jaar='. $vorige_jaar. '">Vorige</a></td>
	
		<td><a href="agenda.php?maand='.$volgende_maand.'&jaar='.$volgende_jaar.'">Volgende</a></td>
	</tr>
</table>
';

//globale get variabele is geen nummer, toegang geweigerd
}else{
	echo '<br>Toegang geweigerd!';
}


?>

En dan de hamvraag: wat gaat er mis? Of wat gaat er niet zoals jij verwacht?
Blanche schreef op 17.01.2010 22:55
En dan de hamvraag: wat gaat er mis? Of wat gaat er niet zoals jij verwacht?


Excuses, was inderdaad wat te snel.
Het probleem is, ik heb meerdere records in mijn DB staan, dit zijn allemaal verschillende afspraken, op verschillende dagen. Het probleem is dat ik de afspraak wil laten zien op die dagen.

Zoals ik de code er nu heb staan, pakt hij alleen de laatste record en laat die dan ook zien, wat goed is.
Maar nu wil ik dat alle afspraken, die in de DB staan, worden laten zien voor de maand die geselecteerd is.
Alleen weet ik niet hoe ik dit moet doen, ik heb al geprobeerd de hele for loop in de while te zetten, alleen werkt dit overduidelijk niet, omdat er iedere keer een nieuwe tabel wordt gemaakt voor iedere afspraak.

Ik hoop dat het zo wat duidelijker is.
Is het dan niet het makkelijkst om eerst alle afspraken voor betreffende maand in een array te zetten en vervolgens bij het opbouwen van de agenda voor elke dag te controleren of er een of meerdere afspraken zijn?

Om de array samen te stellen zou je bijvoorbeeld zoiets kunnen doen:
<?php
$afspraken = array();

// $result: resultaatset van query om afspraken op te halen
while($row = mysql_fetch_assoc($result)) {
// datum: datum van afspraak
// titel: titel van afspraak

$afspraken[$row['datum']][] = $row['titel'];
}
?>
Uiteraard zul je dit even moeten aanpassen naar je eigen situatie (juiste kolomnamen e.d.)
Blanche schreef op 17.01.2010 23:18
Is het dan niet het makkelijkst om eerst alle afspraken voor betreffende maand in een array te zetten en vervolgens bij het opbouwen van de agenda voor elke dag te controleren of er een of meerdere afspraken zijn?

Om de array samen te stellen zou je bijvoorbeeld zoiets kunnen doen:
<?php
$afspraken = array();

// $result: resultaatset van query om afspraken op te halen
while($row = mysql_fetch_assoc($result)) {
// datum: datum van afspraak
// titel: titel van afspraak

$afspraken[$row['datum']][] = $row['titel'];
}
?>
Uiteraard zul je dit even moeten aanpassen naar je eigen situatie (juiste kolomnamen e.d.)


[Edit]
Ik keek op naam, en ik had in mijn DB allemaal afspraken gemaakt met de zelfde naam, zodoende ging het fout.

Ik stuit toch gelijk op een probleem, hoe kan ik de items van de array oproepen, ik heb verschillende manieren geprobeerd alleen lukt dit niet. (Misschien kijk ik er over heen)
Print_r van de array werkt overigens wel en geeft ook de juiste resultaten van de DB weer.
Een waarde uit een array(): echo $array['key']; waar key de tekst van de sleutel is. Bij getallen gewoon het getal nemen: echo $array[3];
@Blanche
Op de manier hoe jij een array hebt opgezet, begrijp ik niet helemaal. Hoewel ik de waarden heb laten zien (print_r) begrijp ik het iets beter, alleen begrijp ik de tweede blokhaak niet;
<?php
$afspraken[$row['datum']][] = $row['omschrijving'];
?>
Hierbij bedoel ik de blokhaken na datum, omdat dit continue een nul geeft.

@Iedereen
Daarnaast krijg ik het nog niet helemaal voor elkaar hoe ik mijn array keys moeten laten echoen.
Dit geeft mijn array;
<?php
Array
(
[2010-01-17] => Array
(
[0] => Afspraak benen
)

[2010-01-20] => Array
(
[0] => Afspraak mond
)

[2010-01-30] => Array
(
[0] => Afspraak ogen
)

[2010-01-10] => Array
(
[0] => Blaat
)

)
?>
De code hier boven is wat ik gebruik, $row['datum'] is de datum waarop de afspraak is. $row['omschrijving'] is de omschrijving van de afspraak.
Excuses als ik het helemaal verkeerd heb begrepen.
<?php
/* Lijst met alle afspraken. */

# Alle datums uitvoeren
foreach($afspraken AS $datum => $afspraken2){

# Alle afspraken uitvoeren
foreach($afspraken2 AS $afspraak)
{
# Echo afspraak
echo $afspraak."<br/>";
}
}
?>
<?php
/* Lijst met alle afspraken op 25-12-2015. */

# Alle afspraken uitvoeren
foreach($afspraken2['25-12-2015'] AS $afspraak)
{
# Echo afspraak
echo $afspraak."<br/>";
}
?>
lol schreef op 18.01.2010 17:18
@Blanche
Op de manier hoe jij een array hebt opgezet, begrijp ik niet helemaal. Hoewel ik de waarden heb laten zien (print_r) begrijp ik het iets beter, alleen begrijp ik de tweede blokhaak niet;
Op die manier komen meerdere afspraken op dezelfde dag, onder dezelfde key te staan. Dat vergemakkelijkt straks het uitlezen.

Zie ook de post van Yearupie.
Excuses voor de late reactie.

Ik ben er mee bezig geweest en het werkt perfect!

Alleen nu loop ik toch weer op een probleem, ik kan nu alleen de omschrijving van een afspraak echoen en nu zou ik ook graag de naam van de persoon er bij zetten.
Nu heb ik al een aantal dingen geprobeerd, zo heb ik een nieuwe array gemaakt voor alleen de namen alleen werkte dit niet, tevens heb ik geprobeerd de naam bij de bestaande array in te zetten, alleen krijg ik het niet voor elkaar.

Bijvoorbeeld;
<?php
$afspraken[$row['datum']][$row['achternaam']][] = $row['omschrijving'];
?>

Alleen begrijp ik niet helemaal hoe ik de achternaam er nu kan uit filteren. (Als het uberhaupt kan.)

Dus mijn vraag is, hoe kan ik in de bestaande array die ik nu heb, ook de naam van een persoon er uithalen.

Reageren