[PHP] Frage zu Belegungsplan!?

Hegelbock

Ensign
Registriert
Nov. 2001
Beiträge
245
Hi Leute,

also, im vorraus, ich bin ein totaler Newbie in Sachen PHP.
Doch ich habe mir das Ziel gesetzt ein Belegungsplan für unsere Ferienwohnung zu basteln. Ich habe bis jetzt ein Kalender. Doch jetzt steh ich vor einem kleinen Problem. Ich will, das in dem Kalender, wenn die Ferienwohnung belegt ist, der Hintergrund rot ist. So, dies ist auch kein Problem, doch ich will es so machen, das in einer Datei alle gebuchten Tage eingetragen sind, und der Kalender anhand der Datei den Hintergrund der Tagesnummern rot zeichnet. Wie stelle ich dies jetzt am besten an?? Mit SQL oder einer .txt Datei??
Ich habe es mit einer txt Datei mal ausprobiert, hat auch geklappt, doch ich bekomme es nur hin, indem ich alle gebuchten Termine hintereinander schreibe, d.h. in einer Zeile, und dies ist ziehmlich unübersichtlich.
Ich habe es folgendermassen gelöst:

TXT Datei:
24,7,2004,27,7,2004


Bedeutung: Buchung vom 24.07.2004 bis 27.07.2004

Und dies ist kein Problem in einer php Datei auszuwerten und den Hintergrund der Tage rot zu machen.
Doch wie sieht es aus wenn ich noch ein weiteres Datum hinzufüge, dann müsste ich es normalerweise genauso weiter hinten dran schreiben, doch das ist mir zu unübersichtlich. Hat da jemand eventuell eine Idee??

mfg Hegelbock
 
in einer .txt ist da immer etwas unübersichtlich. Ich würde da, wie du schon erwähnt hast, MySQL nehmen (oder XML). Da kannst du auch einfach mit dem Date-Typ herumrechnen.
 
MySQL wäre eine Lösung aber für den Anfänger sicherlich vielleicht zu viel. Ich würde spontan für jede Belegung eine Datei mit jeweils einem Array vorschlagen. In Element [0] schreibst du z.b. den Starttermin. In Element [1] das Ende. Den Array kannst du dann bei Bedarf noch erweitern indem mit push Elemente anfügst.
 
ich würde die Datum-Angaben wie folgt speichern:
Code:
2004-07-01|2004-07-06|2004-07-07
anschließend mit fgets() die ganze Zeile auslesen und mit explode() den String splitten
PHP:
<?php
// Datei öffnen
$fp = fopen ( 'datum.txt', 'r' );

// Daten auslesen und splitten
$datum = explode ( '|', fgets ( $fp ) );

// Datei schließen
fclose ( $fp );

// Array ausgeben
reset ( $datum );
foreach ( $datum as $d )
  echo "$d<br>\n";
?>
 
Ja so ähnlich hätte ich es auch angedacht.

PHP:
$filname = "belegungsplan.txt";
$fp = @fopen($filename, "r") or die ("Kann Datei nicht lesen.");
$array = file($filename);
$split = explode("|",$array);
...
 
((string) array()) == "Array"

Ähm O_o

Und wozu öffnest du die Datei SOWOHL mit fopen() als auch mit file()
 
hmm... aber dann bekomm ich ja nur das komplette Datum. Doch ich brauche den Tag, den Monat und das Jahr einzeln.
 
ja dann zerleg das Datum nachher nochmal mit explode ()
PHP:
<?php
// Datei öffnen
$fp = fopen ( 'datum.txt', 'r' );

// Daten auslesen und splitten
$datum = explode ( '|', fgets ( $fp ) );

// Datei schließen
fclose ( $fp );

// Array ausgeben
reset ( $datum );
foreach ( $datum as $d ) {

  // Datum zerlegen
  $d = explode ( '-', $d );

  // Datum ausgeben
  echo "Jahr: ".$d[0]." Monat: ".$d[1]." Tag: ".$d[2]."<br>\n";

}
?>
 
