[Apache, phpmyadmin, html, PHP, ...] Datenbank mit webbasiertem Zugriff erstellen

  • Ersteller Ersteller boss3D
  • Erstellt am Erstellt am
asö, ja du hast natürlich bei td ne "falsche" reihenfolge angegeben (falsch im sinne deiner kopfzeile - die dortige reihenfolge). der index von $td ist szs der zellen-index in der tabelle. wölltest du die id also am ende ausgeben, müsstest du bei den stunden ausgaben td[i+4] schreiben und dann in td[11] die prID hauen.
 
^^ Stimmt. Hätten wir bei den Tagen $td[4+$i] statt $td[$i+4] geschrieben, hätte ich es schneller gesehen, aber macht eh das gleiche.

Allerdings hat uns das bei den Namen noch nichts genutzt. Da kriege ich immer noch nur "test" für alle Einträge ...

Vielleicht liegt's irgendwie am query?! Im $row_collector und den Schleifen sehe ich keinen Fehler, jedenfalls nichts, das anders wäre als bei allen anderen Daten, die korrekt angezeigt werden.
PHP:
} elseif (isset($_POST['auswertenall'])) { // lese gesamten DB-Inhalt aus    
        $db_erg = mysqli_query($mysqli, "SELECT 
                                            pr.id AS prID,
                                            t.taetigkeit AS Taetigkeit, 
                                            p.produkt AS Produkt, 
                                            t.id AS tID, 
                                            p.id AS pID, 
                                            pr.beschreibung AS Beschreibung, 
                                            u.name AS User, 
                                            z.zeit AS Zeit, 
                                            z.datum AS Datum 
                                        FROM
                                            zeiten AS z,
                                            projekte AS pr,
                                            user AS u,
                                            taetigkeiten AS t,
                                            produkte AS p
                                        WHERE 
                                            z.datum >= '".$wochenanfang."' AND z.datum <= '".$wochenende."' AND pr.id = z.taetprodid AND pr.taetigkeit = t.id AND pr.produkt = p.id
                                        ORDER BY
                                            z.datum ASC;");
    }
^^ Also in meiner Logik darf im WHERE kein bestimmter User angegeben werden, wenn ich den gesamten DB-Inhalt haben will. Dann müsste er sich doch die Einträge von allen holen, also auch alle Namen?!
 
Zuletzt bearbeitet:
also das u.name=user muss raus, das u.id=z.id geblubber muss bleiben (das fehlt hier glaube). wie gesagt, ein var_dump der einzelnen $row's würde mich erstmal interessieren.
Code:
    $row_collector = array();
    if (mysqli_num_rows($db_erg)) {
        while ($row = mysqli_fetch_assoc($db_erg)) {
            [COLOR="blue"]echo var_dump($row).'<br>';            if (!isset($row_collector[$row['tID']])) {
                ...
und dann mal posten, was der spricht.

ach: ALLE db daten wird er immernoch nich auslesen, nur die der woche ^^ für alle müsste auch das mit wochenanfang/ende rausfliegen. wenn man aber mal irgendwann 1000e datensätze hat... unkuhl. also irgendwie limitiert sein sollte es schon.
 
Hier erstmal der Code im gesamten (auswerten.php). Nicht schrecken wegen den großen queries oben, die habe ich bereits für alle Filter ergänzt (auch wenn sie noch nicht wirklich funktionieren):
PHP:
<?php
    if (isset($_POST['mitarbeiterdb'])) {
        $user = $_POST['mitarbeiterdb'];
        $ergebnis = mysqli_query($mysqli, "SELECT id FROM user WHERE name='".$user."';");
        $row = mysqli_fetch_object($ergebnis);
        $userid = $row->id;
    }
    
    if (isset($_POST['taetigkeitdb'])) {
        $taet = $_POST['taetigkeitdb'];
        $ergebnis = mysql_query($mysqli, "SELECT id FROM taetigkeiten WHERE taetigkeit = '".$taet."';");
        $row = mysqli_fetch_object($ergebnis);
        $taetid = $row->id;
    }
    
    if (isset($_POST['produktdb'])) {
        $prod = $_POST['produktdb'];
        $ergebnis = mysql_query($mysqli, "SELECT id FROM produkte WHERE produkt = '".$prod."';");
        $row = mysqli_fetch_object($ergebnis);
        $prodid = $row->id;
    }
    
    if (isset($_POST['filterName'])) { // lese DB-Inhalt für einen bestimmten Mitarbeiter aus (siehe u.id)
        $db_erg = mysqli_query($mysqli, "SELECT 
                                            pr.id AS prID,
                                            t.taetigkeit AS Taetigkeit, 
                                            p.produkt AS Produkt, 
                                            t.id AS tID, 
                                            p.id AS pID, 
                                            pr.beschreibung AS Beschreibung, 
                                            u.name AS User, 
                                            z.zeit AS Zeit, 
                                            z.datum AS Datum 
                                        FROM 
                                            zeiten AS z, 
                                            projekte AS pr, 
                                            user AS u, 
                                            taetigkeiten AS t, 
                                            produkte AS p 
                                        WHERE 
                                            z.datum >= '".$wochenanfang."' AND z.datum <= '".$wochenende."' AND u.name = '".$user."' AND u.id = z.userid AND pr.id = z.taetprodid AND pr.taetigkeit = t.id AND pr.produkt = p.id 
                                        ORDER BY 
                                            z.datum ASC;");
    } elseif (isset($_POST['filterTaet'])) { // lese DB-Inhalt für eine bestimmte Tätigkeit aus
        $db_erg = mysqli_query($mysqli, "SELECT
                                             pr.id AS prID,
                                            t.taetigkeit AS Taetigkeit,
                                            p.produkt AS Produkt,
                                            t.id AS tID,
                                            p.id AS pID,
                                            pr.beschreibung AS Beschreibung,
                                            u.name AS User,
                                            z.zeit AS Zeit,
                                            z.datum AS Datum
                                        FROM
                                            zeiten AS z,
                                            projekte AS pr,
                                            user AS u,
                                            taetigkeiten AS t,
                                            produkte AS p
                                        WHERE
                                            z.datum >= '".$wochenanfang."' AND z.datum <= '".$wochenende."' AND t.id = '".$taetid."' AND pr.taetigkeit = '".$taetid."' AND z.taetprodid = pr.ID
                                        ORDER BY
                                            z.datum ASC;");
    } elseif (isset($_POST['filterProd'])) { // lese DB-Inhalt für ein bestimmtes Produkt aus
        $db_erg = mysqli_query($mysqli, "SELECT
                                            pr.id AS prID,
                                            t.taetigkeit AS Taetigkeit,
                                            p.produkt AS Produkt,
                                            t.id AS tID,
                                            p.id AS pID,
                                            pr.beschreibung AS Beschreibung,
                                            u.name AS User,
                                            z.zeit AS Zeit,
                                            z.datum AS Datum
                                        FROM
                                            zeiten AS z,
                                            projekte AS pr,
                                            user AS u,
                                            taetigkeiten AS t,
                                            produkte AS p
                                        WHERE
                                            z.datum >= '".$wochenanfang."' AND z.datum <= '".$wochenende."' AND p.id = '".$prodid."' AND pr.produkt = '".$prodid."' AND z.taetprodid = pr.ID
                                        ORDER BY
                                            z.datum ASC;");
    } elseif (isset($_POST['auswertenall'])) { // lese gesamten DB-Inhalt aus
        $db_erg = mysqli_query($mysqli, "SELECT 
                                            pr.id AS prID,
                                            t.taetigkeit AS Taetigkeit, 
                                            p.produkt AS Produkt, 
                                            t.id AS tID, 
                                            p.id AS pID, 
                                            pr.beschreibung AS Beschreibung, 
                                            u.name AS User, 
                                            z.zeit AS Zeit, 
                                            z.datum AS Datum 
                                        FROM
                                            zeiten AS z,
                                            projekte AS pr,
                                            user AS u,
                                            taetigkeiten AS t,
                                            produkte AS p
                                        WHERE 
                                            z.datum >= '".$wochenanfang."' AND z.datum <= '".$wochenende."' AND pr.id = z.taetprodid AND pr.taetigkeit = t.id AND pr.produkt = p.id
                                        ORDER BY
                                            z.datum ASC;");
    }
    if (!$db_erg) {
        die ('Ungültige Abfrage: '.$mysqli->error);
    }
    
    echo '<table>';
    echo '  <tr>';
    echo '    <td colspan="11" class="head_cap">';
    echo '      <table style="width:100%; border:none; background-color:#A9F5BC;"><tr>';
    echo '        <td style="border:none" align="left"><input type="submit" value="<<" name="prevWeek" class="switch"></td>';
    echo '        <td style="width:90%; border:none; text-align:center">';
    if (date('Y', $wochenanfang) <> date('Y', $wochenende)) {
        echo '            Kalenderwoche '.$kw.': '.date('j.m.', $wochenanfang).' - '.date('j.m.Y', $wochenende);
    } else {
        echo '            Kalenderwoche '.$kw.': '.date('j.m.Y', $wochenanfang).' - '.date('j.m.Y', $wochenende);
    }
    echo '            <input type="hidden" value="'.$wochenanfang.'" name="wa">';  
    echo '            <input type="hidden" value="'.$wochenende.'" name="we">';  
    echo '          </td>';
    echo '        <td style="border:none" align="right"><input type="submit" value=">>" name="nextWeek" class="switch"></td>';
    echo '      </tr></table>';
    echo '    </td>';
    echo '  </tr>';
    echo '    <tr>';
    echo '      <th>Mitarbeiter</th>
                <th>Tätigkeit</th>
                <th>Produkt</th>
                <th>Beschreibung</th>
                <th width="150">MO</th>
                <th width="150">DI</th>
                <th width="150">MI</th>
                <th width="150">DO</th>
                <th width="150">FR</th>
                <th width="150">SA</th>
                <th width="150">SO</th>';
    echo '        <th>ID</th>';
    echo '    </tr>';
    $row_collector = array();
    if (mysqli_num_rows($db_erg)) {
        while ($row = mysqli_fetch_assoc($db_erg)) {
            echo var_dump($row).'<br>';
            if (!isset($row_collector[$row['tID']])) {
                $row_collector[$row['tID']] = array();
                $row_collector[$row['tID']]['taet'] = $row['Taetigkeit'];
                $row_collector[$row['tID']]['data'] = array();
            }
            if (!isset($row_collector[$row['tID']]['data'][$row['pID']])) {
                $row_collector[$row['tID']]['data'][$row['pID']] = array();
                $row_collector[$row['tID']]['data'][$row['pID']]['prod'] = $row['Produkt'];
                $row_collector[$row['tID']]['data'][$row['pID']]['desc'] = $row['Beschreibung'];
                $row_collector[$row['tID']]['data'][$row['pID']]['user'] = $row['User'];
                $row_collector[$row['tID']]['data'][$row['pID']]['proj'] = $row['prID'];
                $row_collector[$row['tID']]['data'][$row['pID']]['time'] = array();
            }
            $row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['Datum']] = $row['Zeit'];
        }
        foreach ($row_collector as $taet_id => $teat) {
            $td = array();
            $td[1] = $row_collector[$taet_id]['taet'];
            foreach ($row_collector[$taet_id]['data'] as $prod_id => $prod) {
                $td[0] = $row_collector[$taet_id]['data'][$prod_id]['user'];
                $td[2] = $row_collector[$taet_id]['data'][$prod_id]['prod'];
                $td[3] = $row_collector[$taet_id]['data'][$prod_id]['desc'];
                $td[11] = $row_collector[$taet_id]['data'][$prod_id]['proj'];
                for ($i = 0; $i < 7; $i++) {
                    $ts = $wochenanfang + ($i * 60 * 60 * 24);
                    if (isset($row_collector[$taet_id]['data'][$prod_id]['time'][$ts])) {
                        $td[$i+4] = $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
                    } else {
                        $td[$i+4] = ' ';
                    }
                }
                echo '  <tr>';
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';
                }
                echo '  </tr>';
            }
        }
    } else {
        echo '  <tr><td colspan="11" style="text-align:center">Keine Einträge gefunden.</td></tr>';
    }  
    echo '</table>';

    echo '<br>Alle Einträge anzeigen für folgende(s/n) ...<br>';
    echo '<br><input type="submit" style="height:24px; width:100px" name="filterTaet" value="Tätigkeit >"> <input name="taetigkeitdb" type="text" size="30" maxlength="30"><br><br>';
    echo '<input type="submit" style="height:24px; width:100px" name="filterProd" value="Produkt >"> <input name="produktdb" type="text" size="30" maxlength="30"><br><br>';
    echo '<input type="submit" style="height:24px; width:100px" name="filterName" value="Mitarbeiter >"> <input name="mitarbeiterdb" type="text" size="30" maxlength="30"><br><br><br><br>';
    echo '<input type="submit" name="btnOutputCancel" value="Zurück zur Eingabe"><br><br>';
    echo '<input type="submit" name="export" value="Exportiere MySQL Daten zu Excel File">';
Falls du das u.name im WHERE meinst, das ist doch schon die ganze Zeit weg. Ich habe im WHERE nichts mehr, das die Abfrage irgendwie auf einen einzelnen User beschränken würde, weswegen ich ja auch nicht verstehe, warum da immer nur "test" kommt.

var_dump liefert das hier: Anhang anzeigen Unbenannt.7z
 
hmm hmm, also im query in diesem row dingens hat er jedesmal den korrekten usernamen. wieso nimmt er den nicht im row_collector auf? du kannst ja mit echo-debugging mal stück für stück "tiefer" in den schleifen wandern und schauen, was er so für werte ausgibt. irgendwo scheint ers ja zu verschlampern. bin erstmal wieder bissl wech ^^
 
Wenn ich folgendes probiere, kriege ich schon nur noch 4x "test" ausgegeben:
Code:
$row_collector = array();
    if (mysqli_num_rows($db_erg)) {
        while ($row = mysqli_fetch_assoc($db_erg)) {
            if (!isset($row_collector[$row['tID']])) {
                $row_collector[$row['tID']] = array();
                $row_collector[$row['tID']]['taet'] = $row['Taetigkeit'];
                $row_collector[$row['tID']]['data'] = array();
            }
            if (!isset($row_collector[$row['tID']]['data'][$row['pID']])) {
                $row_collector[$row['tID']]['data'][$row['pID']] = array();
                $row_collector[$row['tID']]['data'][$row['pID']]['prod'] = $row['Produkt'];
                $row_collector[$row['tID']]['data'][$row['pID']]['desc'] = $row['Beschreibung'];
                $row_collector[$row['tID']]['data'][$row['pID']]['user'] = $row['User'];
                [COLOR=royalblue]echo  $row_collector[$row['tID']]['data'][$row['pID']]['user'];                $row_collector[$row['tID']]['data'][$row['pID']]['proj'] = $row['prID'];
                $row_collector[$row['tID']]['data'][$row['pID']]['time'] = array();
            }
            $row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['Datum']] = $row['Zeit'];
        }
Auf den ersten Blick könnte man also meinen, dass andere Mitarbeiter gar nie im $row_collector landen, aber das stimmt ja auch nicht, weil ich sofort den anderen Namen angezeigt kriege, wenn ich in meine dritte Filterfunktion gehe. Die muss sich den Namen doch auch aus dem $row_collector holen?!

Unbenannt.PNG

Mit folgendem kriege ich die wohl deutlichste Ausgabe des Problems:
PHP:
print_r($row_collector[$row['tID']]['data'][$row['pID']]);
Hier sieht man's genau, dass für jeden der 4 Einträge der Mitarbeiter "test" im $row_collector gespeichert wird ...

Unbenannt.PNG

BTW: Mit "alle" hatte ich eh alle Daten für 1 Woche gemeint. Wirklich alles anzeigen wäre alleine optisch schon sinnlos, weil wir ja trotzdem unsere Wochenbegrenzung weiterhin hätten.

[EDIT]
Das hier
PHP:
print_r($row_collector);
am Ende der while-Schleife liefert genau all das, was wir eh in der Tabelle sehen. Für user immer "test".

Was mich völlig irritiert, ist, dass er es schafft, sich bei meinem query überhaupt immer "test" zu holen. Ich hätte doch sehr vermutet, dass er sich entweder korrekt alle Mitarbeiter holt, oder dass er sich gar keinen holen kann. Aber wieso kriegt er immer "test" her??? Es ist doch im zugehörigen query NICHTS mehr drinnen, das irgendwie zu "test" führen würde ...
 
Zuletzt bearbeitet:
Ich habe gerade beim Testen was interessantes festgestellt: Wieso liefert folgendes query nur folgendes Ergebnis?
PHP:
$anf = mysqli_query($mysqli, "SELECT * FROM user;");
$us = mysqli_fetch_assoc($anf);
print_r($us);
Unbenannt.PNG Unbenannt2.PNG

Gerade wenn ich ALLES aus der DB-Tabelle auslesen lasse, müsste er doch beide Mitarbeiter erwischen??? :huh:

Und wenn ich es so mache, dann kriege ich NUR die zweite Zeile mit Mitarbeiter 2 ausgegeben:
PHP:
$anf = mysqli_query($mysqli, "SELECT * FROM user;");
$us = mysqli_fetch_assoc($anf);
while ($us = mysqli_fetch_assoc($anf)){
     print_r($us);
}
Unbenannt.PNG
 
Zuletzt bearbeitet:
In Zeile zwei holst du das erste Ergebnis deiner Abfrage und weißt es $us zu. Danach, in Zeile drei, beginnst du deine While-Schleife, in der du immer zuerst das nächste Ergebnis der Abfrage $us zuweist und danach ausgibst. Das erste Ergebnis wird also von der While-Schleife überschrieben ohne jemals ausgegeben worden zu sein. Wenn man in der Lage ist zu lesen (http://php.net/manual/en/mysqli-result.fetch-assoc.php) und sich darüber im Klaren ist, wie eine While-Schleife funktioniert sollte das ziemlich offensichtlich sein.

Toll wie du immer wieder demonstrierst, dass es bei dir nicht an den Grundlagen scheitert. Die Bezeichnungen der Variablen finde ich übrigens ganz ausgezeichnet gewählt. So weiß man auf den ersten Blick was gemeint ist. Eventuell hätte aber auch schon $a und $u ausgereicht. Damit könnte man noch etwas mehr Zeit beim Tippen sparen.
 
Der Code-Schnipsel kommt (vorerst) eh nicht in den eigentlichen Programmcode rein, insofern sind die Variablen-Namen in diesem Fall herzlich egal (und mit auch nur einem Hauch Fantasie könnte man sogar drauf kommen, dass "anf" für "anfrage" und "us" für "user steht).
Es ging nur darum, zu testen, ob überhaupt alle User aus meiner DB ausgelesen werden können. Für den Fall, dass ich den Fehler, warum andere Usernamen außer "test" nicht im $row_collector gespeichert werden, nicht finde, hätte ich vor, eventuell die Usernamen gesondert vom großen query in einem eigenen kleinen zu ermitteln und dann "manuell" an die Tabelle vorne ranzubasteln, also vor den $row_collector. Wäre halt ein ziemlich unschöner workaround, rein codetechnisch, aber was soll ich machen ... besser dann so, als es geht nicht ...

[EDIT]
Hm, das ist wirklich irgendein Speicherproblem im $row_collector. Ich habe mir jetzt eine Mini-Version davon gebastelt, die nur User-Name und -ID aufnehmen sollte, aber schon wieder landet nur "test" und "9" drinnen ...
PHP:
$row_coll = array();
        $user_table = mysqli_query($mysqli, "SELECT id, name FROM user;");
        while ($row = mysqli_fetch_assoc($user_table)) {
            if (!isset($row_coll[$row['ma']])) {
                $row_coll[$row['ma']] = array();
                $row_coll[$row['ma']]['id'] = $row['id'];
                $row_coll[$row['ma']]['name'] = $row['name'];
            }
        }
        foreach ($row_coll as $ma_id => $ma) {
            $td = array();
            $td[0] = $row_coll[$ma_id]['id'];
            $td[1] = $row_coll[$ma_id]['name'];
            for ($i = 0; $i < count($td); $i++) {
                echo $td[$i].'<br>';
            }
        }
:huh:
 
Zuletzt bearbeitet:
Ach, und den freiwilligen Helfern hier im Forum gut lesbaren Code zu präsentieren ist wohl schon zu viel verlangt. Mal davon abgesehen glänzt dein "eigentlicher" Code auch nicht gerade vor Klarheit. Das arme Schwein, das dein Programm irgendwann mal warten muss, tut mir jetzt schon leid. Bei der Wahl eines geeigneten Bezeichners geht es übrigens nicht darum, ob der Leser mit "Fantasie" erraten kann, was du damit wohl gemeint haben könntest. Und selbst wenn man leicht darauf kommt, was der Variablenname zu bedeuten hat, liest sich der Code einfach deutlich schwerer, wenn haufenweise, noch dazu unübliche Abkürzungen verwendet werden.

Übrigens, gern geschehen. Nichts zu danken. Ich hoffe, dir ist jetzt wenigstens klar, warum dein Code-Schnippsel das macht, was es macht.
 
^^ Im eigentlichen Code achte ich darauf, klare Bezeichner zu verwenden. Im Übrigen muss es sich wirklich um einen "Design-Fehler" im $row_collector handeln (siehe EDIT oben). Ein kleinerer aber schematisch-identer Nachbau liefert den exakt selben Fehler: Es wird nur "test" gespeichert, andere Mitarbeiter gehen nach dem Auslesen durch das query verloren ...

[EDIT]
Hier noch der var_dump-Beweis, dass auch im kleinen query noch alles da ist und die Daten des zweiten MAs erst beim Speichern in den Mini-$row_coll verloren zu gehen scheinen:

Unbenannt.PNG
 
Zuletzt bearbeitet:
Selbst wenn dem so wäre, ist dein Code alles andere als gut lesbar und übersichtlich. Dass du selbst regelmäßig nicht (mehr) durchblickst ist ja bezeichnend genug.
 
Ich weiß, wo ich was finde. Außer eben bei Fehlern, da suche ich dann schon u. U. ne ganze Weile ...

Bei diesem konkreten hier ist mein Problem, dass der $row_collector sich für sämtliche Tabellen aus der DB korrekt verhält, nur eben für die user-Tabelle nicht. Der exakt gleiche Mechanismus speichert völlig korrekt alle Tätigkeiten, Produkte, Zeiten, ... zu unterschiedlichsten Datensätzen, außer bei Mitarbeitern. Da wird nur der erste in der DB-Tabelle, "test", gespeichert. Tja, da soll mal einer draufkommen, woran das scheitert. Es wird ja zum Speichern von Mitarbeitern absolut nichts anderes gemacht, als zum Speichern von irgendwelchen anderen Daten. :huh:
 
$row['ma'] enthält in jeder Iteration das gleiche, dadurch werden natürlich jedes Mal die Werte überschrieben. Du liest ja auch keine Spalte namens ma aus der Datenbank.

Sollte vermutlich $row['id'] heißen?
 
$row['ma'] war schon absichtlich gewählt und kein Versehen, aber kann natürlich sein, dass es falsch ist.

BenRo, wenn du die Fehlerursache zu sehen meinst, kannst du dann bitte in wenigen Worten erklären, wieso das ganze nicht gleich mit DarkMo's $row_collector funktioniert? Er hat ziemlich sicher keine falschen Benennungen und trotzdem landet immer wieder nur "test" als einziger MA-Name im collector, während sonst alle möglichen Datensätze korrekt gespeichert werden.
(Mein Mini-collector war ja nur als "workaround" gedacht, aber lieber wäre mir, und vor allem auch sinnvoller, den großen collector normal weiterzuverwenden)

Ich kann's zwar erst morgen in meinem Mini-collector mit 'id' testen, aber ich fürchte fast, dass das das Problem nicht löse wird. Dann müsste es m. E. im großen collector schon die ganze Zeit richtig laufen.

Immerhin sind mir heute noch ein paar gute Ideen zum Weiterbasteln bei den Filterfunktionen gekommen:
- input-Felder bei Tätigkeit und Produkt durch dropdowns ersetzen (Code dafür haben wir ja schon)
- dann queries für Such-Kombinationen aus User-Tätigkeit-Produkt basteln. Sollte eigentlich nur Anpassungen im WHERE des großen queries erfordern
- ...

^^ Aber als erstes muss eben noch der User-Fehler gefunden und behoben werden.

[EDIT]
BenRo, du hattest recht. So ...
PHP:
$row_coll = array();
        $user_table = mysqli_query($mysqli, "SELECT id, name FROM user;");
        while ($row = mysqli_fetch_assoc($user_table)) {
            if (!isset($row_coll[$row['id']])) {
                $row_coll[$row['id']] = array();
                $row_coll[$row['id']]['id'] = $row['id'];
                $row_coll[$row['id']]['name'] = $row['name'];
            }
        }
        foreach ($row_coll as $ma_id => $id) {
            $td = array();
            $td[0] = $row_coll[$ma_id]['id'];
            $td[1] = $row_coll[$ma_id]['name'];
            for ($i = 0; $i < count($td); $i++) {
                echo $td[$i].'<br>';
            }
        }
... funktioniert mein Mini-collector jetzt tatsächlich und ich kriege "9", "test" und "11", "M..." reingespeichert (und gegebenenfalls ausgegeben). Aber das macht's jetzt noch kurioser, wieso der exakt gleich aufgebaute große $row_collector das nicht schafft ...

[EDIT2]
Jetzt habe ich es im großen $row_collector noch so probiert:
Code:
$row_collector = array();
    if (mysqli_num_rows($db_erg)) {
        while ($row = mysqli_fetch_assoc($db_erg)) {
            if (!isset($row_collector[$row['tID']])) {
                $row_collector[$row['tID']] = array();
                $row_collector[$row['tID']]['taet'] = $row['Taetigkeit'];
                $row_collector[$row['tID']]['user'] = $row['User'];
                $row_collector[$row['tID']]['data'] = array();
            }
            if (!isset($row_collector[$row['tID']]['data'][$row['pID']])) {
                $row_collector[$row['tID']]['data'][$row['pID']] = array();
                $row_collector[$row['tID']]['data'][$row['pID']]['prod'] = $row['Produkt'];
                $row_collector[$row['tID']]['data'][$row['pID']]['desc'] = $row['Beschreibung'];
                [COLOR=seagreen]//$row_collector[$row['tID']]['data'][$row['pID']]['user'] = $row['User'];                $row_collector[$row['tID']]['data'][$row['pID']]['proj'] = $row['prID'];
                $row_collector[$row['tID']]['data'][$row['pID']]['time'] = array();
            }
            $row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['Datum']] = $row['Zeit'];
        }
        foreach ($row_collector as $taet_id => $teat) {
            $td = array();
            $td[1] = $row_collector[$taet_id]['taet'];
            foreach ($row_collector[$taet_id]['data'] as $prod_id => $prod) {
                [COLOR=seagreen]//$td[0] = $row_collector[$taet_id]['data'][$prod_id]['user'];                $td[2] = $row_collector[$taet_id]['data'][$prod_id]['prod'];
                $td[3] = $row_collector[$taet_id]['data'][$prod_id]['desc'];
                $td[11] = $row_collector[$taet_id]['data'][$prod_id]['proj'];
               [COLOR=seagreen] [COLOR=royalblue]echo test1;
                [COLOR=seagreen]/**************/                $userid = $mysqli_query($mysqli, "SELECT userid FROM projekte WHERE id = '".$td[11]."';");
                $td[0] = $mysqli_query($mysqli, "SELECT name FROM user WHERE id = '".$userid."';");
                [COLOR=seagreen]/**************/                echo test2;                for ($i = 0; $i < 7; $i++) {
                    $ts = $wochenanfang + ($i * 60 * 60 * 24);
                    if (isset($row_collector[$taet_id]['data'][$prod_id]['time'][$ts])) {
                        $td[$i+4] = $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
                    } else {
                        $td[$i+4] = ' ';
                    }
                }
                echo '  <tr>';             
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';
                }
                echo '  </tr>';
            }
        }
^^ Aber da bleibt er gleich nach test1 hängen, danach kriege ich keine Ausgabe mehr. Offenbar kommt er über meine queries nicht drüber?!
 
Zuletzt bearbeitet:
ich glaub, mir kam grad die erleuchtung... wir speichern immer nur das erste vorkommen bla. also immer, wenn irgendwas neu ist, wirds gespeichert, ansonsten nicht. das funzt, um doppelte einträge für produkte usw zu vermeiden, stört aber bei anderen sachen. so richtig sicher bin ich mir grad nich, aber probier mal folgendes:

Code:
        while ($row = mysqli_fetch_assoc($db_erg)) {
            echo var_dump($row).'<br>';
            if (!isset($row_collector[$row['tID']])) {
                $row_collector[$row['tID']] = array();
                $row_collector[$row['tID']]['taet'] = $row['Taetigkeit'];
                $row_collector[$row['tID']]['data'] = array();
            }
            if (!isset($row_collector[$row['tID']]['data'][$row['pID']])) {
                $row_collector[$row['tID']]['data'][$row['pID']] = array();
                $row_collector[$row['tID']]['data'][$row['pID']]['prod'] = $row['Produkt'];
                $row_collector[$row['tID']]['data'][$row['pID']]['desc'] = $row['Beschreibung'];
                $row_collector[$row['tID']]['data'][$row['pID']]['proj'] = $row['prID'];
                $row_collector[$row['tID']]['data'][$row['pID']]['time'] = array();
            }
            $row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['Datum']] = array();
            $row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['Datum']][time] = $row['Zeit'];
            $row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['Datum']][user] = $row['User'];
        }
ok, jetzt beim überarbeiten kommts mir klarer vor. die user-id ist bei den zeiten gespeichert (in der db), im row-collector wird sie aber bei den projekt-daten gespeichert. hab sie dort jetzt rausgenommen und die letzte zeile erweitert. dazu musste ich ein weiteres subarray anlegen um beide werte im selben datum unter zubringen. muss man jetzt natürlich die darstellung auch abändern:
Code:
        foreach ($row_collector as $taet_id => $teat) {
            $td = array();
            $td[1] = $row_collector[$taet_id]['taet'];
            foreach ($row_collector[$taet_id]['data'] as $prod_id => $prod) {
                $td[0] = $row_collector[$taet_id]['data'][$prod_id]['user'];
                $td[2] = $row_collector[$taet_id]['data'][$prod_id]['prod'];
                $td[3] = $row_collector[$taet_id]['data'][$prod_id]['desc'];
                $td[11] = $row_collector[$taet_id]['data'][$prod_id]['proj'];
                for ($i = 0; $i < 7; $i++) {
                    $ts = $wochenanfang + ($i * 60 * 60 * 24);
                    if (isset($row_collector[$taet_id]['data'][$prod_id]['time'][$ts])) {
                        $td[$i+4] = $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
                    } else {
                        $td[$i+4] = ' ';
                    }
                }
                echo '  <tr>';
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';
                }
                echo '  </tr>';
            }
        }

ok (das hier ist unverändert...), ich seh gerade ein weiteres problem: so würden wir alle zeiten - egal von welchem user, in einer zeile sammeln. mit der obigen strucktur können wir daran nich wirklich was ändern. also müssten wir das umbauen... ich schlage folgendes vor:
Code:
        $db_erg = mysqli_query($mysqli, "SELECT 
                                            pr.id AS prID,
                                            t.taetigkeit AS Taetigkeit, 
                                            p.produkt AS Produkt, 
                                            t.id AS tID, 
                                            p.id AS pID, 
                                            pr.beschreibung AS Beschreibung, 
                                            u.name AS User, 
                                            [COLOR="sienna"]u.id AS UserID,                                             z.zeit AS Zeit, 
                                            z.datum AS Datum 
                                        FROM
                                            zeiten AS z,
                                            projekte AS pr,
                                            user AS u,
                                            taetigkeiten AS t,
                                            produkte AS p
                                        WHERE [COLOR="sienna"]// wie auch immer es hier weitergeht - wurst ^^                                            z.datum >= '".$wochenanfang."' AND z.datum <= '".$wochenende."' AND pr.id = z.taetprodid AND pr.taetigkeit = t.id AND pr.produkt = p.id
                                        ORDER BY
                                            z.datum ASC;");
        // ...

        while ($row = mysqli_fetch_assoc($db_erg)) {
            echo var_dump($row).'<br>';
            if (!isset($row_collector[$row['tID']])) {
                $row_collector[$row['tID']] = array();
                $row_collector[$row['tID']]['taet'] = $row['Taetigkeit'];
                $row_collector[$row['tID']]['data'] = array();
            }
            if (!isset($row_collector[$row['tID']]['data'][$row['pID']])) {
                $row_collector[$row['tID']]['data'][$row['pID']] = array();
                $row_collector[$row['tID']]['data'][$row['pID']]['prod'] = $row['Produkt'];
                $row_collector[$row['tID']]['data'][$row['pID']]['desc'] = $row['Beschreibung'];
                $row_collector[$row['tID']]['data'][$row['pID']]['proj'] = $row['prID'];
                $row_collector[$row['tID']]['data'][$row['pID']]['time'] = array();
            }
            [COLOR="sienna"]if (!isset($row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['User']])) {
                $row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['UserID']] = array();
                $row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['UserID']]['name'] = $row['User'];
                $row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['UserID']]['user'] = $row['UserID'];
                $row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['UserID']]['work'] = array();
            }            $row_collector[$row['tID']]['data'][$row['pID']]['time'][COLOR="sienna"][$row['UserID']]['work'][$row['Datum']] = $row['Zeit'];
        }

        // ...
        // ausgehend von folgendem tabellen-kopf-aufbau dingenskirchen... ^^
        // projID (0) | tätigkeit (1) | produkt (2) | beschreibung (3) | subtabelle (4)
        // subtabelle:
        // MA (0) | zeiten (1-7)

        foreach ($row_collector as $taet_id => $teat) {
            $td = array();
            $td[1] = $row_collector[$taet_id]['taet'];
            foreach ($row_collector[$taet_id]['data'] as $prod_id => $prod) {
                $td[0] = $row_collector[$taet_id]['data'][$prod_id]['proj'];
                $td[2] = $row_collector[$taet_id]['data'][$prod_id]['prod'];
                $td[3] = $row_collector[$taet_id]['data'][$prod_id]['desc'];
                echo '  <tr>';
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';
                }
                echo '    <td colspan="8">'; // glaub 8 passt
                echo '      <table>';
                echo '        <tr>';
                foreach ($row_collector[$taet_id]['data'][$prod_id]['time'] as $user_id => $u) {
                    $subtd = array();
                    $subtd[0] = $row_collector[$taet_id]['data'][$prod_id]['time'][$user_id]['name'];
                    for ($i = 0; $i < 7; $i++) {
                        $ts = $wochenanfang + ($i * 60 * 60 * 24);
                        if (isset($row_collector[$taet_id]['data'][$prod_id]['time'][$user_id]['work'][$ts])) {
                            $td[$i+1] = $row_collector[$taet_id]['data'][$prod_id]['time'][$user_id]['work'][$ts];
                        } else {
                            $td[$i+1] = ' ';
                        }
                    }
                    for ($i = 0; $i < count($subtd); $i++) {
                        echo '          <td>'.$subtd[$i].'</td>';
                    }
                }
                echo '        </tr>';
                echo '      </table>';
                echo '    </td>';
                echo '  </tr>';
            }
        }
