PHP Mehrere Daten auf einmal speichern

Drrichardfahrer

Well-known member
ID: 207405
L
20 April 2006
7.060
691
Ich habe ein Problem, von dem ich nicht weiß, ob ich es überhaupt in Worte fassen kann. Ich versuchs einmal.

1) Es handelt sich um eine Fehlstunden-Übersicht in einem Adminbereich.
2) In einer Tabelle sind die User mit persönlichen Angaben, wie Vorname, Nachname, usw. eingetragen.
3) In einer zweiten Tabelle sollen nun alle Fehlstunden eingetragen werden -->
Code:
fehlstunden_id | user_id | fehlstunden_datum | fehlstunden_anzahl | fehlstunden_status (0=unentschuldigt, 1=entschuldigt)
4) Testweise hab ich nun 2 Werte bereits eingetragen, nämlich:
Code:
1 | 5 | 2011-08-25 | 5 | 0
2 | 9 | 2011-08-24 | 4 | 1
5) Das Script listet im Adminbereich alles bereits in einer Wochenansicht schön auf --> das hab ich bereits hinbekommen.
klamm_liste.jpg

6) Aber jetzt kommts...ich möchte gerne, dass ich jeden Tag immer weitere Fehlstunden in die Textfelder eintragen kann und auch die Checkbox setzen kann (wenn ich eine schriftliche Entschuldigung bekommen habe) und dann den gesamten Tag mittels Submit-Button unten abspeichere.
Mein Problem ist nun, dass ich nicht weiß, welche Namen die Textfelder bekommen sollen, damit alles leicht abgespeichert werden kann...versteht ihr mich?? :)
 
Also nochmal...

Nehmen wir an, heute ist der 25.08.

Ich als Admin mache folgendes:
- User 5 hat Entschuldigung ausgehändigt --> Checkbox checked
- User 17 hat 4 Stunden gefehlt --> bei ID 17 am 25.08. in das Feld "4" hineinschreiben.

Dann will ich mittels Submit-Klick auf 25.08. alle Einträge, die den 25.08. in der Datenbank UPDATEn lassen...

Da ich ja alles in einer for-Schleife anzeigen lasse, weiß ich nun nicht, wie ich <input type='text'> und <input type='checkbox'> benennen soll, damit das Script beim Submitten wieder in einer for-Schleife alle User durchgeht und die Textfelder sowie Checkboxen UPDATEd.

Hier noch ein Teil desCodes - das, was die Tabelle erzeugt (ist wahrscheinlich nicht gerade der Schönste...):

PHP:
echo "<table border='1'>
    <tr>
        <th>ID</th>
        <th>User</th>
        <th>Mo<br />" . date('d', $montag_datum) . "." . date('m', $montag_datum) . ".</th>
        <th>Di<br />" . date('d', $dienstag_datum) . "." . date('m', $dienstag_datum) . ".</th>
        <th>Mi<br />" . date('d', $mittwoch_datum) . "." . date('m', $mittwoch_datum) . ".</th>
        <th>Do<br />" . date('d', $donnerstag_datum) . "." . date('m', $donnerstag_datum) . ".</th>
        <th>Fr<br />" . date('d', $freitag_datum) . "." . date('m', $freitag_datum) . ".</th>
    </tr>";

