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

  • Ersteller Ersteller boss3D
  • Erstellt am Erstellt am
^^ DAS ist schon klar, bin ja nicht doof. Die Frage ist, WARUM das passiert.

BTW wundert es mich gerade, warum $mysqli->error keine Meldung ausgibt. Das "ungültige Abfrage" habe ich selbst geschrieben. Zuerst dachte ich an einen Syntaxfehler und habe das Zeug gegoogelt. Dabei kam ich auf connect_error, aber das liefert auch nichts.
 
Du hast mich missverstanden. $mysqli->error gibt keine Meldung aus, weil es leer ist. Ich gehe davon aus, dass keine deiner if-Bedingungen zutrifft und es deswegen nicht dazu kommt, dass ein Query an die Datenbank gesendet wird.
 
^^ Ah ja, stimmt! :klatsch: Das query "auswertenall" wird ja auch immer erst nach dem Klicken des zugehörigen Buttons in projektzeiterfassung.php ausgeführt. Nur, da kommen wir nicht mehr hin zurück, wenn ich in auswerten2.php bleiben und dort die KWs durchschalten will. Muss ich mir schnell nen kleinen workaround überlegen.

Kann man nen Button "manuell" setzen, ohne dass er zuvor gedrückt worden sein muss? Dann könnte man ja jetzt das ganz oben zu Beginn von auswerten2.php machen. If !isset blablub, dann setze ... ???
unset() gibt's. Vielleicht gibt's auch ein set(), schnell googlen.

[EDIT]
So ging's auch:
PHP:
} elseif (isset($_POST['auswertenall']) or (!isset($_POST['kombination']) and !isset($_POST['filterProd']) and !isset($_POST['filterTaet']) and !isset($_POST['filterName']))) { // lese gesamten DB-Inhalt aus
Damit habe ich gesamten-DB-Inhalt-ausgeben einfach zum default gemacht, wenn nichts anderes explizit ausgewählt wurde.
-----------

Damit kann ich mich jetzt um die Berechnungen der Stunden für Tage und Wochen kümmern. Vielen Dank wieder mal bis hierher! :)

[EDIT2]
Na, das war ja jetzt keine große Kunst. ;)
PHP:
                /**************/
                for ($wochentag = $wochenanfang; $wochentag <= $wochenende; $wochentag += 86400) {
                    $time_table = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE taetprodid = '".$td[0]."';");
                    $sum = mysqli_fetch_row($time_table);
                    $td[12] = $sum[0];
                }
                echo '  <tr>';   
                /**************/
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';               
                }
                echo '  </tr>';
            }
        }
        /**************/
        echo '  <tr>';
        echo '    <td></td>';
        echo '    <td></td>';
        echo '    <td></td>';
        echo '    <td></td>';
        echo '    <td></td>';
        for ($wochentag = $wochenanfang; $wochentag <= $wochenende; $wochentag += 86400) {
            $time_table = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE datum = '".$wochentag."';");
            $sum = mysqli_fetch_row($time_table);
            echo '    <td>'.$sum[0].'</td>';
        }
        echo '  </tr>';
        /**************/
Irgendwie optisch hervorheben muss ich die letzte Zeile bzw. Spalte noch.

Unbenannt.PNG
 
Zuletzt bearbeitet:
Schaut doch schon ganz cool aus ... :daumen:

Unbenannt.PNG

^^ Jetzt muss mir nur noch einer verraten, was zur Hölle den blöden Strichpunkt reingebracht hat. :what:
Entweder ich bin so doof und habe irgendwo ein "echo ';';" reingebastelt, das ich jetzt nicht mehr finde, oder ich weiß auch nicht ...