puh, das is jetzt ohne ide geschrieben, nur hier im textfeld ^^ hoffe, das klappt so, wie ich mir das denke. sinn des ganzen: für das projekt wird eine zeile in der großen tabelle angelegt. die große tabelle hat immernoch alle spalten, damit eben die "überschrift" (der tabellenkopf) ordentlich passt. müsste halt in der reihenfolge "prID | Tätigkeit | Produkt | Beschreibung | MA | Mo | ... | So" sein. für das projekt wird nun alles bis beschreibung ausgefüllt, die letzten 8 felder werden zu einem zusammen gefasst um dort ein sub-tabelle reinzupacken. in dieser subtabelle werden dann alle user mit ihren zeiten untereinander aufgeführt.

sollte prinzipiell klappen. was passieren kann: es sieht vom format her blöde aus ^^ einerseits wird wohl der "projekt kopf" (also der teil bis beschreibung) bei mehreren usern in der höhe zentriert ausgegeben (da müsstest du vertical-align:top oder so beim css anfügen) und andererseits kann es vorkommen, dass die spalten vom tabellenkopf ab MA nicht mit den subtabellen harmonieren. die hängen ja nich zusammen, da es 2 verschiedene tabellen sind. da müsste man dann versuchen mit festen breiten gegen zu steuern. auch haste dann wohl nen doppelten rahmen bei der subtabelle. einmal den vom td der äusseren tabelle, wo die subtabelle drin steckt, und noch eben die rahmen der tabellen-zellen der inneren tabelle. da müsste man dann ggf diese äussere zelle ohne rand gestalten und ebenso den innenabstand auf 0 setzen (margin oder padding, eins von beidem war das) - sonst hat man da nen kleinen versatz drin. aber das ist nur css spielerei, daher will ich da jetz nich so sehr drauf eingehen.