hmm... ich hab mir das jetzt so überlegt. Ich kann die Daten ja so unübersichtlich speichern, und einfach noch ne Admin.php programmieren, wo ich dann schön übersichtlich alle Daten sehe, und direkt ein Datum eingeben kann.
Denn ich bin bereits schon soweit, das sich die Hintergründe vom Kalender rot färben, wenn ich, so wie oben geschrieben, Anfangs und Enddatum in die txt datei reinschreibe.
Kommt ja eigentlich ziehmlich das gleiche raus, wenn ich es nur mit Kommas trenne, oder mit "|" un "-" oder??
Wenn die Adminoberfläche funzt ists ja ok.
 
Ich würde die Zahlen als den üblichen Sekundenwert von "date" speichern und mir für die Anzeige mit den PHP-Funktionen umrechnen lassen.
Dann kann man auch ganz bequem nur Monat, Tag oder Jahr ermitteln lassen udn braucht kein Explode oder so.
 
geht auch, vor allem wenn du nur mit einem einzigen Zeichen trennen willst
 
wenn du einen zeilenumbruch als trennzeichen nimmst, kannste die ganze file mit einem Befehl in ein array lesen.

Das spart ne Menge arbeit ;D
 
Jetzt stehe ich vor meinem nächsten Problem. Und zwar bekomme ich es nicht hin, 2 Zeiträume im Kalender zu färben.
Wenn z.b. das in der txt Datei steht:

12,7,2004,18,7,2004,20,7,2004,27,7,2004

ich habe es glaube ich ein bischen zu kompliziert programmiert. Ich versuche es mal zu erklären.

ich lese die Zeile in der txt Datei mit dem Befehl fgetcsv() ein. Dann speichere ich die einzelnen Zahlen in einem Array.
d.h. $data[0] ist dann "12"! $data[1] ist dann "7" usw. Und dann hab ich dies alles mit if Abfragen gemacht, sodass immer nur die belegten Daten rot sind. (verdammt verkrüppelt) Doch ich bekomme es nicht hin, mehrere Datum (ist das die Mehrzahl von Datum??) mit einzubeziehen.
Z.B. (ist nur ein kurzes Beispiel )