Und die 4 unnötigen leeren Feldumrandungen würde ich auch noch gerne weghaben.
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['filter_taetigkeit'])) {
        $taetid = $_POST['filter_taetigkeit'];
    }
    
    if (isset($_POST['filter_product'])) {
        $prodid = $_POST['filter_product'];
    }
    
    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 AND z.userid = u.id AND p.id = pr.produkt 
                                        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 z.taetprodid = pr.id AND z.userid = u.id AND p.id = pr.produkt AND t.id = pr.taetigkeit
                                        ORDER BY
                                            z.datum ASC;");
    } if (isset($_POST['kombination'])) { // nach Kombination filtern
        $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.id = '".$userid."' AND pr.taetigkeit = '".$taetid."' AND t.id = '".$taetid."' AND pr.produkt = '".$prodid."' AND p.id = '".$prodid."' AND pr.id = z.taetprodid
                                        ORDER BY
                                            z.datum ASC;");
    } elseif (isset($_POST['auswertenall']) or (!isset($_POST['kombination']) and !isset($_POST['filterProd']) and !isset($_POST['filterTaet']) and !isset($_POST['filterName']))) { // 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="12" 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>ID</th>
                <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>;
                <th>∑</th>';
    echo '    </tr>';

    $name = array();   
    $row_coll = array();
    $user_table = mysqli_query($mysqli, "SELECT id, name FROM user;");
    $anzahl = mysqli_num_rows($user_table);
    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;    
    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++;
        }
    }  
    $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[2] = $row_collector[$taet_id]['taet'];           
            foreach ($row_collector[$taet_id]['data'] as $prod_id => $prod) {     
                $td[1] = $row_collector[$taet_id]['data'][$prod_id]['user'];
                $td[3] = $row_collector[$taet_id]['data'][$prod_id]['prod'];
                $td[4] = $row_collector[$taet_id]['data'][$prod_id]['desc'];
                $td[0] = $row_collector[$taet_id]['data'][$prod_id]['proj'];
                $user_id = "SELECT userid FROM projekte WHERE id = '".$td[0]."';";
                $res = mysqli_query($mysqli, $user_id);
                $row = mysqli_fetch_assoc($res);
                for ($j = 0; $j < count($name); $j++) {
                    if ($name[$j] == $row['userid']) {
                        $td[1] = $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+5] = $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
                    } else {
                        $td[$i+5] = ' ';
                    }
                }
                for ($wochentag = $wochenanfang; $wochentag <= $wochenende; $wochentag += 86400) {
                    $time_table = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE taetprodid = '".$td[0]."';");
                    $sum = mysqli_fetch_row($time_table);
                    $td[12] = $sum[0];
                }
                echo '  <tr>';   
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';               
                }
                echo '  </tr>';
            }
        }
        echo '  <tr>';
        echo '    <td>∑</td>';
        echo '    <td></td>';
        echo '    <td></td>';
        echo '    <td></td>';
        echo '    <td></td>';
        for ($wochentag = $wochenanfang; $wochentag <= $wochenende; $wochentag += 86400) {
            $time_table = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE datum = '".$wochentag."';");
            $sum = mysqli_fetch_row($time_table);
            echo '    <td>'.$sum[0].'</td>';
        }
        echo '  </tr>';
    } else {
        echo '  <tr><td colspan="12" 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 >"> ';    
    $taetigkeiten = array();
    $res_t = mysqli_query($mysqli, "SELECT * FROM taetigkeiten") or die ("Get Taetigkeiten fehlgeschlagen.<br>".mysqli_error());
    if (mysqli_num_rows($res_t)) {
        while ($row_t = mysqli_fetch_assoc($res_t)) {
            $taetigkeiten[count($taetigkeiten)] = $row_t;
        }
    }
    echo '<tr><td><select name="filter_taetigkeit">';
    foreach ($taetigkeiten as $taetigkeit) {
            echo '<option value="'.$taetigkeit['id'].'">'.$taetigkeit['taetigkeit'].'</option>';
    }
    echo '</select></td><br><br>';
        
    echo '<input type="submit" style="height:24px; width:100px" name="filterProd" value="Produkt >"> ';
    $products = array();
    $res_p = mysqli_query($mysqli, "SELECT * FROM produkte") or die ("Get Produkte fehlgeschlagen.<br>".mysqli_error());
    if (mysqli_num_rows($res_p)) {
        while ($row_p = mysqli_fetch_assoc($res_p)) {
            $products[count($products)] = $row_p;
        }
    }
    echo '<td><select name="filter_product">';
    foreach ($products as $product) {
        echo '<option value="'.$product['id'].'">'.$product['produkt'].'</option>';
    }
    echo '</select></td><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>';
    echo '<input type="submit" style="height:24px; width:140px" name="kombination" value="^^ Kombination"><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">';
 
0 matches, habe ich schon probiert. Ist das schräg! Ich habe ja über der Tabelle gar nicht rumgebastelt im Code, nur darunter und daneben ...

Ich schaue mir jetzt erstmal das mit den <td>s an. style="display:hidden;" würde sie leider ganz wegmachen, aber ich brauche sie ja, damit die Summen unter den korrekten Tagen landen. Ich bräuchte sie nur unsichtbar.

[EDIT]
style="border:none" hat geklappt.

[EDIT2]
Habe das verirrte Strich-Pünktchen schon gefunden, jetzt schaut's ganz sauber aus. :)
--------------

Nun, nachdem das jetzt auch alles umgesetzt ist und ich mich hier in der Firma noch 10 Tage mit dem Projekt befassen darf, wäre das nächste, das mir einfällt, die Editier-Funktion noch umzusetzen zu probieren. So richtig werde ich mir das erst morgen dann anschauen, aber auf jeden Fall kann ich schon mal den Ansatz rauskramen, den ich vor 2(?) Wochen schon gebaut habe:
PHP:
if (isset($_POST['edit'])) {
        if (isset($_POST['check'])) {
            $selected = $_POST['check'];
            $a = count($selected); // Anzahl der Zeilen
            
            $taetigkeiten = array();
            $res_t = mysqli_query($mysqli, "SELECT * FROM taetigkeiten") or die ("Get Taetigkeiten fehlgeschlagen.<br>".mysqli_error());
            if (mysqli_num_rows($res_t)) {
                while ($row_t = mysqli_fetch_assoc($res_t)) {
                    $taetigkeiten[count($taetigkeiten)] = $row_t;
                }
            }
             
            $products = array();
            $res_p = mysqli_query($mysqli, "SELECT * FROM produkte") or die ("Get Produkte fehlgeschlagen.<br>".mysqli_error());
            if (mysqli_num_rows($res_p)) {
                while ($row_p = mysqli_fetch_assoc($res_p)) {
                    $products[count($products)] = $row_p;
                }
            }
            
            for ($j = 0; $j < count($selected); $j++) {                          
                $taet_id = mysqli_query($mysqli, "SELECT taetigkeit FROM projekte WHERE id=$selected[$j]");
                $row_taetid1 = mysqli_fetch_row($taet_id); // taetigkeit-id aus projekte
                $init_taet = mysqli_query($mysqli, "SELECT taetigkeit FROM taetigkeiten WHERE id=$row_taetid1");
                $row_taetid2 = mysqli_fetch_row($init_taet); // taetigkeit aus taetigkeiten
                echo '<tr><td><select name="taetigkeit'.$a.'">';
                foreach ($taetigkeiten as $taetigkeit) {
                    echo '<option value="'.$row_taetid1[0].'" selected>'.$row_taetid2[0].'</option>';
                }
                echo '</select></td>';
                
                $prod_id = mysqli_query($mysqli, "SELECT produkt FROM projekte WHERE id=$selected[$j]");
                $row_prodid1 = mysqli_fetch_row($prod_id); // produkt-id aus projekte
                $init_prod = mysqli_query($mysqli, "SELECT produkt FROM produkte WHERE id=$row_prodid1");
                $row_prodid2 = mysqli_fetch_row($init_prod); // produkt aus produkte
                echo '<td><select name="product'.$a.'">';
                foreach ($products as $product) {
                    echo '<option value="'.$row_prodid1[0].'" selected>'.$row_prodid2[0].'</option>';
                }
                echo '</select></td>';
                
                $init_desc = mysqli_query($mysqli, "SELECT beschreibung FROM projekte WHERE id=$selected[$j]");
                $row_desc = mysqli_fetch_row($init_desc); // beschreibung aus projekte
                echo '<td><input name="beschreibung'.$a.'" type="text" value="'.$row_desc[0].'" size="50" maxlength="250"></td>';
                
                $hours = mysqli_query($mysqli, "SELECT zeit FROM zeiten WHERE taetprodid=$selected[$j]");
                $row_time1 = mysqli_fetch_row($hours); // zeit aus zeiten
                $date = mysqli_query($mysqli, "SELECT datum FROM zeiten WHERE taetprodid=$selected[$j]");
                $row_time2 = mysqli_fetch_row($date); // timestamp aus zeiten
                for ($i = 0; $i < 7; $i++) {
                    //echo $row_time2[$i]; // 1412157600 (timestamp)
                    //echo date("d.m.Y", $row_time2[$i]); // 01.10.214 (MI)
                    //$ts = $wochenanfang + ($i * 60 * 60 * 24);
                    $ts = $row_time2[$i];
                    echo ' <td><input type="text" name="'.$ts.'_'.$a.'" value="'.$row_time1[$i].'" maxlength="6" size="4"></td>';
                }
                            
                //$update1 = mysqli_query($mysqli, "UPDATE projekte SET taetigkeit=XX, produkt=YY, beschreibung=ZZ, erstellt=XYZ WHERE id=$selected[$j]");
            }
        }
    }
Die Idee wäre jedenfalls, erstmal eine mit den korrekten Werten der zu editierenden Zeile vorbelegte Zeile zu basteln, und diese dann an der richtigen Stelle in der Tabelle in auswerten(2).php einzufügen.

^^ Ich bin eh nicht schlecht unterwegs, nur habe ich es nicht geschafft, die dropdowns vorzubelegen. Die werden mir einfach leer angezeigt, wobei ich auf einen Index-Fehler in den eingefügten arrays tippe ...
 
Zuletzt bearbeitet:
^^ np. Siehe mein Vorposting, habe da reineditiert wie's weitergeht.

Zur Zeit schaut's mit dem Editieren jedenfalls so aus ...

Unbenannt.PNG

... also noch nicht so berauschend.

[EDIT]
Au, Mann, hab's schon gesehen:
Code:
$row_taetid1 = mysqli_fetch_row($taet_id); // taetigkeit-id aus projekte
$init_taet = mysqli_query($mysqli, "SELECT taetigkeit FROM taetigkeiten WHERE id=$row_taetid1[COLOR=royalblue][B][0][/B]");
Na, dann müssen jetzt nur noch alle Zeiten im richtigen Feld landen ...
 
Das mit der Zeit kriege ich nicht hin. Es wird nur 1 korrekter Wert aus der DB geholt und dann im ersten Feld, also bei MO, als vorbeleg-Wert verwendet ...
Code:
if (isset($_POST['edit'])) {
        if (isset($_POST['check'])) {
            $selected = $_POST['check'];
            $a = count($selected); // Anzahl der Zeilen
            
            $taetigkeiten = array();
            $res_t = mysqli_query($mysqli, "SELECT * FROM taetigkeiten") or die ("Get Taetigkeiten fehlgeschlagen.<br>".mysqli_error());
            if (mysqli_num_rows($res_t)) {
                while ($row_t = mysqli_fetch_assoc($res_t)) {
                    $taetigkeiten[count($taetigkeiten)] = $row_t;
                }
            }
             
            $products = array();
            $res_p = mysqli_query($mysqli, "SELECT * FROM produkte") or die ("Get Produkte fehlgeschlagen.<br>".mysqli_error());
            if (mysqli_num_rows($res_p)) {
                while ($row_p = mysqli_fetch_assoc($res_p)) {
                    $products[count($products)] = $row_p;
                }
            }
            
            echo '<table>';
            for ($j = 0; $j < count($selected); $j++) {                          
                $taet_id = mysqli_query($mysqli, "SELECT taetigkeit FROM projekte WHERE id = $selected[$j]");
                $row_taetid1 = mysqli_fetch_row($taet_id); // taetigkeit-id aus projekte
                $init_taet = mysqli_query($mysqli, "SELECT taetigkeit FROM taetigkeiten WHERE id = $row_taetid1[0]");
                $row_taetid2 = mysqli_fetch_row($init_taet); // taetigkeit aus taetigkeiten
                echo '<tr><td><select name="taetigkeit'.$a.'">';
                foreach ($taetigkeiten as $taetigkeit) {
                    echo '<option value="'.$row_taetid1[0].'" selected>'.$row_taetid2[0].'</option>';
                }
                echo '</select></td>';
                
                $prod_id = mysqli_query($mysqli, "SELECT produkt FROM projekte WHERE id = $selected[$j]");
                $row_prodid1 = mysqli_fetch_row($prod_id); // produkt-id aus projekte
                $init_prod = mysqli_query($mysqli, "SELECT produkt FROM produkte WHERE id = $row_prodid1[0]");
                $row_prodid2 = mysqli_fetch_row($init_prod); // produkt aus produkte
                echo '<td><select name="product'.$a.'">';
                foreach ($products as $product) {
                    echo '<option value="'.$row_prodid1[0].'" selected>'.$row_prodid2[0].'</option>';
                }
                echo '</select></td>';
                
                $init_desc = mysqli_query($mysqli, "SELECT beschreibung FROM projekte WHERE id = $selected[$j]");
                $row_desc = mysqli_fetch_row($init_desc); // beschreibung aus projekte
                echo '<td><input name="beschreibung'.$a.'" type="text" value="'.$row_desc[0].'" size="50" maxlength="250"></td>';
                
                [COLOR=royalblue]$hours = mysqli_query($mysqli, "SELECT zeit FROM zeiten WHERE taetprodid = $selected[$j]");
                $row_time1 = mysqli_fetch_row($hours); // zeit aus zeiten
                $date = mysqli_query($mysqli, "SELECT datum FROM zeiten WHERE taetprodid = $selected[$j]");
                $row_time2 = mysqli_fetch_row($date); // datum-timestamp aus zeiten
                for ($i = 0; $i < 7; $i++) {                  
                    $ts = $row_time2[0];
                    echo ' <td><input type="text" name="'.$ts.'_'.$a.'" value="'.$row_time1[$i].'" maxlength="6" size="4"></td>';
                }                echo '<td>'.$selected[$j].'</td><br>';
                echo '</table>';
                            
                /*$update1 = mysqli_query($mysqli, "UPDATE projekte SET taetigkeit = '".$_POST['taetigkeit']."', produkt = '".$_POST['poduct']."', beschreibung = '".$_POST['beschreibung']."', erstellt = '".$erstellt."' WHERE id = '".$selected[$j]."';");
                for ($b = 0; $b < 7; $b++) {
                    $ts = $wochenanfang + ($b * 60 * 60 * 24);
                    if (isset($_POST[$ts.'_'.$a]) and $_POST[$ts.'_'.$a] != "") {
                        $dauer = $_POST[$ts.'_'.$a];
                        $update2 = mysqli_query($mysqli, "UPDATE zeiten SET zeit = '".$dauer."' WHERE taetprodid = '".$selected[$j]."' AND datum = '".$ts."';");
                    }
                }*/      
            }
        }
    }
Unbenannt.PNG

[EDIT]
Folgender Versuch liefert keine Werte in den Feldern:
PHP:
for ($i = $wochenanfang; $i <= $wochenende; $i += 86400) {
    $hours = mysqli_query($mysqli, "SELECT zeit, datum FROM zeiten WHERE taetprodid = '".$selected[$j]."', datum = '".$i."';");
    $ts = mysqli_fetch_row($hours); // zeit und datum aus zeiten
    echo ' <td><input type="text" name="'.$ts['datum'].'_'.$a.'" value="'.$ts['zeit'].'" maxlength="6" size="4"></td>';
}
Dieser kleine Test liefert "nope!":
PHP:
if (!$hours) {
   echo "nope!<br>";
}
$i und $selected[$j] haben aber definitiv die richtigen Werte. Habe ich gerade durch echo Ausgaben für jede Schleifenrunde überprüft.
 
Zuletzt bearbeitet:
Auf ein anderes Problem bin ich heute beim Testen noch draufgekommen ...
Nachfolgend nochmal der Code von auswerten2.php:
Code:
<?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['filter_taetigkeit'])) {
        $taetid = $_POST['filter_taetigkeit'];
    }
    
    if (isset($_POST['filter_product'])) {
        $prodid = $_POST['filter_product'];
    }
    
    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 AND z.userid = u.id AND p.id = pr.produkt 
                                        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 z.taetprodid = pr.id AND z.userid = u.id  AND p.id = pr.produkt AND t.id = pr.taetigkeit
                                        ORDER BY
                                            z.datum ASC;");
    } if (isset($_POST['kombination'])) { // nach Kombination filtern
        $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.id = '".$userid."' AND pr.taetigkeit = '".$taetid."' AND t.id =  '".$taetid."' AND pr.produkt = '".$prodid."' AND p.id = '".$prodid."'  AND pr.id = z.taetprodid
                                        ORDER BY
                                            z.datum ASC;");
     } elseif (isset($_POST['auswertenall']) or  (!isset($_POST['kombination']) and !isset($_POST['filterProd']) and  !isset($_POST['filterTaet']) and !isset($_POST['filterName']))) { //  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="12" 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>ID</th>
                <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>
                <th>∑</th>';
    echo '    </tr>';

    $name = array();   
    $row_coll = array();
    $user_table = mysqli_query($mysqli, "SELECT id, name FROM user;");
    $anzahl = mysqli_num_rows($user_table);
    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;    
    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++;
        }
    }  
    $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[2] = $row_collector[$taet_id]['taet'];           
            foreach ($row_collector[$taet_id]['data'] as $prod_id => $prod) {     
                $td[1] = $row_collector[$taet_id]['data'][$prod_id]['user'];
                $td[3] = $row_collector[$taet_id]['data'][$prod_id]['prod'];
                $td[4] = $row_collector[$taet_id]['data'][$prod_id]['desc'];
                $td[0] = $row_collector[$taet_id]['data'][$prod_id]['proj'];
                $user_id = "SELECT userid FROM projekte WHERE id = '".$td[0]."';";
                $res = mysqli_query($mysqli, $user_id);
                $row = mysqli_fetch_assoc($res);
                for ($j = 0; $j < count($name); $j++) {
                    if ($name[$j] == $row['userid']) {
                        $td[1] = $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+5] = $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
                    } else {
                        $td[$i+5] = ' ';
                    }
                }
                /**************/
                [COLOR=darkorchid]for ($wochentag = $wochenanfang; $wochentag <= $wochenende; $wochentag += 86400) {
                    $time_table = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE taetprodid = '".$td[0]."';");
                    $sum = mysqli_fetch_row($time_table);
                    $td[12] = $sum[0];
                }
                echo '  <tr>';   
                /**************/
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';               
                }
                echo '  </tr>';
            }
        }
        /**************/
        [COLOR=royalblue]echo '  <tr>';
        echo '    <td>∑</td>';
        echo '    <td style="border:none"></td>';
        echo '    <td style="border:none"></td>';
        echo '    <td style="border:none"></td>';
        echo '    <td style="border:none"></td>';
        for ($wochentag = $wochenanfang; $wochentag <= $wochenende; $wochentag += 86400) {
            $time_table = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE datum = '".$wochentag."';");
            $sum = mysqli_fetch_row($time_table);
            if (!$sum[0]) {
                echo '    <td style="border:none"></td>';
            } else {
                echo '    <td>'.$sum[0].'</td>';
            }
        }
        echo '  </tr>';        /**************/
    } else {
         echo '  <tr><td colspan="12"  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 >"> ';     
    $taetigkeiten = array();
    $res_t = mysqli_query($mysqli,  "SELECT * FROM taetigkeiten") or die ("Get Taetigkeiten  fehlgeschlagen.<br>".mysqli_error());
    if (mysqli_num_rows($res_t)) {
        while ($row_t = mysqli_fetch_assoc($res_t)) {
            $taetigkeiten[count($taetigkeiten)] = $row_t;
        }
    }
    echo '<tr><td><select name="filter_taetigkeit" style="width:210px">';
    foreach ($taetigkeiten as $taetigkeit) {
            echo '<option value="'.$taetigkeit['id'].'">'.$taetigkeit['taetigkeit'].'</option>';
    }
    echo '</select></td><br><br>';
        
    echo '<input type="submit" style="height:24px; width:100px" name="filterProd" value="Produkt >"> ';
    $products = array();
    $res_p = mysqli_query($mysqli, "SELECT * FROM produkte") or die ("Get Produkte fehlgeschlagen.<br>".mysqli_error());
    if (mysqli_num_rows($res_p)) {
        while ($row_p = mysqli_fetch_assoc($res_p)) {
            $products[count($products)] = $row_p;
        }
    }
    echo '<td><select name="filter_product" style="width:210px">';
    foreach ($products as $product) {
        echo '<option value="'.$product['id'].'">'.$product['produkt'].'</option>';
    }
    echo '</select></td><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>';
    echo '<input  type="submit" style="height:24px; width:140px" name="kombination"  value="^^ Kombination"><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">';
Das Violette macht die zeilenweise Stundenberechnung, das Blaue die spaltenweise.

Das Problem ist jetzt allerdings, dass beide Code-Abschnitte nur das richtige machen, solange ich den gesamten DB-Inhalt ausgeben lasse. Filtere ich allerdings einzelne Einträge heraus, stimmt die Spaltenberechnung nicht mehr. Da bleibt dann weiterhin die von der Gesamttabelle angezeigt. Zur Verdeutlichung:

Alles (für eine Woche)

1.PNG

Gefiltert

2.PNG

^^ Dir Ursache des Problems ist nicht schwer zu erkennen: Während ich den violetten Zeilencode (der die Spalte baut) innerhalb der großen foreach-Schleife, die sich um das Auslesen der Daten aus dem $row_collector und dem Aufbau der Ausgabe kümmert, platzieren konnte, musste ich den blauen Spaltencode (der die Zeile baut) außerhalb davon platzieren, weil ich diese Zeile ja nur 1x will.
Dadurch wird jetzt aber die Stundenberechnung nicht dynamisch angepasst, wenn sich durch eine Filterung plötzlich die Anzahl der Datensätze, und damit Stunden, verändert.

Hat irgendjemand eine Idee, wie ich das im Code umbauen könnte?

Ich habe heute stundenlang versucht, den blauen Code-Teil auch noch irgendwie in die foreach-Schleife mitreinzunehmen, aber dann habe ich nach jedem Datensatz eine Ausgabe, und natürlich nie eine Gesamtstundenbrechnung über alle Datensätze.
 
wieso so kompliziert? erstell dir doch nen array mit 7 werten für die 7 tage. gibst du beim tabellen aufbau eine zeit aus, wird dieser zeitwert zum array-wert addiert und gut is. man muss nicht zwingend alles per db lösen ^^ grobe vorstellung:

Code:
sum = array();
for(i=0; i<7; i++) sum[ts[i]] = 0; // initialisieren mit 0, als key wird unser timestamp für den tag benutzt

// tabelle erstellen...
for each(tabellenzeile)
    // projekt-geblubber (tät, prod...)
    row_sum = 0;
    for each(tag-spalte mit dem ts gedingse) {
        if(zeit[ts] > 0) {
            echo <td>zeit[ts]</td>;
            sum[ts] += zeit[ts];
            row_sum += zeit[ts];
        }
    }
    echo <td>row_sum</td>;
}
// edit: die sum ausgabe vergessen ^^
for each(sum-spalte mit dem ts gedingse) {
    if(sum[ts] > 0) {
        echo <td>sum[ts]</td>;
    } else {
        echo leerzelle;
    }
}
und wie gesagt: SKIZZIERT ^^