vom layout her viel viel günstiger und einfacher (warscheinlich auch besser) wäre es, wenn man auf die subtabelle pfeifft und alles in eine packt (also die ursprüngliche), aber das wird glaube algorythmisch etwas schärfer ^^
 
^^ Puh, da zerlegt's uns optisch alles ... und ich glaube auch nicht, dass das stimmt?! Jetzt holt er sich zwar beide Mitarbeiter, aber weist jedem Datensatz auch beide zu. Jetzt haben ich 8x den einen UND 8x den anderen.

Unbenannt.PNG

Ich glaube, die einfachste Lösung wäre es, meinen Mini-$coll zu verwenden:
PHP:
$row_coll = array();
    $user_table = mysqli_query($mysqli, "SELECT id, name FROM user;");
    while ($row = mysqli_fetch_assoc($user_table)) {
        if (!isset($row_coll[$row['id']])) {
            $row_coll[$row['id']] = array();
            $row_coll[$row['id']]['id'] = $row['id'];
            $row_coll[$row['id']]['name'] = $row['name'];
        }
    }
    foreach ($row_coll as $ma_id => $id) {
        $tb = array();
        $tb[0] = $row_coll[$ma_id]['id'];
        $tb[1] = $row_coll[$ma_id]['name'];
        for ($i = 0; $i < count($tb[1]); $i++) {
            echo $tb[1].'<br>';
        }
    }
