Zeitfassungssystem (komplizierter)

Venillla

Mitglied
Guten Tag

Ich konnte dank einiger Genies hier mein Zeiterfassungssystem sehr weit bringen. Es war mein Abschlussarbeit letztes Jahr, da es gar nicht mal so schlecht funktionierte, möchte mein Vorgesetzter dieser weiter verbessern, damit es nicht wie ein Amateur-Programm aussieht. Ich muss in 4 Tagen mit diesem fertig werden :( :(
Bin aber leider noch eine Anfängerin :(

Also zu meinem Programm…
_______________________________________________________________

Meine Datenbank-Tabellen:

rapport
- id (10)
- objekt (111)
- mitarbeiter (Schmid)
- jahr (2009)
- monat (01)
- zeit (2)


stundenansatz
- id (20)
- mitarbeiter (Schmid)
- objekt (111)
- stunden (150)

______________________________________________________________

Ich hab durch Hilfe von einige hier zwei verschiedene Ausgaben durch die Dropdownfelder:

1)

PHP:
<? 
// Erstellt Connect zu Datenbank her
	$host = "localhost"; 
$user = "root"; 
$pass = "xxx";
$daba = "zeiterfassung"; 
    $db = @mysql_connect($host, $user, $pass) or die ("Konnte keine Verbindung zur Datenbank herstellen"); 
    mysql_select_db($daba, $db); 
// zuerst alle Mitarbeiter ermitteln 
    $sql_mitarbeiter = 'SELECT DISTINCTROW mitarbeiter, objekt FROM rapport WHERE 
objekt =  "'.mysql_real_escape_string($_POST['objekt']).'" 
AND jahr =  "'.mysql_real_escape_string($_POST['jahr']).'" 
'; 
    $rs_mitarbeiter = mysql_query($sql_mitarbeiter, $db); 
?> 
        <? for ($a = 0; $a <= mysql_num_rows($rs_mitarbeiter) - 1; $a++) { ?> 
            <tr> 
                <td><? echo mysql_result($rs_mitarbeiter, $a, "mitarbeiter")  ?></td>          
        <? 
        $sql_zeit = "SELECT monat, SUM(zeit) AS zeit FROM rapport WHERE
 objekt =  '".mysql_real_escape_string($_POST['objekt'])."'  
AND jahr =  '".mysql_real_escape_string($_POST['jahr'])."' 
AND
 mitarbeiter = '" .mysql_result($rs_mitarbeiter, $a, "mitarbeiter") ."' 
GROUP BY monat ORDER BY monat"; 
        $rs_zeit = @mysql_query ($sql_zeit, $db); 
        unset($zeit); 
        for ($b = 0; $b<= mysql_num_rows($rs_zeit); $b++) { 
            $zeit[@mysql_result($rs_zeit, $b, "monat")] = @mysql_result($rs_zeit, $b, "zeit"); 
        } 
        ?> 
                <td><? echo $zeit[1]; ?></td> 
                <td><? echo $zeit[2]; ?></td> 
                <td><? echo $zeit[3]; ?></td> 
                <td><? echo $zeit[4]; ?></td> 
                <td><? echo $zeit[5]; ?></td> 
                <td><? echo $zeit[6]; ?></td> 
                <td><? echo $zeit[7]; ?></td> 
                <td><? echo $zeit[8]; ?></td> 
                <td><? echo $zeit[9]; ?></td> 
                <td><? echo $zeit[10]; ?></td> 
                <td><? echo $zeit[11]; ?></td> 
                <td><? echo $zeit[12]; ?></td> 
            </tr> 
        <? } ?>

Wenn ich im Dropdownfelder irgendein Objekt und Jahr auswähle, werden die Zeiten nach Monat gruppiert ausgegeben. Die Mitarbeiter werden nur angezeigt wenn sie auch Stunden im ausgewählten Objekt und Jahr haben.

------------------------------------------------------------------------------------------------------------

2)


PHP:
<?php   
  include "connect.inc.php"; 
    $sqlab = 'SELECT *, 

SUM(rapport.zeit) as zeiten, 
stundenansatz.stunden as satzung 

FROM 
rapport 

LEFT JOIN 
stundenansatz 
ON 
rapport.objekt =  stundenansatz.objekt 
AND
rapport.mitarbeiter = stundenansatz.mitarbeiter
WHERE  
stundenansatz.objekt =  "'.mysql_real_escape_string($_POST['objekt']).'" 
AND rapport.jahr =  "'.mysql_real_escape_string($_POST['jahr']).'" 
AND stundenansatz.mitarbeiter = "Schmid" 
GROUP BY  
stundenansatz.mitarbeiter'; 

 $res = mysql_query($sqlab);
  $num = mysql_num_rows($res);
  $arr = mysql_fetch_array($res);
  //echo "<table border align='center'>";
  while ($arr) 
    { 
echo '<td align="right">'.  $arr['zeiten']*$arr['satzung'] .  '&nbsp;'  . '</td>'; 
echo '</a>';
$arr = mysql_fetch_array($res);
    }

?>
Hier ist der Mitarbeiter schon fest reingeschrieben.
Separat in einer Tabelle wird der Stundenansatz pro Mitarbeiter und Objekt einzeln gespeichert. Die Stunden der Mitarbeiter wird mit Stundenansatz multipliziert.
Wenn neue Mitarbeiter hinzukommen, muss aber manuell das Script verändert werden.

______________________________________________________________

Ich (mein Vorgesetzter) möchte diese beiden Scripts zusammenfügen.


Etwa so:

Mitarbeiter | jan.| feb.| märz | apr. | mai | juni | juli | aug. | sept. | okt. | nov. | dez. | Stundenansatz | Total 1 | Vorjahr | Total 2

- Mitarbeiter = Erscheint nur, wenn er im gewählten Objekt und Jahr "zeit" eingetragen hat

- Stundenansatz = die Stunden aus der Tabelle Stundenansatz, der gewählten Objekt. Erscheint nur wenn der Mitarbeiter auch erscheint

- Total 1 = von jan. bis dez. zusammengezählt multipliziert durch Stundenansatz.
Erscheint wenn Mitarbeiter erscheint
- Vorjahr = Wie Total 1 aber vom Vorjahr (also gewähltes Jahr minus 1)
- Total 2 = Total 1 + Vorjahr

Das alles muss automatisch angezeigt werden wenn ich ein Jahr und ein Objekt im Dropdownfeld auswähle..
Da verschiedene Abfragen zusammenkommen weiss ich nicht ob das überhaupt möglich ist…. :confused: Wenn ich das habe, bekomme ich endlich meine Ruhe..
 
Zuletzt bearbeitet:
Nur gut das ich heute im Geschäft nicht viel zu tun habe :-)