btw: hab grad nich so derb zeit, daher bin ich so still. das bissl was ich hab, zogg ich grad ^^ und ben hilft ja gut aus :D
 
Zuletzt bearbeitet:
^^ Ich habe ehrlich gesagt nicht die leiseste Ahnung, wo im Code ich das reinbasteln soll ... :huh:
Und warum musst du immer für alles foreach-Schleifen nehmen? Ich hasse die Dinger so sehr! Funktionieren eh nie so wie sie sollen. Ich nehme immer nur for und while.

Soweit kann ich das ganze jedenfalls in tatsächlichen Code umwandeln ...
PHP:
$sum = array();
                for ($i = 0; $i < 7; $i++) {
                    $sum[$ts[$i]] = 0; // initialisieren mit 0, als key wird unser timestamp für den tag benutzt
                }
                
                // tabelle erstellen...
                foreach (tabellenzeile) {
                // projekt-geblubber (tät, prod...)
                    $row_sum = 0;
                    foreach (tag-spalte mit dem ts gedingse) {
                        if ($zeit[$ts] > 0) {
                            echo '<td>'.$zeit[$ts].'</td>';
                            $sum[$ts] += $zeit[$ts];
                            $row_sum += $zeit[$ts];
                        }
                    }
                    echo '<td>'.$row_sum.'</td>';
                }
                // edit: die sum ausgabe vergessen ^^
                foreach (sum-spalte mit dem ts gedingse) {
                    if ($sum[$ts] > 0) {
                        echo '<td>'.$sum[$ts].'</td>';
                    } else {
                        echo '<td style="border:none"></td>';
                    }
                }