Das einzige, wozu mir noch keine Lösung eingefallen ist, ist, wie ich jetzt noch die darin gespeicherten User den dazupassenden Datensätzen in der Ausgabe zuordne. :huh:

Irgendwie müsste man halt den richtigen Mitarbeiter aus $tb[1] von $row_coll in $td[0] von $row_collector reinbringen:
PHP:
    /**************/    
    $row_coll = array();
    $user_table = mysqli_query($mysqli, "SELECT id, name FROM user;");
    while ($row = mysqli_fetch_assoc($user_table)) {
        if (!isset($row_coll[$row['id']])) {
            $row_coll[$row['id']] = array();
            $row_coll[$row['id']]['id'] = $row['id'];
            $row_coll[$row['id']]['name'] = $row['name'];
        }
    }
    foreach ($row_coll as $ma_id => $id) {
        $tb = array();
        $tb[0] = $row_coll[$ma_id]['id'];
        $tb[1] = $row_coll[$ma_id]['name'];
        for ($i = 0; $i < count($tb[1]); $i++) {
            echo $tb[1].'<br>';
        }
    }
    /**************/   
    $row_collector = array();
    if (mysqli_num_rows($db_erg)) {
        while ($row = mysqli_fetch_assoc($db_erg)) {
            if (!isset($row_collector[$row['tID']])) {
                $row_collector[$row['tID']] = array();
                $row_collector[$row['tID']]['taet'] = $row['Taetigkeit'];
                $row_collector[$row['tID']]['user'] = $row['User'];
                $row_collector[$row['tID']]['data'] = array();
            }
            if (!isset($row_collector[$row['tID']]['data'][$row['pID']])) {
                $row_collector[$row['tID']]['data'][$row['pID']] = array();
                $row_collector[$row['tID']]['data'][$row['pID']]['prod'] = $row['Produkt'];
                $row_collector[$row['tID']]['data'][$row['pID']]['desc'] = $row['Beschreibung'];
                $row_collector[$row['tID']]['data'][$row['pID']]['user'] = $row['User'];
                $row_collector[$row['tID']]['data'][$row['pID']]['proj'] = $row['prID'];
                $row_collector[$row['tID']]['data'][$row['pID']]['time'] = array();
            }
            $row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['Datum']] = $row['Zeit'];
        }
        foreach ($row_collector as $taet_id => $teat) {
            $td = array();
            $td[1] = $row_collector[$taet_id]['taet'];
            foreach ($row_collector[$taet_id]['data'] as $prod_id => $prod) {
                $td[0] = $row_collector[$taet_id]['data'][$prod_id]['user'];
                $td[2] = $row_collector[$taet_id]['data'][$prod_id]['prod'];
                $td[3] = $row_collector[$taet_id]['data'][$prod_id]['desc'];
                $td[11] = $row_collector[$taet_id]['data'][$prod_id]['proj'];
                for ($i = 0; $i < 7; $i++) {
                    $ts = $wochenanfang + ($i * 60 * 60 * 24);
                    if (isset($row_collector[$taet_id]['data'][$prod_id]['time'][$ts])) {
                        $td[$i+4] = $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
                    } else {
                        $td[$i+4] = ' ';
                    }
                }
                echo '  <tr>';             
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';
                }
                echo '  </tr>';
            }
        }
