doppelte Ausführung in einem Script

quidnovi

Erfahrenes Mitglied
Hallo Ihrs,

ich habe ein Eingabeformular, in welchem Mitarbeiter ihre geleisteten Stunden eintragen können. Die Tagesleistung umfasst maximal 9 Stunden, wobei die letzte 1/2 Stunde eine andere Abrechnungsnummer hat. Also 1 - 8,5 Stunden Lohnart 1, von 8,5 - 9 Stunden Lohnart 29.

Nun habe ich es so programmiert, dass nach Eintrag der geleisteten Stunden in die DB, die geleisteten Stunden bezogen auf Mitarbeiternummer, Datum und Auftragsnummer addiert werden, und wenn die 1/2 Stunde schlagend wird, der letzte Eintrag um diese 1/2 Stunde reduziert und eine neue Zeile mit dieser 1/2 Stunde zur DB hinzugefügt wird.

Das Ganze funktioniert.

Nun darf aber die Tagesleistung die 9 Stunden nicht übersteigen. Somit habe ich es nun so, dass die Tagesleistung bezogen auf Mitarbeiternummer und Tag addiert wird. Auch hier wird dann bei der Auftragsnummer, bei welcher die 1/2 Stunde angefallen ist, um diese reduziert wird und diese 1/2 Stunde in einer neuen Zeile mit der Lohnart 29 zur DB hinzugefügt wird.

Auch das funktioniert.

Mein Problem ist nun, dass ich diese zwei Optionen auf einem Skript habe und daher immer beide angesprochen werden.
Wie kann ich es so programmieren, dass immer nur eine der beiden Optionen ausgeführt wird?
Der Fehler: die 1/2 Stunde wird zweimal in die DB eingetragen.

Hier der Code, mit welchem Mitarbeiternummer, Datum und Auftragsnummer addiert werden und dann die 1/2 Stunde vom vorigen Eintrag abgezogen wird und diese 1/2 Stunde dann in eine neue Zeile geschrieben wird:
PHP:
// Abfrage der Tabelle bezogen auf die MA - Nummer und Auftragsnummer
		$sql = "SELECT *,SUM(hGesamt) as 'summe' FROM r_abrechnung ".
			   "WHERE persnr ='".$_SESSION['user_persnr']."' ".
			   "AND status = 1 ".
			   "AND dat = '".$dat."' ".
			   "AND auftragsNr = '".$auftragsNr."' ".
			   "group BY 'dat' ORDER BY 'id' DESC";
			   
	    	   $res = mysql_query ($sql) or die (mysql_errno() . ": Keine Verbindung zu \"r_abrechnung\"! " . mysql_error());
	    	   $num = mysql_num_rows($res);
			   
	    	   while ($row = mysql_fetch_object($res)){			
				   if($row->summe > 8.5){
				   	
				   	   $erg = ($row->summe - 8.5);
					   $auf = "INSERT INTO r_abrechnung (tag,monat,jahr,dat,auftragsNr,arbBericht," .
					   		  "beginH,beginM,endH,endM,lohn1,noLa1,lohn29,zaLa29,lohn2,zaLa2,lohn3,zaLa3,lohn19,diaeten,lohn8,kmAbFa,lohn9,za,lohn12,".
					   		  "amtsstunden,lohn13,arzt,hGesamt,".
					   		  "persNr,status,alias)" . 
					   		  " VALUES ('$row->tag','$row->monat','$row->jahr','$row->dat','$row->auftragsNr',''," .
					   		  "'','','','','','','$row->lohn29','$erg','','','','',".
					   		  "'','','','','','','','','','','$erg','$row->persNr',1,'$row->persNr')";
					   mysql_query ($auf,$connection) or die (mysql_errno() . ": ZaLa29 " . mysql_error());
					   
					   // Nun vom vorletzten Eintrag 0.5h abziehen
					   $sql = "SELECT * FROM r_abrechnung ORDER BY id DESC LIMIT 2";
					   $erg = mysql_query($sql) or die("MySQL-Fehler ".mysql_error());
					   $letzter = mysql_fetch_array($erg);
					   $vorletzter = mysql_fetch_array($erg);
		               mysql_free_result($erg);
		               
		               $uts = mktime($vorletzter[endH], $vorletzter[endM]);
				       $uts -= 1800;
				       
				       $stunde = date('H', $uts);
					   $minute = date('i', $uts);
	
					   $ergH = ($vorletzter['hGesamt'] - 0.5);
							   
							   $upd  = "UPDATE r_abrechnung set ";
							   $upd .= "tag                        = '$vorletzter[tag]',";
							   $upd .= "monat                      = '$vorletzter[monat]',";
							   $upd .= "jahr                       = '$vorletzter[jahr]',";
							   $upd .= "dat                        = '$vorletzter[dat]',";
							   $upd .= "auftragsNr                 = '$vorletzter[auftragsNr]',";
							   $upd .= "arbBericht                 = '$vorletzter[arbBericht]',";
							   $upd .= "beginH                     = '$vorletzter[beginH]',";
						       $upd .= "beginM                     = '$vorletzter[beginM]',";
						       $upd .= "endH                       = '$stunde',";
							   $upd .= "endM                       = '$minute',";
							   $upd .= "noLa1                      = '$ergH',";
							   $upd .= "zaLa29                     = '$vorletzter[zaLa29]',";
							   $upd .= "zaLa2                      = '$vorletzter[zaLa2]',";
							   $upd .= "zaLa3                      = '$vorletzter[zaLa3]',";
							   $upd .= "hGesamt                    = '$ergH',";
						       $upd .= "diaeten                    = '$vorletzter[diaeten]',";
							   $upd .= "kmAbFa                     = '$vorletzter[kmAbFa]'";
							   $upd .= "WHERE persnr 			   = '$vorletzter[persNr]'";
							   $upd .= " AND status                = 1";
							   $upd .= " AND dat                   = '$vorletzter[dat]'";
							   $upd .= " AND auftragsNr	           = '$vorletzter[auftragsNr]'";
							   $upd .= " AND id                    = '$vorletzter[id]'";
						       mysql_query ($upd,$connection) or die (mysql_errno() . ": upd " . mysql_error());
				   }
	    	   }

Auf demselben Script habe ich nun auch die Option, mit welcher das Ganze nur bezogen auf Mitarbeiternummer und Tag durchgeführt wird.
Hier ist der Code der selbe, mit der Ausnahme, dass die Auftragsnummer
PHP:
"AND auftragsNr = '".$auftragsNr."' ".
nicht abgefragt wird.

Denke, dass sich das Ganze schon lösen lässt, ich aber den Weg dazu nicht weiß.
Könnt Ihr mir bitte helfen? Danke
 
Zuletzt bearbeitet:
Ich würde dir empfehlen, erst mal beide "optionen" in Funktionen zu packen (Funktionalität kapseln), mit einem bool-Rückgabewert arbeiten und dementsprechend entscheiden, welche der beiden Funktionen ausgeführt werden soll.
 
is ja irre! Habe den Wald vor lauter Bäumen...!

Bei der ganzen Sache ist ja nur die Anforderung, Stunden bezogen auf den Tag und der Personalnummer zu addieren. Die Auftragsnummer ist hierbei überhaupt nicht relevant!

Habe nun bei der Abfrage die Auftragsnummer weggelassen, somit haut das hin.

Jaja, wie man immer schon sagte: Kaum macht man es richtig, funktioniert es auch :-)

Danke für die Hilfe.
 
Zurück