... aber bei deinen foreach-Schleifen steige ich völlig aus.
 
Zuletzt bearbeitet:
Ohne jetzt DarkMos Ansatz gutheissen zu wollen, so funktioniert foreach:
Die Schleife wird für jedes Element in einem Array ausgeführt:
PHP:
foreach($array as $arrayElement) { ... }
Das bedeutet, dass in der Variable arrayElement in jeder Iteration ein anderer Wert steht, nämlich der nächste im Array. Beispiel:
PHP:
$arrayMitZahlen = array(16 => 19, 5 => 8, 13 => 15, 2 => 4, 55 => 76);
foreach($arrayMitZahlen as $zahl) {
   print($zahl.'-');
}
Der obige Code zeigt 19-8-15-4-76- an (und nicht, wie man als Einsteiger evtl. meinen könnte 4-8-15-19-76-, die Keys werden nicht umsortiert.)

Wenn man im foreach neben dem Wert auch den Schlüssel des Arrays benötigt, geht das so:
PHP:
$inhaltMeinerMoebel = array();
$inhaltMeinerMoebel['Kommode'] = 'Zeitschriften';
$inhaltMeinerMoebel['Vitrine'] = 'Gläser';
$inhaltMeinerMoebel['Truhe'] = 'Tischdecken';