Aber all meine bisherigen Verschachtelungs-/Schleifen-Versuche haben noch zu nichts funktionierendem geführt ...

[EDIT]
Und wieso funktioniert eigentlich das nicht? Das wäre überhaupt die einfachste Lösung gewesen:
PHP:
foreach ($row_collector as $taet_id => $teat) {
            $td = array();
            $td[1] = $row_collector[$taet_id]['taet'];
            foreach ($row_collector[$taet_id]['data'] as $prod_id => $prod) {
                $td[2] = $row_collector[$taet_id]['data'][$prod_id]['prod'];
                $td[3] = $row_collector[$taet_id]['data'][$prod_id]['desc'];
                $td[11] = $row_collector[$taet_id]['data'][$prod_id]['proj'];
                /**************/
                $userid = $mysqli_query($mysqli, "SELECT userid FROM projekte WHERE id = '".$td[11]."';");
                $td[0] = $mysqli_query($mysqli, "SELECT name FROM user WHERE id = '".$userid."';");
                /**************/
                for ($i = 0; $i < 7; $i++) {
                    $ts = $wochenanfang + ($i * 60 * 60 * 24);
                    if (isset($row_collector[$taet_id]['data'][$prod_id]['time'][$ts])) {
                        $td[$i+4] = $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
                    } else {
                        $td[$i+4] = ' ';
                    }
                }
                echo '  <tr>';             
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';
                }
                echo '  </tr>';
            }
        }
