Zwischenraum zwischen 2 Stunden ausrechnen

Wenn Du für die Spalten "beginn" und "ende" den Spaltentyp DATETIME nimmst, wird das Datum und die Uhrzeit im Format "YYYY-MM-DD HH:MM:SS" gespeichert.
Somit könnte die Spalte "tag" entfallen, da sich aus dem Datum ja der Wochentag ermitteln lässt.

Ich muss mir aber erstmal Deinen Code ansehen und ein paar Gedanken machen.....
Mir schwirren auch ein paar Dinge bezüglich des Problems mit dem Tageswechsel durch den Kopf.

Edith droht:
"Aber nichtmehr heute!" *Nudelholz schwing* ;)
 
Zuletzt bearbeitet:
Wenn Du für die Spalten "beginn" und "ende" den Spaltentyp DATETIME nimmst, wird das Datum und die Uhrzeit im Format "YYYY-MM-DD HH:MM:SS" gespeichert.
Somit könnte die Spalte "tag" entfallen, da sich aus dem Datum ja der Wochentag ermitteln lässt.

Gut das klingt dann doch logisch xD Werd ich gleich mal testen.

Zum kotzen ich zerbrech mir schon den ganzen Tag den Kopf wie ich das umsetzen kann, dabei stell ich immer Fest das meine PHP/MySQL Kenntnisse doch noch nicht sooo weit ausgereift sind wie ich immer annehme xD

EDIT: Die DATETIME Funktion in MySQL macht aber kein automatisches Datum, richtig? Sprich ich muss erst im Formular noch eine Datum-Auswahls-Liste erstellen? Automatische Zeiten erreiche ich nur bei TIMESTAMP ^^
 
Zuletzt bearbeitet:
Zum kotzen ich zerbrech mir schon den ganzen Tag den Kopf wie ich das umsetzen kann, dabei stell ich immer Fest das meine PHP/MySQL Kenntnisse doch noch nicht sooo weit ausgereift sind wie ich immer annehme xD
Geht mir genauso. ;)

EDIT: Die DATETIME Funktion in MySQL macht aber kein automatisches Datum, richtig?
Uff, kann ich Dir aus dem Kopf nicht sagen, aber.....
Sprich ich muss erst im Formular noch eine Datum-Auswahls-Liste erstellen?
.....es wäre anzuraten das Datum manuell zu wählen.
Schliesslich könnte es ja auch sein dass z.B. für nächsten Freitag (oder auch nur für den nächsten Tag) etwas eingetragen werden soll. ;)
 
Einfach ein paar <select> Auswahl-Listen machen? Folgendermaßen:

Tag Monat Startzeit Endzeit

Oder gibts für Datums-Funktionen extra Formular Syntax?
 
Soooo ich hab den Sendeplan nun mit Datum gemacht. Funktioniert auch ohne Probleme. Allerdings wie gewohnt das gleiche Problem, dass sich die Sendungen überschneiden können.

Zur schnelleren Hilfe und besseren Verstehung, hier mein neuer Code:

Sheduler.php
PHP:
<?php