foreach($array as $schluessel => $wert) {
   print('In '.$schluessel.' steckt '.$wert);
}
Möchte man die Abarbeitung von foreach abbrechen, kann man break; benutzen, möchte man zur nächsten Iteration springen continue; (ist in while und for nicht anders):
PHP:
foreach($array as $wert) {
   if(empty($wert)) continue;
   ...
}
Wenn for und while klar sind, hilft es dir evtl, wenn ich foreach in for/while ausdrücke:
PHP:
$array = array(16 => 19, 5 => 8, 13 => 15, 2 => 4, 55 => 76);
foreach($array as $value) {
   // ...
}

// entspricht etwa diesem Code hier:

$array = array(16 => 19, 5 => 8, 13 => 15, 2 => 4, 55 => 76);
$arrayWithAscendingKeys = array_values($array);
for($i=0;$i<count($array);$i++) {
   $value = $arrayWithAscendingKeys[$i];
   //..
}

// entspricht etwa diesem Code hier:

$array = array(16 => 19, 5 => 8, 13 => 15, 2 => 4, 55 => 76);
$arrayWithAscendingKeys = array_values($array);
$i = 0;
while($i<count($array)) {
   $value = $arrayWithAscendingKeys[$i];
   //..
   $i++;
}
Das Handbuch erklärt das eigentlich alles ganz gut, da stehen dann auch ein paar schicke neue Sachen seit PHP 5.5 drin:
PHP: foreach - Manual