[EDIT2]
Wenn ich in Bezug auf meine erste Idee einfach sage $td[0]=$tb[1], dann kriegen halt alle Datensätze "M..." zugewiesen. Hier müsste irgendwo "in unmittelbarere Codeumgebung" halt noch ne "kleine" Unterscheidung zwischen allen MA-Namen in $tb[1] rein, nur wie bloß???
 
Zuletzt bearbeitet:
Jetzt habe ich mal probiert, um das ständige Überschreiben auszutricksen, in jeder Schleifenrunde den jeweiligen Namen in ein Element eines neuen Feldes zu speichern, sodass wir dann alle Namen schön nacheinander in diesem Feld $namen hätten ...
PHP:
$name = array();   
    $row_coll = array();
    $user_table = mysqli_query($mysqli, "SELECT id, name FROM user;");
    while ($row = mysqli_fetch_assoc($user_table)) {
        if (!isset($row_coll[$row['id']])) {
            $row_coll[$row['id']] = array();
            $row_coll[$row['id']]['id'] = $row['id'];
            $row_coll[$row['id']]['name'] = $row['name'];
        }
    }
    
    $abfrage = "SELECT name FROM user";
    $ergebnis = mysqli_query($mysqli, $abfrage);
    $anzahl = mysqli_num_rows($ergebnis);
    
    foreach ($row_coll as $ma_id => $id) {
        $td = array();
        $td[0] = $row_coll[$ma_id]['id'];
        $td[1] = $row_coll[$ma_id]['name'];
        for ($i = 0; $i < $anzahl; $i++) {
            $name[$i] = $td[$i];
            //echo $td[$i].'<br>';
        }
    }
    for ($z = 0; $z < $anzahl; $z++) {
        echo $name[$z];
    }
