Zeiterfassungssystem

Venillla

Mitglied
Hallo Leute
Ich brauche wieder eure Hilfe in meinem Zeiterfassungssystem. Hier geht es um eine automatische Ausgabe mit Dropdownfelder..


Meine Tabelle sieht so aus:

id | mitarbeiter | objekt | zeit | jahr | monat
20 | Schmid | 111 | 2.0 | 2009 | 1
21 | Schmid | 111 | 1.5 | 2009 | 2
22 | Schmid | 222 | 1.0 | 2009 | 2
23 | Schmid | 111 | 1.0 | 2009 | 2
24 | Thali | 111 | 1.0 | 2009 | 2

________________________________________________________


Die Gestaltung sieht etwa so aus:

Mitarbeiter | Januar | Februar | März | …….

________________________________________________________

Dropdownfelder: Objekt, Jahr

Wenn ich Objekt: 111 und Jahr: 2009 eingebe, sollen die Daten wie folgend aussehen:

Mitarbeiter | Januar | Februar | März | …….Total
Schmid | 2.0 | 2.5 | | 4.5
Thali | | 1.0 | | 1.0

________________________________________________________

Bisher habe ich die Namen der Mitarbeiter in der Seite fest reingeschrieben, und mit SUM(zeit) und der folgenden Abfrage die Ausgabe bestimmt:

PHP:
$sqlab .= 'WHERE 
                 `objekt` = "'.mysql_real_escape_string($_POST['objekt']).'" AND
		 `monat` = "1" AND
		 `mitarbeiter` = "Schmid" AND
		 `jahr` = "'.mysql_real_escape_string($_POST['jahr']).'"'

Das ist eben blöd, weil wenn neue Mitarbeiter hinzukommen müsste ich die Seite manuel ändern und die Namen reinschreiben...

Wie kann ich wie oben die Daten ausgeben? Ein Name darf nur einmal vorkommen. Wenn in einem Objekt ein Mitarbeiter nicht gearbeitet hat darf er nicht angezeigt werden…
Kann jemand mir helfen?


Danke im Voraus!
 
Auch wenn mit den Beispieldaten nie das Ergebnis rauskommen kann (für März ist nichts eingegeben und im Frbruar sind es 3,5 Stunden) so denke ich das Du mit dieser SQL-Abfrage das bekommst was Du brauchst:

PHP:
SELECT id, mitarbeiter, objekt, SUM(zeit) AS zeit, jahr, monat FROM deine_tabelle WHERE jahr = 2009 AND objekt = 111 GROUP BY mitarbeiter, monat

Gruß Thomas
 
Mit SELECT ist es klar.. Aber die Stunden müssen ja nach Monat in dem Kästchen eingetragen werden...

Ein kleines Beispiel:

SELECT meine_daten FROM meine_Tabelle
WHERE
Auswertung_der_Dropdownfelder_nach_Wahl_des_Jahres_und_Objekt
GROUB BY mitarbeiter, monat
.......
echo '<tr>';
echo '<td align="right">'. $arr['mitarbeiter'] (wird nur angezeigt wenn er in dem gewählten Jahr in irgendeinem Monat Stunden hat). '<td>$arr['zeit'](die Stunden vom Monat Januar, wenn er hier keine hat bleibt die Zelle leer) . $arr['zeit'](vom Monat Februar) . $arr['zeit'](von Monat März) . $arr['zeit'](von Monat April) . etc...... . '</td>';
echo '</tr>'
 
Hi,

ich kopiere hier einfach mal den kompletten Quelltext meiner Testseite rein:

PHP:
<?

// Erstellt Connect zu Datenbank her
$user = "XYZ";
$pass = "ABC";
$daba = "DEINE DATENBANK";

	$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 DEINE TABELLE WHERE objekt = 111 AND jahr = 2009";
	$rs_mitarbeiter = mysql_query($sql_mitarbeiter, $db);

?>

<html>
	<head>
		<title></title>
	</head>
	<body bgcolor="#ffffff">
		<table border="1" cellpadding="0" cellspacing="0" width="860">
		<? 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>
			</tr>
		<?
		$sql_zeit = "SELECT monat, SUM(zeit) AS zeit FROM DEINE TABELLE WHERE jahr = 2009 AND objekt = 111 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");
		}
		?>
			<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>
			</tr>
		<? } ?>
		</table>
	</body>

</html>

Mit der ersten Abfrage werden erst einmal alle entsprechenden Mitarbeiter ermittelt.
Anhand dieser Abfrage werden dann mit der zweiten Abfrage die Stunden ermitteln und in ein Array übertragen welches dann die Tabelle füllt.

Du musst halt die Abfragen nochmal ein bisschen ändern, damit die veränderlichen Werte (Objekt, Jahr, ...) aus deinem Formular übernommen werden.
Ansonsten funktioniert es aber so wie du es wolltest (siehe Bild).
 

Anhänge

  • zeiterfassung.jpg
    zeiterfassung.jpg
    37 KB · Aufrufe: 21
Hallo
Danke für deine Mühe.

Ich hab eine Fehlermeldung erhalten
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++) { ?>

liegt es an $rs_mitarbeiter? Ich sehe hier aber keinen Fehler..
 
PHP:
<?
...
$daba = "DEINE DATENBANK";
...
$sql_mitarbeiter = "SELECT DISTINCTROW mitarbeiter, objekt FROM DEINE TABELLE WHERE objekt = 111 AND jahr = 2009";


Das musst du natürlich ergänzen :-)

DEINE DATENBANK
DEINE TABELLE

Und nach möglichkeit sollten alle Tabellen auch vorhanden sein und auch mit einem Wert gefüllt sein.
 
Zuletzt bearbeitet:
Jaa die hab ich schon geändert. Fehlermeldung kommt trotzdem.. :(

PHP:
<? 

// Erstellt Connect zu Datenbank her
	$host = "localhost"; 
$user = "root"; 
$pass = "xxx";
$db = "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 = 111 AND jahr = 2009"; 
    $rs_mitarbeiter = mysql_query($sql_mitarbeiter, $db); 

?> 

<html> 
    <head> 
        <title></title> 
    </head> 
    <body bgcolor="#ffffff"> 
        <table border="1" cellpadding="0" cellspacing="0" width="860"> 
        <? 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> 
            </tr> 
        <? 
        $sql_zeit = "SELECT monat, SUM(zeit) AS zeit FROM rapport WHERE jahr = 2009 AND objekt = 111 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"); 
        } 
        ?> 
            <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> 
            </tr> 
        <? } ?> 
        </table> 
    </body> 

</html>
 
Sorry mein Fehler,

anstelle:

PHP:
$db = "zeiterfassung";

muss es:

PHP:
$daba = "zeiterfassung";

heißen.

Hab da beim übertragen einen kleinen aber entscheidenden Fehler reinbekommen.

Gruß Thomas
 
Wow bist ein Genie Thomas!! (Kisss) Es hat wunderbar geklappt, auch mit meinen Dropdownfelder :-)


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 jahr = 2009 AND objekt = 100 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> 
        <? } ?>
 
Zurück