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

  • Ersteller Ersteller boss3D
  • Erstellt am Erstellt am
^^ Vielen Dank, hat einiges klarer gemacht. :)

Jedenfalls bin ich jetzt soweit, dass ...
a) der ganze Login (inkl. Registrieren) einwandfrei funktioniert
b) das Durchschalten der Kalenderwochen in projektzeiterfassung.php funktioniert

Bei b) habe ich derzeit nur das Problem, dass er standardmäßig eine KW in 1970 anzeigt, und ich von da aus weiterschalten kann. Wie sollte ich das auf 2014 kriegen?

Darüber hinaus kapiere ich nicht, wieso ich in projektzeiterfassung.php auch meine Datenbankverbindung angeben muss, damit das bei mir funktioniert. Ich hätte das eigentlich schon in config.php gemacht und diese in index.php auch VOR projektzeiterfassung.php eingebunden, aber er erkennt's einfach nicht?!
PHP:
<?php    
    include('config.php');
    
    include('formular.php');
    
    if (isset($_SESSION['Reg'])) {
        unset($_SESSION['Reg']);
    }
    if (!isset($_SESSION['name'])) {
        include('login.php');
    } else {
        include('projektzeiterfassung.php');
    }    
?>
PHP:
<?php
    session_start();

    define('MYSQL_HOST', 'localhost');
    define('MYSQL_USER', 'root');
    define('MYSQL_PASS', 'root');
    define('DATABASE', 'projektzeiterfassung');
    
    $user = $_SESSION['name'];
    $userid = $_SESSION['id'];
    $rechte = $_SESSION['rechte'];
    
    $login = false;
    
    $kw = date('W');
    $jahr = date('Y');
    $monat = date('n');
    $wt = date('N');
    $tag = date('j') - ($wt - 1);
    $wochenanfang = mktime(12, 0, 0, $monat, $tag, $jahr);
    $wochenende = mktime(12, 0, 0, $monat, ($tag + 6), $jahr);
    
    $verbindung = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die ("Verbindung zur Datenbank konnte nicht hergestellt werden");
    mysql_select_db(DATABASE) or die ("Datenbank konnte nicht ausgewählt werden.");
?>
PHP:
<?php        
    $verbindung = mysql_connect('localhost', 'root', 'root') or die ("Verbindung zur Datenbank konnte nicht hergestellt werden");
    mysql_select_db('projektzeiterfassung') or die ("Datenbank konnte nicht ausgewählt werden.");

    if (isset($_POST['wa'])) {
        $wochenanfang = $_POST['wa'];
    }
    if (isset($_POST['we'])) { 
        $wochenende = $_POST['we'];
    }

    if (isset($_POST['prevWeek'])) {
        $wochenanfang -= 60 * 60 * 24 * 7;
        $wochenende   -= 60 * 60 * 24 * 7;
    }
    if (isset($_POST['nextWeek'])) {
        $wochenanfang += 60 * 60 * 24 * 7;
        $wochenende   += 60 * 60 * 24 * 7;
    }

    $kw = date('W', $wochenanfang);
    $jahr = date('Y', $wochenanfang);
    $monat = date('n', $wochenanfang);
    $tag = date('j', $wochenanfang);

    echo '<!doctype html>
            <html>
            <head>
            <meta charset="ISO-8859-1">
            <link rel="stylesheet" type="text/css" href="style.css">
            <title>Projektzeiterfassung</title>
            </head> 
            <body>
            <form action="index.php" method="post">';
    echo '    <link rel="stylesheet" type="text/css" href="style.css">';
    echo '    <br><h1>Projektzeiterfassung: '.$user.'</h1>';
    echo '    <table>';
    echo '  <tr>';
    echo '    <td colspan="10" 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>
                <th>Tätigkeit</th>
                <th>Produkt</th>
                <th>Beschreibung</th>
                <th width="150">MO <input name="mo" type="text" size="10" maxlength="10"></th>
                <th width="150">DI <input name="di" type="text" size="10" maxlength="10"></th>
                <th width="150">MI <input name="mi" type="text" size="10" maxlength="10"></th>
                <th width="150">DO <input name="do" type="text" size="10" maxlength="10"></th>
                <th width="150">FR <input name="fr" type="text" size="10" maxlength="10"></th>
                <th width="150">SA <input name="sa" type="text" size="10" maxlength="10"></th>
                <th width="150">SO <input name="so" type="text" size="10" maxlength="10"></th>
            </tr>';
    
    $taetigkeiten = array();
    $sql_t = "SELECT * FROM taetigkeiten;";
    $res_t = mysql_query($sql_t) or die ("Get Taetigkeiten failed.<br>".mysql_error());
    if (mysql_num_rows($res_t))
        while ($row_t = mysql_fetch_assoc($res_t)) {
            $taetigkeiten[count($taetigkeiten)] = $row_t;
        }

    $products = array();
    $sql_p = "SELECT * FROM produkte;";
    $res_p = mysql_query($sql_p) or die ("Get Produkte failed.<br>".mysql_error());
    if (mysql_num_rows($res_p))
        while ($row_p = mysql_fetch_assoc($res_p)) {
            $products[count($products)] = $row_p;
        }
      
    if( isset($_GET['add'])) {
        $add = $_GET['add']; 
        $add++;
    } elseif (!isset($_GET['rem'])) {
        $add = 1;
    }
    if ( isset($_GET['rem'])) { 
        $add = $_GET['rem']; 
        $add--;
    }

    for ($a = 1; $a <= $add; $a++) {
        echo '<tr><td><select name="taetigkeit'.$a.'">';
        foreach ($taetigkeiten as $taetigkeit) {
            echo '<option value="'.$taetigkeit['taetigkeit'].'">'.$taetigkeit['taetigkeit'].'</option>';
        }
        echo '</select></td>';

        echo '<td><select name="product'.$a.'">';
        foreach ($products as $product) {
            echo '<option value="'.$product['produkt'].'">'.$product['produkt'].'</option>';
        }
        echo '</select></td>';

        echo '<td><input name="beschreibung'.$a.'" type="text" size="50" maxlength="250"></td>';

        echo '<td><input name="montag'.$a.'" type="text" size="10" maxlength="5""></td>';
        echo '<td><input name="dienstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="mittwoch'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="donnerstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="freitag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="samstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="sonntag'.$a.'" type="text" size="10" maxlength="5"></td></tr>';
    } 
    echo '</table><br>';

    echo '<div class="submit"><button name="add" type="button" value="Zeile hinzufügen" onclick="window.location.href=\'projektzeiterfassung.php?add='.$add.'\';">Neue Eingabezeile hinzufügen</button> <button name="rem" type="button" value="Zeile entfernen" onclick="window.location.href=\'projektzeiterfassung.php?rem='.$add.'\';">Eingabezeile entfernen</button></div><br>';
    echo '<input type="hidden" name="add" value="'.$add.'">';

    echo '<div class="submit"><input type="submit" name="confirm" value="Bestätigen"> Schreibt Einträge in Datenbank ...</div>';
    echo '</form>';
    
    echo '<div class="submit"><br><br><br><form action="auswerten.php"><input type="submit" value="Bisherige Einträge in Datenbank anzeigen"> Eigene Einträge anzeigen ...</form>';
    if ($rechte == 0) {
        echo '<br><form action="auswerten2.php"><input type="submit" value="Einträge für folgenden Mitarbeiter anzeigen"> <input name="mitarbeiterdb" type="text" size="30" maxlength="30"></form></div>';

    } else {
        echo '</div>';
    }
    
    echo '</body>';
    echo '</html>';
?>
Meine SESSION Variablen aus config.php werden in projektzeiterfassung.php auch nicht erkannt. Muss ich die in allen Files angeben?

[EDIT]
Wenn ich das ganze Definitionszeugs in projektzeiterfassung.php am Anfang einfüge, dann sind alle warnings und Notices weg, und es wird auch bei einer KW in 2014 begonnen, von wo aus ich korrekt weiterschalten kann. Allerdings ist ja das nicht "Sinn der Sache"?! Ich meine, wozu habe ich dann jetzt config.php?
PHP:
<?php        
    session_start();

    $verbindung = mysql_connect('localhost', 'root', 'root') or die ("Verbindung zur Datenbank konnte nicht hergestellt werden");
    mysql_select_db('projektzeiterfassung') or die ("Datenbank konnte nicht ausgewählt werden.");
    
    $kw = date('W');
    $jahr = date('Y');
    $monat = date('n');
    $wt = date('N');
    $tag = date('j') - ($wt - 1);
    $wochenanfang = mktime(12, 0, 0, $monat, $tag, $jahr);
    $wochenende = mktime(12, 0, 0, $monat, ($tag + 6), $jahr);

    if (isset($_POST['wa'])) {
        $wochenanfang = $_POST['wa'];
    }
    if (isset($_POST['we'])) { 
        $wochenende = $_POST['we'];
    }

    if (isset($_POST['prevWeek'])) {
        $wochenanfang -= 60 * 60 * 24 * 7;
        $wochenende   -= 60 * 60 * 24 * 7;
    }
    if (isset($_POST['nextWeek'])) {
        $wochenanfang += 60 * 60 * 24 * 7;
        $wochenende   += 60 * 60 * 24 * 7;
    }
    
    $user = $_SESSION['name'];
    $rechte = $_SESSION['rechte'];

    $kw = date('W', $wochenanfang);
    $jahr = date('Y', $wochenanfang);
    $monat = date('n', $wochenanfang);
    $tag = date('j', $wochenanfang);

    echo '<!doctype html>
            <html>
            <head>
            <meta charset="ISO-8859-1">
            <link rel="stylesheet" type="text/css" href="style.css">
            <title>Projektzeiterfassung</title>
            </head> 
            <body>
            <form action="index.php" method="post">';
    echo '    <link rel="stylesheet" type="text/css" href="style.css">';
    echo '    <br><h1>Projektzeiterfassung: '.$user.'</h1>';
    echo '    <table>';
    echo '  <tr>';
    echo '    <td colspan="10" 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>
                <th>Tätigkeit</th>
                <th>Produkt</th>
                <th>Beschreibung</th>
                <th width="150">MO <input name="mo" type="text" size="10" maxlength="10"></th>
                <th width="150">DI <input name="di" type="text" size="10" maxlength="10"></th>
                <th width="150">MI <input name="mi" type="text" size="10" maxlength="10"></th>
                <th width="150">DO <input name="do" type="text" size="10" maxlength="10"></th>
                <th width="150">FR <input name="fr" type="text" size="10" maxlength="10"></th>
                <th width="150">SA <input name="sa" type="text" size="10" maxlength="10"></th>
                <th width="150">SO <input name="so" type="text" size="10" maxlength="10"></th>
            </tr>';
    
    $taetigkeiten = array();
    $sql_t = "SELECT * FROM taetigkeiten;";
    $res_t = mysql_query($sql_t) or die ("Get Taetigkeiten failed.<br>".mysql_error());
    if (mysql_num_rows($res_t))
        while ($row_t = mysql_fetch_assoc($res_t)) {
            $taetigkeiten[count($taetigkeiten)] = $row_t;
        }

    $products = array();
    $sql_p = "SELECT * FROM produkte;";
    $res_p = mysql_query($sql_p) or die ("Get Produkte failed.<br>".mysql_error());
    if (mysql_num_rows($res_p))
        while ($row_p = mysql_fetch_assoc($res_p)) {
            $products[count($products)] = $row_p;
        }
      
    if( isset($_GET['add'])) {
        $add = $_GET['add']; 
        $add++;
    } elseif (!isset($_GET['rem'])) {
        $add = 1;
    }
    if ( isset($_GET['rem'])) { 
        $add = $_GET['rem']; 
        $add--;
    }

    for ($a = 1; $a <= $add; $a++) {
        echo '<tr><td><select name="taetigkeit'.$a.'">';
        foreach ($taetigkeiten as $taetigkeit) {
            echo '<option value="'.$taetigkeit['taetigkeit'].'">'.$taetigkeit['taetigkeit'].'</option>';
        }
        echo '</select></td>';

        echo '<td><select name="product'.$a.'">';
        foreach ($products as $product) {
            echo '<option value="'.$product['produkt'].'">'.$product['produkt'].'</option>';
        }
        echo '</select></td>';

        echo '<td><input name="beschreibung'.$a.'" type="text" size="50" maxlength="250"></td>';

        echo '<td><input name="montag'.$a.'" type="text" size="10" maxlength="5""></td>';
        echo '<td><input name="dienstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="mittwoch'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="donnerstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="freitag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="samstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="sonntag'.$a.'" type="text" size="10" maxlength="5"></td></tr>';
    } 
    echo '</table><br>';

    echo '<div class="submit"><button name="add" type="button" value="Zeile hinzufügen" onclick="window.location.href=\'projektzeiterfassung.php?add='.$add.'\';">Neue Eingabezeile hinzufügen</button> <button name="rem" type="button" value="Zeile entfernen" onclick="window.location.href=\'projektzeiterfassung.php?rem='.$add.'\';">Eingabezeile entfernen</button></div><br>';
    echo '<input type="hidden" name="add" value="'.$add.'">';

    echo '<div class="submit"><input type="submit" name="confirm" value="Bestätigen"> Schreibt Einträge in Datenbank ...</div>';
    echo '</form>';
    
    echo '<div class="submit"><br><br><br><form action="auswerten.php"><input type="submit" value="Bisherige Einträge in Datenbank anzeigen"> Eigene Einträge anzeigen ...</form>';
    if ($rechte == 0) {
        echo '<br><form action="auswerten2.php"><input type="submit" value="Einträge für folgenden Mitarbeiter anzeigen"> <input name="mitarbeiterdb" type="text" size="30" maxlength="30"></form></div>';

    } else {
        echo '</div>';
    }
    
    echo '</body>';
    echo '</html>';
?>
Oh, ein Problem habe ich gerade noch entdeckt: Bei jedem Weiterschalten der KWs gilt das scheinbar als "Bestätigen" und es entstehen "leere" Einträge in der DB! Das darf natürlich nicht passieren!

Unbenannt.PNG

^^ Hm, ist schon klar: Die Buttons "Bestätigen", "<<" und ">>" sind alle in einer form enthalten, die index.php aufruft, in der wiederum formular.php inkludiert ist. Da wird bei jedem Button-Klick was in die DB geschrieben ohne zu prüfen, ob das jetzt vom "Bestätigen"-Button kommt. Da muss ich mir was schlaues überlegen ...

[EDIT2]
Wieder ein "workaround" ...
PHP:
if (isset($_POST['confirm'])) {
    $_SESSION['confirm'] = ($_POST['confirm']);
}
PHP:
if (isset($_POST['confirm'])) {
    include('formular.php');
}
Aber das sind halt alles keine "Ideallösungen"?!
 