Aber auch hier laufe ich wieder in das selbe Problem: $name hat am Ende wieder nur 1 Element, ergo nur 1 Namen gespeichert (den letzten aus der DB-Tabelle, logischerweise).

Wo, verdammt, habe ich hier den Denkfehler drinnen??? Irgendwo hier ...
PHP:
for ($i = 0; $i < $anzahl; $i++) {
            $name[$i] = $td[$i];
... würde ich mal stark vermuten, aber ich seh's ums Verrecken nicht. $anzahl ist BTW korrekterweise 2, wenn ich es ausgeben lasse.
---------------------

[EDIT]
Ich hab's geschafft! ;)

Unbenannt.PNG

Alle Namen und IDs werden jetzt korrekt nacheinander im Feld $namen gespeichert und können durch Zugriff auf den richtigen Index auch wieder rausgeholt werden:
PHP:
$name = array();   
    $row_coll = array();
    $user_table = mysqli_query($mysqli, "SELECT id, name FROM user;");
    while ($row = mysqli_fetch_assoc($user_table)) {
        if (!isset($row_coll[$row['id']])) {
            $row_coll[$row['id']] = array();
            $row_coll[$row['id']]['id'] = $row['id'];
            $row_coll[$row['id']]['name'] = $row['name'];
        }
    }
    
    $j = 0;
    $abfrage = "SELECT name FROM user";
    $ergebnis = mysqli_query($mysqli, $abfrage);
    $anzahl = mysqli_num_rows($ergebnis);
    
    foreach ($row_coll as $ma_id => $id) {
        $td = array();
        $td[0] = $row_coll[$ma_id]['id'];
        $td[1] = $row_coll[$ma_id]['name'];
        for ($i = 0; $i < $anzahl; $i++) {
            $name[$j] = $td[$i];
            $j++;
        }
    }
    for ($z = 1; $z < count($name); $z += 2) {
        echo '['.$z.'] = '.$name[$z].'<br>';
    }
^^ Es wird immer abwechselnd ID, Name, ID, Name, ... gespeichert, deswegen das Weiterspringen um 2 in der Schleife. Ich will ja nur die Namen sehen, werde aber jetzt für den nächsten Schritt meines "workarounds" wohl auch die IDs brauchen?!

Die Idee wäre jetzt nämlich, im großen $row_collector bei $td[0] immer den Namen aus $namen reinzuspeichern, dessen (User-)ID (wie gesagt ebenfalls in $namen gespeichert) zur Projekt-ID aus der DB-Tabelle "projekte" passt. Letztgenannte ID haben wir ja im $row_collector immer korrekt in $td[11] drinnen ($td[11] = $row_collector[$taet_id]['data'][$prod_id]['proj']).
Mal schauen, ob ich das auch noch hinkriege ...

[EDIT2]
So wäre der erste Versuch gewesen, aber das klappte noch nicht:
Code:
foreach ($row_collector as $taet_id => $teat) {
            $td = array();
            $td[1] = $row_collector[$taet_id]['taet'];           
            foreach ($row_collector[$taet_id]['data'] as $prod_id => $prod) {    
                //$td[0] = $row_collector[$taet_id]['data'][$prod_id]['user'];
                $td[2] = $row_collector[$taet_id]['data'][$prod_id]['prod'];
                $td[3] = $row_collector[$taet_id]['data'][$prod_id]['desc'];
                $td[11] = $row_collector[$taet_id]['data'][$prod_id]['proj'];
                [COLOR=royalblue]$user_id = mysqli_query($mysqli, "SELECT userid FROM projekte WHERE id = '".$td[11]."';");
                for ($j = 0; $j < count($name); $j++) {
                    if ($name[$j] == $user_id) {
                        $td[0] = $name[$j+1];
                    }
                }                for ($i = 0; $i < 7; $i++) {
                    $ts = $wochenanfang + ($i * 60 * 60 * 24);
                    if (isset($row_collector[$taet_id]['data'][$prod_id]['time'][$ts])) {
                        $td[$i+4] = $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
                    } else {
                        $td[$i+4] = ' ';
                    }
                }
                echo '  <tr>';            
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';
                }
                echo '  </tr>';
            }
        }