Ich kopiere einfach wieder meinen Quelltext hier rein:

PHP:
<html>

	<head>
		<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
		<title></title>
	</head>

	<body bgcolor="#ffffff">
		<form name="zeiterfassung" action="zeiterfassung.php" method="post">
			<?

// Erstellt Connect zu Datenbank her
$user = "root";
$pass = "XXX";
$daba = "zeiterfassung";

    $db = @mysql_connect($host, $user, $pass) or die ("Konnte keine Verbindung zur Datenbank herstellen");
    mysql_select_db($daba, $db);
// zuerst alle Mitarbeiter ermitteln
    $sql_mitarbeiter = "SELECT DISTINCTROW mitarbeiter, objekt FROM rapport WHERE objekt = " .$_POST["objekt"] ." AND jahr = " .$_POST["jahr"];
    $rs_mitarbeiter = mysql_query($sql_mitarbeiter, $db);

?>
			<table border="1" cellpadding="0" cellspacing="2" width="408">
				<tr>
					<td>Objekt</td>
					<td><select name="objekt" size="1">
							<option value="111">111</option>
							<option value="222">222</option>
						</select></td>
					<td><input type="submit" name="submitButtonName"></td>
				</tr>
				<tr>
					<td>Jahr</td>
					<td><select name="jahr" size="1">
							<option value="2005">2005</option>
							<option value="2006">2006</option>
							<option value="2007">2007</option>
							<option value="2008">2008</option>
							<option value="2009">2009</option>
						</select></td>
					<td></td>
				</tr>
			</table>
			<p></p>
			<table border="0" cellpadding="0" cellspacing="0" width="900">
				<? for ($a = 0; $a <= mysql_num_rows($rs_mitarbeiter) - 1; $a++) { ?>
				<tr>
					<td><? echo mysql_result($rs_mitarbeiter, $a, "mitarbeiter") ." / " .mysql_result($rs_mitarbeiter, $a, "objekt"); ?></td>
					<td>Januar</td>
					<td>Februar</td>
					<td>M&auml;rz</td>
					<td>April</td>
					<td>Mai</td>
					<td>Juni</td>
					<td>Juli</td>
					<td>August</td>
					<td>September</td>
					<td>Oktober</td>
					<td>November</td>
					<td>Dezember</td>
					<td>Stundensatz</td>
					<td>Total 1</td>
					<td>Vorjahr</td>
					<td>Total 2</td>
				</tr>
				<?
$sql_zeit = "SELECT monat, SUM(rapport.zeit) as zeiten, stundensatz.stunden as satzung FROM rapport LEFT JOIN stundensatz ON rapport.objekt = stundensatz.objekt";
$sql_zeit = $sql_zeit ." AND rapport.mitarbeiter = stundensatz.mitarbeiter WHERE stundensatz.objekt =  '" .mysql_real_escape_string($_POST['objekt']);
$sql_zeit = $sql_zeit ."' AND rapport.jahr = '" .mysql_real_escape_string($_POST['jahr']). "' AND stundensatz.mitarbeiter = '" .mysql_result($rs_mitarbeiter, $a, "mitarbeiter") ."'";
$sql_zeit = $sql_zeit ." GROUP BY monat";

// Abfrage für Vorjahr
$sql_zeit_vorjahr = "SELECT SUM(rapport.zeit) as zeiten_vorjahr FROM rapport WHERE objekt =  '" .mysql_real_escape_string($_POST['objekt']);
$sql_zeit_vorjahr = $sql_zeit_vorjahr ."' AND jahr = '" .(mysql_real_escape_string($_POST['jahr']) - 1). "' AND mitarbeiter = '" .mysql_result($rs_mitarbeiter, $a, "mitarbeiter") ."'";

$rs_zeit_vorjahr = @mysql_query($sql_zeit_vorjahr, $db);

$rs_zeit = @mysql_query ($sql_zeit, $db);
unset($zeit);
for ($b = 0; $b<= mysql_num_rows($rs_zeit); $b++) {
$zeit[@mysql_result($rs_zeit, $b, "monat")] = @mysql_result($rs_zeit, $b, "zeiten");
}
?>
				<tr>
					<td>&nbsp;</td>
					<td><? echo $zeit[1]; ?></td>
					<td><? echo $zeit[2]; ?></td>
					<td><? echo $zeit[3]; ?></td>
					<td><? echo $zeit[4]; ?></td>
					<td><? echo $zeit[5]; ?></td>
					<td><? echo $zeit[6]; ?></td>
					<td><? echo $zeit[7]; ?></td>
					<td><? echo $zeit[8]; ?></td>
					<td><? echo $zeit[9]; ?></td>
					<td><? echo $zeit[10]; ?></td>
					<td><? echo $zeit[11]; ?></td>
					<td><? echo $zeit[12]; ?></td>
					<td><? echo @mysql_result($rs_zeit, 0, "satzung"); ?></td>
					<td><? echo (array_sum($zeit) * @mysql_result($rs_zeit, 0, "satzung")); ?></td>
					<td><? echo (@mysql_result($rs_zeit_vorjahr, 0, "zeiten_vorjahr") * @mysql_result($rs_zeit, 0, "satzung"));?></td>
					<td><? echo (@mysql_result($rs_zeit_vorjahr, 0, "zeiten_vorjahr") * @mysql_result($rs_zeit, 0, "satzung")) + (array_sum($zeit) * @mysql_result($rs_zeit, 0, "satzung"));?></td>
				</tr>
				<? } ?>
			</table>
		</form>
	</body>