Zuletzt bearbeitet:
Wenn er dir eine KW in 1970 Anzeigt ist das vermutlich die erste KW den der UNIX Timestamp gibt die Sekunden seit dem 01.01.1970 0Uhr an. Folglich steht der Funktion vermutlich kein Timestamp zur Verfügung (fehler im Code?) und daher beginnt die Ausgabe beim Timestamp "0" also in 1970 ;).
 
^^ Das habe ich schon gelöst. Es hat in projektzeiterfassung.php Code gefehlt, den ich in config.php stehen hatte, im Glauben, dass der durch das include in index.php eh sichtbar wäre. War aber scheinbar nicht so. Jetzt, wo der ganze Code in projektzeiterfassung.php steht, stimmt wieder alles.

Im Moment habe ich zwei Probleme:

1) Die userid wird ums Verrecken nicht erkannt. Es landet immer 0 in der DB.
(Wird hier in der Codemitte ermittelt -->)
PHP:
<?php
    session_start();
        
    $verbindung = mysql_connect("localhost", "root" , "root") or die ("Verbindung zur Datenbank konnte nicht hergestellt werden.");
    mysql_select_db ("projektzeiterfassung") or die ("Datenbank konnte nicht ausgewählt werden.");
    
    if (isset($_POST['btnReg'])) {
        $_SESSION['Reg'] = ($_POST['btnReg']);
    }
    echo '<!doctype html>';
    echo '<html><head><meta charset="ISO-8859-1">';
    echo '<link rel="stylesheet" type="text/css" href="style.css">';
    echo '<title>Projektzeiterfassung</title></head><body>';
    echo '<br><div class="submit"><form action="login.php" method="post">';
    echo '<br><h1>Projektzeiterfassung</h1>';
    if (!isset($_POST['btnReg'])) {    
        echo '<table><th>Login</th></table>';
        echo '<p>Ihr Username:</p>
                <input type="text" size="24" maxlength="50" name="username"><br>';
        echo '<p>Ihr Passwort:</p>
                <input type="password" size="24" maxlength="50" name="password"><br><br>';
        echo '    <input type="submit" name="btnLog" value="Einloggen"><br><br>
                <input type="submit" name="btnReg" value="Registrieren">';
        echo '</form></div><br>';
    }
            
    $salt = "#sf$!\"ä\"\$asd³s²a~§653 sa51d75qÖAa@üeX";
    
    if (isset($_POST['btnLog'])) {    
        $username = $_POST['username'];
        $erg = mysql_query("SELECT * FROM user WHERE name='".$username."'");
        $row = mysql_fetch_object($erg);
        $password = hash('sha512', ($_POST['password']).$salt);
        if ($row->passwort == $password) {
            $_SESSION['name'] = $username;
            $_SESSION['id'] = $row->id;
            $_SESSION['rechte'] = $row->rechte;
            header('Location: http://localhost/db/projektzeiterfassung.php');
        } else {            
            echo '<br><div class="submit">Benutzername und/oder Passwort waren falsch oder nicht registriert.<br><br></div>';
        }
    } elseif (isset($_POST['btnReg'])) {
        echo '<table><th>Registrierung</th></table>
                <p>Bitte geben Sie einen Usernamen ein:</p>
                    <input type="text" size="24" maxlength="50" name="username"><br>
                <p>Bitte geben Sie ein Passwort ein:</p>
                    <input type="password" size="24" maxlength="50" name="passwort"><br>
                <p>Passwort wiederholen:</p>
                    <input type="password" size="24" maxlength="50" name="passwort2"><br><br>
                <input type="submit" name="btnReg" value="Registrieren">
            </form></div>';
        $username = $_POST['username'];
        if (isset($_POST["passwort"]) and $_POST["passwort"] != "" and isset($_POST["passwort2"]) and $_POST["passwort2"] != "") {    
            $passwort = $_POST['passwort'];
            $passwort2 = $_POST['passwort2'];
            if ($passwort != $passwort2 or $username == "" or $passwort == "") {    
                echo '<br><div class="submit"><form action="login.php">Eingabefehler. Bitte alle Felder korrekt ausfüllen.<br><br><input type="submit" value="Zurück"></form></div>';
                exit;
            } else {
                @$passwort = hash('sha512', ($passwort).$salt);
                if ($username == "test") {
                    $rechte = 0;
                } else {
                    $rechte = 1;
                }

                $id = mysql_query("SELECT * FROM user WHERE name='".$username."'");

                if (mysql_num_rows($id)) {
                    echo '<br><div class="submit">Benutzername schon vorhanden.<br><br></div>';
                } else {
                    $eintragen = mysql_query("INSERT INTO user (name,  passwort, rechte) VALUES ('$username', '$passwort', '$rechte')");
                    if ($eintragen == true) {                
                         echo '<br><div class="submit"><form  action="login.php">Benutzer <b>'.$username.'</b> wurde  erstellt.<br><br><input type="submit"  value="Login"></form></div>';  
                    } else {        
                         echo '<br><div class="submit"><form  action="index.php">Fehler beim Speichern des  Benutzernamens.<br><br><input type="submit"  value="Zurück"></form></div>';
                    }
                }
            }
        }
    }
    
    echo '</body>
        </html>';
?>

2) Ich kriege immer noch keine Ausgabe, und in auswerten.php funktioniert auch das Durchschalten der KWs noch nicht. :(
PHP:
<?php
    session_start();
    
    $kw = date('W');  
    $jahr = date('Y');
    $monat = date('m');
    $wt = date('N');  
    $tag = date('j') - ($wt - 1);  
    $wochenanfang = mktime(12, 0, 0, $monat, $tag, $jahr);  
    $wochenende = mktime(12, 0, 0, $monat, ($tag + 6), $jahr);  

    $db_erg = mysql_query("SELECT 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 z.userid = '".$userid."' AND u.id = z.userid AND pr.id = z.taetprodid AND pr.taetigkeit = t.id AND pr.produkt = pr.id ORDER BY z.datum ASC;");
    if (!$db_erg) {
        die ('Ungültige Abfrage: '.mysql_error());
    }
    
    echo '<link rel="stylesheet" type="text/css" href="style.css">';
    echo '<br><h1>Projektzeiterfassung: '.$user.'</h1>';
    echo '<form action="index.php" method="post">';
    echo '<table>';
    echo '  <tr>';
    echo '    <td colspan="10" 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>
                <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>
            </tr>';
    $row_collector = array();
    if (mysql_num_rows($db_erg)) {
        while($row = mysql_fetch_assoc($res)) {
            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']]['time'] = array();
        }
        $row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['Datum']] = $row['Zeit'];
        }
        foreach ($row_collector as $taet_id => $teat) {
            $td = array();
            $td[0] = $row_collector[$taet_id]['taet'];
            foreach ($row_collector[$taet_id]['data'] as $prod_id => $prod) {
                $td[1] = $row_collector[$taet_id]['data'][$prod_id]['prod'];
                $td[2] = $row_collector[$taet_id]['data'][$prod_id]['desc'];
                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+3] = $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
                    } else {
                        $td[$i+3] = ' ';
                    }
                }
                echo '  <tr>';
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';
                }
                echo '  </tr>';
            }
        }
    } else {
        echo '  <tr><td colspan="10" style="text-align:center">Keine Einträge gefunden.</td></tr>';
    }  
    echo '</table></form>';

    echo '<br><div class="submit"><form><input type="button" value="Einträge editieren" onClick="history.go(-1);return true;"> Zurück zur Eingabe ...</form></div>';
    echo '<form action="export.php" method="post" name="export_excel"><div class="submit"><div class="controls"><button type="submit" id="export" name="export" class="btn btn-primary button-loading" data-loading-text="Loading...">Exportiere MySQL Daten zu Excel File</button></div></div></form>';
?>

[EDIT]
Der Code in auswerten.php ist bis auf den Ausgabeteil völlig ident zu jenem in projektzeiterfassung.php. Gerade deswegen verstehe ich das überhaupt nicht, wieso das KW-Weiterschalten in auswerten.php nicht funktioniert.

projektzeiterfassung.php:
PHP:
<?php        
    session_start();

    $verbindung = mysql_connect('localhost', 'root', 'root') or die ("Verbindung zur Datenbank konnte nicht hergestellt werden");
    mysql_select_db('projektzeiterfassung') or die ("Datenbank konnte nicht ausgewählt werden.");
    
    $kw = date('W');
    $jahr = date('Y');
    $monat = date('n');
    $wt = date('N');
    $tag = date('j') - ($wt - 1);
    $wochenanfang = mktime(12, 0, 0, $monat, $tag, $jahr);
    $wochenende = mktime(12, 0, 0, $monat, ($tag + 6), $jahr);

    if (isset($_POST['wa'])) {
        $wochenanfang = $_POST['wa'];
    }
    if (isset($_POST['we'])) { 
        $wochenende = $_POST['we'];
    }

    if (isset($_POST['prevWeek'])) {
        $wochenanfang -= 60 * 60 * 24 * 7;
        $wochenende   -= 60 * 60 * 24 * 7;
    }
    if (isset($_POST['nextWeek'])) {
        $wochenanfang += 60 * 60 * 24 * 7;
        $wochenende   += 60 * 60 * 24 * 7;
    }
    
    $user = $_SESSION['name']; 
    $rechte = $_SESSION['rechte']; 

    $kw = date('W', $wochenanfang);
    $jahr = date('Y', $wochenanfang);
    $monat = date('n', $wochenanfang);
    $tag = date('j', $wochenanfang);

    echo '<!doctype html>
            <html>
            <head>
            <meta charset="ISO-8859-1">
            <link rel="stylesheet" type="text/css" href="style.css">
            <title>Projektzeiterfassung</title>
            </head> 
            <body>
            <form action="index.php" method="post">';
    echo '    <link rel="stylesheet" type="text/css" href="style.css">';
    echo '    <br><h1>Projektzeiterfassung: '.$user.'</h1>';
    echo '    <table>';
    echo '  <tr>';
    echo '    <td colspan="10" 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>
                <th>Tätigkeit</th>
                <th>Produkt</th>
                <th>Beschreibung</th>
                <th width="150">MO <input name="mo" type="text" size="10" maxlength="10"></th>
                <th width="150">DI <input name="di" type="text" size="10" maxlength="10"></th>
                <th width="150">MI <input name="mi" type="text" size="10" maxlength="10"></th>
                <th width="150">DO <input name="do" type="text" size="10" maxlength="10"></th>
                <th width="150">FR <input name="fr" type="text" size="10" maxlength="10"></th>
                <th width="150">SA <input name="sa" type="text" size="10" maxlength="10"></th>
                <th width="150">SO <input name="so" type="text" size="10" maxlength="10"></th>
            </tr>';
    
    $taetigkeiten = array();
    $sql_t = "SELECT * FROM taetigkeiten;";
    $res_t = mysql_query($sql_t) or die ("Get Taetigkeiten failed.<br>".mysql_error());
    if (mysql_num_rows($res_t))
        while ($row_t = mysql_fetch_assoc($res_t)) {
            $taetigkeiten[count($taetigkeiten)] = $row_t;
        }

    $products = array();
    $sql_p = "SELECT * FROM produkte;";
    $res_p = mysql_query($sql_p) or die ("Get Produkte failed.<br>".mysql_error());
    if (mysql_num_rows($res_p))
        while ($row_p = mysql_fetch_assoc($res_p)) {
            $products[count($products)] = $row_p;
        }
      
    if( isset($_GET['add'])) {
        $add = $_GET['add']; 
        $add++;
    } elseif (!isset($_GET['rem'])) {
        $add = 1;
    }
    if ( isset($_GET['rem'])) { 
        $add = $_GET['rem']; 
        $add--;
    }

    for ($a = 1; $a <= $add; $a++) {
        echo '<tr><td><select name="taetigkeit'.$a.'">';
        foreach ($taetigkeiten as $taetigkeit) {
            echo '<option value="'.$taetigkeit['taetigkeit'].'">'.$taetigkeit['taetigkeit'].'</option>';
        }
        echo '</select></td>';

        echo '<td><select name="product'.$a.'">';
        foreach ($products as $product) {
            echo '<option value="'.$product['produkt'].'">'.$product['produkt'].'</option>';
        }
        echo '</select></td>';

        echo '<td><input name="beschreibung'.$a.'" type="text" size="50" maxlength="250"></td>';

        echo '<td><input name="montag'.$a.'" type="text" size="10" maxlength="5""></td>';
        echo '<td><input name="dienstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="mittwoch'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="donnerstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="freitag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="samstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="sonntag'.$a.'" type="text" size="10" maxlength="5"></td></tr>';
    } 
    echo '</table><br>';

    echo '<div class="submit"><button name="add" type="button" value="Zeile hinzufügen" onclick="window.location.href=\'projektzeiterfassung.php?add='.$add.'\';">Neue Eingabezeile hinzufügen</button> <button name="rem" type="button" value="Zeile entfernen" onclick="window.location.href=\'projektzeiterfassung.php?rem='.$add.'\';">Eingabezeile entfernen</button></div><br>';
    echo '<input type="hidden" name="add" value="'.$add.'">';

    echo '<div class="submit"><input type="submit" name="confirm" value="Bestätigen"> Schreibt Einträge in Datenbank ...</div>';
    echo '</form>';
    
    echo '<div class="submit"><br><br><br><form action="auswerten.php"><input type="submit" value="Bisherige Einträge in Datenbank anzeigen"> Eigene Einträge anzeigen ...</form>';
    if ($rechte == 0) {
        echo '<br><form action="auswerten2.php"><input type="submit" value="Einträge für folgenden Mitarbeiter anzeigen"> <input name="mitarbeiterdb" type="text" size="30" maxlength="30"></form></div>';

    } else {
        echo '</div>';
    }
    
    if (isset($_POST['confirm'])) {
        $_SESSION['confirm'] = ($_POST['confirm']);
    }
    
    echo '</body>';
    echo '</html>';