^^ Aber weit weg kann ich nicht sein?!

Entweder darf ein query an dieser Stelle im Code nicht stehen (wenn richtig, warum?), oder das query selbst hat einen Fehler. Jedenfalls passiert alles, das im Code nach dem query kommt, nicht mehr. Beim query bleibt er stehen. Selbst ein möglicher Error, den ich nur 1 Zeile später ermitteln ließe, wird nicht mehr ausgegeben, ergo die Zeile nicht mehr ausgeführt.
PHP:
$user_id = mysqli_query($mysqli, "SELECT userid FROM projekte WHERE id = '".$td[11]."';");
if (!$user_id) {
   die ('Ungültige Abfrage: '.$mysqli->error);
}
Wenn ich es wie folgt probiere, wird "hier komme ich noch her" und auch alles andere danach ganz normal ausgeführt und ausgegeben (nur leider immer noch vor jeder Zeile "test", weil wohl meine kleine for-Schleife noch nicht das richtige macht und/oder das query eben einen Fehler hat), aber sobald ich "echo $res" sage, ist wieder Endstation. Alles danach passiert dann wieder nicht mehr.
PHP:
$user_id = "SELECT userid FROM projekte WHERE id = '".$td[11]."'";
$res = mysqli_query($mysqli, $user_id);
echo "hier komme ich noch her<br>";
//echo $res.'<br>';
for ($j = 0; $j < count($name); $j++) {
    if ($name[$j] == $user_id) {
       $td[0] = $name[$j+1];
    }
}
Für mich sieht das so aus als wäre Schluss, sobald ich das Ergebnis des querys in irgendeiner Form benutzen will?! Sei es nur durch ein simples echo, oder durch eine tatsächliche Verwendung in der Schleife.

:huh:
 
Zuletzt bearbeitet:
Ich habe jetzt die Filterfunktionen fast korrekt fertiggebracht, nur an einem Problem hänge ich noch:

Filtere ich nach einer Tätigkeit, wird mir dieser Eintrag für JEDES in der DB vorhandene Produkt angezeigt, nicht nur jene, an denen mit dieser Tätigkeit gearbeitet wurde ...

1.PNG

Ansonsten stimmen alle Daten. Hier noch das zugehörige query:
PHP:
$db_erg = mysqli_query($mysqli, "SELECT
                                             pr.id AS prID,
                                            t.taetigkeit AS Taetigkeit,
                                            p.produkt AS Produkt,
                                            t.id AS tID,
                                            p.id AS pID,
                                            pr.beschreibung AS Beschreibung,
                                            u.name AS User,
                                            z.zeit AS Zeit,
                                            z.datum AS Datum
                                        FROM
                                            zeiten AS z,
                                            projekte AS pr,
                                            user AS u,
                                            taetigkeiten AS t,
                                            produkte AS p
                                        WHERE
                                            z.datum >= '".$wochenanfang."' AND z.datum <= '".$wochenende."' AND t.id = '".$taetid."' AND pr.taetigkeit = '".$taetid."' AND z.taetprodid = pr.ID
                                        ORDER BY
                                            z.datum ASC;");
Ganz genau so verhält es sich, wenn ich nach einem einzelnen Produkt filtere. Dann wird mir dieses für JEDE Tätigkeit angezeigt. Und bei Kombinationen aus Tätigkeit/Produkt/MA wird mir der entsprechende Eintrag für JEDE Tätigkeit UND JEDES Produkt angezeigt.

Irgendwo im WHERE muss der Fehler sein?!

[EDIT]
Kombinationen habe ich gerade noch geschafft, da musste nur die Tätigkeits- bzw. Produkt-ID aus der Tätigkeiten- bzw. Produkt-Tabelle im WHERE ergänzt werden. Aber das war ja nicht schwer umzusetzen, weil es für eine bestimmte Tätigkeit/Produkt/MA-Kombination in einer Woche eh nur einen Eintrag geben kann.

Nur, wie mache ich das beim Filtern nach z. B. einer bestimmten Tätigkeit? Die kann ja auf mehrere Produkte angewandt worden sein, was a) in mehreren Datensätzen resultieren würde und mir b) nicht erlaubt, auch noch schnell eine bestimmte Produkt-ID im WHERE zu ergänzen. ???
 
Zuletzt bearbeitet:
Zurück