Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
dynamische Kalender erstellung [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
dynamische Kalender erstellung


 
tomtherock
28-08-2006, 13:25 
 
Hallo,

Vorgeschichte:
Hab ein Zeiterfassungsscript geschrieben.

1. Jeder Benutzer wird angelegt
2. Danach wird für den jeweiligen Benutzer ein Kalender zb 2006 erstellt
(365Tage in die Tabelle zeiterfassung eingetragen)

Dazu hab ich folgendes Script geschrieben...
Zusammengefasst macht das Script folgendes:

- schau mit mktime() nach wieviel Tage jeder Monat hat
(ausgewähltes Jahr-Monat(for schleife) zb.: 2006-01)

- danach führt er eine for schleife solange aus bis er den letzten Tag
des jeweiligen Monat hat und trägt jeden eintrag in die Tabelle ein

So so weit so gut klappt zwar super und ist auch superschön dynamisch ABER:

Ist halt einfach wie ich finde sehr umständlich programmiert und performance belastend. Da gibt es doch bestimmt irgendwelche SQL anweisungen wo man sagen insert datum1 - datum2
würde dem Server halt viele Schleifen und mir somit Zeit bzw dem Benutzer ersparen ^^.

Hier der Code:


IF($anlegen)
{
// auslesen der Soll_std
$res2=mysql_query("select * from $mitarbeiter where id_mitarbeiter = '$id_auswahl'");
$row=mysql_fetch_object($res2);

$soll_std = $row->soll_std;

// überprüfen ob Kalender schon vorhanden
$res1=mysql_query("select * from $zeiterfassung where id_mitarbeiter = '$id_auswahl' and datum like '$datum_j-01-01'");
$row=mysql_fetch_object($res1);

$datum = $row->datum;

IF($datum){ echo "<b>Der Kalender $datum_j ist bereits angelegt...</b>"; }

ELSE {
// 12Monate Schleife
for ($i = 1; $i <= 12; $i++)
{
if ($i < 10)$j = "0".$i;
else $j = $i;

$datum_tmp = mktime(0,0,0,$j,1,$datum_j);

$monat_t = date("t", $datum_tmp);

// Schleife für den jeweiligen Monat
for ($t = 1; $t <= $monat_t; $t++)
{
if ($t < 10)$m = "0".$t;
else $m = $t;

$datum = $datum_j."-".$j."-".$m;

// Daten waren OK -> also in DB eintragen
mysql_query(sprintf('insert into zeiterfassung (id_mitarbeiter,datum)VALUES ("%s","%s")',
addslashes($id_mitarbeiter),addslashes($datum)));
echo mysql_error();

// überträgt die aktuell eingetragenen Soll_std aus der Mitarbeiter Tabelle
mysql_query("update $zeiterfassung set soll_std = '$soll_std' where id_mitarbeiter = '$id_auswahl' and datum like '$datum_j%'");
echo mysql_error();

}
}

// Daten in Tabelle übertrag für den Mitarbeiter anlegen
for ($i=1; $i<13; $i++)
{
$datum = $datum_j."-".$i."-01";

mysql_query(sprintf('insert into uebertrag (id_mitarbeiter,datum) VALUES ("%s","%s")',addslashes($id_mitarbeiter),addslashes($datum)));
echo mysql_error();
}

// Erstellt Eintrag für Uebertrag des Urlaubs
mysql_query(sprintf('insert into uebertrag_urlaub (id_mitarbeiter,jahr)VALUES ("%s","%s")',
addslashes($id_mitarbeiter),addslashes($datum_j)));
echo mysql_error();

echo "<b>Kalender für $datum_j angelegt...</b>";

}

}

// >>>>>>>>>>>>>>>>>>>>>>>>>>> Formulardaten UPDATEN ENDE <<<<<<<<<<<<<<<<< -->

 
tomtherock
28-08-2006, 13:46 
 
Mir ist gerade noch eingefallen man könnte ja evtl. für jedes Jahr einmalig eine BASIC Kalender wo speichern(diesen dynamisch generieren lassen)

und diesen dann einfach abfrage where datum LIKE '2006%'

und kopieren erspart halt 365 schleifen und somit 1insert anstatt 365

wäre allerdings nur ne Notlösung finde ich.

 
wahsaga
28-08-2006, 14:01 
 
Warum willst du denn überhaupt beim Anlegen eines Benutzers auch schon "Kalendartage" erzeugen?

 
tomtherock
28-08-2006, 14:05 
 
nein hab ich vielleicht nicht eindeutig oben geschildert.

Man hat eine komplett neue Seite wo man die Benutzer auswählen kann.

Dort kann man dann auswählen für welches Jahr der Kalender angelegt werden soll.

Also bei erstellen des Benutzers wird lediglich seine Attribute in der
Tabelle Mitarbeiter gespeichert sonst nichts.

-> Soll arbeitszeit, Jahreurlaub usw...(wird zu dynamischen Berechnung der Zeiterfassung benutzt)

 
wahsaga
28-08-2006, 14:30 
 
Wenn die genannten Attribute für jedes Kalendarjahr gelten - warum brauchst du dann eine konkrete Jahreszahl?

Wenn sie das nicht tun - warum willst du sie dann am Benutzer ablegen?

 
tomtherock
28-08-2006, 14:45 
 
ganz einfach weil ich ja wissen muss das der Benutzer XY

zb.:am 04.06.2006 um 8.00 Uhr gekommen ist und um 16.00Uhr gegangen

zudem kann sich ein Arbeitsvertrag ändern und somit muss ich auch die einträg in ab zb 07.06.2006 oder 2007 ändern usw...

---

Mir ist natürlich klar das man die gesamten Kalender auch generieren lassen könnte, aber da ich mir höchstens die Wochenenden spar in denen keine Arbeitszeiten eingetragen werden leg ich gleich alle an um z.b. keine Abfragen zu machen zu müssen ob datensatz vorhanden wenn nicht dann insert ansonsten nen update usw...

Mir gehts einfach darum das ich die erstellung des Jahreskalenders der Benutzer von ca. 10 sekunden optimieren will. Das mir einfach zu lang ;)

 
wahsaga
28-08-2006, 14:54 
 