$sql = "SELECT * FROM sendeplan WHERE (datum = '".$day."')";
$query = mysql_query($sql, $con);
$check = mysql_fetch_array($query);
if ($check['ende'] = $date[hours]) {
	$sql = "DELETE FROM sendeplan WHERE (ende = '".$hour."')";
	$query = mysql_query($sql, $con);
}
echo '<a href="?content=sheduler&action=show&day='.$a.'">'.$mo.'</a> | ';
echo '<a href="?content=sheduler&action=show&day='.$b.'">'.$di.'</a> | ';
echo '<a href="?content=sheduler&action=show&day='.$c.'">'.$mi.'</a> | ';
echo '<a href="?content=sheduler&action=show&day='.$d.'">'.$do.'</a> | ';
echo '<a href="?content=sheduler&action=show&day='.$e.'">'.$fr.'</a> | ';
echo '<a href="?content=sheduler&action=show&day='.$f.'">'.$sa.'</a> | ';
echo '<a href="?content=sheduler&action=show&day='.$g.'">'.$so.'</a>';
echo '<br>';
echo '<br>';
if (logged_in() && admin()) {
	echo '<a href="?content=sheduler&action=new">Show Eintragen</a>';
	echo '<br>';
	echo '<br>';
}
echo '<b>'.$datum;
if (isset($_GET['day'])) {
	echo ' '.$datumc;
} else {
	echo ' '.$datumb;
}
echo '</b><br>';
echo '<br>';
if (isset($_POST['submit'])) {
	$start = $date[year].'-'.$_POST['month'].'-'.$_POST['day'].' '.$_POST['hour_start'].':00:00';
	$end = $date[year].'-'.$_POST['month'].'-'.$_POST['day'].' '.$_POST['hour_end'].':00:00';
	$tag = $date[year].'-'.$_POST['month'].'-'.$_POST['day'];
	$sql = "SELECT * FROM sendeplan WHERE (datum = '".$day."')";
	$query = mysql_query($sql, $con);
	$check = mysql_fetch_array($query);
 	if ($check['beginn'] == $start || $check['ende'] == $end) {
		echo 'Es existiert bereits eine Show um diese Zeit!<br><br>';
	} else {
		$description = parse2html($_POST['nachricht']);
		$sql = "INSERT INTO sendeplan (datum, beginn, ende, dj, showname, style, description) VALUES ('".$tag."', '".$start."', '".$end."', '".$name."', '".$_POST['showname']."', '".$_POST['style']."', '".$description."')";
		$query = mysql_query($sql, $con);
		echo 'Show eingetragen!';
		echo '<br>';
		echo '<br>';
	}
}
if (isset($_GET['action']) && isset($_GET['day'])) {
	$sql = "SELECT * FROM sendeplan WHERE (datum = '".$day2."')";
	$query = mysql_query($sql, $con);
	$check = mysql_fetch_array($query);
	if ($check['id'] > 0) {
		$sql = "SELECT *,DATE_FORMAT(beginn,'%H:%i') AS start, DATE_FORMAT(ende,'%H:%i') AS end FROM sendeplan WHERE (datum = '".$day2."') ORDER BY beginn";
		$query = mysql_query($sql, $con);
		while ($row = mysql_fetch_array($query)) {
			echo '<table width="100%">';
			echo '<tr>';
			echo '<td class="content" width="125"><b>'.$row['start'].'</b> - <b>'.$row['end'].'</b></td>';
			echo '<td class="content" align="right"><b>'.$row['dj'].'</b></td>';
			echo '</tr>';
			echo '<tr>';
			echo '<td class="content"</td>';
			echo '<td class="news_author"><b>'.$row['showname'].'</b><br>Musikstyle: '.$row['style'].'<br><br>'.$row['description'].'<br><br>';
			echo '</td>';
			echo '</tr>'; 
			echo '</table>';
		}
	} else {
		if ($_GET['day'] == $date[mday]) {
			echo 'Keine Sendungen Heute!';
		} else {
			echo 'Keine Sendungen an diesem Tag!';
		}
	}
} elseif (isset($_GET['action']) && $_GET['action'] == 'new') {
	echo '<table width="100%">';
	echo '<form action="?content=sheduler" method="post" name="form">';
	echo '<tr>';
	echo '<td class="content">DJ </td>';
	echo '<td class="content"><b>'.$name.'</b></td>';
	echo '</tr>';
	echo '<tr>';
	echo '<td class="content">Show </td>';
	echo '<td class="content"><input type="text" name="showname"></td>';
	echo '</tr>';
	echo '<tr>';
	echo '<td class="content">Musikstyle </td>';
	echo '<td class="content"><input type="text" name="style"></td>';
	echo '</tr>';
	echo '<tr>';
	echo '<td class="content">Datum </td>';
	echo '<td class="content">
	am <select class="select" name="day">
	<option value=""></option>
	<option value="01">1</option><option value="02">2</option>
	<option value="03">3</option><option value="04">4</option>
	<option value="05">5</option><option value="06">6</option>
	<option value="07">7</option><option value="08">8</option>
	<option value="09">9</option><option value="10">10</option>
	<option value="11">11</option><option value="12">12</option>
	<option value="13">13</option><option value="14">14</option>
	<option value="15">15</option><option value="16">16</option>
	<option value="17">17</option><option value="18">18</option>
	<option value="19">19</option><option value="20">20</option>
	<option value="21">21</option><option value="22">22</option>
	<option value="23">23</option><option value="24">24</option>
	<option value="25">25</option><option value="26">26</option>
	<option value="27">27</option><option value="28">28</option>
	<option value="29">29</option><option value="30">30</option>
	<option value="31">31</option>
	</select> -
	<select class="select" name="month">
	<option value=""></option>
	<option value="1">Januar</option><option value="2">Februar</option>
	<option value="3">M&auml;rz</option><option value="4">April</option>
	<option value="5">Mai</option><option value="6">Juni</option>
	<option value="7">Juli</option><option value="8">August</option>
	<option value="9">September</option><option value="10">Oktober</option>
	<option value="11">November</option><option value="12">Dezember</option>
	</select> <br><br>von 
	<select class="select" name="hour_start">
	<option value=""></option>
	<option value="00">00</option><option value="01">01</option>
	<option value="02">02</option><option value="03">03</option>
	<option value="04">04</option><option value="05">05</option>
	<option value="06">06</option><option value="07">07</option>
	<option value="08">08</option><option value="09">09</option>
	<option value="10">10</option><option value="11">11</option>
	<option value="12">12</option><option value="13">13</option>
	<option value="14">14</option><option value="15">15</option>
	<option value="16">16</option><option value="17">17</option>
	<option value="18">18</option><option value="19">19</option>
	<option value="20">20</option><option value="21">21</option>
	<option value="22">22</option><option value="23">23</option>
	</select> bis 
	<select class="select" name="hour_end">
	<option value=""></option>
	<option value="00">00</option><option value="01">01</option>
	<option value="02">02</option><option value="03">03</option>
	<option value="04">04</option><option value="05">05</option>
	<option value="06">06</option><option value="07">07</option>
	<option value="08">08</option><option value="09">09</option>
	<option value="10">10</option><option value="11">11</option>
	<option value="12">12</option><option value="13">13</option>
	<option value="14">14</option><option value="15">15</option>
	<option value="16">16</option><option value="17">17</option>
	<option value="18">18</option><option value="19">19</option>
	<option value="20">20</option><option value="21">21</option>
	<option value="22">22</option><option value="23">23</option>
	</select> Uhr</td>';
	echo '</tr>';
	echo '<tr>';
	echo '<td class="content" align="center" colspan="2">Beschreibung</td>';
	echo '</tr>';
	echo '<tr>';
	echo '<td colspan="2">';
	include 'includes/bbcode.php';
	echo '</td>';
	echo '</tr>';
	echo '<tr>';
	echo '<td colspan="2"><textarea name="nachricht"></textarea></td>';
	echo '</tr>';
	echo '<tr>';
	echo '<td class="button" colspan="2" align="center"><input type="submit" name="submit" value="Abschicken" onmouseover="this.style.color=\'#007eff\'" onmouseout="this.style.color=\'#fff\'"></td>';
	echo '</tr>';
	echo '</form>';
	echo '</table>';
} else {
	$sql = "SELECT * FROM sendeplan WHERE (datum = '".$day."')";
	$query = mysql_query($sql, $con);
	$check = mysql_fetch_array($query);
	if ($check['id'] > 0) {
		$sql = "SELECT *,DATE_FORMAT(beginn,'%H:%i') AS start, DATE_FORMAT(ende,'%H:%i') AS end FROM sendeplan WHERE (datum = '".$day."') ORDER BY beginn";
		$query = mysql_query($sql, $con);
		while ($row = mysql_fetch_array($query)) {
			echo '<table width="100%">';
			echo '<tr>';
			echo '<td class="content" width="125"><b>'.$row['start'].'</b> - <b>'.$row['end'].'</b></td>';
			echo '<td class="content" align="right"><b>'.$row['dj'].'</b></td>';
			echo '</tr>';
			echo '<tr>';
			echo '<td class="content"</td>';
			echo '<td class="news_author"><b>'.$row['showname'].'</b><br>Musikstyle: '.$row['style'].'<br><br>'.$row['description'].'<br><br>';
			echo '</td>';
			echo '</tr>'; 
			echo '</table>';
		}
	} else {
		echo 'Keine Sendeungen Heute!';
	}
}