</html>

Wie vorhin auch ist das Ergebnis auf dem Bild im Anhang zu sehen.

Viel Spaß damit und schöne Grüße an deinen Chef

Thomas
 

Anhänge

  • Unbenannt - 1.jpg
    Unbenannt - 1.jpg
    48,2 KB · Aufrufe: 60
Wieder die gleiche Fehlermeldung wie vorher.. diesmal steht wirklich daba statt db..

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ....
<? for ($a = 0; $a <= mysql_num_rows($rs_mitarbeiter) - 1; $a++) { ?>




PHP:
<html> 

    <head> 
        <meta http-equiv="content-type" content="text/html;charset=iso-8859-1"> 
        <title></title> 
    </head> 

    <body bgcolor="#ffffff"> 
        <form name="zeiterfassung" action="Gesamt.php" method="post"> 
            <? 

// Erstellt Connect zu Datenbank her 
$user = "root"; 
$pass = "xxx"; 
$daba = "zeiterfassung"; 

    $db = @mysql_connect($host, $user, $pass) or die ("Konnte keine Verbindung zur Datenbank herstellen"); 
    mysql_select_db($daba, $db); 
// zuerst alle Mitarbeiter ermitteln 
    $sql_mitarbeiter = "SELECT DISTINCTROW mitarbeiter, objekt FROM rapport WHERE objekt = " .$_POST["objekt"] ." AND jahr = " .$_POST["jahr"]; 
    $rs_mitarbeiter = mysql_query($sql_mitarbeiter, $db); 

?> 
            <table border="1" cellpadding="0" cellspacing="2" width="408"> 
                <tr> 
                    <td>Objekt</td> 
                    <td><select name="objekt" size="1"> 
                            <option value="111">100</option> 
                            <option value="222">222</option> 
                        </select></td> 
                    <td><input type="submit" name="submitButtonName"></td> 
                </tr> 
                <tr> 
                    <td>Jahr</td> 
                    <td><select name="jahr" size="1"> 
                            <option value="2005">2005</option> 
                            <option value="2006">2006</option> 
                            <option value="2007">2007</option> 
                            <option value="2008">2008</option> 
                            <option value="2009">2009</option> 
                        </select></td> 
                    <td></td> 
                </tr> 
            </table> 
            <p></p> 
            <table border="0" cellpadding="0" cellspacing="0" width="900"> 
                <? for ($a = 0; $a <= mysql_num_rows($rs_mitarbeiter) - 1; $a++) { ?> 
                <tr> 
                    <td><? echo mysql_result($rs_mitarbeiter, $a, "mitarbeiter") ." / " .mysql_result($rs_mitarbeiter, $a, "objekt"); ?></td> 
                    <td>Januar</td> 
                    <td>Februar</td> 
                    <td>M&auml;rz</td> 
                    <td>April</td> 
                    <td>Mai</td> 
                    <td>Juni</td> 
                    <td>Juli</td> 
                    <td>August</td> 
                    <td>September</td> 
                    <td>Oktober</td> 
                    <td>November</td> 
                    <td>Dezember</td> 
                    <td>Stundensatz</td> 
                    <td>Total 1</td> 
                    <td>Vorjahr</td> 
                    <td>Total 2</td> 
                </tr> 
                <? 
$sql_zeit = "SELECT monat, SUM(rapport.zeit) as zeiten, stundenansatz.stunden as satzung FROM rapport LEFT JOIN stundenansatz ON rapport.objekt = stundenansatz.objekt"; 
$sql_zeit = $sql_zeit ." AND rapport.mitarbeiter = stundenansatz.mitarbeiter WHERE stundenansatz.objekt =  '" .mysql_real_escape_string($_POST['objekt']); 
$sql_zeit = $sql_zeit ."' AND rapport.jahr = '" .mysql_real_escape_string($_POST['jahr']). "' AND stundenansatz.mitarbeiter = '" .mysql_result($rs_mitarbeiter, $a, "mitarbeiter") ."'"; 
$sql_zeit = $sql_zeit ." GROUP BY monat"; 

// Abfrage für Vorjahr 
$sql_zeit_vorjahr = "SELECT SUM(rapport.zeit) as zeiten_vorjahr FROM rapport WHERE objekt =  '" .mysql_real_escape_string($_POST['objekt']); 
$sql_zeit_vorjahr = $sql_zeit_vorjahr ."' AND jahr = '" .(mysql_real_escape_string($_POST['jahr']) - 1). "' AND mitarbeiter = '" .mysql_result($rs_mitarbeiter, $a, "mitarbeiter") ."'"; 

$rs_zeit_vorjahr = @mysql_query($sql_zeit_vorjahr, $db); 

$rs_zeit = @mysql_query ($sql_zeit, $db); 
unset($zeit); 
for ($b = 0; $b<= mysql_num_rows($rs_zeit); $b++) { 
$zeit[@mysql_result($rs_zeit, $b, "monat")] = @mysql_result($rs_zeit, $b, "zeiten"); 
} 
?> 
                <tr> 
                    <td>&nbsp;</td> 
                    <td><? echo $zeit[1]; ?></td> 
                    <td><? echo $zeit[2]; ?></td> 
                    <td><? echo $zeit[3]; ?></td> 
                    <td><? echo $zeit[4]; ?></td> 
                    <td><? echo $zeit[5]; ?></td> 
                    <td><? echo $zeit[6]; ?></td> 
                    <td><? echo $zeit[7]; ?></td> 
                    <td><? echo $zeit[8]; ?></td> 
                    <td><? echo $zeit[9]; ?></td> 
                    <td><? echo $zeit[10]; ?></td> 
                    <td><? echo $zeit[11]; ?></td> 
                    <td><? echo $zeit[12]; ?></td> 
                    <td><? echo @mysql_result($rs_zeit, 0, "satzung"); ?></td> 
                    <td><? echo (array_sum($zeit) * @mysql_result($rs_zeit, 0, "satzung")); ?></td> 
                    <td><? echo (@mysql_result($rs_zeit_vorjahr, 0, "zeiten_vorjahr") * @mysql_result($rs_zeit, 0, "satzung"));?></td> 
                    <td><? echo (@mysql_result($rs_zeit_vorjahr, 0, "zeiten_vorjahr") * @mysql_result($rs_zeit, 0, "satzung")) + (array_sum($zeit) * @mysql_result($rs_zeit, 0, "satzung"));?></td> 
                </tr> 
                <? } ?> 
            </table> 
        </form> 
    </body> 

</html>
 
Nachtrag.

Die SQL-Anweisung(en) welche die Stunden und die Daten des Vorjahrs ermitteln können zusammengefasst werden.

PHP:
<?
$sql_zeit = "SELECT monat, SUM(rapport.zeit) as zeiten, stundensatz.stunden as satzung, (SELECT SUM(rapport.zeit) as zeiten_vorjahr FROM rapport WHERE ";
$sql_zeit = $sql_zeit ."objekt =  '" .mysql_real_escape_string($_POST["objekt"]) ."' AND jahr = '" .(mysql_real_escape_string($_POST["jahr"]) - 1) ."' AND ";
$sql_zeit = $sql_zeit ."mitarbeiter = '" .mysql_result($rs_mitarbeiter, $a, "mitarbeiter") ."') AS vorjahr FROM rapport LEFT JOIN stundensatz ON rapport.objekt = ";
$sql_zeit = $sql_zeit ."stundensatz.objekt AND rapport.mitarbeiter = stundensatz.mitarbeiter WHERE stundensatz.objekt =  '";
$sql_zeit = $sql_zeit .mysql_real_escape_string($_POST['objekt']) ."' AND rapport.jahr = '" .mysql_real_escape_string($_POST['jahr']);
$sql_zeit = $sql_zeit ."' AND stundensatz.mitarbeiter = '" .mysql_result($rs_mitarbeiter, $a, "mitarbeiter") ."' GROUP BY monat";

$rs_zeit = @mysql_query ($sql_zeit, $db);
unset($zeit);
for ($b = 0; $b<= mysql_num_rows($rs_zeit); $b++) {
$zeit[@mysql_result($rs_zeit, $b, "monat")] = @mysql_result($rs_zeit, $b, "zeiten");
}
?>
				<tr>
					<td>&nbsp;</td>
					<td><? echo $zeit[1]; ?></td>
					<td><? echo $zeit[2]; ?></td>
					<td><? echo $zeit[3]; ?></td>
					<td><? echo $zeit[4]; ?></td>
					<td><? echo $zeit[5]; ?></td>
					<td><? echo $zeit[6]; ?></td>
					<td><? echo $zeit[7]; ?></td>
					<td><? echo $zeit[8]; ?></td>
					<td><? echo $zeit[9]; ?></td>
					<td><? echo $zeit[10]; ?></td>
					<td><? echo $zeit[11]; ?></td>
					<td><? echo $zeit[12]; ?></td>
					<td><? echo @mysql_result($rs_zeit, 0, "satzung"); ?></td>
					<td><? echo (array_sum($zeit) * @mysql_result($rs_zeit, 0, "satzung")); ?></td>
					<td><? echo (@mysql_result($rs_zeit, 0, "vorjahr") * @mysql_result($rs_zeit, 0, "satzung"));?></td>
					<td><? echo (@mysql_result($rs_zeit, 0, "vorjahr") * @mysql_result($rs_zeit, 0, "satzung")) + (array_sum($zeit) * @mysql_result($rs_zeit, 0, "satzung"));?></td>
				</tr>
				<? } ?>
			</table>
 