Original geschrieben von tomtherock
ganz einfach weil ich ja wissen muss das der Benutzer XY

zb.:am 04.06.2006 um 8.00 Uhr gekommen ist und um 16.00Uhr gegangen
Dann legst du für den 04.06.2006 eben einen Eintrag an, in dem diese Information drinsteht - und zwar am 04.06.2006 oder später.
zudem kann sich ein Arbeitsvertrag ändern und somit muss ich auch die einträg in ab zb 07.06.2006 oder 2007 ändern usw...
Warum musst du die ändern?

Wenn heute der 06.06.2006 ist, existieren diese Einträge noch gar nicht.

 
tomtherock
28-08-2006, 14:57 
 
doch man kann sich das ganze wie einen Kalender auf seinem Schreibtisch vorstellen...

Die Grafische Darstellung mit den Tagen ist ja schon vorhanden usw...
Nur es steht halt noch nichts in den Felder.

 
tomtherock
28-08-2006, 15:06 
 
Heidanei!!! Muss mich hier selbst öfftenlich beschimpfen ^^.

Folgendes hat das Script so ausgebremst:


// überträgt die aktuell eingetragenen Soll_std aus der Mitarbeiter Tabelle
mysql_query("update $zeiterfassung set soll_std = '$soll_std' where id_mitarbeiter = '$id_auswahl' and datum like '$datum_j%'");
echo mysql_error();

 
wahsaga
28-08-2006, 15:23 
 
Original geschrieben von tomtherock
Die Grafische Darstellung mit den Tagen ist ja schon vorhanden usw...
Nur es steht halt noch nichts in den Felder.
Also brauchen in der Datenbak für Tage, die noch nicht vergangen sind, oder zu denen kein Messwert existiert, auch keine Einträge vorhanden sein.

 
tomtherock
28-08-2006, 18:05 
 
ja wie gesagt wahsaga man könnte den kalender auch dynamisch ich echtzeit erstellen lassen, aber darum gehts hier ja nicht sondern lediglich um die Optimierung des obrigen codes...

Da das gelößt ist *CLOSED*

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:17 Uhr.