Hi,
ich bin derzeit am Arbeiten an einem Modul, bei dem jeder Benutzer der Website seinen eigenen Stundenplan (Tage: Montag - Freitag | Stunden: 1 - 11) eintragen kann und dieser dementsprechend auch ausgegeben werden sollte.
Dafür habe ich folgende Datenbanktabellen (InnoDB):
Tabelle stundenplan:
| id | user_id | tag | stunde | fach | lehrer | raum |
Tabelle users:
| user_id | username | ...
Wie ich grob vorgehen wollte:
Ich wollte für jede Tag-Stunde-Kombination einen Datenbankeintrag machen und die Ergebnisse dann in eine HTML-Tabelle ausgeben lassen.
In jeder Zelle dieser HTML-Tabelle sind dann drei Input-Felder: Eins für das Fach, eins für den Lehrer und eins für den Raum.
In diese Inputfelder sollen dann die jeweiligen Datenbankwerte eingetragen werden.
Bis hierhin erscheint mir das recht richtig aber bei dem Folgenden bin ich mir nicht so sicher, ob das die beste Lösung ist.
Wenn man dann etwas ändern will, ändern man einfach den Wert des entsprechenden Input-Felds, klickt auf „Abschicken" und dann werden alle Werte aller Input-Felder via AJAX an eine andere PHP-Datei weitergegeben (jedes Input-Feld hat dann eine eigene ID). Dann müsste man da ja dort alle 11x5x3 (11 Stunden x 5 Tage x 3 Inputs pro Zelle = 165) POST-Variablen überprüfen und dann weiter in ein Prepared Statement jagen. Ist das nicht etwas unelegant und was macht man wenn manche Felder noch gar nicht mit Werten in der Datenbank vorhanden sind? An diesen Teil vom Code bin ich noch gar nicht rangegangen.
Derzeit habe ich folgendenen Code:
Das Problem an diesem Code: Er trägt nur die letzte SQL-Row in die HTML-Tabelle ein.
Meine Frage: Was ist an diesem Code falsch bzw. wie muss ich ihn verändern (ich schätze mal bei $record=$row liegt der Fehler). Und macht die oben beschriebene Methode Sinn, die Daten über 165 POST-Variablen zu verarbeiten oder kann man das besser lösen?
ich bin derzeit am Arbeiten an einem Modul, bei dem jeder Benutzer der Website seinen eigenen Stundenplan (Tage: Montag - Freitag | Stunden: 1 - 11) eintragen kann und dieser dementsprechend auch ausgegeben werden sollte.
Dafür habe ich folgende Datenbanktabellen (InnoDB):
Tabelle stundenplan:
| id | user_id | tag | stunde | fach | lehrer | raum |
Tabelle users:
| user_id | username | ...
Wie ich grob vorgehen wollte:
Ich wollte für jede Tag-Stunde-Kombination einen Datenbankeintrag machen und die Ergebnisse dann in eine HTML-Tabelle ausgeben lassen.
In jeder Zelle dieser HTML-Tabelle sind dann drei Input-Felder: Eins für das Fach, eins für den Lehrer und eins für den Raum.
In diese Inputfelder sollen dann die jeweiligen Datenbankwerte eingetragen werden.
Bis hierhin erscheint mir das recht richtig aber bei dem Folgenden bin ich mir nicht so sicher, ob das die beste Lösung ist.
Wenn man dann etwas ändern will, ändern man einfach den Wert des entsprechenden Input-Felds, klickt auf „Abschicken" und dann werden alle Werte aller Input-Felder via AJAX an eine andere PHP-Datei weitergegeben (jedes Input-Feld hat dann eine eigene ID). Dann müsste man da ja dort alle 11x5x3 (11 Stunden x 5 Tage x 3 Inputs pro Zelle = 165) POST-Variablen überprüfen und dann weiter in ein Prepared Statement jagen. Ist das nicht etwas unelegant und was macht man wenn manche Felder noch gar nicht mit Werten in der Datenbank vorhanden sind? An diesen Teil vom Code bin ich noch gar nicht rangegangen.
Derzeit habe ich folgendenen Code:
Das Problem an diesem Code: Er trägt nur die letzte SQL-Row in die HTML-Tabelle ein.
PHP:
//Variablen
$user_id = htmlentities($_SESSION["user_id"], ENT_QUOTES, 'UTF-8');
$tage = array(1,2,3,4,5);
$stunden = array(1,2,3,4,5,6,7,8,9,10,11);
//SQL
$stmt = $pdo->prepare("
SELECT tag, stunde, fach, lehrer, raum
FROM stundenplan
INNER JOIN users ON stundenplan.user_id = users.user_id
WHERE users.user_id = :user_id
ORDER BY stundenplan.stunde, stundenplan.tag");
$stmt->bindValue(':user_id', $user_id);
$stmt->execute();
$record = array();
$record['stunde'] = 0;
$record['tag'] = 0;
//Output
echo'
<table class="table_standard">
<tr>
<th class="th_titlebar" style="white-space:nowrap">Std.</th>
<th class="th_titlebar"><center>Mo</center></th>
<th class="th_titlebar"><center>Di</center></th>
<th class="th_titlebar"><center>Mi</center></th>
<th class="th_titlebar"><center>Do</center></th>
<th class="th_titlebar"><center>Fr</center></th>
</tr>
';
foreach ($stunden as $stunde) {
echo '<tr>';
echo '<td align="middle" class="td_contentbar" style="white-space:nowrap">'.$stunde.'</td>';
foreach ($tage as $tag) {
if($stunde > $record['stunde'] || ($tag > $record['tag'] && $stunde <= $record['stunde'])) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$record = $row;
}
}
echo '<td align="middle" class="td_contentbar">';
if($stunde == $record['stunde'] && $tag == $record['tag']) {
echo '<input class="inputfeld sp_input" id="fach_' . $tag . '_' . $stunde . '" value="' . $record['fach'] . '">';
echo '<input class="inputfeld sp_input" id="lehrer_' . $tag . '_' . $stunde . '" value="' . $record['lehrer'] . '">';
echo '<input class="inputfeld sp_input" id="raum_' . $tag . '_' . $stunde . '" value="' . $record['raum'] . '">';
} else {
echo '<input class="inputfeld sp_input" placeholder="Fach" id="fach_' . $tag . '_' . $stunde . '">';
echo '<input class="inputfeld sp_input" placeholder="Lehrer" id="lehrer_' . $tag . '_' . $stunde . '">';
echo '<input class="inputfeld sp_input" placeholder="Raum" id="raum_' . $tag . '_' . $stunde . '">';
}
echo '</td>';
}
echo '</tr>';
}
echo'</table>';
Meine Frage: Was ist an diesem Code falsch bzw. wie muss ich ihn verändern (ich schätze mal bei $record=$row liegt der Fehler). Und macht die oben beschriebene Methode Sinn, die Daten über 165 POST-Variablen zu verarbeiten oder kann man das besser lösen?