[PHP/MYSQL] Terminsystem (nach Kalendarwochen sortiert)

Georgler

PC-Selbstbauer(in)
Hi,

ich arbeite gerade an einem kleinen Termin-Modul, bei dem es möglich sein soll durch die KWs durchzuklicken und dann sollen einem aus der Datenbank Termine ausgegeben werden, die in genau dieser KW eingetragen sind..

Ich habe es nun so gemacht, dass in der MySQL-Tabelle eine Spalte "kw" ist, in der die Kalenderwoche eingetragen wird, allerdings ergab sich hier relativ schnell das Problem, dass hier das Jahr nicht berücksichtigt wurde. Das heißt man konnte nur im aktuellen Jahr Termine angucken und falls ein neues Jahr anbrechen würde, würde man die ganzen Termine des alten Jahres noch einmal bekommen.

Jetzt weiß ich nicht, wie man das Jahr in die Rechnung noch mit reinbringen sollte. Mit einer neuen Spalte "jahr"? Oder lässt sich das in der SQL-Query machen?

Hier mein bisheriger Code:
PHP:
//Welche KW will gesehen werden?
if (isset($_GET["kw"])) {
	if (is_numeric($_GET["kw"])) {
		$kw = htmlentities($_GET["kw"], ENT_QUOTES, 'UTF-8');
	} else {
		$kw = date("W");
	}
} else {
	$kw = date("W");
}

//Javascript
echo'
<script>
       $("#kw_back").click(function() {
		$("#termine").load("/termine.php?kw='.($kw-1).'");
	})
	
	$("#kw_vor").click(function() {
		$("#termine").load("termine.php?kw='.($kw+1).'");
	})
</script>
';

//SQL
$sql = $db->prepare("
	SELECT 
		id,
		titel,
		anfang,
		ende,
		switch
	FROM termine
	WHERE kw = ?
	ORDER BY anfang
");
$sql->bind_param('i', $kw);
$sql->execute();
$sql->store_result();
$sql->bind_result($id, $titel, $anfang, $ende, $switch);
if ($sql->num_rows == 0) {
	echo'
	<button id="kw_back">Zurück</button>
	<span>KW '.$kw.'</span>
	<button id="kw_vor">Vor</button>
	<br>
	Keine Termine in dieser Kalendarwoche eingetragen.
	';
} else {
	echo'
	<button id="kw_back">Zurück</button>
	<span>KW '.$kw.'</span>
	<button id="kw_vor">Vor</button>
	<br>
	';
	while ($sql->fetch()) {
		echo'
		<b>'.$titel.'</b>: Anfang: '.date('d.m.Y', strtotime($anfang)).' | Ende: '.date('d.m.Y', strtotime($ende)).'
		<hr>
		';
	}
}

Edit: Ebenfalls ein Problem ist, dass nicht jedes Jahr 52 KWs hat.
 
Zuletzt bearbeitet:
Da du sowieso das Jahr zur Referenz benötigst, würde ich die Berechnung der KW über das Script durchführen. Dadurch behält dein Modul dauerhaft gültigkeit und du ersparst dir ab dem zweiten Jahr die Redundanz. Denn genaugenommen steckt die KW ja bereits im Begin-Datum des Termins. Ich würde auch immer das End-Datum des Termins mit einbeziehen. Denn dann kannst du nämlich auch einen Langzeittermin korrekt anzeigen. Ansonsten müsstest du für diese Termine pro Tag einen neuen Eintrag in der Tabelle machen. Und das ist unnütz. ;)
 
Ich hab's jetzt erstmal über den Monat gemacht.
D.h. ich habe jetzt eine GET-Variable für das Jahr und eine für den Monat und wenn der aktuelle Monat bereits gleich 12 ist, dann mache beim nächsten Mal den Monat gleich 1 und addiere auf das aktuelle Jahr einen drauf.

Aber gut, dass du mich dran erinnerst mit dem End-Datum, falls ein Termin über mehrere Monate hinweg geht. Habe ich gar nicht mehr dran gedacht :)
 
Zurück