dynamische Kalender erstellung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • dynamische Kalender erstellung

    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:

    PHP-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 <<<<<<<<<<<<<<<<< --> 

  • #2
    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.

    Kommentar


    • #3
      Warum willst du denn überhaupt beim Anlegen eines Benutzers auch schon "Kalendartage" erzeugen?
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        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)

        Kommentar


        • #5
          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?
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            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
            Zuletzt geändert von tomtherock; 28.08.2006, 13:54.

            Kommentar


            • #7
              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.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                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.

                Kommentar


                • #9
                  Heidanei!!! Muss mich hier selbst öfftenlich beschimpfen ^^.

                  Folgendes hat das Script so ausgebremst:

                  PHP-Code:
                  // ü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(); 

                  Kommentar


                  • #10
                    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.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      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*

                      Kommentar

                      Lädt...
                      X