?>
auswerten.php:
PHP:
<?php
    session_start();
    
    $kw = date('W');
    $jahr = date('Y');
    $monat = date('n');
    $wt = date('N');
    $tag = date('j') - ($wt - 1);
    $wochenanfang = mktime(12, 0, 0, $monat, $tag, $jahr);
    $wochenende = mktime(12, 0, 0, $monat, ($tag + 6), $jahr);

    if (isset($_POST['wa'])) {
        $wochenanfang = $_POST['wa'];
    }
    if (isset($_POST['we'])) { 
        $wochenende = $_POST['we'];
    }

    if (isset($_POST['prevWeek'])) {
        $wochenanfang -= 60 * 60 * 24 * 7;
        $wochenende   -= 60 * 60 * 24 * 7;
    }
    if (isset($_POST['nextWeek'])) {
        $wochenanfang += 60 * 60 * 24 * 7;
        $wochenende   += 60 * 60 * 24 * 7;
    }
    
    $user = $_SESSION['name']; 

    $kw = date('W', $wochenanfang);
    $jahr = date('Y', $wochenanfang);
    $monat = date('n', $wochenanfang);
    $tag = date('j', $wochenanfang);

    echo '<!doctype html>
            <html>
            <head>
            <meta charset="ISO-8859-1">
            <link rel="stylesheet" type="text/css" href="style.css">
            <title>Projektzeiterfassung</title>
            </head> 
            <body>
            <form action="auswerten.php" method="post">';
    echo '    <link rel="stylesheet" type="text/css" href="style.css">';
    echo '    <br><h1>Projektzeiterfassung: '.$user.'</h1>';
    echo '    <table>';
    echo '  <tr>';
    echo '    <td colspan="10" 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>
                <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>
            </tr>';
    $row_collector = array();
    if (mysql_num_rows($db_erg)) {
        while($row = mysql_fetch_assoc($res)) {
            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']]['time'] = array();
        }
        $row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['Datum']] = $row['Zeit'];
        }
        foreach ($row_collector as $taet_id => $teat) {
            $td = array();
            $td[0] = $row_collector[$taet_id]['taet'];
            foreach ($row_collector[$taet_id]['data'] as $prod_id => $prod) {
                $td[1] = $row_collector[$taet_id]['data'][$prod_id]['prod'];
                $td[2] = $row_collector[$taet_id]['data'][$prod_id]['desc'];
                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+3] = $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
                    } else {
                        $td[$i+3] = ' ';
                    }
                }
                echo '  <tr>';
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';
                }
                echo '  </tr>';
            }
        }
    } else {
        echo '  <tr><td colspan="10" style="text-align:center">Keine Einträge gefunden.</td></tr>';
    }  
    echo '</table></form>';

    echo '<br><div class="submit"><form><input type="button" value="Einträge editieren" onClick="history.go(-1);return true;"> Zurück zur Eingabe ...</form></div>';
    echo '<form action="export.php" method="post" name="export_excel"><div class="submit"><div class="controls"><button type="submit" id="export" name="export" class="btn btn-primary button-loading" data-loading-text="Loading...">Exportiere MySQL Daten zu Excel File</button></div></div></form>';
?>

[EDIT2]
Fragt mich bitte nicht, was jetzt anders ist, aber ich hab's gerade hinbekommen, dass das KW-Durchschalten jetzt auch in auswerten.php funktioniert. ;)
PHP:
 <?php
    session_start();
    
    $verbindung = mysql_connect('localhost', 'root', 'root') or die ("Verbindung zur Datenbank konnte nicht hergestellt werden");
    mysql_select_db('projektzeiterfassung') or die ("Datenbank konnte nicht ausgewählt werden.");
    
    $kw = date('W');
    $jahr = date('Y');
    $monat = date('n');
    $wt = date('N');
    $tag = date('j') - ($wt - 1);
    $wochenanfang = mktime(12, 0, 0, $monat, $tag, $jahr);
    $wochenende = mktime(12, 0, 0, $monat, ($tag + 6), $jahr);

    if (isset($_POST['wa'])) {
        $wochenanfang = $_POST['wa'];
    }
    if (isset($_POST['we'])) { 
        $wochenende = $_POST['we'];
    }

    if (isset($_POST['prevWeek'])) {
        $wochenanfang -= 60 * 60 * 24 * 7;
        $wochenende   -= 60 * 60 * 24 * 7;
    }
    if (isset($_POST['nextWeek'])) {
        $wochenanfang += 60 * 60 * 24 * 7;
        $wochenende   += 60 * 60 * 24 * 7;
    }
    
    $user = $_SESSION['name'];
    $userid = $_SESSION['id'];    

    $kw = date('W', $wochenanfang);
    $jahr = date('Y', $wochenanfang);
    $monat = date('n', $wochenanfang);
    $tag = date('j', $wochenanfang);
    
    $db_erg = mysql_query("SELECT 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 z.userid = '".$userid."' AND u.id = z.userid AND pr.id = z.taetprodid AND pr.taetigkeit = t.id AND pr.produkt = pr.id ORDER BY z.datum ASC;");
    if (!$db_erg) {
        die ('Ungültige Abfrage: '.mysql_error());
    }

    echo '<!doctype html>
            <html>
            <head>
            <meta charset="ISO-8859-1">
            <link rel="stylesheet" type="text/css" href="style.css">
            <title>Projektzeiterfassung</title>
            </head> 
            <body>
            <form action="auswerten.php" method="post">';
    echo '    <link rel="stylesheet" type="text/css" href="style.css">';
    echo '    <br><h1>Projektzeiterfassung: '.$user.'</h1>';
    echo '    <table>';
    echo '  <tr>';
    echo '    <td colspan="10" 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>
                <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>
            </tr>';
    $row_collector = array();
    if (mysql_num_rows($db_erg)) {
        while($row = mysql_fetch_assoc($res)) {
            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']]['time'] = array();
        }
        $row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['Datum']] = $row['Zeit'];
        }
        foreach ($row_collector as $taet_id => $teat) {
            $td = array();
            $td[0] = $row_collector[$taet_id]['taet'];
            foreach ($row_collector[$taet_id]['data'] as $prod_id => $prod) {
                $td[1] = $row_collector[$taet_id]['data'][$prod_id]['prod'];
                $td[2] = $row_collector[$taet_id]['data'][$prod_id]['desc'];
                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+3] = $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
                    } else {
                        $td[$i+3] = ' ';
                    }
                }
                echo '  <tr>';
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';
                }
                echo '  </tr>';
            }
        }
    } else {
        echo '  <tr><td colspan="10" style="text-align:center">Keine Einträge gefunden.</td></tr>';
    }  
    echo '</table></form>';

    echo '<br><div class="submit"><form><input type="button" value="Einträge editieren" onClick="history.go(-1);return true;"> Zurück zur Eingabe ...</form></div><br>';
    echo '<form action="export.php" method="post" name="export_excel"><div class="submit"><div class="controls"><button type="submit" id="export" name="export" class="btn btn-primary button-loading" data-loading-text="Loading...">Exportiere MySQL Daten zu Excel File</button></div></div></form>';
?>
Damit bleibt vorerst wirklich nur noch das Rätsel zu lösen, warum ich keine DB-Einträge ausgegeben kriege ... :huh:
 
Zuletzt bearbeitet:
@ DarkMo
Kann es sein, dass ich deswegen keine Ausgabe kriege, weil dein "Ausgabe-Code" nicht exakt zu meiner DB passt?

Hier dein Code:
PHP:
$row_collector = array();
  if(mysql_num_rows($res)) {
    while($row = mysql_fetch_assoc($res)) {
      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']]['time'] = array();
      }
      $row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['Datum']] = $row['Zeit'];
    }
    foreach($row_collector as $taet_id => $teat) {
      $td = array();
      $td[0] = $row_collector[$taet_id]['taet'];
      foreach($row_collector[$taet_id]['data'] as $prod_id => $prod) {
        $td[1] = $row_collector[$taet_id]['data'][$prod_id]['prod'];
        $td[2] = $row_collector[$taet_id]['data'][$prod_id]['desc'];
        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+3] = $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
          else
            $td[$i+3] = ' ';
        }
        echo '  <tr>';
        for($i = 0; $i < count($td); $i++)
          echo '    <td>'.$td[$i].'</td>';
        echo '  </tr>';
      }
    }
  } else {
    echo '  <tr><td colspan="10" style="text-align:center">Keine Einträge gefunden.</td></tr>';
  }
Hier ist mein query:
PHP:
$db_erg = mysql_query("SELECT 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 z.userid = '".$userid."' AND u.id = z.userid AND pr.id = z.taetprodid AND pr.taetigkeit = t.id AND pr.produkt = pr.id ORDER BY z.datum ASC;");
Und so habe ich jetzt mal versucht, meinen "Ausgabe-Code" anzupassen, kriege aber immer noch keine Ausgabe:
PHP:
$row_collector = array();
    if (mysql_num_rows($db_erg)) {
        while ($row = mysql_fetch_assoc($db_erg)) {
            if (!isset($row_collector[$row['t.id']])) {
                $row_collector[$row['t.id']] = array();
                $row_collector[$row['t.id']]['taet'] = $row['taetigkeit'];
                $row_collector[$row['t.id']]['data'] = array();
            }
            if (!isset($row_collector[$row['t.id']]['data'][$row['p.id']])) {
                $row_collector[$row['t.id']]['data'][$row['p.id']] = array();
                $row_collector[$row['t.id']]['data'][$row['p.id']]['prod'] = $row['produkt'];
                $row_collector[$row['t.id']]['data'][$row['p.id']]['desc'] = $row['beschreibung'];
                $row_collector[$row['t.id']]['data'][$row['p.id']]['user'] = $row['user'];
                $row_collector[$row['t.id']]['data'][$row['p.id']]['time'] = array();
            }
            $row_collector[$row['t.id']]['data'][$row['p.id']]['time'][$row['datum']] = $row['zeit'];
        }
        foreach ($row_collector as $taet_id => $teat) {
            $td = array();
            $td[0] = $row_collector[$taet_id]['taet'];
            foreach ($row_collector[$taet_id]['data'] as $prod_id => $prod) {
                $td[1] = $row_collector[$taet_id]['data'][$prod_id]['prod'];
                $td[2] = $row_collector[$taet_id]['data'][$prod_id]['desc'];
                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+3] = $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
                    } else {
                        $td[$i+3] = ' ';
                    }
                }
                echo '  <tr>';
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';
                }
                echo '  </tr>';
            }
        }
    } else {
        echo '  <tr><td colspan="10" style="text-align:center">Keine Einträge gefunden.</td></tr>';
    }
In der DB habe ich in zeiten bei "datum" jetzt wieder VARCHAR drinnen, am Rande bemerkt. Könnte es daran auch noch scheitern? Ich weiß sonst echt nichts mehr ... :huh:

Unbenannt.PNG Unbenannt.PNG

[EDIT]
Vielleicht liegt's doch auch irgendwie an der DB?! Ich habe jetzt mal testweise diesen Mini-Code ausführen lassen, aber er liefert ebenfalls keine Ausgabe, fast so als wäre die im Browser angezeigte Seite "unveränderbar". Da rührt sich überhaupt gar nichts, abgesehen davon, dass man die KWs durchschalten kann.
PHP:
mysql_select_db('projektzeiterfassung', $verbindung); 
$rs = mysql_query("SELECT * FROM projekte WHERE id=154"); 
while ($zeile = mysql_fetch_array($rs)) {
    echo $zeile["name"];
}
[EDIT2]
Puh, nach stundenlangem Suchen: Ich habe den Fehler, oder besser gesagt die Ursache, gefunden ...

Das query ...
PHP:
$db_erg = mysql_query("SELECT 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 z.userid = '".$userid."' AND u.id = z.userid AND pr.id = z.taetprodid AND pr.taetigkeit = t.id AND pr.produkt = pr.id ORDER BY z.datum ASC");
... macht ganz offenbar nicht, was es soll!

Wenn ich es testweise durch folgendes stark vereinfachte ersetze ...
PHP:
$db_erg = mysql_query("SELECT taetigkeit, produkt, beschreibung FROM projekte");
..., dann kriege ich sofort das hier:

Unbenannt.PNG

^^ Schaut zwar jetzt auf den ersten Blick nicht toll aus, aber es zeigt, dass DarkMo's Code stimmen muss und eine Ausgabe liefern würde. Lediglich die ganzen Array-Indexe passen halt nicht, aber da habe ich noch K. A., wie ich die sonst benennen soll.

Jedenfalls gilt es jetzt, das query zu richten und die Array Indexe anzupassen. DANN müsste es endlich mit der Ausgabe klappen ...
 
Zuletzt bearbeitet:
hui, ihr schreibt zuviel, wenn ich auf arbeit abhäng ^^ dann mal wieder stück für stück...

erste anmerkung:
es mag zwar klappen, aber sowas is für mich unschöner code:
PHP:
    $user = $_SESSION['name'];
    $userid = $_SESSION['id'];
    $rechte = $_SESSION['rechte'];
schreib da eher immer sowas: if isset user = session else user = 0 bla. ah wo ichs grad seh: "ganz" anders...
PHP:
    $user = "";
    $userid = 0;   // id's fangen immer mit 1 an
    $rechte = -1;   /wir haben kein recht mit dem wert -1

    $login = false;

    if(isset($_SESSION['name']) {
      $user = $_SESSION['name'];
      $userid = $_SESSION['id'];
      $rechte = $_SESSION['rechte'];
    
      $login = true;
    }
zuerst defaultwerte vergeben und login auf false. dann checken, ob unsere session besteht (ist ein wert gesezt, sind sie alle gesezt ^^). wenn sie besteht, die werte übernehmen und login auf true. weil... wenn wir ne session haben, dann ist er ja auch eingeloggt. lässt man das login dingen weg, dann muss er sich bei jeden seitenreload neu einloggen ><

was der 3. code darstellt... projektzeiterfassung? weil da die button-abfragen mit drin sind (die ich eher formular.php (also nach meiner bezeichnung) zuordne ^^). kann ich bis hierhin erstmal nix weiter zu sagen.

^^ Hm, ist schon klar: Die Buttons "Bestätigen", "<<" und ">>" sind alle in einer form enthalten, die index.php aufruft, in der wiederum formular.php inkludiert ist. Da wird bei jedem Button-Klick was in die DB geschrieben ohne zu prüfen, ob das jetzt vom "Bestätigen"-Button kommt. Da muss ich mir was schlaues überlegen ...
das schlaue ist: check die button namen! nicht einfach stur bei ner gesendeten form alles speichern ^^ wenn der speichern-button (wie auch immer der interne namen davon is) nich gedrückt wurde, wird da garnix gemacht ;) ach, und dass er leeren krempel speichert zeugt vom nächsten prob ^^ da fehlt scheinbar der check, ob alle nötigen daten eingetragen wurden :) hier fehlt mir wieder der code. auch für dein problem mit dem "er kennt die daten nicht (KW, sql...).