EDIT: Zu deinem ursprünglichen Problem: Ich verstehe das Problem nicht. Lies das doch aus der Datenbank, indem du einfach deinen Filtercode verwendest und zusätzlich von den anderen Spalten SUM(z.zeit) as zeitsumme selektierst (oder ähnlich).
 
Zuletzt bearbeitet:
erstmal Respekt an alle die hier helfen, wie viel Mannjahre das wohl schon sind ;)

du solltest unbedingt mit foreach Schleifen arbeiten, ich nutze die auch oft bei C#...

-> es verbessert die Lesbarkeit deutlich (kein Frage wie weit, oder wie der Zähler erhöht wird oder ob bei 0 oder 1 gestartet wird)
-> innerhalb der Schleife hab nur noch foo und nicht bar vereinfacht auch das Lesen

klar geht alles mit for oder while oder do/while aber um einfach nur durch eine Liste zu laugen ist foreach ideal
 
^^ Wie die foreach-Schleife grundsätzlich funktioniert, habe ich mir schon irgendwann im Juli(?) zusammengegoogelt. Trotzdem danke für die Erklärung!

Mein Problem damit ist, dass ich bei meinen konkreten mir im Code zur Verfügung stehenden Variablen, Feldern, etc. nicht weiß, was genau ich da wie in den Schleifenkopf einsetzen sollte. Allerdings vermute ich, dass ich mir da bei DarkMo's Ansatz gar nichts neues überlegen sollte, sondern er eigentlich an eine Weiterverwendung der bereits vorhanden Schleifen vom $row_collector gedacht hat?! Dass ich quasi seinen Mini-Code rund um den $row_collector herumbastlen sollte?! Jedenfalls verstehe ich so seinen sehr frei interpretierbaren Kommentar: // projekt-geblubber (tät, prod...) (--> dass das der $row_collector sein soll?!)

