mein gott habt ihr scho wieder viel geschrieben. bist jetzt also dich wieder endgültig auf deinen code zurück? schade ^^
gut, hab mir 2 sachen rausgepickt: arrays und foreach und divs und zeilenumbruch.
zu den arrays. du weisst doch, wie die aufgebaut sind. array[key] = value. mit foreach kann man die super auslesen: foreach(array as key => value) oder, wenn man den key nicht benötigt, auch in kurzform foreach(array as value).das schöne is halt, es arbeitet einfach alle array einträge ab, bis das array durch ist und in jedem durchgang bekommt key den aktuellen array-index als wert und value eben den wert an sich. so kann man auch "unförmige" arrays auswerten. also nich sowas ala array[1,2,3,4...] sondern eher array["hallo","welt",1,2,3...]. da kommt man mit ner forschleife nich so weit
und wie gesagt: mit der foreach kann man sich das add, dessen inkrementierung oder dekrementierung und das hiddenfeld sparen und hat dennoch das selbe ergebnis

weniger verwirrende programmlogik und entschlackter code
gut, die divs und ihr untereinandergeschreibsel... ich denk du kennst dich mit html und css aus? ^^ divs sind block elemente (wie tabellen bspw auch). du müsstest das nur in ein inline element umbauen (wie font als blödes bsp ^^) -> style="display:inline" und sie stehen nebeneinander, reihen sich also in den fluss des textes ein (in line eben).
gut, nochmal was zum thema aufsplitten in verschiedene dateien: eine seite ist auch nur eben das - eine seite. du hast dein formular hier, deine tabelle und mehr nicht. also das ist quasi alles eins - es gehört also erstmal alles in ein file. also aufsplitung meine ich jetzt erstmal nicht, aber um konkret zu werden (so wie ichs hier rauslese): du hast deine zeiterfassung und dieses formular.php ding - 2 seiten. in zeiterfassung baust du die eingabe? in formular speicherst du diese. is ja grundsätzlich kein problem (im sinne der splittung), aber du nutzt es eben nicht als splittung, sondern eben als "externe" seite, wenn ich das richtig sehe. du bist in zeiterfassung und die form dadrin leitet dich auf formular.php - das is doch gülle ^^ da haste zwar am ende den kram in der db, aber siehst es nich bzw kommst nich wieder zur eingabe.
wie gesagt, das ist alles eins. wegen splittung: das ist völlig ok um ordnung in den code zu bringen. include macht ja nix weiter, als den text der includierten datei an die stelle des include-befehls zu kopieren. es ist also keinerlei uterschied, ob du etwas includierst oder direkt dort schreibst - nur ist es eben bei großem code etwas übersichtlicher. bei dir könnte das bspw so aussehen:
PHP:
<?php
// mysql verbindung aufbauen, session verwalten, varaiblen definieren... (zum bsp, ob man eingeloggt ist ^^)
include('config.php');
// empfangene formulardaten bearbeiten - auch das loginformular, was einen ggf einloggt
include('formular.php');
// die eigentliche seite
if(!$login) {
// login
include('login.php');
} else {
// tabelle mit eintragungen und eingabeformular
include('zeiterfassung.php');
?>
schon ist das alles grob struturiert und übersichtlich. aber alle buttons führen wieder HIERHIN. was ginge, wäre ein ausgelagerter loginpart, da die session eh "seitenübergreifend" wäre. aber solange das so hier funzt, passt das im grobaufbau so. die einzelnen dateien behandeln dann ihren krams und gut is. login offeriert einem eben die login-maske, zeiterfassung zeigt die daten in der db und gibt einem die möglichkeit, neue daten einzufügen, alte zu ändern oder zu löschen bspw. und formular behandelt alle eintreffenden formulardaten. kommt was von login (erkennt man ja anhand des button-namens), dann wird man eingeloggt, kommt was von zeiterfassung, wird das entsprechend behandelt.
wie gesagt, das wirkt bei dir alles sehr chaotisch und unstrukturiert. auch deine formular.phph mit den vielen verschachtlungen wirkt anstrengend. mMn langt da eine foreach und fertig. ich mach das btw immer so in etwa:
PHP:
foreach(gesendeter_datensatz) {
$form_ok = true;
// jetzt gehe ich alle inputs des datensatzes durch * und checke, ob die eingabe ok ist. also leere inputs führen bspw zu nem fehler (sofern eine eingbe nötig ist...)
if($_POST['input'] == "") $form_ok = false;
// und jetzt wird ggf gespeichert
if($form_ok) {
$sql = insert meinen kram";
// ...
} else echo "fehlerhafte eingabe";
}
so, nochmal fix zu dem *:
wir haben ja mehrere formulardaten pro tabellenzeile. also taetigkeiten, produkte, beschreibung... in der forschleife kannste ja aber nur eines abfragen. allerdings haben alle zusammengehörigen den selben index. also zu taetigkeit[1] gehört produkt[1] usw usf. daher dieses foreach(input as key => value). weil dann kannst du mittels key auf die dazugehörigen anderen input-felder zugreifen. also ich hatte mir spontan als "input" taetigkeit" rausgesucht, würde also in foreach($_POST['taetigkeit'] as $key => $value) resultieren. um das zugehörige produkt zu bekommen, müsste man also $_POST['produkt'][$key] abfragen. um die tätigkeit zu bekommen, kann man das genauso machen, oder halt direkt $value nutzen, weil das ja eben post[tät.][$key] ist.
so, dann hattest du noch das mit dem einzeln speichern...
DarkMo --> irgendwas wegen der vielen Zeilen in der DB bei mehreren Tagen Arbeit an selber Produkt/Tätigkeit-Kombination, und dass sich das so beim Auslesen schlecht im Excel wieder in einer Zeile darstellen lassen würde.
ich meinte das folgendermaßen: du hast eine db-zeile, also einen eintrag mit EINEM daten und nicht mit einem datum für jeden wochentag. diese anzeigerei auf diese wochenart macht das ganze halt nich unbedingt einfacher, aber es ist machbar. allerdings sollten die "rohdaten" eben getrennt sein. oh man, das lässt sich jetzt schwer erklären. ich versuchs mal:
du hast also einen eintrag für tätigkeit 1 mit produkt 15 und einer beschreibung. das ist quasi der "eintragskopf" ^^ und dieses "projekt" will ichs mal nennen, hast du am montag, am mittwoch und am donnerstag bearbeitet, hättest also 3 eintragungen in dieser
einen tabellenzeile! in der
sql-tabelle sollte das aber dann
3 zeilen ergeben. soviel zu der grundlage. jetzt hätten wir also in der db sowas stehen:
id|tät|prod|beschr|zeit|datum|erstellt
...
115|1|15|text|1.5|<datum von montag>|<erstellungsdatum>
118|1|15|text|4|<datum von mittwoch>|<erstellungsdatum>
117|1|15|text|3.5|<datum von donnerstag>|<erstellungsdatum>
...
wie du siehst, steht unser projekt-kopf nun auch 3mal drin mit immer den selben daten. das nennt man redundanz, und wie ich schonmal sagte: nix gut sowas. wenn ich mich noch recht an die vorlesung vor langer zeit erinner, dann sollten wir unsere db also lieber "normalisieren". ich nenne es jetzt einfach mal so ^^ ziel des ganzen: wir ziehen die daten der 3 zeiten für die 3 werkstage raus und hauen die in ne weitere db-tabelle. unsere tabelle von eben sähe dann bereinigt so aus:
id|tät|prod|beschr|erstellt
...
115|1|15|text|<erstellungsdatum>
...
eine tät-prod-kombi resultiert in einem eintrag. schön, so soll es sein. wo sind nun aber unsere daten? dafür bauen wir wie gesagt ne neue tabelle:
id|tät_prod_id|zeit|datum
...
312|
115
|1.5|<datum von montag>
313|
115
|4|<datum von mittwoch>
314|
115
|3.5|<datum von donnerstag>
...
in rot der sekundärschlüssel/foreignkey zu der anderen tabelle. über diesen bekommen wir nun wieder den zusammenhang zu unserem "projekt" oder "eintragskopf". und nix steht mehr doppelt und 3fach in der db ^^