if($data[0]==$tagnummer && $data[1]==$monat && $data[2]==$jahr){
//noch viiiiiiiiiiiiiiiiiiiiiiiiiiele if-Abfragen

Ausgabe in rot
}Else{
if($data[1]==$data[4]){
//blablablalblabla
Ausgabe in schwarz
}


Problem: Die Werte in $data (hier: 0,1,2,4) sind immer fest. Wie mache ich das also, das nicht immer nur die ersten 2 Datum verglichen werden, sondern hinterher die nächsten 2 Datum. Ich hatte schon eine for-Schleife drum, doch logischerweise ist die Ausgabe ja dann auch doppelt :-(
Ich bin echt ratlos. Muss ich nochmal alles frisch durchdenken??

HILFE
 
Loopo schrieb:
PHP:
// Array ausgeben
reset ( $datum );
foreach ( $datum as $d ) {...}
Ich möchte an dieser Stelle mal darauf hinweisen (oder wie es andere gerne bezeichnen: "klugscheissen"), dass foreach auf einer Kopie des Arrays arbeitet und IMMER beim ersten Element anfängt. Folglich ist es nicht nötig, reset() vor dem foreach aufzurufen.

So. Sie dürfen jetzt mit faulem Gemüse werfen -.-'
 
</Life> schrieb:
((string) array()) == "Array"

Ähm O_o

Und wozu öffnest du die Datei SOWOHL mit fopen() als auch mit file()

Ups :) War wohl noch zu früh am Morgen...
 
hmmm..... scheinbar hat mir wohl keiner einen Rat.

Aber mir ist eine neue Idee gekommen. Ich glaube ich muss es wohl oder übel mit einer Datenbank lösen. So, aber wie?? Ich habe vor 3 Spalten zu machen. ID, Startdatum, Enddatum. Gibt es jetzt eine Abfrage, die schaut, ob das aktuelle Datum zwischen einem Startdatum und einem Enddatum ( in der gleichen Zeile) liegt??? Und am besten noch True oder False ausgibt??

Wäre echt geil.


Hegelbock
 
Zwei Checks:
1. Gibt es bereits ein Enddatum, das im neuen Zeitraum liegt?
2. Gibt es bereits ein Anfangsdatum, das im neuen Zeitraum liegt?
Wenn eins der beiden zutrifft: Pech gehabt.
 
Ich hoffe ich verstehe das richtig.
Meinst du z.B.

Buchung1: 25.7.2004 - 27.7.2004
Buchung2: 27.7.2004 - 28.7.2004 (Beispiel1)

oder wie?? Oder Buchung2: 26.7.2004 ??
So wie Beispiel 1 oben könnte es geben. Doch das sich die Buchungen überlappen kommt nicht vor.
Was meinst du??
 
Ich hab vor Kurzem auch einen Kalender gebastelt, wo unter anderem Ferien von best. Personen eingetragen werden können, die dann als Linien dargestellt werden (siehe http://www.juergen-frick.com -> Kalender (eine neue Abwesenheit trägt man ein, wenn man auf "Abwesenheit" klickt (bitte nicht ausprobieren!!))). Die Abwesenheiten werden Zeilenweise in einer Textdatei gespeichert, wobei eine Zeile vier kommaseparierte Werte enthält: Startdatum als Unixtimestamp, Enddatum als Unixtimestamp, Name, Beschreibung. Ich arbeite mit Unixtimestamps, da es damit am einfachsten ist, Berechnungen durchzuführen.

Der Kalender öffnet also die Datei mit den Einträgen (file[]="blabla.csv") und geht für jeden Tag im Kalender jede Zeile mit "for each" durch. Jede Zeile wird mit explode in die vier Werte aufgesplittet. Dann wird verglichen, ob der erste Wert kleiner und der zweite Wert grösser als der aktuell durchlaufene Tag ist, was dann zu einer Färbung des Tages führt.

Ich hab jetzt mal die ganze Beschreibung hingeschrieben, weil in diesem Thread nur Häppchenweise Anweisungen kamen, was dich anscheinend ein Bisschen verwirrt hat. Falls du den Code zu meinem Kalender oder einfach genauere Beschreibungen brauchst, kann ich das gerne nachreichen.

Aber eben: eine Datenbank brauchts definitiv nicht dazu! Und auch als Anfänger ist das machbar! Meine ganze Homepage (Gästebuch, Terminkalender etc.) hab ich erst vor Kurzem als absoluter PHP-Neuling gemacht!

EDIT: hier Codefragmente (hab ihn stark vereinfacht, darum garantiere ich für nix)
PHP:
$ferienasdf=file("ferien.csv");
foreach($ferienasdf as $element)
{
$teiler=explode(";",$element);
$ferien[] = $teiler;
}

/*Schleife, die alle Daten durchgeht; ruf für jedes Datum die folgende Funktion auf und übergibt als Parameter das aktuelle Datum (als Unixtimestamp) und $ferien[]*/
$tag=mktime(0,0,0,$monat, $tag, $jahr);
if(reserviert($tag, $ferien)) echo("...background-color:red");

function reserviert($tag, $ferien)
{
foreach($ferien as $element) {
	if($element[0]<=$tag && $element[1]>=$tag) return(true); }
return(false);
}
 
Zuletzt bearbeitet:
Naja, ich hab jetzt den Ehrgeiz verloren, den Buchungskalender mit einer Textdatei zu basteln. Hab es jetzt mit mySQL gemacht, und siehe da, es klappt perfekt, und der Kalender steht, sogar mit Adminbereich :D
mySQL ROCKT!!!
 
Zurück
Oben