So oder so wird mir sein Ansatz nicht klar. Ich würde auch lieber bei meinem eigenen bleiben, allerdings komme ich auch nicht ganz mit, was du, BenRo, mit deinem EDIT meinst. Soll ich nur folgenden Code behalten und da was zusätzliches im query hinzufügen? Was meinst du mit "anderen Spalten"? Es gibt die MO-, DI-, MI-, ... Spalten, und es hängen immer Zeit und Datum zusammen.
PHP:
for ($wochentag = $wochenanfang; $wochentag <= $wochenende; $wochentag += 86400) {
                    $time_table = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE taetprodid = '".$td[0]."';");
                    $sum = mysqli_fetch_row($time_table);
                    $td[12] = $sum[0];
                }
                echo '  <tr>';
BTW komme ich von C. foreach habe ich erst später in Java kennen gelernt. Da ich Java aber nie mochte (und auch nie für was brauchen konnte), habe ich sie mir nie angewohnt.
 
Zuletzt bearbeitet:
^^ Sowas ähnliches hatte ich gestern schon versucht, allerdings nicht den einen query anzupassen, sondern beide queries in die selbe Schleife reinzunehmen. Der Schleifenkopf ist ja der selbe bei meinen beiden ...

Sähe dann so aus:
PHP:
for ($wochentag = $wochenanfang; $wochentag <= $wochenende; $wochentag += 86400) {
    $time_table1 = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE taetprodid = '".$td[0]."';");
    $time_table2 = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE datum = '".$wochentag."';");
    $sum1 = mysqli_fetch_row($time_table1);
    $sum2 = mysqli_fetch_row($time_table2);
    $td[12] = $sum1[0];
    if (!$sum2[0]) {
        echo '    <td style="border:none"></td>';
    } else {
        echo '    <td>'.$sum[0].'</td>';
    }
}
Das Problem dabei ist allerdings die übergeordnete foreach-Schleife in der "alles" drinnensteckt. Dann kriege ich nämlich dadurch nach jedem einzelnen Datensatz eine Zeit-Zeile, und nicht erst ganz zum Schluss nach der Tabelle.
Code:
[COLOR=red]foreach ($row_collector as $taet_id => $teat) {            $td = array();
            $td[2] = $row_collector[$taet_id]['taet'];           
            [COLOR=red]foreach ($row_collector[$taet_id]['data'] as $prod_id => $prod) {                     $td[1] = $row_collector[$taet_id]['data'][$prod_id]['user'];
                $td[3] = $row_collector[$taet_id]['data'][$prod_id]['prod'];
                $td[4] = $row_collector[$taet_id]['data'][$prod_id]['desc'];
                $td[0] = $row_collector[$taet_id]['data'][$prod_id]['proj'];
                $user_id = "SELECT userid FROM projekte WHERE id = '".$td[0]."';";
                $res = mysqli_query($mysqli, $user_id);
                $row = mysqli_fetch_assoc($res);
                for ($j = 0; $j < count($name); $j++) {
                    if ($name[$j] == $row['userid']) {
                        $td[1] = $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+5] = $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
                    } else {
                        $td[$i+5] = ' ';
                    }
                }
                /**************/
                [COLOR=royalblue]for ($wochentag = $wochenanfang; $wochentag <= $wochenende; $wochentag += 86400) {
                    $time_table = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE taetprodid = '".$td[0]."';");
                    $sum = mysqli_fetch_row($time_table);
                    $td[12] = $sum[0];
                }                /**************/
                echo '  <tr>';   
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';               
                }
                echo '  </tr>';
            }
        }
        /**************/
        [COLOR=royalblue]echo '  <tr>';
        echo '    <td>∑</td>';
        echo '    <td style="border:none"></td>';
        echo '    <td style="border:none"></td>';
        echo '    <td style="border:none"></td>';
        echo '    <td style="border:none"></td>';
        for ($wochentag = $wochenanfang; $wochentag <= $wochenende; $wochentag += 86400) {
            $time_table = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE datum = '".$wochentag."';");
            $sum = mysqli_fetch_row($time_table);
            if (!$sum[0]) {
                echo '    <td style="border:none"></td>';
            } else {
                echo '    <td>'.$sum2[0].'</td>';
            }
        }
        echo '  </tr>';        /**************/
    }