for ($i=0; $i<$num; $i++) {
    echo "<tr><td>" . $user_id[$i] . "</td><td>" . ucfirst($user_vorname[$i]) . " " . ucfirst($user_nachname[$i]) . "</td>";
    
    
    $row_mo = $db->Select(array("fehlstunden_id", "user_id", "fehlstunden_date", "fehlstunden_anzahl", "fehlstunden_status"),"fehlstunden","WHERE user_id = '" . $user_id[$i] . "' AND fehlstunden_date = '" . date('Y', $montag_datum) . "-" . date('m', $montag_datum) . "-" . date('d', $montag_datum) . "' LIMIT 1",1);
    
    $row_di = $db->Select(array("fehlstunden_id", "user_id", "fehlstunden_date", "fehlstunden_anzahl", "fehlstunden_status"),"fehlstunden","WHERE user_id = '" . $user_id[$i] . "' AND fehlstunden_date = '" . date('Y', $dienstag_datum) . "-" . date('m', $dienstag_datum) . "-" . date('d', $dienstag_datum) . "' LIMIT 1",1);
    
    $row_mi = $db->Select(array("fehlstunden_id", "user_id", "fehlstunden_date", "fehlstunden_anzahl", "fehlstunden_status"),"fehlstunden","WHERE user_id = '" . $user_id[$i] . "' AND fehlstunden_date = '" . date('Y', $mittwoch_datum) . "-" . date('m', $mittwoch_datum) . "-" . date('d', $mittwoch_datum) . "' LIMIT 1",1);
    
    $row_do = $db->Select(array("fehlstunden_id", "user_id", "fehlstunden_date", "fehlstunden_anzahl", "fehlstunden_status"),"fehlstunden","WHERE user_id = '" . $user_id[$i] . "' AND fehlstunden_date = '" . date('Y', $donnerstag_datum) . "-" . date('m', $donnerstag_datum) . "-" . date('d', $donnerstag_datum) . "' LIMIT 1",1);
    
    $row_fr = $db->Select(array("fehlstunden_id", "user_id", "fehlstunden_date", "fehlstunden_anzahl", "fehlstunden_status"),"fehlstunden","WHERE user_id = '" . $user_id[$i] . "' AND fehlstunden_date = '" . date('Y', $freitag_datum) . "-" . date('m', $freitag_datum) . "-" . date('d', $freitag_datum) . "' LIMIT 1",1);
    
    echo "<td><input type='text' name='????????' size='1' value='" . $row_mo['fehlstunden_anzahl'] . "' />";
    if ($row_mo['fehlstunden_anzahl'] != "") { 
        echo "<input type='checkbox' name='????????'";
        if ($row_mo['fehlstunden_status'] == "1") { echo " checked='checked'"; }
        echo " />";
    }
    echo "</td><td><input type='text' name='????????' size='1' value='" . $row_di['fehlstunden_anzahl'] . "' />";
    if ($row_di['fehlstunden_anzahl'] != "") { 
        echo "<input type='checkbox' name='????????'";
        if ($row_di['fehlstunden_status'] == "1") { echo " checked='checked'"; }
        echo " />";
    }
    echo "</td><td><input type='text' name='????????' size='1' value='" . $row_mi['fehlstunden_anzahl'] . "' />";
    if ($row_mi['fehlstunden_anzahl'] != "") { 
        echo "<input type='checkbox' name='????????'";
        if ($row_mi['fehlstunden_status'] == "1") { echo " checked='checked'"; }
        echo " />";
    }
    echo "</td><td><input type='text' name='????????' size='1' value='" . $row_do['fehlstunden_anzahl'] . "' />";
    if ($row_do['fehlstunden_anzahl'] != "") { 
        echo "<input type='checkbox' name='????????'";
        if ($row_do['fehlstunden_status'] == "1") { echo " checked='checked'"; }
        echo " />";
    }
    echo "</td><td><input type='text' name='????????' size='1' value='" . $row_fr['fehlstunden_anzahl'] . "' />";
    if ($row_fr['fehlstunden_anzahl'] != "") { 
        echo "<input type='checkbox' name='????????'";
        if ($row_fr['fehlstunden_status'] == "1") { echo " checked='checked'"; }
        echo " />";
    }
    echo "</td></tr>";
}

echo "<tr><td></td><td></td>
    <td><input type='submit' name='save_mo' value='" . date('d', $montag_datum) . "." . date('m', $montag_datum) . "' /></td>
    <td><input type='submit' name='save_di' value='" . date('d', $dienstag_datum) . "." . date('m', $dienstag_datum) . "' /></td>
    <td><input type='submit' name='save_mi' value='" . date('d', $mittwoch_datum) . "." . date('m', $mittwoch_datum) . "' /></td>
    <td><input type='submit' name='save_do' value='" . date('d', $donnerstag_datum) . "." . date('m', $donnerstag_datum) . "' /></td>
    <td><input type='submit' name='save_fr' value='" . date('d', $freitag_datum) . "." . date('m', $freitag_datum) . "' /></td>";

echo "</tr></table>";
 
Nimm ein Array für die Checkbox-Namen.

z. B.: field[userid][day]

darin kannst du dann die UserID und den Tag ablegen.

Im PHP musst du dann nur noch das Array durchlaufen und bis auch schon fertig.
 
Wie meinst du das jetzt?

Für die Textfelder?
PHP:
<input type='text' name='fehlstunden['" . $user_id . "']['" . $tag . "']' size='1' />

Für die Checkboxen?
PHP:
<input type='checkbox' name='checkboxen['" . $user_id . "']['" . $tag . "']' size='1' />

Oder hab ich das falsch verstanden?
 
Hm...komme da im Moment nicht wirklich weiter.

Hab jetzt unten 5 Submit-Buttons mit name='save[tag]'...

Wenn ich jetzt oben jedoch aufrufe mit if($_POST['save[tag]'], dann erscheint nichts...

Wie müssen da die 5 Submit-Buttons und die Abfrage aussehen...hab noch nie mit mehrdimensionalen Arrays gearbeitet :(
 
Wieso 5 Submits? Einer reicht doch ;)

Allgemein: Wenn du mehrere Submits hast, werden

  • immer alle Non-Submit-Felder submitted
  • von den Submit-Feldern nur dasjenige submitted, dessen Button du gedrückt hast
  • die anderen Submit-Felder werden nicht übertragen.

Zum Debuggen:
PHP:
print_r($_POST);
Damit siehst du, was du geschickt hast.
 
Danke, war bei der Auswertung noch eine zache Geschichte...2 foreach-Schleifen, um all die Arrays zu entschlüsseln...ich habe nämlich jetzt so gelöst, dass ich noch eine 3. Dimension angehängt habe (nur mit [0] für Anzahl der Fehlstunden und [1] für entschuldigt/nicht entschuldigt...
 
Wenn ich dir nen Tipp geben darf:

Ersetzte die "0" durch "anzahl"; und die "1" durch "entschuldigt".

Es bringt deutliche Vorteile, Softwareentwicklung möglichst lesbar zu halten. In einem Jahr wirst du sonst bereits Probleme haben, alles wieder zusammen zu puzzeln.