Ich hab jetz ein kleines Problem mit der Ausgabe.
Und zwar, wenn ein Mitarbeiter im Vorjahr Stunden hat, aber nicht dieses Jahr, wird er nicht angezeigt.
Seine Name erscheint nur, wenn er im gewählten Jahr Stunden hat...
Kann ich dieses irgendwie ändern?

Das nächste Problem: Ich muss noch das Total von alles haben..
Also Total Stunden von dieses Jahr und Vorjahr multipliziert durch Stundenansatz. Da jeder Mitarbeiter eine andere Stundenansatz hat ist das sehr schwierig... Hab heute den ganzen Tag daran gearbeitet..aber ich brings nicht hin...

PLEASE HELP :(
 
Zuletzt bearbeitet:
Hallo Leute!
Ich versuche schon lange herauszufinden wie ich das Script verändern kann dass die Mitarbeiter angezeigt werden wenn sie auch im Vorjahr Stunden haben.
Mit dem Script unten werden sie nur angezeigt wenn sie im gewählten Jahr Stunden eingefügt haben..

Da niemand mir eine Lösung vorgeschlagen hat, versuche ich jetzt, dass ALLE Mitarbeiter automatisch angezeigt werden die im Datenbank sind.. So werden mindestens auch Stunden vom Vorjahr angezeigt...
Kann mir hier jemand helfen?

PHP:
<?  
// Erstellt Connect zu Datenbank her 
    $host = "localhost";  
$user = "root";  
$pass = "xxx"; 
$daba = "zeiterfassung";  
    $db = @mysql_connect($host, $user, $pass) or die ("Konnte keine Verbindung zur Datenbank herstellen");  
    mysql_select_db($daba, $db);  
// zuerst alle Mitarbeiter ermitteln  

   $sql_mitarbeiter = "SELECT DISTINCTROW mitarbeiter, 
objekt FROM rapport WHERE objekt = " .$_POST["objekt"] ." AND jahr = " .$_POST["jahr"]; 


    $rs_mitarbeiter = mysql_query($sql_mitarbeiter, $db); 

?>  
       
                <? for ($a = 0; $a <= mysql_num_rows($rs_mitarbeiter) - 1; $a++) { ?> 
                <tr> 
                    <td><? echo mysql_result($rs_mitarbeiter, $a, "mitarbeiter"); ?></td> 
                   
                
                <? 
$sql_zeit = "SELECT monat, SUM(rapport.zeit) as zeiten, stundenansatz.stunden as satzung FROM rapport LEFT JOIN stundenansatz ON rapport.objekt = stundenansatz.objekt"; 
$sql_zeit = $sql_zeit ." AND rapport.mitarbeiter = stundenansatz.mitarbeiter WHERE stundenansatz.objekt =  '" .mysql_real_escape_string($_POST['objekt']); 
$sql_zeit = $sql_zeit ."' AND rapport.jahr = '" .mysql_real_escape_string($_POST['jahr']). "' AND stundenansatz.mitarbeiter = '" .mysql_result($rs_mitarbeiter, $a, "mitarbeiter") ."'"; 
$sql_zeit = $sql_zeit ." GROUP BY monat"; 

// Abfrage für Vorjahr 
$sql_zeit_vorjahr = "SELECT SUM(rapport.zeit) as zeiten_vorjahr FROM rapport WHERE objekt =  '" .mysql_real_escape_string($_POST['objekt']); 
$sql_zeit_vorjahr = $sql_zeit_vorjahr ."' AND jahr = '" .(mysql_real_escape_string($_POST['jahr']) - 1). "' AND mitarbeiter = '" .mysql_result($rs_mitarbeiter, $a, "mitarbeiter") ."'"; 

$rs_zeit_vorjahr = @mysql_query($sql_zeit_vorjahr, $db); 

$rs_zeit = @mysql_query ($sql_zeit, $db); 
unset($zeit); 
for ($b = 0; $b<= mysql_num_rows($rs_zeit); $b++) { 
$zeit[@mysql_result($rs_zeit, $b, "monat")] = @mysql_result($rs_zeit, $b, "zeiten"); 
} 
?> 
                   <td align="right"><? echo (@mysql_result($rs_zeit_vorjahr, 0, "zeiten_vorjahr"));?></td>               
                    <td align="right"><? echo $zeit[1]; ?></td> 
                    <td align="right"><? echo $zeit[2]; ?></td> 
                    <td align="right"><? echo $zeit[3]; ?></td> 
                    <td align="right"><? echo $zeit[4]; ?></td> 
                    <td align="right"><? echo $zeit[5]; ?></td> 
                    <td align="right"><? echo $zeit[6]; ?></td> 
                    <td align="right"><? echo $zeit[7]; ?></td> 
                    <td align="right"><? echo $zeit[8]; ?></td> 
                    <td align="right"><? echo $zeit[9]; ?></td> 
                    <td align="right"><? echo $zeit[10]; ?></td> 
                    <td align="right"><? echo $zeit[11]; ?></td> 
                    <td align="right"><? echo $zeit[12]; ?></td> 
                    <td align="right"><? echo @mysql_result($rs_zeit_vorjahr, 0, "zeiten_vorjahr") + array_sum($zeit); ?></td>
                    <td align="right"><? echo @mysql_result($rs_zeit, 0, "satzung"); ?></td> 
                    <td align="right"><b><? echo (@mysql_result($rs_zeit_vorjahr, 0, "zeiten_vorjahr") * @mysql_result($rs_zeit, 0, "satzung")) + (array_sum($zeit) * @mysql_result($rs_zeit, 0, "satzung"));?></b></td> 
                </tr> 
                <? } ?>
 
So war übers Wochenende nicht online, dafür aber jetzt:

PHP:
<html>

	<head>
		<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
		<title></title>
	</head>

	<body bgcolor="#ffffff">
		<form name="zeiterfassung" action="zeiterfassung.php" method="post">
<?
// Erstellt Connect zu Datenbank her
$user = "root";
$pass = "XXX";
$daba = "zeiterfassung";

$db = @mysql_connect($host, $user, $pass) or die ("Konnte keine Verbindung zur Datenbank herstellen");
mysql_select_db($daba, $db);
?>
			<table border="1" cellpadding="0" cellspacing="2" width="408">
				<tr>
					<td>Objekt</td>
					<td><select name="objekt" size="1">
							<option value="111">111</option>
							<option value="222">222</option>
						</select></td>
					<td><input type="submit" name="submitButtonName"></td>
				</tr>
				<tr>
					<td>Jahr</td>
					<td><select name="jahr" size="1">
							<option value="2005">2005</option>
							<option value="2006">2006</option>
							<option value="2007">2007</option>
							<option value="2008">2008</option>
							<option value="2009">2009</option>
						</select></td>
					<td></td>
				</tr>
			</table>
			<p></p>
			<table border="0" cellpadding="0" cellspacing="0" width="900">
<?
// zuerst alle Mitarbeiter ermitteln
$sql_mitarbeiter = "SELECT DISTINCTROW mitarbeiter, objekt FROM rapport WHERE objekt = " .$_POST["objekt"] ." AND jahr = " .$_POST["jahr"] ." OR jahr = " .($_POST["jahr"] - 1);
$rs_mitarbeiter = mysql_query($sql_mitarbeiter, $db);

for ($a = 0; $a <= mysql_num_rows($rs_mitarbeiter) - 1; $a++) {
?>
				<tr>
					<td colspan="2">Mitarbeiter</td>
					<td colspan="2"><? echo mysql_result($rs_mitarbeiter, $a, "mitarbeiter");?></td>
					<td>&nbsp;</td>
					<td colspan="2">Objekt</td>
					<td colspan="2"><? echo mysql_result($rs_mitarbeiter, $a, "objekt"); ?></td>
					<td></td>
					<td></td>
					<td></td>
					<td></td>
					<td></td>
					<td></td>
					<td></td>
					<td></td>
				</tr>
				<tr>
					<td></td>
					<td>Januar</td>
					<td>Februar</td>
					<td>M&auml;rz</td>
					<td>April</td>
					<td>Mai</td>
					<td>Juni</td>
					<td>Juli</td>
					<td>August</td>
					<td>September</td>
					<td>Oktober</td>
					<td>November</td>
					<td>Dezember</td>
					<td>Stundensatz</td>
					<td>Ges. Std.</td>
					<td>Summe</td>
					<td>Total</td>
				</tr>
                <tr> 
                    <td><? echo @$_POST["jahr"]; ?></td>
<? 
$sql_zeit = "SELECT monat, SUM(rapport.zeit) as zeiten, stundenansatz.stunden as satzung FROM rapport LEFT JOIN stundenansatz ON rapport.objekt = stundenansatz.objekt"; 
$sql_zeit = $sql_zeit ." AND rapport.mitarbeiter = stundenansatz.mitarbeiter WHERE stundenansatz.objekt =  '" .mysql_real_escape_string($_POST['objekt']); 
$sql_zeit = $sql_zeit ."' AND rapport.jahr = '" .mysql_real_escape_string($_POST['jahr']). "' AND stundenansatz.mitarbeiter = '" .mysql_result($rs_mitarbeiter, $a, "mitarbeiter") ."'"; 
$sql_zeit = $sql_zeit ." GROUP BY monat"; 

$rs_zeit = @mysql_query ($sql_zeit, $db); 
unset($zeit); 
for ($b = 0; $b<= mysql_num_rows($rs_zeit); $b++) { 
$zeit[@mysql_result($rs_zeit, $b, "monat")] = @mysql_result($rs_zeit, $b, "zeiten");
}
$tmp_zeit = array_sum($zeit);
?> 
                    <td align="right"><? echo $zeit[1]; ?></td> 
                    <td align="right"><? echo $zeit[2]; ?></td> 
                    <td align="right"><? echo $zeit[3]; ?></td> 
                    <td align="right"><? echo $zeit[4]; ?></td> 
                    <td align="right"><? echo $zeit[5]; ?></td> 
                    <td align="right"><? echo $zeit[6]; ?></td> 
                    <td align="right"><? echo $zeit[7]; ?></td> 
                    <td align="right"><? echo $zeit[8]; ?></td> 
                    <td align="right"><? echo $zeit[9]; ?></td> 
                    <td align="right"><? echo $zeit[10]; ?></td> 
                    <td align="right"><? echo $zeit[11]; ?></td> 
                    <td align="right"><? echo $zeit[12]; ?></td> 
                    <td align="right"><? echo @mysql_result($rs_zeit, 0, "satzung"); ?></td> 
                    <td align="right"><? echo array_sum($zeit); ?></td>
                   <td align="right"><? echo @mysql_result($rs_zeit, 0, "satzung") * array_sum($zeit); ?></td>               
                    <td align="right" valign="middle"></td> 
                </tr> 
<?
// Abfrage für Vorjahr 
$sql_zeit_vorjahr = "SELECT monat, SUM(rapport.zeit) as zeiten_vorjahr, stundenansatz.stunden as satzung FROM rapport LEFT JOIN stundenansatz ON rapport.objekt = stundenansatz.objekt"; 
$sql_zeit_vorjahr = $sql_zeit_vorjahr ." AND rapport.mitarbeiter = stundenansatz.mitarbeiter WHERE stundenansatz.objekt =  '" .mysql_real_escape_string($_POST['objekt']); 
$sql_zeit_vorjahr = $sql_zeit_vorjahr ."' AND rapport.jahr = '" .(mysql_real_escape_string($_POST['jahr']) - 1). "' AND stundenansatz.mitarbeiter = '" .mysql_result($rs_mitarbeiter, $a, "mitarbeiter") ."'"; 
$sql_zeit_vorjahr = $sql_zeit_vorjahr ." GROUP BY monat";

$rs_zeit_vorjahr = @mysql_query($sql_zeit_vorjahr, $db); 
unset($zeit); 
for ($b = 0; $b<= mysql_num_rows($rs_zeit_vorjahr); $b++) { 
$zeit[@mysql_result($rs_zeit_vorjahr, $b, "monat")] = @mysql_result($rs_zeit_vorjahr, $b, "zeiten_vorjahr"); 
}
?>
                <tr> 
                    <td><? echo (@$_POST["jahr"] - 1); ?></td>
                    <td align="right"><? echo $zeit[1]; ?></td> 
                    <td align="right"><? echo $zeit[2]; ?></td> 
                    <td align="right"><? echo $zeit[3]; ?></td> 
                    <td align="right"><? echo $zeit[4]; ?></td> 
                    <td align="right"><? echo $zeit[5]; ?></td> 
                    <td align="right"><? echo $zeit[6]; ?></td> 
                    <td align="right"><? echo $zeit[7]; ?></td> 
                    <td align="right"><? echo $zeit[8]; ?></td> 
                    <td align="right"><? echo $zeit[9]; ?></td> 
                    <td align="right"><? echo $zeit[10]; ?></td> 
                    <td align="right"><? echo $zeit[11]; ?></td> 
                    <td align="right"><? echo $zeit[12]; ?></td> 
                    <td align="right"><? echo @mysql_result($rs_zeit, 0, "satzung"); ?></td> 
                    <td align="right"><? echo @array_sum($zeit); ?></td>
					<td align="right"><? echo @mysql_result($rs_zeit_vorjahr, 0, "satzung") * array_sum($zeit); ?></td>
					<td><div align="right"><? echo ($tmp_zeit +array_sum($zeit)) * @mysql_result($rs_zeit_vorjahr, 0, "satzung"); ?></div>
					</td>
				</tr>
				<tr>
					<td>&nbsp;</td>
					<td align="right"></td>
					<td align="right"></td>
					<td align="right"></td>
					<td align="right"></td>
					<td align="right"></td>
					<td align="right"></td>
					<td align="right"></td>
					<td align="right"></td>
					<td align="right"></td>
					<td align="right"></td>
					<td align="right"></td>
					<td align="right"></td>
					<td align="right"></td>
					<td align="right"></td>
					<td align="right"></td>
					<td></td>
				</tr>
				<? } ?>
			</table>
		</form>
	</body>

</html>

Hab den Aufbau der Tabelle (und die Beschriftung) jetzt so geändert, dass für das gewählte Jahr und für das Vorjahr eine separate Zeile in der Tabelle erstellt wird.

Die Optik lässt zu wünschen übrig aber die Funktion stimmt!!

Gruß Thomas
 
Zuletzt bearbeitet:
Vielen Dank für deine Mühe Thomas. Sehr lieb von dir :)

Ich hab dein ganzes Script kopiert und bei mir ausprobiert.
Der Fehler besteht immer noch, dass wenn ein Mitarbeiter nur im Vorjahr Stunden hat, aber nicht dieses Jahr, nicht angezeigt wird.. Wie kann ich das ändern?
 
Zurück