?>

Und ein ausschnit aus der Config

Config.php
PHP:
// Datum-Check

	$datum = getdate();
	if ($datum[weekday] == 'Monday') {
		$datum = 'Montag';
	} elseif ($datum[weekday] == 'Tuesday') {
		$datum = 'Dienstag';
	} elseif ($datum[weekday] == 'Wednesday') {
		$datum = 'Mittwoch';
	} elseif ($datum[weekday] == 'Thursday') {
		$datum = 'Donnerstag';
	} elseif ($datum[weekday] == 'Friday') {
		$datum = 'Freitag';
	} elseif ($datum[weekday] == 'Saturday') {
		$datum = 'Samstag';
	} elseif ($datum[weekday] == 'Sunday') {
		$datum = 'Sonntag';
	} 
	$date = getdate();
	$day = date('Y-m-d');
	$hour = date('Y-m-d H:00:00');
	if (isset($_GET['day'])) {
		$tag = $_GET['day'];
		$datum = date('l', mktime(0,0,0,$date[mon],$_GET['day'],$date[year]));
	}
	if ($datum == 'Monday') {
		$datum = 'Montag';
	} elseif ($datum == 'Tuesday') {
		$datum = 'Dienstag';
	} elseif ($datum == 'Wednesday') {
		$datum = 'Mittwoch';
	} elseif ($datum == 'Thursday') {
		$datum = 'Donnerstag';
	} elseif ($datum == 'Friday') {
		$datum = 'Freitag';
	} elseif ($datum == 'Saturday') {
		$datum = 'Samstag';
	} elseif ($datum == 'Sunday') {
		$datum = 'Sonntag';
	} 
	$a = $date[mday] + 1;
	$b = $date[mday] + 2;
	$c = $date[mday] + 3;
	$d = $date[mday] + 4;
	$e = $date[mday] + 5;
	$f = $date[mday] + 6;
	$g = $date[mday];
	$h = $_GET['day'];
	$day2 = $date[year].'-'.$date[mon].'-'.$h;
	$datuma = getdate();
	$datumb = $datuma[mday].'.'.$datuma[mon].'.'.$datuma[year];
	$datumc = $h.'.'.$datuma[mon].'.'.$datuma[year];
	$mo = date('l', mktime(0,0,0,$date[mon],$a,$date[year]));
	$di = date('l', mktime(0,0,0,$date[mon],$b,$date[year]));
	$mi = date('l', mktime(0,0,0,$date[mon],$c,$date[year]));
	$do = date('l', mktime(0,0,0,$date[mon],$d,$date[year]));
	$fr = date('l', mktime(0,0,0,$date[mon],$e,$date[year]));
	$sa = date('l', mktime(0,0,0,$date[mon],$f,$date[year]));
	$so = date('l', mktime(0,0,0,$date[mon],$g,$date[year]));
	if ($mo == 'Monday') {
		$mo = 'Montag';
	} 
	if ($di == 'Tuesday') {
		$di = 'Dienstag';
	}
	if ($mi == 'Wednesday') {
		$mi = 'Mittwoch';
	}
	if ($do == 'Thursday') {
		$do = 'Donnerstag';
	}
	if ($fr == 'Friday') {
		$fr = 'Freitag';
	}
	if ($sa == 'Saturday') {
		$sa = 'Samstag';
	}
	if ($so == 'Sunday') {
		$so = 'Sonntag';
	}