meine vermutung: beim login rufst du die projekt zeiterfassung immernoch über diesen header aufruf an. raus damit. der "fluss" durchs script ist so (frisch aufgerufen, uneingelogt:
-> index.php
- die config.php wird durchgeackert, sql verbindung aufgebaut, sonstiger krams vorbereitet (default werte von sonstewas)
-> session besteht nicht, login bleibt auf false
- die formular.php wird bemüht, aber da frischer aufruf, laufen alle if's ins leere und quasi geschieht hier nix. an den von config.php gebastelten defaults wird nix gerüttelt
- nun muss sich unser script entscheiden, ob login.php oder prj-zeiterf.php. da die variable login false ist, gehts ab nach login. ein gesetzter button namens btnRegForm is nicht vorhanden -> das login formular wird gebaut
- dann gehts wieder zur index.php und die abarbeitung des scripts endet quasi

nun sitzen wir vor unserer gebauten seite mit dem loginformular.
variante A: wir entscheiden uns, uns zu registrieren, drücken also diesen knopf (btnRegForm). jetzt rödelt der server also von neuem los:
-> index.php
- die config.php wird durchgeackert, sql verbindung aufgebaut, sonstiger krams vorbereitet (default werte von sonstewas)
-> session besteht nicht, login bleibt auf false
- die formular.php wird bemüht, kein frischer aufruf, dennoch nix, was uns hier dazu veranlasst, was zu tun
- nun muss sich unser script entscheiden, ob login.php oder prj-zeiterf.php. da die variable login false ist, gehts ab nach login. ein gesetzter button namens btnRegForm ist vorhanden -> das registrier formular wird gebaut
- dann gehts wieder zur index.php und die abarbeitung des scripts endet quasi
hat sich an sich nur das fette geändert. wir sitzen jetzt also vorm registrier-formular, tippeln unsere daten ein und schwupps, drücken btnReg. und wieder von vorn... (ich geh jetzt mal davon aus, dass man nicht automatisch eingeloggt wird, wenn man sich gereggt hat):
-> index.php
- die config.php wird durchgeackert, sql verbindung aufgebaut, sonstiger krams vorbereitet (default werte von sonstewas)
-> session besteht nicht, login bleibt auf false
- die formular.php wird bemüht, diesmal springt ein if an! btnReg wurde gedrückt. also wird alles geprüft und gespeichert, der kerl ist registriert, der user in der db angelegt
- nun muss sich unser script entscheiden, ob login.php oder prj-zeiterf.php. da die variable login auch hier noch false ist, gehts ab nach login. ein gesetzter button namens btnRegForm is diesmal wieder nicht vorhanden -> das login formular wird gebaut
- dann gehts wieder zur index.php und die abarbeitung des scripts endet quasi
so, zurück beim login screen, diesmal tipeln wir unsere eben erstellten daten ein, und drücken btnLog...
-> index.php
- die config.php wird durchgeackert, sql verbindung aufgebaut, sonstiger krams vorbereitet (default werte von sonstewas)
-> session besteht nicht, login bleibt auf false
- die formular.php wird bemüht, btnLog gedrückt! aus den federn, arbeit ^^ alles wird geprüft und für richtig befunden, die session wird befüllt und login auf true gesetzt.
- nun muss sich unser script entscheiden, ob login.php oder prj-zeiterf.php. nun endlich ist die variable login true, ab nach prj-zeiterf.php. -> unsere tabelle mit all dem krams wird gebaut
- dann gehts wieder zur index.php und die abarbeitung des scripts endet quasi
tadaaa. nun drücken wir meinetwegen auf "<<" und zack, es geht schon wieder von vorne los *ächtz*...
-> index.php
- die config.php wird durchgeackert, sql verbindung aufgebaut, sonstiger krams vorbereitet (default werte von sonstewas)
-> eine session besteht!, login wird auf true gesetzt
- die formular.php wird bemüht, der prevWeek button wurde hart gedrückt, wir ändern die wochen-timestamp variablen und berchnen den anderen käse neu
- nun muss sich unser script entscheiden, ob login.php oder prj-zeiterf.php. die variable login ist true, ab gehts nach prj-zeiterf.php -> wieder wird unsere tabelle gebaut, nur diesmal eben mit den daten letzter woche
- dann gehts wieder zur index.php und die abarbeitung des scripts endet quasi

und so weiter und so fort... wenn du hier jetzt bei login einfach manuel die prj-zeiterf.php aufrufst, dann wird keine config bemüht, kein formular.php behandelt irgendwas... ^^



weiter gehts, post #403... ich hab dir doch die richtige reihenfolge für die formulare gegeben, wieso is das scho wieder so fürn huf >< so solls aussehn (kurzform):
PHP:
if (!isset($_POST['btnReg'])) {
  // login form bauen
} else {
  // registrier form bauen
}
es nutzt nix, wenn die reggen form gebaut wird und dann gleich zeuch gespeichert wird, ohne das man was eingeben konnte ;)

gut, mit dem problem meinst du das hier?
PHP:
    if (isset($_POST['btnLog'])) {    
        $username = $_POST['username'];
        $erg = mysql_query("SELECT * FROM user WHERE name='".$username."'");
        $row = mysql_fetch_object($erg);
        $password = hash('sha512', ($_POST['password']).$salt);
        if ($row->passwort == $password) {
            $_SESSION['name'] = $username;
            $_SESSION['id'] = $row->id;
            $_SESSION['rechte'] = $row->rechte;
            header('Location: http://localhost/db/projektzeiterfassung.php');
        } else {            
            echo '<br><div class="submit">Benutzername und/oder Passwort waren falsch oder nicht registriert.<br><br></div>';
        }
also das $_SESSION['id'] = $row->id; 0 liefert? achne, du meintest eher, dass 0 in der db landet... also wohl eher beim reggen... aber ich will erst nochmal kurz hier bleiben. du fragst die daten aus der db ab und vergleichst dann das pw. das könnte vllt zu sicherheitsproblemen führen, kA. ich fänds jedenfalls sinniger, das pw gleich in der sql anfrage mit unterzubringen. also where user = user and pw=pw. dann wird dir garnich erst zeugs aus der db gesendet, wass nen hacker (wie auch immer, die sind ja leider einfallsreich xD) abgreifen könnte ^^ gehen tuts so auch, wie du es hast. aber wie gesagt, ich bin kein hacker und kenn die möglichkeiten nich. ich trau den pfeifen lieber zuviel zu wie zu wenig :ugly:

so, zurück zum "er trägt immer 0 als id in die db ein". ich vermute das reggen und daher diese zeile:
$eintragen = mysql_query("INSERT INTO user (name, passwort, rechte) VALUES ('$username', '$passwort', '$rechte')");
wenn er hier als id immer 0 einträgt - fehlt die angabe autoincrement? check mal plz die spalten-einstellungen deiner user-id spalte. ansonsten wüsst ich jetz auch ned weiter auf die schnelle.

dann zu auswerten php: hier wieder vermutlich das selbe - wie rufst du die auf? in deiner vorhin geposteten index.php steht davon garnix ^^ also scheinst du die wieder "händisch" aufzurufen und das nicht über die index.php zu regeln -> du musst wieder den code aus index da rein kopieren, damit überhaupt was klappt. btw: wieso trennst du ausgabe und eingabe eigentlich? versteh ich immernoch nich. es ist eine tabelle, wieso nich auch als eins behandeln (siehe mein bsp-code).



post #404:
@ DarkMo
Kann es sein, dass ich deswegen keine Ausgabe kriege, weil dein "Ausgabe-Code" nicht exakt zu meiner DB passt?
das kann durchaus sein. was heißt, der code - die sql abfrage. die ist ja auf meine db gemünzt und ich hab ja keinen blassen, was du so als spaltennamen genommen hast - ob du überhaupt alle tabellen hast, die ich auch habe und hierfür benötige. hmm, dazu muss ich jetz doch mal den rechner wechseln, hier habsch des ned druff ^^ bis gleich :)
 
so, weiter gehts. nich wundern, hab mal nen neues avatarbild gebaut xD inspiriert von meinem heimweg heute :lol: war ein sehr angenehmer abschluss einer arbeitswoche :ugly: gut, konzentrieren *versuch*...


ich wollt den sql dingens da suchen. da isser ja scho:
PHP:
  $sql = "SELECT
                t.Bezeichnung AS Taetigkeit,
                p.Bezeichnung 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
                z.User = '".$user."' AND
                u.ID = z.user AND
                pr.ID = z.projekt AND
                pr.Taetigkeit = t.ID AND
                pr.Produkt = p.ID
          ORDER BY
                z.Datum ASC;";
jo genau, ich bemühe die tabelle zeiten natürlich. das ist ja quasi der kern. jede zeitangabe für ein projekt ist hier gespeichert. für ein projekt kann es eben mehrere zeitangaben geben - aber dann muss sich das datum eben unterscheiden. gleiches datum in gleichem projekt -> update. jut, die tabelle sieht bei mir so aus:
boss_pzf_zeiten.png
die obligatorische id, gefolgt von den ID-verweise für das projekt und den user, der das erstellt hat sowie dem datum ALS INT ^^ und eben der zeit des erstellens/updates des eintrags als date.

um unsere php-tabelle gescheit anzeigen zu könne, brauchen wir also noch die fehlenden daten aus der projekte tabelle, folgt auch gleich nach from zeiten. die sieht dann so aus bei mir:
boss_pzf_projekte.png
die id, dann wieder id-verweise zu tätigkeiten, projekte und user plus die beschreibung als varchar. damit haben wir erstmal grundsätzlich alle daten, die auch in der tabelle angezeigt werden. allerdings halt bei vielen sachen nur die id. um die id's noch "aufzulösen" zu den eigentlichen bezeichnungen/namen, frage ich eben auch noch die 3 tabellen tätigkeiten, produkte und user ab. die sehen dann (in der eben genannten reihenfolge) so aus:
boss_pzf_rest.png


zu bachten ist halt, dass die spaltennamen natürlich differieren können, das müsstest du natürlich an deine anpassen. da ich alles nen aliasnamen gebe, brauchste am restlichen code nix ändern. musst halt nur aufpassen, dass du fetch_assoc nutzt, sonst musste aus $row['spalte'] halt immer eine $row->spalte machen (mit fetch_object).

wenn du jetzt mal in den where teil schaust: da wird das datum abgefragt mit unseren timestamps als grenzen. da fällt mir auf, das müsste man eventuell auch anpassen ^^ uU zeigt er sonst was nich an. joa, beim sonntag könnts probs geben, da müsste man auch ein = anhängen. also so hier:
z.Datum >= '".$wochenanfang."' AND
z.Datum <= '".$wochenende."' AND

so, falls du diese 2 zeilen mal testweise löscht, und DANN zeigt er dir was an, dann ist das problem tatsächlich, dass du das nicht als int gespeichert hast. weil wie soll er eine zahl ($wochenende... ist nunmal ne zahl) mit einem string (datum als varchar angegeben) vergleichen. ich hab kA ob er das automatisch irgendwie hinbekommt.
 
Also, um den ganzen Code wieder und wieder und wieder umzukrempeln, dazu haben wir leider keine Zeit mehr. Ich hab's ja eh schon die ganze letzte Woche versucht, aber es hat nie wirklich geklappt, das ganze auf dein System umzuschreiben. Vor allem, weil bei mir die config.php von gut der Hälfte der anderen Files nie erkannt wurde. Habe ich bspw. die DB-Verbindung nur in der config.php angegeben, kam von projektzeiterfassung.php gleich mal ein Error, dass ja gar keine bestehen würde ... :ugly:
Ähnliches auch mit einigen Variablen. Alles unbekannt, wenn ich's nur in config.php reinschreibe. Selbes gilt auch für session_start(), das ich erst wieder in allen Files angeben muss, oder es werden die SESSION Variablen nicht erkannt.

Jedenfalls kann ich jetzt nur noch auf das nötigste eingehen:

1) Ja, der 3. Code aus #403 ist projektzeiterfassung.php. Steht drüber.

2) Auf das Button-Namen-checken bin ich schon gekommen. Bei Klick auf "<<" und ">>" wird nichts mehr in die DB geschrieben, bei Klick auf "Bestätigen" wird korrekterweise formular.php aufgerufen.

index.php
PHP:
<?php    
    include('config.php');
    
    if (isset($_POST['confirm'])) {
        include('formular.php');
    }
    
    if (isset($_SESSION['Reg'])) {
        unset($_SESSION['Reg']);
    }
    if (!isset($_SESSION['name'])) {
        include('login.php');
    } else {
        include('projektzeiterfassung.php');
    }    
?>
3) Ja, im header() wird projektzeiterfassung.php in login.php immer noch aufgerufen, aber wenn ich das irgendwie ändere, geht wieder gar nichts mehr. Und wie gesagt: Ich habe keine Zeit mehr, mir zu überlegen, wie ich wieder alles umbasteln müsste, damit auch das nur noch über index.php läuft. Lieber ein "funktionierendes Chaos", als ein formal korrekter Code, bei dem nichts geht.

login.php:
PHP:
<?php
    session_start();
        
    $verbindung = mysql_connect("localhost", "root" , "root") or die ("Verbindung zur Datenbank konnte nicht hergestellt werden.");
    mysql_select_db ("projektzeiterfassung") or die ("Datenbank konnte nicht ausgewählt werden.");
    
    if (isset($_POST['btnReg'])) {
        $_SESSION['Reg'] = ($_POST['btnReg']);
    }
    echo '<!doctype html>';
    echo '<html><head><meta charset="ISO-8859-1">';
    echo '<link rel="stylesheet" type="text/css" href="style.css">';
    echo '<title>Projektzeiterfassung</title></head><body>';
    echo '<br><div class="submit"><form action="login.php" method="post">';
    echo '<br><h1>Projektzeiterfassung</h1>';
    if (!isset($_POST['btnReg'])) {    
        echo '<table><th>Login</th></table>';
        echo '<p>Ihr Username:</p>
                <input type="text" size="24" maxlength="50" name="username"><br>';
        echo '<p>Ihr Passwort:</p>
                <input type="password" size="24" maxlength="50" name="password"><br><br>';
        echo '    <input type="submit" name="btnLog" value="Einloggen"><br><br>
                <input type="submit" name="btnReg" value="Registrieren">';
        echo '</form></div><br>';
    }
            
    $salt = "#sf$!\"ä\"\$asd³s²a~§653 sa51d75qÖAa@üeX";
    
    if (isset($_POST['btnLog'])) {    
        $username = $_POST['username'];
        $erg = mysql_query("SELECT * FROM user WHERE name='".$username."'");
        $row = mysql_fetch_object($erg);
        $password = hash('sha512', ($_POST['password']).$salt);
        if ($row->passwort == $password) {
            $_SESSION['name'] = $username;
            $_SESSION['id'] = $row->id;
            $_SESSION['rechte'] = $row->rechte;
            header('Location: http://localhost/db/projektzeiterfassung.php');
        } else {            
            echo '<br><div class="submit">Benutzername und/oder Passwort waren falsch oder nicht registriert.<br><br></div>';
        }
    } elseif (isset($_POST['btnReg'])) {
        echo '<table><th>Registrierung</th></table>
                <p>Bitte geben Sie einen Usernamen ein:</p>
                    <input type="text" size="24" maxlength="50" name="username"><br>
                <p>Bitte geben Sie ein Passwort ein:</p>
                    <input type="password" size="24" maxlength="50" name="passwort"><br>
                <p>Passwort wiederholen:</p>
                    <input type="password" size="24" maxlength="50" name="passwort2"><br><br>
                <input type="submit" name="btnReg" value="Registrieren">
            </form></div>';
        $username = $_POST['username'];
        if (isset($_POST["passwort"]) and $_POST["passwort"] != "" and isset($_POST["passwort2"]) and $_POST["passwort2"] != "") {    
            $passwort = $_POST['passwort'];
            $passwort2 = $_POST['passwort2'];
            if ($passwort != $passwort2 or $username == "" or $passwort == "") {    
                echo '<br><div class="submit"><form action="login.php">Eingabefehler. Bitte alle Felder korrekt ausfüllen.<br><br><input type="submit" value="Zurück"></form></div>';
                exit;
            } else {
                @$passwort = hash('sha512', ($passwort).$salt);
                if ($username == "test") {
                    $rechte = 0;
                } else {
                    $rechte = 1;
                }

                $id = mysql_query("SELECT * FROM user WHERE name='".$username."'");

                if (mysql_num_rows($id)) {
                    echo '<br><div class="submit">Benutzername schon vorhanden.<br><br></div>';
                } else {
                    $eintragen = mysql_query("INSERT INTO user (name,  passwort, rechte) VALUES ('$username', '$passwort', '$rechte')");
                    if ($eintragen == true) {                
                         echo '<br><div class="submit"><form  action="login.php">Benutzer <b>'.$username.'</b> wurde  erstellt.<br><br><input type="submit"  value="Login"></form></div>';  
                    } else {        
                         echo '<br><div class="submit"><form  action="index.php">Fehler beim Speichern des  Benutzernamens.<br><br><input type="submit"  value="Zurück"></form></div>';
                    }
                }
            }
        }
    }
    
    echo '</body>
        </html>';