[EDIT]
Ich glaube, jetzt checke ich langsam, was du meinst ...

So in die Richtung --> if (isset($_POST['einerDerDreiFilter'])) { auswerten2.php neu aufbauen* }
* damit der $row_collector mit den neuen (= weniger) Datensätzen angefüllt und somit die nun vorhanden Stunden neu zusammengezählt werden.

Aber auch das hatte ich schon probiert, hat gar nicht geklappt. :(
 
Zuletzt bearbeitet:
Wenn ich es so mache, dann nimmt er offenbar nur 7x den letzten Wert, also von SO, her:
PHP:
                /**************/
                for ($wochentag = $wochenanfang; $wochentag <= $wochenende; $wochentag += 86400) {
                    $time_table1 = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE taetprodid = '".$td[0]."';");
                    $sum1 = mysqli_fetch_row($time_table1);
                    $time_table2 = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE datum = '".$wochentag."';");
                    $sum2 = mysqli_fetch_row($time_table2);
                    $td[12] = $sum1[0];
                }
                /**************/
                echo '  <tr>';   
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';               
                }
                echo '  </tr>';
            }
        }
        /**************/
        echo '  <tr>';
        echo '    <td>∑</td>';
        echo '    <td style="border:none"></td>';
        echo '    <td style="border:none"></td>';
        echo '    <td style="border:none"></td>';
        echo '    <td style="border:none"></td>';
        for ($wochentag = $wochenanfang; $wochentag <= $wochenende; $wochentag += 86400) {
            //$time_table = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE datum = '".$wochentag."';");
            //$sum = mysqli_fetch_row($time_table);
            if (!$sum2[0]) {
                echo '    <td style="border:none"></td>';
            } else {
                echo '    <td>'.$sum2[0].'</td>';
            }
        }
        echo '  </tr>';
        /**************/
Unbenannt.PNG

[EDIT]
So käme ich dem ganzen am nächsten:
PHP:
                /**************/
                echo '  <tr>';
                echo '    <td>∑</td>';
                echo '    <td style="border:none"></td>';
                echo '    <td style="border:none"></td>';
                echo '    <td style="border:none"></td>';
                echo '    <td style="border:none"></td>';
                for ($wochentag = $wochenanfang; $wochentag <= $wochenende; $wochentag += 86400) {
                    $time_table1 = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE taetprodid = '".$td[0]."';");
                    $sum1 = mysqli_fetch_row($time_table1);
                    $time_table2 = mysqli_query($mysqli, "SELECT SUM(zeit) FROM zeiten WHERE datum = '".$wochentag."';");
                    $sum2 = mysqli_fetch_row($time_table2);
                    $td[12] = $sum1[0];
                    if (!$sum2[0]) {
                        echo '    <td style="border:none"></td>';
                    } else {
                        echo '    <td>'.$sum2[0].'</td>';
                    }
                }
                echo '  </tr>';
                /**************/
Aber dann habe ich die Berechnugsergebnisse über jedem Datensatz in der Anzahl der Datensätze ausgegeben, nicht nur 1x unter allen.
 
Zuletzt bearbeitet:
Die Schleife ist schon Unsinn, wenn man doch sowas schönes machen kann:
Code:
[URL="http://kathi/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&token=b8600cbff5d13036f20ce197026015b2"]SELECT[/URL] [URL="http://kathi/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fgroup-by-functions.html%23function_sum&token=b8600cbff5d13036f20ce197026015b2"]SUM[/URL]( zeit ) AS zeitsumme, datum
FROM zeiten
GROUP  BY datum

EDIT: Dann könnte man noch mit einem WHERE das eingrenzen, sodass nur Daten aus dieser Woche verwendet werden.
 
Zuletzt bearbeitet:
Zurück