Neue Screenshots

Sendeplan_DB
Sendeplan_New
Sendeplan_Shows
 
Zuletzt bearbeitet:
Tag Monat Startzeit Endzeit
Du hast das Jahr vergessen.
Immerhin könnte sich ja auch jemand am 31.12. für den 1.1. eintragen wollen. ;)
Oder gibts für Datums-Funktionen extra Formular Syntax?
Nicht direkt, aber man kann sich mit der date()-Funktion und einer for()-Schleife das Leben einfacher machen.
PHP:
Sendetag: <select name="tag">
<?php
for($i = 1; $i <= date("t"); $i++) {
    echo '<option value="'.($i<10?'0':'').$i.'"'.((date("j")==$i)?' selected="selected"':'').'>'.$i.'.</option>'."\n"; 
}
?>
</select>&nbsp;
<select name="monat">
<?php
$monat = array( 1=>"Januar", 
                2=>"Februar", 
                3=>"M&auml;rz", 
                4=>"April", 
                5=>"Mai", 
                6=>"Juni", 
                7=>"Juli", 
                8=>"August", 
                9=>"September", 
                10=>"Oktober", 
                11=>"November", 
                12=>"Dezember");
for($i = 1; $i <= 12; $i++) {
    echo '<option value="'.($i<10?'0':'').$i.'"'.((date("n")==$i)?' selected="selected"':'').'>'.$monat[$i].'</option>'."\n";
}
?>
</select>&nbsp;
<?php
if(date("n") == 12) {
    echo '<select name="jahr">';
    echo '<option value="'.date("Y").'" selected="selected">'.date("Y").'</option>'."\n";
    echo '<option value="'.(date("Y")+1).'">'.(date("Y")+1).'</option>'."\n";
    echo '</select>';
} else {
    echo '<select name="jahr">'."\n";
    echo '<option value="'.date("Y").'" selected="selected">'.date("Y").'</option>'."\n";
    echo '</select>'."\n";
}
?>
<br>
Zeit von <select name="beginn">
<?php
for($i = 0; $i <= 24; $i++) {
    echo '<option value="'.($i<10?'0':'').$i.'">'.($i<10?'0':'').$i.'</option>'."\n"; 
}
?>
</select>&nbsp;
bis <select name="ende">
<?php
for($i = 0; $i <= 24; $i++) {
    echo '<option value="'.($i<10?'0':'').$i.'">'.($i<10?'0':'').$i.'</option>'."\n"; 
}
?>
</select>&nbsp;Uhr
Ab dem 1.12. wird das Folgejahr mit als Auswahlmöglichkeit eingeblendet.
So können Einträge also mindestens für 1 Monat im voraus erfolgen.
Sollte auch das nicht langen, könnte man das Folgejahr auch früher zur Auswahlmöglichkeit hinzufügen lassen.