?>
4) "warum ist das schon wieder so fürn huf" ... Ich kann's nicht so aufsplitten wie von dir vorgeschlagen, weil bei mir der Login und das Registrieren längst nur noch EIN Code (= 1 File) ist. Nach deiner Logik bräuchte ich ja ein File für Login und ein weiteres File für Registrieren. DANN könnte ich immer das jeweils benötigte inkludieren.

Übrigens habe ich auch diese ganzen Fehler längst beseitigt, dass "leere" Daten in die DB gespeichert wurden oder er mich gar nicht registrieren lassen wollte, weil User angeblich schon vorhanden. Wir sind längst bei auswerten.php angekommen. Alles bis dahin (registrieren, login, Dateneingabe) habe ich noch letzte Woche selbst richten können. :)

5) Nein, nicht bei der Registrierung landet 0 als User-ID in der DB, da stimmt's noch. Da hat "test" bspw. id=6, "hallo" id=7, und der nächste User würde id=8 kriegen. Aber diese korrekt gespeicherte ID kann scheinbar nicht korrekt ausgelesen und in andere Tabellen übernommen werden?! Jedenfalls wird mir in projekte und zeiten immer nur für alle User id=0 eingetragen. Meine Vermutung ist, dass irgendwo in folgendem Code-Schnipsel was schief geht:
PHP:
if (isset($_POST['btnLog'])) {    
        $username = $_POST['username'];
        $erg = mysql_query("SELECT * FROM user WHERE name='".$username."'");
        $row = mysql_fetch_object($erg);
        $password = hash('sha512', ($_POST['password']).$salt);
        if ($row->passwort == $password) {
            $_SESSION['name'] = $username;
            $_SESSION['id'] = $row->id;
^^ Das ist in login.php. In allen anderen Files wird die userid dann nur noch über "$userid = $_SESSION['id'];" abgegriffen, wo vermutlich längst schon nur noch "0" abgeholt wird?!

6) SQL-query ... nun, ich habe ja extra deines hergenommen und bin es ganz langsam durchgegangen, um bloß jede einzelne Angabe an meine DB-Benennungen anzupassen. Meine Vermutung: Ich habe irgendwas bei dir falsch interpretiert?! Ist ja auch nicht leicht, wo du selbst auch mehrmals noch was geändert hast; z. B. anfangs, soweit ich mich erinnere, war pr produkte und p projekte, dann hast du's wieder umgetauscht. :ugly:
Ich geh's jetzt nochmal durch, aber auf jeden Fall wäre genau DAS hier der Grund, warum ich noch keine Ausgabe durch auswerten.php kriege. Hat man ja gesehen: Nehme ich testweise ein mit Sicherheit richtiges query, liefert dein Code sofort die gewünschten Daten. Der Code stimmt also.

Allerdings:
- Wenn ICH INT für das "datum" einstelle, dann speichert er bei mir nicht diese lange Zahl, die du hast. Bei mir wird dann wieder z. B. "1607" für den 16.07.2014 gespeichert. Und das sind halt alles so Dinge, die mich nur frustrieren, weil ich ja im Grunde das gleiche machen will wie du, aber bei mir läuft's nie auf das gleiche hinaus. Und ich weiß dann nie, was hast du denn sonst wieder alles anders? :huh:

^^ Irgendwas hast du noch anders. Nur in der DB INT anzugeben reicht jedenfalls nicht, damit dort 1405332000 gespeichert wird.
---------------

Hier noch mein ganzer Code, damit du dir mal alles gemeinsam anschauen kannst, und nicht immer nur einzelne Teile: Anhang anzeigen db.7z

[EDIT]
Kannst du bitte mal folgende Zeile mit meiner DB (siehe zip) vergleichen? Ich habe das jetzt gefühlt 100 Mal nach deinem Schema nachzubasteln versucht, aber es geht nichts. Ich kriege nur zig Errors, dass er Angaben in der WHERE clause nicht erkennen würde.
PHP:
$db_erg = mysql_query("SELECT 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 z.userid = '".$userid."' AND u.id = z.userid AND pr.Taetigkeit = t.id AND pr.Produkt = p.id ORDER BY z.Datum ASC;");
 
Zuletzt bearbeitet:
ich weis nich, wie ichs noch erklären soll. ausführlicher als mit den spoilern, gehts doch garnich mehr >< hier nochmal dein code:
PHP:
<?php    
    include('config.php');
    
    include('formular.php');
    
    if (isset($_SESSION['Reg'])) {
        unset($_SESSION['Reg']);
    }
    if (!isset($_SESSION['name'])) {
        include('login.php');
    } else {
        include('projektzeiterfassung.php');
    }    
?>
bis auf das mit der session is das doch vollkommen ok und "vollständig", wenn du es nur richtig baust. unten im else wird deine datei aufgerufen - aber da kommt der code doch nie an, da du über den besichnen header-befehl gehst >< du musst nur 2 dinge sicherstellen: KEIN aufruf über einen header-befehl, $login muss beim einloggen (bzw beim abfragen der session) auch auf true gesetzt werden. aso, du gehst direkt über die sesion statt über ne hilfsvariable - k, mag auch gehn. aber sabotiere dich doch ned selber :/

wir machens mal anders: nimm mal deine index.php her und schreib überall nen echo befehl davor. so in etwa:
PHP:
<?php
    echo 'los gehts - config.php<br>';
    include('config.php');
    
    echo 'weiter zu formular.php<br>';
    include('formular.php');
    
    if (isset($_SESSION['Reg'])) {
        unset($_SESSION['Reg']);
    }
    if (!isset($_SESSION['name'])) {
        echo 'entscheidung a) - login.php<br>';
        include('login.php');
    } else {
         echo 'entscheidung b) - projektzeiterfassung.php<br>';
        include('projektzeiterfassung.php');
    }    
?>
schwupps, haste ein echo debugging der simplen form gebaut. mich würds nich wundern, wenn du nie das letzte echo ausgegeben bekommst. und dann KANN dein konstrukt nich funtzen, wenn du diese datei nie über die index aufrufst.
 
hab mir jetzt mal deine formular.php angeschaut... erm ^^ ich denke, du prüfst, ob nen button gedrückt wurde? oO da gehts sofort los mit der forschleife zum speichern. freilich macht der da bei jedem seiten laden nur mist lol. aus deiner projekt bla php:
[...]<input type="submit" name="confirm" value="Bestätigen"> Schreibt Einträge in Datenbank ...[...]
wäre es da jetzt so unverschämt um diese vermaledeite forschleife ne if zu bauen, die genau diesen mistigen button abfragt? jetzt ernsthaft, wozu schreib ich dir das wieder und wieder in ausfürhlichster form, wenn du es nicht anwendest. wenn das mit dem rest genauso lief, weis ich schon, wieso nix funzt ^^

ich bin jetzt mal der reihe nach die files durchgegangen.
index.php sieht grundsätzlich gut aus - nur dass du eben EINE knöpfchen-drück bedingung per workaround auch noch AUSSERHALB der formular-php anwendest. was machst du, wenn du irgend nen anderen knopf abfragen willst? der sinn der formular.php ist es, diese ganzen knöppken drückereien gesammelt an einer stelle zu verwalten. die grobe form dieser datei sollte so aussehen:
Code:
wurde button A gedrückt?
    tue dies und das, was button A eben bewirken soll

wurde button B gedrückt?
    tue dies und das, was button B eben bewirken soll

wurde button C gedrückt?
    tue dies und das, was button C eben bewirken soll

...

wurde button X gedrückt?
    tue dies und das, was button X eben bewirken soll
ob ein button gedrückt wurde -> isset post button-name. die formular.php wird dann auch IMMER (bedingungslos szs) ausgeführt. also nur als hinweis: das MUSS man so nich machen. man kann die abfragen auch sonstwo im code machen, aber so find ich persönlich das ganze einfach übersichtlicher. auch sinnvoller irgendwo ^^ aber wenn du es auf diese weise machen magst, dann auch richtig ;)

gut, dann eben config.php, die ja zuerst aufgerufen wird. der loginstatus wird gesichert, passt soweit. fehlt halt der kalenderkrams zum bsp. wirste wohl aber da raus haben, weils ja "nich funktioniert hat" denk ich mal. aber an dieser stelle war eben kein fehler. ach siehste, die session wird auch ned gestartet, müsste da auch mit rein ;) wenn du in der index.php den login status per variable nich abfragst sondern direkt über die gesetzte session gehst, dann kannste die $login variable eigentlich auch rauswerfen. es dürfte auf deine weise eigentlich auch gehn. wüsst jetzt im schnell ünberblick nich, was da schief gehen könnte.

gut, jetz schau ich mir nochmal die login.php an. und das mit dem "fürn huf"... ich frag mich ernsthaft, wieso dein gewurschtel überhaupt funzt >< aha, HIER kommt jetzt der session start xD wie gesagt, der gehört in die config rein, da du hier schon die session variablen abfragst. jup, der rest is wieder der selbe käse. sry, aber es ist käse so. ich hab dir doch schon 2mal ne ordentliche version geschrieben. bei dir siehts momentan so aus:
wenn nicht btnReg gedrückt ist, baue das login formular mit den buttons btnLog (zum einloggen) und btnReg (zum wechseln zur registrieren form)
als nächstes:
wenn btnLog zum einloggen gedrückt wurde, logg ihn ein
und jetzt kommt der große haufen mist:
ansonsten, wenn btnReg gedrückt wurde (schon wieder der selbe button name? hatten wir das thema nich auch schon? ausführlich lang und breit erklärt?) baue die registrierungsform mit einem button btnReg zum abschicken der registration. und die härte: sofort danach ohne unterbrechung fänngst du schon mit der behandlung der formulardaten an! lass mich raten, die inputfelder der input-form haben die selben namen wie die der reggen form? jop. WIE willst du unterscheiden, ob das jetzt vom loggin-dingens kam oder vom reggen? das einzige, was dir den orsch rettet, ist das fehlen von password2 in der loginform. aber auf sowas kannste nich bauen!

ich könnt mir grad nur die haare raufen >< wer baut denn sowas zurecht? wieso nicht die naheliegende und simple logik:
is btnRegForm gedrückt, zeige die reg-form
sonst zeige die login-form
und die behandlung der FORMULAR daten machst du in... *tromelwirbel* ^^ FORMULAR.php :P auch DORT hast du zugriff auf die POST variablen. vorallem: DORT ist VOR der entscheidung in der index.php, ob er login oder das andre anzeigen soll. loggst du ihn erst in login.php ein, ist er an dem punkt schon längst vorbei und der drops ist gelutscht. du bist zwar eingeloggt, siehst aber nur die login.php


das is halt der punkt: ich schreib mir die pfoten wund und erklär alles ins detail und du setzt nichts davon um. gugg dir den code doch an, das KANN doch ned funktionieren :/ ich hab dir schon sooft jetzt geschrieben wo es wurmt und wieso und was du ändern musst.
 
fast vergessen, den sql string mal anschauen:
PHP:
  $sql = "SELECT
                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
                z.user = '".$user."' AND
                u.id = z.user AND
                pr.id = z.projekt AND
                pr.taetigkeit = t.id AND
                pr.produkt = p.id
          ORDER BY
                z.datum ASC;";
so müsste es rein von den bezeichnungen her passen. einige fehler sind allerdings drinne, bei deinen db-tabellen, wenn DIESE anfrage funktionieren soll:
tabelle taetigkeiten: die spalten taetigkeit und produkt sind varchars - das müssen ints sein. fummelst dann halt händisch für die ersten beiden einträge die richtigen id's rein (oder löscht sie oder so)
tabelle zeiten: datum muss ein int sein - ah, haste also schon. dann mal schauen, wieso er da sonen murks speichert...


