Probleme mit algorhytmus

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

  • Probleme mit algorhytmus

    Hallo Leute.
    Bin php-Anfänger und schreibe gerade an meinem ersten grösseren Skript. Das Skript soll ein Schichtplaner werden, der wie ein
    Kalender aufgebaut ist. Pro Zeile wird ein Mitarbeiter angezeigt, der dann in den Spalten (Monatstag) pro tag eine Schicht zugewiesen bekommt.
    Es sollen pro Monat eine Tabelle entstehen. Die Schichten folgen einem bestimmten Rhytmus der sich immer wiederholt. Natürlich sollen die
    Schichten dann in der nächsten Tabelle, also jeden Monat, weiter ausgegeben werden.
    Es funktioniert auch teilweise, aber ich habe immer einen Wurm drin, dass die einzelnen Schichten in der nächsten Tabellenzeile (beim nächsten
    Mitarbeiter) weitergeschrieben werden oder, dass einige Zellen ausgelassen werden oder der falsche Rhytmus ausgegeben wird.
    Seit gestern versuch ich das Problem zu lösen, und ich will auch keine komplettlösung vorgekaut haben. Nur raucht mir schon der Kopf und ich komme
    einfach nicht weiter. Daher bin ich für jeden Tipp oder Verbesserungsvorschlag dankbar, den ihr mir geben könnt.

    Ich poste hier nur die Ausgabe der Tabellen aka Monatskalender, da nur der Zicken macht.

    Danke schonmal für eure Geduld.

    PHP-Code:
    $ka 0;
    $q=0;
    $x 0;
         
    for(
    $m=1$m<=$ansicht$m++){ //Je nach Ansicht werden 1, 3, 6 oder 12 Monatstabellen erstellt    

        
    $sql mysql_query("SELECT mitarbeiter.*, schichten.* FROM 
               mitarbeiter, schichten WHERE schichten.sid = mitarbeiter.sid  ORDER BY sname"
    );
        
        
    $tagX "2006-".$auswahl."-1";
        
    $firstday strtotime($tagX);  //erster tag der Zählung des Kalenders 
        
    $monat_jahr strftime("%B %Y",$firstday);    //Funktion zu errechnung und ausgabe des Aktuellen Monats
        
    $tage_im_monat date("t",$firstday);  //berechnung der anzahl der tage eines monats 
        
    $k 0;    //hilfsvariable um den wochentag um einen tag zu erhöhen
        
    $k2 0;                     
        
        
        
    //Tabelle für die einzelnen Schichten
        
    echo "<h4>".$monat_jahr."</h4>";      //ausgabe des monats und des jahres
        
    echo "<table cellspacing='0' bordercolor='#000000' border='1'>";
        echo 
    "<tr><th rowspan='2'  width='200' valign='bottom'>Name</th>";    //zeile 1 - datum
        
    for($i=1$i<=$tage_im_monat$i++){
        
            if(
    strftime("%a",$firstday+$k2) == "So"){    //ausgabe der monatstage mit samstag und sonntag hervorgehoben
               
    echo "<th width='25pt' style='color:red; font-style:italic;'>".$i."</th>";
            }else if (
    strftime("%a",$firstday+$k2) == "Sa"){
               echo 
    "<th width='25pt' style='color:blue; font-style:italic;'>".$i."</th>";
            }else echo 
    "<th width='25pt'>".$i."</th>";
            
            
    $k2 $k2 86400;    
        }
        echo 
    "</tr>";
        echo 
    "<tr>";                  //zeile 2 - wochentag
        
    for($j=1$j<=$tage_im_monat; ++$j){  //wochentaggenerierung mit samstag und sonntag hervorgehoben
        
            
    if(strftime("%a",$firstday+$k) == "So"){
               echo 
    "<th width='25pt' style='color:red; font-style:italic;'>".strftime("%a",$firstday+$k)."</th>";
            }else if (
    strftime("%a",$firstday+$k) == "Sa"){
               echo 
    "<th width='25pt' style='color:blue; font-style:italic;'>".strftime("%a",$firstday+$k)."</th>";
            }else echo 
    "<th width='25pt'>".strftime("%a",$firstday+$k)."</th>";
            
            
    $k $k 86400;              
        }
        
        echo 
    "</tr>";
        
            
        while (
    $data mysql_fetch_array($sql)){   /pro name eine zeile mit allen schichten         
        
             
    echo "<tr><td width='200'>[".$data["sname"]."] ".$data[nachname]."</td>";                    
             
             
    $datei fopen("schicht.txt""a+");
             
             
    fputs($datei$data["rhytmus"]);   //Rhytmus aus der Datenbank in eine Datei schreiben
             
             
    fseek($datei0"SEEK_SET");
                      
             
    $string fgets($datei);     //Inhalt der datei auslesen zur weiteren verarbeitung
             
             
    $laenge strlen($string);       //anzahl der buchstaben in der ersten zeile der datei zählen          
                      
                      
             
    for($l=0$l<=$tage_im_monat$l++){   //so oft eine spalte schreiben, wie der monat tage hat
                
                  
    if($q $laenge){     //wenn der monat länger ist, als der schichtturnus ggf von neuem beginnen                      
                        
                        
                        
    $ding substr($string$x1);         //jeden einzelnen buchstaben auslesen und in eine zelle verpacken        
                        
                        
    echo "<td width='25pt' align='center'>
                              <a href='event.php?time="
    .date("U",$firstday+$ka)."&mid=".$data[mid]."'>
                              <b>&nbsp;"
    .$ding."&nbsp;</b></a></td>";       //spalte für die einzelne schicht
                        
                        
    $q $q 1
                        
                        
    $x $x 1;
                        
                  }else if (
    $q == $laenge){
                  
                        
    $q=0;
                                        
                    }
                  
                  if (
    $x == $tage_im_monat){                     
                       
                       
    $x 0;  
                   }
                  
                  
    $ka $ka 86400;  //ohne die hilfsvariable ka würde in jeder zeile weitergezählt anstatt in jeder tabelle
                  
                
    }
            
            
            echo 
    "</tr>";
            
    $ka 0;
            
    fclose($datei);
            
    unlink("schicht.txt");     
        }    
        
        echo 
    "</table>";
        
        echo 
    "<br>";

        
    $auswahl $auswahl 1;
        
    $ka $ka 86400;

    Zuletzt geändert von teichi; 27.10.2005, 09:44.

  • #2
    Uff, kannst du mal den Link auf die Seite posten oder deinem nächsten Beitrag einen Screenshot der verkorksten Tabelle anhängen?

    Den Code kann man nämlich schwer nachvollziehen.
    Mir fällt allerdings auf, dass du Daten aus der DB in einer Datei zwischenspeicherst. Völliger Blödsinn, was auch immer das bezwecken soll, es geht auch ohne Datei!

    Kommentar


    • #3
      Das mit der Datei ist mir gerade auch aufgefallen.
      Dass der Code ziehmlich unübersichtlich, weiss ich. Bin für jeden Tipp, ihn zu vereinfachen froh.
      Oder wenn du eine Idee hast, wie einen Schichtrhytmus so in eine
      Tabelle bringen kann, bin ich ganz Ohr.

      Hier mal der Screenshot:
      Angehängte Dateien

      Kommentar


      • #4
        Fangen wir doch mal ganz langsam an: mysql_query() wäre vor der for-Schleife besser aufgehoben, nicht?

        PHP-Code:
        for($l=0$l<=$tage_im_monat$l++) 
        Versuchs mal mit $l=1 beginnend.

        Und lass dir (vor allem innerhalb der Schleifen) die Zähl- und Datumsvariablen ausgeben ...

        Kommentar


        • #5
          erstmal danke für die hilfe.

          wenn mysql_query() ausserhalb der for-schleife ist, macht der das nur für den ersten monat.

          wenn l=1 ist, fängt in den folgenden zeilen nicht mehr am 1. des monats an sondern pro weiterer zeile einen tag später.

          die variable x "geht richtig". sie ist für jeden kalendertag gleich. abgesehen von vier zellen im jahr, was ich nicht so ganz nachvollziehen kann.

          ich gebe mal für die ausgabe von x und q einen screenie mit, wenn du dir den antun willst.
          Angehängte Dateien

          Kommentar

          Lädt...
          X