Nach dem senden des Formulars müssen aber noch ein paar Dinge erledigt/geprüft werden, bevor die Datenbank abgefragt wird bzw. ein neuer Eintrag vorgenommen wird.
Ist die Endzeit kleiner als die Startzeit? Dann liegt die Endzeit im Folgetag.
Ist das Datum für den Start und das Ende gültig (checkdate())?
Von der Endzeit 1 Sekunde abziehen, um Überschneidungen zu vermeiden.
Zur schnelleren Hilfe.....
Du bastelst aber ja wohl hoffentlich nicht am laufenden System rum?! :eek:
Zum basteln benutzt man ein Testsystem, bei dem kommt es auch nicht so auf die Zeit an. ;)
 
Zuletzt bearbeitet:
Okay wie man sieht gehts natürlich auch einfacher, ich mach mir das echt immer zu schwer :D. Ich sollte mich evtl. doch noch mehr mit den for-Schleifen befassen ;-) Der Code ist echt gut, den werd ich nacher direkt mal einbauen und Testen.

Du bastelst aber ja wohl hoffentlich nicht am laufenden System rum?! :eek:
Zum basteln benutzt man ein Testsystem, bei dem kommt es auch nicht so auf die Zeit an. ;)

Neeeiiiin keine Angst, ich Teste grundsätzlich alles Local und nicht im laufenden Betrieb. Zudem ist die Page ja eh noch nicht Online, geht erst Online wenn sie zu 100% Fertig ist. Hab ich jetzt wahrscheinlich falsch formuliert ;-)
 
Zurück