ah ich seh grad deinen "trick"...
if (isset($_POST['confirm'])) {
$_SESSION['confirm'] = ($_POST['confirm']);
und die session fragste dann in der index.php ab, bevor du formular.php includest... umständlicher gehts nich mehr oder? ^^ frag doch einfach den blöden confirm button ab, bevor du INNERHALB von formular.php diese olle speichern forschleife ausführst... gut, dann hier mal das meisterwerk :P
Code:
    for ($a = 1; $a <= $add; $a++) {
        $taetigkeit = $_POST['taetigkeit'.$a.''];
        $produkt = $_POST['product'.$a.'']; 
        $beschreibung = $_POST['beschreibung'.$a.''];  

[COLOR=red]        $erg2 = mysql_query("SELECT id FROM taetigkeiten WHERE taetigkeit='".$taetigkeit."'");
        $erg3 = mysql_query("SELECT id FROM produkte WHERE produkt='".$produkt."'");        $row2 = mysql_fetch_object($erg2);
        $taetigkeitid = $row2->id;
        $row3 = mysql_fetch_object($erg3);
        $produktid = $row3->id;
    
        $stunden = array("montag".$a."", "dienstag".$a."", "mittwoch".$a."", "donnerstag".$a."", "freitag".$a."", "samstag".$a."", "sonntag".$a."");   
        $data = array("mo", "di", "mi", "do", "fr", "sa", "so");
    
        $eintragen1 = mysql_query("INSERT INTO projekte (taetigkeit, produkt, userid, beschreibung, erstellt) VALUES ('$taetigkeitid', '$produktid', '$userid', '$beschreibung', '$erstellt')");
        $taetprodid = mysql_insert_id();
    
        for ($b = 0; $b < 7; $b++) {
            if (isset($_POST[$stunden[$b]]) and $_POST[$stunden[$b]] != "" and isset($_POST[$data[$b]]) and $_POST[$data[$b]] != "") {        
                $dauer = $_POST[$stunden[$b]];
                $tag = $_POST[$data[$b]];                                
                $eintragen2 = mysql_query("INSERT INTO zeiten (userid, taetprodid, zeit, datum) VALUES ('$userid', '$taetprodid', '$dauer', '$tag')");
            }        
        }        
    }
ich nutze mal den code tag, da kann man farbig drin rumpinseln... erstmal die beiden rot markierten sql abfragen... WHY? sag nich, du speicherst bei deinen select-inputs NICHT die id's als value oO was juckt mich als programmierer der klartextname einer option/eines db eintrags ^^ mich intressiert doch zu internem gerödel eigentlich nur irgendeine idendifikationsnummer. in der db speicher ich ned den namen, sondern die id, im code greife ich auf den klartextnamen über dessen id (in nem array zum bsp) zu usw usf. mal kurz schauen... aye -.-
Code:
        echo '<tr><td><select name="taetigkeit'.$a.'">';
        foreach ($taetigkeiten as $taetigkeit) {
            echo '<option value="'.$taetigkeit['[STRIKE][B][COLOR=red]taetigkeit[/B][/STRIKE][B][COLOR=seagreen]id[/B]'].'">'.$taetigkeit['taetigkeit'].'</option>';
        }
        echo '</select></td>';
schon sparste dir ZIG db anfragen. dann wird aus
PHP:
        $taetigkeit = $_POST['taetigkeit'.$a.''];
        $produkt = $_POST['product'.$a.'']; 
        $beschreibung = $_POST['beschreibung'.$a.''];  

        $erg2 = mysql_query("SELECT id FROM taetigkeiten WHERE taetigkeit='".$taetigkeit."'");
        $erg3 = mysql_query("SELECT id FROM produkte WHERE produkt='".$produkt."'");
        $row2 = mysql_fetch_object($erg2);
        $taetigkeitid = $row2->id;
        $row3 = mysql_fetch_object($erg3);
        $produktid = $row3->id;
    
         $stunden = array("montag".$a."", "dienstag".$a."",  "mittwoch".$a."", "donnerstag".$a."", "freitag".$a."", "samstag".$a."",  "sonntag".$a."");   
        $data = array("mo", "di", "mi", "do", "fr", "sa", "so");
    
         $eintragen1 = mysql_query("INSERT INTO projekte (taetigkeit,  produkt, userid, beschreibung, erstellt) VALUES ('$taetigkeitid',  '$produktid', '$userid', '$beschreibung', '$erstellt')");
        $taetprodid = mysql_insert_id();
nämlich
PHP:
         $stunden = array("montag".$a."", "dienstag".$a."",  "mittwoch".$a."", "donnerstag".$a."", "freitag".$a."", "samstag".$a."",  "sonntag".$a."");   
        $data = array("mo", "di", "mi", "do", "fr", "sa", "so");
    
         $eintragen1 = mysql_query("INSERT INTO projekte (taetigkeit,  produkt, userid, beschreibung, erstellt) VALUES ('$_POST['taetigkeit'.$a.'']',  '$_POST['product'.$a.'']', '$userid', '$beschreibung', '$erstellt')");
        $taetprodid = mysql_insert_id();

gut, jetzt kommen wir wohl zum kern der sache... als datum speicherst du $tag = $_POST[$data[$b]]; wobei data-b zu mo di mi... wird. das sind deine inputnamen der wochentage, in denen die zeiten stehen. jetzt frag ich mich gerade, WAS du da überhaupt speicherst. also der wert dieses post's ist ja die eingetragene zeit - den kannste also ja schonmal nich speichern. den namen auch ned, was sollen wir mit mo oder so anfangen ^^ jetzt seh ich grad, für zeit greifste nicht auf mo, sondern auf montag (usw) zu - hä? hast du da 2 inputs für einen tag oder wie? gleich mal guggen... ne, du hast da nur die stunden-inputs (also montag... aber von mo... is da nix zu finden). also speicherst du quasi garnix? wo nimmt er dann überhaupt die werte her? oO

also um meine lösung des problems mal zu verdeutlichen: jeder tag hat einen gewissen timestamp. der montag entspricht ganz einfach dem timestamp $wochenanfang. für den dienstag müssen wir einen tag (in sekunden) dazu rechnen. also äh 86400 glaube (60*60*24). der dienstag hat also den timestamp $wochenanfang + $tag (wobei $tag eben diesem wert 86400 entspricht). der mittwoch ist nun der wochenanfang + 2 tage usw usf. in ner forschleife sehr billig umzusetzen. in genau so einer erstelle ich auch meine mo-so inputs. als NAME der inputs nehme ich den entsprechenden timestamp. der VALUE ist das, was der benutzer eingetragen hat - also die zeit (in stunden). das sieht dann so aus:
PHP:
  for($i = 0; $i < 7; $i++) {
    $ts = $wochenanfang + ($i * 60 * 60 * 24);
    echo '  <td><input type="text" name="'.$ts.'[]" maxlength="6" size="4"></td>';
  }
am montag ist i = 0, es wird also kein tag draufgerechnet. am di ist i = 1 - es wird 1 tag dazugerechnet usw usf. ich frag mich immernoch, wieso ich das $ts genannt hatte ^^ irgendwas mit tag - aber wofür das s stand... is ja auch wurst. auch zu beachten: ich nutze ganz billig das [] als namens anhängsel. wozu sonen heckmeck mit der angehängten variable machen?

jut, was haben wir nun also damit gewonnen? wir haben in einem inputfeld 2 werte übertragen. wobei wir zum zugreifen dann den namen erst wieder generieren müssen, aber wir haben halt direkt den timestamp, den wir in die spalte datum speichern können. meine speicherung des ganzen sieht dann bei mir so aus:
PHP:
  if(isset($_POST['btnAdd'])) {
    foreach($_POST['taetigkeit'] as $key => $val) {
      $sql_chk = "SELECT * FROM projekte WHERE Taetigkeit='".$val."' AND Produkt='".$_POST['produkt'.$val][$key]."' AND User='".$user."';";
      $res_chk = mysql_query($sql_chk) OR die("Projektkontrolle fehlgeschlagen.<br>".mysql_error());
      if(mysql_num_rows($res_chk)) {
        $row_chk = mysql_fetch_assoc($res_chk);
        if($row_chk['Beschreibung'] != $_POST['desc'][$key]) {
          $sql_upd = "UPDATE
                          projekte
                      SET
                          Beschreibung = '".addslashes(htmlspecialchars($_POST['desc'][$key]))."'
                      WHERE
                          Taetigkeit='".$val."' AND
                          Produkt='".$_POST['produkt'.$val][$key]."' AND
                          User='".$user."';";
          mysql_query($sql_upd) OR die("Fehler beim Aktualisieren der Projektdaten!<br>".mysql_error());
        }
      } else {
        $sql_ins = "INSERT INTO projekte
                        (Taetigkeit, Produkt, Beschreibung, User)
                    VALUES
                        ('".addslashes(htmlspecialchars($val))."',
                         '".addslashes(htmlspecialchars($_POST['produkt'.$val][$key]))."',
                         '".addslashes(htmlspecialchars($_POST['desc'][$key]))."',
                         '".addslashes(htmlspecialchars($user))."');";
        mysql_query($sql_ins) OR die("Fehler beim Erzeugen der Projektdaten!<br>".mysql_error());
        $proj_id = mysql_insert_id();
        for($i = 0; $i < 7; $i++) {
          $ts = $wochenanfang + ($i * 60 * 60 * 24);
          $sql_chk = "SELECT * FROM zeiten WHERE Projekt='".$proj_id."' AND Datum='".$ts."' AND User='".$user."';";
          $res_chk = mysql_query($sql_chk) OR die("Zeitenkontrolle fehlgeschlagen.<br>".mysql_error());
          if(mysql_num_rows($res_chk)) {
            $row_chk = mysql_fetch_assoc($res_chk);
            if($row_chk['Zeit'] != $_POST[$ts][$key]) {
              $sql_upd = "UPDATE
                              zeiten
                          SET
                              Zeit = '".addslashes(htmlspecialchars($_POST[$ts][$key]))."',
                              Erstellt = NOW();
                          WHERE
                              Projekt='".$proj_id."' AND
                              Datum='".$ts."' AND
                              User='".$user."';";
              mysql_query($sql_upd) OR die("Fehler beim Aktualisieren der Zeitendaten!<br>".mysql_error());
            }
          } else {
            if($_POST[$ts][$key] > 0) {
              $sql_ins = "INSERT INTO zeiten
                              (Projekt, User, Zeit, Datum, Erstellt)
                          VALUES
                              ('".addslashes(htmlspecialchars($proj_id))."',
                               '".addslashes(htmlspecialchars($user))."',
                               '".addslashes(htmlspecialchars($_POST[$ts][$key]))."',
                               '".addslashes(htmlspecialchars($ts))."',
                               NOW());";
              mysql_query($sql_ins) OR die("Fehler beim Erzeugen der Zeitendaten!<br>".mysql_error());
            }
          }
        }
      }
    }
  }
oder runtergebrochen aufs wichtige:
PHP:
  if(isset($_POST['btnAdd'])) {  // das wäre dein confirm
    foreach($_POST['taetigkeit'] as $key => $val) {
      // check, ob es das projekt (als kombination aus tät. und produkt) von diesem user schon gibt
      // wenn ja, schau nach, ob die beschreibung sich geändert hat
      if(mysql_num_rows($res_chk)) {
        // wenn sie sich geändert hat, update das projekt
        if($row_chk['Beschreibung'] != $_POST['desc'][$key]) {
        }
      } else {
        // gibts das projekt noch nicht, leg es halt an ^^
        // speicher die projekt-id
        $proj_id = mysql_insert_id();

        // hier wieder unser krams für die einzelnen wochentage. im grunde wieder die selbe for schleife.
        for($i = 0; $i < 7; $i++) {
          // berechne den "tages timestamt" - ach, ts für timestamp! xD
          $ts = $wochenanfang + ($i * 60 * 60 * 24);
          // mach lucki lucki, obs schon eine zeit für dieses datum gibt...
          $sql_chk = "SELECT * FROM zeiten WHERE Projekt='".$proj_id."' AND Datum='".$ts."' AND User='".$user."';";
          // wenn ja, schau wieder nach, ob sich die eingetragene zeit geändert hat
          if(mysql_num_rows($res_chk)) {
            if($row_chk['Zeit'] != $_POST[$ts][$key]) {
              // und update sie in diesem fall
            }
          } else {
            // wenns da noch nix gibt, prüfe mal nach, ob wir überhaupt ne eingetragene zeit haben (also im formular), oder ob das feld ne nullnummer is
            // so eigentlich könnte man diese frage schon weit früher stellen xD
            if($_POST[$ts][$key] > 0) {
              // wenn wir also ne zeit vom formular für diesen tag bekommen haben, speichere sie
              $sql_ins = "INSERT INTO zeiten
                              (Projekt, User, Zeit, Datum, Erstellt)
                          VALUES
                              ('".addslashes(htmlspecialchars($proj_id))."',
                               '".addslashes(htmlspecialchars($user))."',
                               '".addslashes(htmlspecialchars($_POST[$ts][$key]))."',  // <-- der VALUE des posts
                               '".addslashes(htmlspecialchars($ts))."',   // der nachgebildete NAME des posts
                               NOW());";
              mysql_query($sql_ins) OR die("Fehler beim Erzeugen der Zeitendaten!<br>".mysql_error());
            }
          }
        }
      }
    }
  }
dann haste auch die richtige zahl gespeichert. und da ich wie gesagt nicht mit 'name'.$a arbeite sondern mit 'name[]', kann ich den ganzen kram auch einfach mit einer foreach abrackern. als bezugspunkt für foreach nehm ich mir irgendeins der inputfelder heraus (ich hab tätigkeit genommen) und lasse mir das aufsplitten in den index (-> $key) und dessen wert (-> $val):
foreach($_POST['taetigkeit'] as $key => $val)...
in der ersten reihe meiner erstellten inputs wird aus taetigkeit[] mit dem übergebenen wert 2 (zum bsp) dann eben teatigkeit[0] (der $key ist 0) mit dem wert 2 (=$val). alle anderen inputs haben dann genau den selben index. also das dazugehörige produkt-input mit namen produkt[] kann ich nun mittels dem $key ansprechen -> produkt[$key]. und im ersten durchgang ist das ja 0, wie eben gesehn. $val ist aber uch hier immernoch auf taetigkeit[$key] bezogen ;) jedenfalls kann man so ganz easy alle zusammengehörigen inputs abfragen.
 
Den Zeit-Teil aus der zweiten Hälfte deines letzten Postings lassen wir erstmal, vorher lieber alles andere richten ...

Jedenfalls kriege ich 2 Probleme, wenn ich das alles so nachbastle:
1) Er kommt bei mir nie zum Login (bzw. login.php), sondern landet bei Aufruf von index.php immer gleich bei projektzeiterfassung.php.
2) Und seit ich den verkürzten Code nach deinem "nämlich" eingefügt habe, kriege ich jetzt, bevor wir überhaupt so weit kommen, von formular.php folgende Nachricht:
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\xampp\htdocs\db\formular.php on line 43
Aber ich finde den Syntaxfehler ums Verrecken nicht. Alle anderen INSERT-Zeilen in dem Code schauen syntaktisch ident aus. Ein " am Anfang und eines am Ende?!
---------

Jetzt nochmal zu dem ganzen Zeit-Teil: Bei der for-Schleife (4-Zeiler oben bei dir) habe ich, glaube ich, nicht ganz kapiert, wo die rein soll?! Wir reden da von formular.php, oder?
Und bei deinem langen Code habe ich das Problem, dass a) bei mir die Zeilen hinzufügen bzw. entfernen Funktionalität völlig anders realisiert ist (durch einen Code von Tessa), sodass ich das jetzt nicht einfach so von dir übernehmen kann ohne mir damit wahrscheinlich einiges zu zerschießen?! Und b) dass wahrscheinlich die Bezeichnungen wieder alle nicht mit meiner DB zusammenpassen?!

BTW: Du hattest dich wegen "mo", "di", "mi", ... und "montag", "dienstag", "mittwoch", ... bei mir gewundert. Die kurzen Versionen sind die Namen der input-Felder direkt neben MO, DI, MI, ... auf der Website; da soll der User das Tagesdatum eingeben (wie sinnvoll das jetzt noch ist, wo eh die WK angezeigt wird, sei mal dahingestellt). Die langen Versionen sind die Namen der Felder unter dem jeweiligen Tag, wo der User auf der Website die Stunden eingibt.

Hier jedenfalls mal meine überarbeiteten Code:

index.php
PHP:
 <?php
    echo 'los gehts - config.php<br>';
    include('config.php');
    
    echo 'weiter zu formular.php<br>';
    include('formular.php');
    
    if (!isset($_SESSION['name'])) {
        echo 'entscheidung a) - login.php<br>';
        include('login.php');
    } else {
         echo 'entscheidung b) - projektzeiterfassung.php<br>';
        include('projektzeiterfassung.php');
    }    
?>
config.php
PHP:
<?php
    session_start();
    
    define('MYSQL_HOST', 'localhost');
    define('MYSQL_USER', 'root');
    define('MYSQL_PASS', 'root');
    define('DATABASE', 'projektzeiterfassung');
    
    $user = "";
    $userid = 0;   
    $rechte = -1;   

    if (isset($_SESSION['name'])) {
      $user = $_SESSION['name'];
      $userid = $_SESSION['id'];
      $rechte = $_SESSION['rechte'];
    }
        
    $verbindung = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die ("Verbindung zur Datenbank konnte nicht hergestellt werden");
    mysql_select_db(DATABASE) or die ("Datenbank konnte nicht ausgewählt werden.");
?>
login.php
PHP:
<?php     
    if (isset($_POST['btnReg'])) {
        $_SESSION['Reg'] = ($_POST['btnReg']);
    }
    echo '<!doctype html>';
    echo '<html><head><meta charset="ISO-8859-1">';
    echo '<link rel="stylesheet" type="text/css" href="style.css">';
    echo '<title>Projektzeiterfassung</title></head><body>';
    echo '<br><div class="submit"><form action="login.php" method="post">';
    echo '<br><h1>Projektzeiterfassung</h1>';
    if (!isset($_POST['btnReg'])) {    
        echo '<table><th>Login</th></table>';
        echo '<p>Ihr Username:</p>
                <input type="text" size="24" maxlength="50" name="username"><br>';
        echo '<p>Ihr Passwort:</p>
                <input type="password" size="24" maxlength="50" name="password"><br><br>';
        echo '    <input type="submit" name="btnLog" value="Einloggen"><br><br>
                <input type="submit" name="btnReg" value="Registrieren">';
        echo '</form></div><br>';
    }
            
    $salt = "#sf$!\"ä\"\$asd³s²a~§653 sa51d75qÖAa@üeX";
    
    if (isset($_POST['btnLog'])) {    
        $username = $_POST['username'];
        $erg = mysql_query("SELECT * FROM user WHERE name='".$username."'");
        $row = mysql_fetch_object($erg);
        $password = hash('sha512', ($_POST['password']).$salt);
        if ($row->passwort == $password) {
            $_SESSION['name'] = $username;
            $_SESSION['id'] = $row->id;
            $_SESSION['rechte'] = $row->rechte;
        } else {            
            echo '<br><div class="submit">Benutzername und/oder Passwort waren falsch oder nicht registriert.<br><br></div>';
        }
    } elseif (isset($_POST['btnReg'])) {
        echo '<table><th>Registrierung</th></table>
                <p>Bitte geben Sie einen Usernamen ein:</p>
                    <input type="text" size="24" maxlength="50" name="username"><br>
                <p>Bitte geben Sie ein Passwort ein:</p>
                    <input type="password" size="24" maxlength="50" name="passwort"><br>
                <p>Passwort wiederholen:</p>
                    <input type="password" size="24" maxlength="50" name="passwort2"><br><br>
                <input type="submit" name="btnReg" value="Registrieren">
            </form></div>';
        $username = $_POST['username'];
    }
    
    echo '</body>
        </html>';
?>
formular.php
PHP:
<?php         
    $erstellt = date('Y-m-d-h-i-s');    
    $add = $_POST['add'];
    
    if (isset($_SESSION['Reg'])) {
        unset($_SESSION['Reg']);
    }
    
    if (isset($_POST["passwort"]) and $_POST["passwort"] != "" and isset($_POST["passwort2"]) and $_POST["passwort2"] != "") {    
        $passwort = $_POST['passwort'];
        $passwort2 = $_POST['passwort2'];
        if ($passwort != $passwort2 or $username == "" or $passwort == "") {    
            echo '<br><div class="submit"><form action="login.php">Eingabefehler. Bitte alle Felder korrekt ausfüllen.<br><br><input type="submit" value="Zurück"></form></div>';
            exit;
        } else {
            $passwort = hash('sha512', ($passwort).$salt);
            if ($username == "test") {
                $rechte = 0;
            } else {
                $rechte = 1;
            }

            $id = mysql_query("SELECT * FROM user WHERE name='".$username."'");

            if (mysql_num_rows($id)) {
                echo '<br><div class="submit">Benutzername schon vorhanden.<br><br></div>';
            } else {
                $eintragen = mysql_query("INSERT INTO user (name,  passwort, rechte) VALUES ('$username', '$passwort', '$rechte')");
                if ($eintragen == true) {                
                     echo '<br><div class="submit"><form  action="login.php">Benutzer <b>'.$username.'</b> wurde  erstellt.<br><br><input type="submit"  value="Login"></form></div>';  
                } else {        
                     echo '<br><div class="submit"><form  action="index.php">Fehler beim Speichern des  Benutzernamens.<br><br><input type="submit"  value="Zurück"></form></div>';
                }
            }
        }
    }
    
    if (isset($_SESSION['confirm'])) { 
        for ($a = 1; $a <= $add; $a++) {    
            $stunden = array("montag".$a."", "dienstag".$a."",  "mittwoch".$a."", "donnerstag".$a."", "freitag".$a."", "samstag".$a."",  "sonntag".$a."");   
            $data = array("mo", "di", "mi", "do", "fr", "sa", "so");
    
            $eintragen1 = mysql_query("INSERT INTO projekte (taetigkeit, produkt, userid, beschreibung, erstellt) VALUES ('$_POST['taetigkeit'.$a.'']', '$_POST['product'.$a.'']', '$userid', '$beschreibung', '$erstellt')");
            $taetprodid = mysql_insert_id();  
        
            for ($b = 0; $b < 7; $b++) {
                if (isset($_POST[$stunden[$b]]) and $_POST[$stunden[$b]] != "" and isset($_POST[$data[$b]]) and $_POST[$data[$b]] != "") {        
                    $dauer = $_POST[$stunden[$b]];
                    $tag = $_POST[$data[$b]];                                
                    $eintragen2 = mysql_query("INSERT INTO zeiten (userid, taetprodid, zeit, datum) VALUES ('$userid', '$taetprodid', '$dauer', '$tag')");
                }        
            }        
        }
    }
?>
projektzeiterfassung.php
PHP:
 <?php        
    $kw = date('W');
    $jahr = date('Y');
    $monat = date('n');
    $wt = date('N');
    $tag = date('j') - ($wt - 1);
    $wochenanfang = mktime(12, 0, 0, $monat, $tag, $jahr);
    $wochenende = mktime(12, 0, 0, $monat, ($tag + 6), $jahr);

    if (isset($_POST['wa'])) {
        $wochenanfang = $_POST['wa'];
    }
    if (isset($_POST['we'])) { 
        $wochenende = $_POST['we'];
    }

    if (isset($_POST['prevWeek'])) {
        $wochenanfang -= 60 * 60 * 24 * 7;
        $wochenende   -= 60 * 60 * 24 * 7;
    }
    if (isset($_POST['nextWeek'])) {
        $wochenanfang += 60 * 60 * 24 * 7;
        $wochenende   += 60 * 60 * 24 * 7;
    }
    
    $user = $_SESSION['name']; 
    $rechte = $_SESSION['rechte']; 

    $kw = date('W', $wochenanfang);
    $jahr = date('Y', $wochenanfang);
    $monat = date('n', $wochenanfang);
    $tag = date('j', $wochenanfang);

    echo '<!doctype html>
            <html>
            <head>
            <meta charset="ISO-8859-1">
            <link rel="stylesheet" type="text/css" href="style.css">
            <title>Projektzeiterfassung</title>
            </head> 
            <body>
            <form action="index.php" method="post">';
    echo '    <link rel="stylesheet" type="text/css" href="style.css">';
    echo '    <br><h1>Projektzeiterfassung: '.$user.'</h1>';
    echo '    <table>';
    echo '  <tr>';
    echo '    <td colspan="10" 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>
                <th>Tätigkeit</th>
                <th>Produkt</th>
                <th>Beschreibung</th>
                <th width="150">MO <input name="mo" type="text" size="10" maxlength="10"></th>
                <th width="150">DI <input name="di" type="text" size="10" maxlength="10"></th>
                <th width="150">MI <input name="mi" type="text" size="10" maxlength="10"></th>
                <th width="150">DO <input name="do" type="text" size="10" maxlength="10"></th>
                <th width="150">FR <input name="fr" type="text" size="10" maxlength="10"></th>
                <th width="150">SA <input name="sa" type="text" size="10" maxlength="10"></th>
                <th width="150">SO <input name="so" type="text" size="10" maxlength="10"></th>
            </tr>';
    
    $taetigkeiten = array();
    $sql_t = "SELECT * FROM taetigkeiten;";
    $res_t = mysql_query($sql_t) or die ("Get Taetigkeiten failed.<br>".mysql_error());
    if (mysql_num_rows($res_t))
        while ($row_t = mysql_fetch_assoc($res_t)) {
            $taetigkeiten[count($taetigkeiten)] = $row_t;
        }

    $products = array();
    $sql_p = "SELECT * FROM produkte;";
    $res_p = mysql_query($sql_p) or die ("Get Produkte failed.<br>".mysql_error());
    if (mysql_num_rows($res_p))
        while ($row_p = mysql_fetch_assoc($res_p)) {
            $products[count($products)] = $row_p;
        }
      
    if (isset($_GET['add'])) {
        $add = $_GET['add']; 
        $add++;
    } elseif (!isset($_GET['rem'])) {
        $add = 1;
    }
    if (isset($_GET['rem'])) { 
        $add = $_GET['rem']; 
        $add--;
    }

    for ($a = 1; $a <= $add; $a++) {
        echo '<tr><td><select name="taetigkeit'.$a.'">';
        foreach ($taetigkeiten as $taetigkeit) {
            echo '<option value="'.$taetigkeit['id'].'">'.$taetigkeit['taetigkeit'].'</option>';
        }
        echo '</select></td>';

        echo '<td><select name="product'.$a.'">';
        foreach ($products as $product) {
            echo '<option value="'.$product['id'].'">'.$product['produkt'].'</option>';
        }
        echo '</select></td>';

        echo '<td><input name="beschreibung'.$a.'" type="text" size="50" maxlength="250"></td>';

        echo '<td><input name="montag'.$a.'" type="text" size="10" maxlength="5""></td>';
        echo '<td><input name="dienstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="mittwoch'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="donnerstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="freitag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="samstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="sonntag'.$a.'" type="text" size="10" maxlength="5"></td></tr>';
    } 
    echo '</table><br>';

    echo '<div class="submit"><button name="add" type="button" value="Zeile hinzufügen" onclick="window.location.href=\'projektzeiterfassung.php?add='.$add.'\';">Neue Eingabezeile hinzufügen</button> <button name="rem" type="button" value="Zeile entfernen" onclick="window.location.href=\'projektzeiterfassung.php?rem='.$add.'\';">Eingabezeile entfernen</button></div><br>';
    echo '<input type="hidden" name="add" value="'.$add.'">';

    echo '<div class="submit"><input type="submit" name="confirm" value="Bestätigen"> Schreibt Einträge in Datenbank ...</div>';
    echo '</form>';
    
    echo '<div class="submit"><br><br><br><form action="auswerten.php"><input type="submit" value="Bisherige Einträge in Datenbank anzeigen"> Eigene Einträge anzeigen ...</form>';
    if ($rechte == 0) {
        echo '<br><form action="auswerten2.php"><input type="submit" value="Einträge für folgenden Mitarbeiter anzeigen"> <input name="mitarbeiterdb" type="text" size="30" maxlength="30"></form></div>';

    } else {
        echo '</div>';
    }
    
    if (isset($_POST['confirm'])) {
        $_SESSION['confirm'] = ($_POST['confirm']);
    }
    
    echo '</body>';
    echo '</html>';
?>
auswerten.php
PHP:
 <?php   
    $kw = date('W');
    $jahr = date('Y');
    $monat = date('n');
    $wt = date('N');
    $tag = date('j') - ($wt - 1);
    $wochenanfang = mktime(12, 0, 0, $monat, $tag, $jahr);
    $wochenende = mktime(12, 0, 0, $monat, ($tag + 6), $jahr);

    if (isset($_POST['wa'])) {
        $wochenanfang = $_POST['wa'];
    }
    if (isset($_POST['we'])) { 
        $wochenende = $_POST['we'];
    }

    if (isset($_POST['prevWeek'])) {
        $wochenanfang -= 60 * 60 * 24 * 7;
        $wochenende   -= 60 * 60 * 24 * 7;
    }
    if (isset($_POST['nextWeek'])) {
        $wochenanfang += 60 * 60 * 24 * 7;
        $wochenende   += 60 * 60 * 24 * 7;
    }
    
    $user = $_SESSION['name'];
    $userid = $_SESSION['id'];    

    $kw = date('W', $wochenanfang);
    $jahr = date('Y', $wochenanfang);
    $monat = date('n', $wochenanfang);
    $tag = date('j', $wochenanfang);
    
    
    $db_erg = mysql_query("SELECT 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 z.user = '".$user."' AND u.id = z.user AND pr.id = z.projekt AND pr.taetigkeit = t.id AND pr.produkt = p.id ORDER BY z.datum ASC;";);
    if (!$db_erg) {
        die ('Ungültige Abfrage: '.mysql_error());
    }

    echo '<!doctype html>
            <html>
            <head>
            <meta charset="ISO-8859-1">
            <link rel="stylesheet" type="text/css" href="style.css">
            <title>Projektzeiterfassung</title>
            </head> 
            <body>
            <form action="auswerten.php" method="post">';
    echo '    <link rel="stylesheet" type="text/css" href="style.css">';
    echo '    <br><h1>Projektzeiterfassung: '.$user.'</h1>';
    echo '    <table>';
    echo '  <tr>';
    echo '    <td colspan="10" 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>
                <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>
            </tr>';
    $row_collector = array();
    if (mysql_num_rows($db_erg)) {
        while($row = mysql_fetch_assoc($res)) {
            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']]['time'] = array();
        }
        $row_collector[$row['tID']]['data'][$row['pID']]['time'][$row['Datum']] = $row['Zeit'];
        }
        foreach ($row_collector as $taet_id => $teat) {
            $td = array();
            $td[0] = $row_collector[$taet_id]['taet'];
            foreach ($row_collector[$taet_id]['data'] as $prod_id => $prod) {
                $td[1] = $row_collector[$taet_id]['data'][$prod_id]['prod'];
                $td[2] = $row_collector[$taet_id]['data'][$prod_id]['desc'];
                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+3] = $row_collector[$taet_id]['data'][$prod_id]['time'][$ts];
                    } else {
                        $td[$i+3] = ' ';
                    }
                }
                echo '  <tr>';
                for ($i = 0; $i < count($td); $i++) {
                    echo '    <td>'.$td[$i].'</td>';
                }
                echo '  </tr>';
            }
        }
    } else {
        echo '  <tr><td colspan="10" style="text-align:center">Keine Einträge gefunden.</td></tr>';
    }  
    echo '</table></form>';

    echo '<br><div class="submit"><form><input type="button" value="Einträge editieren" onClick="history.go(-1);return true;"> Zurück zur Eingabe ...</form></div><br>';
    echo '<form action="export.php" method="post" name="export_excel"><div class="submit"><div class="controls"><button type="submit" id="export" name="export" class="btn btn-primary button-loading" data-loading-text="Loading...">Exportiere MySQL Daten zu Excel File</button></div></div></form>';
?>

PS: bei deinem "ts" hätte ich auf eine Verkürzung von "timestamp" getippt, nicht "tag" und noch was. ;)
 
Zuletzt bearbeitet:
zuerst: jop, das würd ich auch sagen. es hatte halt thematisch irgendwie zusammen gehört, daher hatte ichs mit aufgeführt. wenn man die ganzen checks weglässt, isses auch nich so aufgebläht ^^ aber wie gesagt: jop, lass erstmal wech. soa, du kommst also nie zu login.php. also muss session-name gesetzt sein. das kann theoretisch nur in der onfig.php passieren... hmm, da is aber nix... mach mal ne testausgabe, ganz oben bei deiner index.php als allererstes (bevor config oder oder):
if(isset(session-name)) echo "is set, value: [".session-name."]<br>"; else echo "is not set";

ich vermute die ausgabe "is set, value: []". dann wäre das prob, dass der wert immer gesetzt ist, und wir beser prüfen, ob er ungleich "" ist. ist aber jetzt nur ne vermutung. andernfalls - ne, die login variable wieder nutzen bringt auch nix, da wir in config ja das selbe (session-name) prüfen wie jetzt schon. also würde login genauso true werden und es ändert sich nix. hmm. naja, probier das erstmal. wenn garnix geht, lass mal die user-id variable nach dem aufruf der config.php ausgeben. wenn die da 0 ist, könnten wir das als prüfparameter nutzen (userid == 0 -> login.php else...).

wegen dem error da: ich glaub ich seh wieso. ich hatte deine post variablen stumpf anstelle der von dir erstellten variablen (aus der db gelesenen) kopiert. also anstelle von $taetigkeitid (oder wie es hieß) hab ich dein $_POST['taetigkeit'.$a.''] geschrieben und raus kam dabei:
PHP:
$eintragen1 = mysql_query("INSERT INTO projekte (taetigkeit,  produkt, userid, beschreibung, erstellt)
VALUES ('$_POST['taetigkeit'.$a.'']',  '$_POST['product'.$a.'']', '$userid', '$beschreibung', '$erstellt')");
erstmal, bei $_POST['taetigkeit'.$a.''] - wozu der rote teil? du hängst nix an? ^^ kannste weglassen. und jetzt zum eigentlichen prob: ich denke mal, wir sollten da lieber dann mit dem .-operator arbeiten, ich befürcht er bekommt mit den vielen ' probleme. wie gesagt, ich mag diese kurzschreibweise nich so wirklich :/ also quasi sowas hier draus machen (zumindest bei den post variablen):
PHP:
$eintragen1 = mysql_query("INSERT INTO projekte (taetigkeit,  produkt, userid, beschreibung, erstellt)
VALUES ('".$_POST['taetigkeit'.$a]."',  '".$_POST['product'.$a]."', '$userid', '$beschreibung', '$erstellt')");
ich HOFE, das wars ^^ wenn nich, müssmer mal weiter suchen.


der 4zeiler mit dem ts (jop, ich kam mittlerweile auch wieder drauf dass das timestamp heißen sollte xD ) soll in deiner projektzeiterfassung.php diesen code ersetzen:
PHP:
        echo '<td><input name="montag'.$a.'" type="text" size="10" maxlength="5""></td>';
        echo '<td><input name="dienstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="mittwoch'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="donnerstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="freitag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="samstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="sonntag'.$a.'" type="text" size="10" maxlength="5"></td></tr>';
du erstellst mit der forschleife diese 7 inputs in einem ritt. alle haben gleich diesen timestamp als namen (und anstelle der [] im namen kannste auch dein $a anhängen (ich würd es aber mit nem _ trennen, also $ts.'_'.$a). dann sollte das auch kompatibel mit deiner forschleife bei der abfrage sein.

sind wir gleich beim nächsten thema. is jetzt ohne es wirklich nachgeschaut zu haben, aber im groben sollte es reichen, wenn du meine foreach mit deiner for $a... ersetzt und in meinem code alles, was [$key] lautet mit .$a ersetzt. bei den tages-inputs dann natürlich ggf _.$a (alles kurzschreibweise, hoff du weist, was ich meine). dann müsste es eigentlich schon laufen. ich benutze ja die inputs als arrays, du vergibst manuell nen index (den du anhängst - also kein array gleicher namen, sondern eben immer einen einzigartigen namen (der rekonstruierbar ist)).

zu deinem BTW: joa, das kannst du an und für sich weglassen. die daten, die du dort manuell angeben lässt, würden ja mit dem "ts-code" von mir automatisch generiert werden.


jut, zu den codes. bei der formular.php - jain. du fragst im ersten teil direkt die input-feldnamen ab, NICHT den button. überlege dir: WANN muss ich denn überhaupt checken, ob das reggen-formular ordentlich ausgefüllt wurde (bzw analog mit dem loggen formular)? dass musst du NUR, wenn der entsprechende button auch gedrückt wurde. also if isset btnLog prüfe, ob alle eingaben ok sind und speicher dann. wenn allerdings btnReg gedrückt wurde, kümmer dich um die registration des typen. genauso kannst du alle anderen buttons (die formulardaten auswetung zur folge haben oder irgendwelche anderen berechnungen anstoßen) hier abarbeiten.

wenn man solche buttons wie btnRegForm betrachtet, sieht man ne 2. variante der button nutzung: dieser button ist nicht dazu gedacht, irgendwelche formulardaten auswerten zu lassen, sondern dient nur als ne art "link". wenn man den button drückt, wird nicht die loginform gemalt, sondern die rggen form. es ensteht also der eindrück, man hat dadurch ne andere seite aufgerufen. das könntest jetzt auch als wink mit dem zaunspfahl verstehen, was deine auswerten.php's betrifft ;) mal ne beispiel index.php:
PHP:
<?php
    echo 'los gehts - config.php<br>';
    include('config.php');
    
    echo 'weiter zu formular.php<br>';
    include('formular.php');
    
    if(!isset($_SESSION['name'])) {
      echo 'entscheidung a) - login<br>';

      if(isset($_POST['btnRegForm'])) {
          echo 'entscheidung a) 1) - register.php aufrufen<br>';
          include('login.php');
      } else {
        echo 'entscheidung a) 2) - login.php aufrufen<br>';
        include('login.php');
      }
    } else {
      echo 'entscheidung b) - projektzeiterfassung<br>';
      if(isset($_POST['btnAuswForm'])) {
        echo 'entscheidung b) 1) - auswerten.php<br>';
        include('auswerten.php');
      } else if(isset($_POST['btnAuswAdminForm'])) {
        echo 'entscheidung b) 2) - auswerten2.php<br>';
        include('auswerten2.php');
      } else {
        echo 'entscheidung b) 3) - projektzeiterfassung.php<br>';
        include('projektzeiterfassung.php');
      }
    }    
?>
die einzelnen php's enthalten dann NUR den (html und php) code der entsprechenden formulare bzw tabellen usw. die auswertung der gesendeten formulardaten kommt wieder in formular.php. wenn dir die zu groß wird, kannste das ja dann dort auch aufsplitten in einzelne files. wäre aber halt kosmitik des codes, bessere les- und editierbarkeit bla.

achja, dann haste da halt noch dieses if (isset($_SESSION['confirm'])) drin. mach aus dem session einfach ein post und fertig. schau dir mal folgenden bsp code an:
PHP:
$a = 'hallo welt';
$b = $a;
$c = $b;
echo $c;
anstatt einfach direkt $a auszugeben, speicherst du das nochmal in ner anderen variablen ab und gibst diese dann aus -> sinnlos ;)


die login-php, teil es vllt wirklich mal auf in 2 files. eines was die registrierungs-form baut und eines das die loginform baut. wie du beide aufrufen kannst, hab ich ja schon eben in der modifizierten index.php gezeigt. dann kannst du nämlich auch gleich in deiner projektzeiterfassung.php die "multi-forms" rausnehmen. hier hättest dann nämlich wieder das problem, dass du in auswerten.php keinerlei formulardaten zum auswerten bekommst und dass du die php wieder direkt aufrufst und nicht über die index (die dann erst config und dann formular php aufruft). anhand des gedrückten button namens entscheidest dann halt, welche php ausgegeben wird.

und btw haste dann auch in auswerten php keine fehlenden variablen mehr ;)
 
Okay. Ich habe bis heute Abend leider nicht viel Zeit, daher erstmal das, was ich jetzt noch geschafft habe. Am Abend dann geht's weiter ...

1) Deine if-Zeile aus deinem ersten Absatz klappt so nicht. Ich habe sie dann folgendermaßen probiert ...
PHP:
if (isset($_SESSION['name'])) {
    echo "is set, value: ['".$_SESSION['name']."']<br>"; 
} else {
    echo "is not set";
}
^^ Dabei kommt "is not set" raus. Müsste also eigentlich alles passen?! K. A. warum ich trotzdem nicht zu login.php komme, wenn ich index.php aufrufe. :huh:

2)
Die zweite Version von "eintragen1 = ..." funktioniert jetzt, das passt.

3) Die 4zeilige for-Schleife habe ich jetzt statt den 7 echos eingefügt, aber das mit dem _ statt irgendwas habe ich jetzt auf die Schnelle noch nicht ganz verstanden. Da denke ich mich heute Abend noch rein. Dürfte aber kein für die Funktionalität essentieller Unterschied zur jetzigen Version sein?!

4) Den ganzen Teil mit neuerlichem Aufsplitten von Login und Registrieren mache ich auch heute Abend. Das ist zumindest klar. So, wie ich's jetzt habe (in einem File), wäre jedenfalls dein inneres if-else in index.php umsonst, weil eh in beiden Fällen login.php aufgerufen würde. Die Unterscheidung würde in login.php passieren.

5) auswerten.php schaue ich mir an, sobald bis projektzeiterfassung.php alles stimmt und funktioniert. :)
 
1) hmm k. und wenn du es jetzt mal stück für stück "nach unten" versetzt? also nicht vor config, sondern danach (vor formular) und dann ggf nochmal nach formular. wenn sich irgendwo der status ändert/die ausgabe, dann wissen wir schonmal, wo es hackt.

2) gut :)

3) beispiel: der aktuele timestamp ist meinetwegen 1234567 und du willst dein $a anhängen, um den index im namen zu haben. lass $ jetzt mal 5 sein, dann ist der name des inputs also 12345675 - das kann zu problemen führen. daher würde ich es eben eher in dieser form speichern: 1234567_5. so ist gleich klar, was ist timestamp und was ist index. also statt $ts.$a ein $ts.'_'.$a speichern. mehr sollte das nicht bedeuten.

4) genau.

5) jops. allerdings solltest du eben den aufruf n der prj zeiterf php ändern. nicht den button in ne eigene form packen usw. einfach mit in die form, die zu index.php zurück leitet mit reinpacken und nen einzigartigen namen geben, den du dann in der index php wie gezeigt auswerten kannst, um zu entscheiden, welche php nun ausgegeben werden soll.
 
Nur mal kurz zu 1), am Rest arbeite ich noch ...

Wenn ich das if-Konstrukt unter include(config.php) setze, kommt "is set, value: ['test']". Also kann's in meinen Augen nur daran liegen, dass ich in config.php session_start() drinnen habe?! Es ändert sich allerdings nichts, wenn ich den in index.php reintue (statt config.php). Jetzt weiß ich nicht, wie ich das lösen soll.

index.php
PHP:
 <?php
    echo 'los gehts - config.php<br>';
    include('config.php');
 
    if (isset($_SESSION['name'])) {
        echo "is set, value: ['".$_SESSION['name']."']<br>"; 
    } else {
        echo "is not set";
    }
    
    echo 'weiter zu formular.php<br>';
    include('formular.php');
    
    if (!isset($_SESSION['name'])) {
        echo 'entscheidung a) - login.php<br>';
        include('login.php');
    } else {
         echo 'entscheidung b) - projektzeiterfassung.php<br>';
        include('projektzeiterfassung.php');
    }    
?>
config.php
PHP:
<?php
    session_start();
    
    define('MYSQL_HOST', 'localhost');
    define('MYSQL_USER', 'root');
    define('MYSQL_PASS', 'root');
    define('DATABASE', 'projektzeiterfassung');
    
    $user = "";
    $userid = 0;   
    $rechte = -1;   

    if (isset($_SESSION['name'])) {
      $user = $_SESSION['name'];
      $userid = $_SESSION['id'];
      $rechte = $_SESSION['rechte'];
    }
        
    $verbindung = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die ("Verbindung zur Datenbank konnte nicht hergestellt werden");
    mysql_select_db(DATABASE) or die ("Datenbank konnte nicht ausgewählt werden.");
?>
 
k, genau das war mein vermutung. probier mal bitte das hier:
session_start();
session_regenerate_id();

statt nur
session_start();


*gespannt bin* mein "mentor" damals hatte mir gesagt, das es sehr viel sinnvoller ist, diese zusatz dingens zu nutzen. ich vermute gerade, dass das teil das session array von vorhergehenden sitzungen leert, so dass man es wirklich immer neu anlegen muss. dann wäre mir jetzt nach ein paar jahren auch endlich mal der sinn des aufrufs klar :P aber probier erstmal :)
 
Ich hätte es gerade probiert, aber es kam ...
Parse error: syntax error, unexpected '$ts' (T_VARIABLE), expecting ',' or ';' in C:\xampp\htdocs\db\projektzeiterfassung.php on line 120
... weil ich zuvor 3) gemacht habe, aber anscheinend falsch?!

War das wirklich so gemeint?
PHP:
for ($i = 0; $i < 7; $i++) {
    $ts = $wochenanfang + ($i * 60 * 60 * 24);
    echo '  <td><input type="text" name="'$ts.'_'.$a'" maxlength="6" size="4"></td>';
}
 
Also ich hab's jetzt noch so ...
PHP:
echo '  <td><input type="text" name="'$ts.'"_"'.$a'" maxlength="6" size="4"></td>';
... und so ...
PHP:
echo '  <td><input type="text" name="'$ts."_".$a'" maxlength="6" size="4"></td>';
... probiert, aber der Error bleibt.
 
name="' ;) ach ne, ich bin ja doof ^^ du hast ja doch ' verwendet, wart mal...
echo ' <td><input type="text" name="'.$ts.'_'.$a.'" maxlength="6" size="4"></td>';

so >< also du hast den punktoperator vor ts und nach a nur vergessen gehabt. die ' hatten gestimmt ^^
 
Zurück