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

  • Ersteller Ersteller boss3D
  • Erstellt am Erstellt am
Okay, also auch mit dem "session_regenerate_id();" landen wir immer noch sofort bei projektzeiterfassung.php, wenn wir index.php aufrufen. Der erreicht einfach login.php nie ... :huh:
 
ah ok, regenerate id baut nur ne neue session id. hmm. also unser prob ist atm, dass wir dauerhaft eingeloggt sind ^^ dann müssen wir wohl etwas schärfer rangehn *hm* ich hatte damals bei mir noch nen "auto-logout" drin gehabt. also nach 5 mins nix tun wurde man automatisch rausgeworfen. dazu hatte mein user ne spalte pff last_on oder so. da wurde halt die zeit des letzten seitenaufrufs gespeichert für den kerl. bevor man dann die seite baut, hatte ich dann eben die jetzige zeit mit der gespeicherten verglichen. war das zeitlimit nicht überschritten, wurde die zeit geupdated, andernfalls wurde er ausgeloggt. das war so das grundprinzip davon.

ich schau erstmal fix, ob ich das ausloggen noch find ^^
PHP:
     function logout() {
       $_SESSION = array();
       if (isset($_COOKIE[session_name()])) {
         setcookie(session_name(), '', time()-42000, '/');
       }
       session_destroy();
       return true;
     }
oha, wie du siehst, hatte ich da noch mit cookies gewerkelt ^^ also ich denke, das wichtigste ist das destroy und das leeren des arrays (kA ob nötig). ich würd jetzt erstmal ganz stumpf das session destroy ganz oben mit reinschreiben (nach session start? mal probieren). dann biste erstmal auf die harte tour wieder drausen ^^

jetzt kannste dich entscheiden, ob du einen autologin nach zeit mit drin haben magst, oder ob du einfach erstmal nen logout button baust. dessen behandlung würde ich ans ende der formular.php hauen - sicher is sicher ^^ benannte 2 zeilen wären dann mMn alles, was der knopfdruck auslöst (und login = false, aber das nutzt du ja nicht mehr :) ).
 
Hallelujah ... während du überlegt und gepostet hast, habe ich die login.php wieder in zwei Teile zerlegt: login.php und registrieren.php. Jetzt, mit deinem "session_destroy();", landet er bei Aufruf von index.php immer sofort auf registrieren.php. Diese führt nach einer Registrierung zwar korrekt zur neuen kurzen login.php, aber dieser macht nach einem Login nichts mehr, außer sich selbst neu zu laden. :ugly:

Da habe ich mir jetzt wohl ein paar Verweise von einem File zum anderen zerschossen?!

index.php
PHP:
 <?php
    include('config.php');
    
    include('formular.php');
    
    if (!isset($_SESSION['name'])) {
        if (isset($_POST['btnReg'])) {
            include('registrieren.php');
        } else {
            include('login.php');
        }
    } else {
        if (isset($_POST['auswerten'])) {
            include('auswerten.php');
        } elseif (isset($_POST['auswertenadmin'])) { 
            include('auswerten2.php');
        } else {
            include('projektzeiterfassung.php');
        }
    }    
?>
config.php
PHP:
<?php
    session_start();
    session_destroy();
    
    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    
    $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.");
    
    $salt = "#sf$!\"ä\"\$asd³s²a~§653 sa51d75qÖAa@üeX";
    
    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="index.php" method="post">';
    echo '<br><h1>Projektzeiterfassung</h1>';  
    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>';
    
    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>';
        }
    }
    
    echo '</body>
        </html>';
?>
registrieren.php
PHP:
<?php
    $salt = "#sf$!\"ä\"\$asd³s²a~§653 sa51d75qÖAa@üeX";
    
    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>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>';    
?>
Übrigens kriege ich, wenn ich Verbindungsaufbau und Session Start nur in der config.php habe, die ganze Zeit dieses nervige Zeugs:

Capture.JPG

Ich muss den Verbindungsaufbau zumindest auch in login.php drinnen haben?!

[EDIT]
Firefox-Reload offenbart auch immer wieder neue Zustände ...

Aktueller Zustand (mit den Codes aus diesem Posting):
index.php aufrufen --> landet korrekt auf login.php --> will man sich einloggen, lädt sich login.php nur neu aber es passiert nichts / klickt man auf "Registrieren" --> registrieren.php, aber Eingaben landen nicht in DB

^^ Irgendwie kommt mir der registrieren.php Code gerade "komisch" vor?! Da fehlt doch was?! Die beiden Passwörter verlange ich vom User, aber dann passiert nichts mehr damit?!
Seh's gerade: Der hat ja auch kein INSERT. Klar, dass da nichts passieren wird.

[EDIT2]
Jetzt habe ich diesen vollständig aussehenden registrieren.php Code, aber der führt da rein:
PHP:
<?php
    $salt = "#sf$!\"ä\"\$asd³s²a~§653 sa51d75qÖAa@üeX";
    
    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="index.php" method="post">';
    echo '<br><h1>Projektzeiterfassung</h1>';
    
    if (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="index.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="index.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>';    
?>
Capture.JPG

[EDIT3]
Ich dreh durch! Das Aufsplitten der login.php hat mir jetzt scheinbar alles zerlegt! Alle Buttons in sämtlichen Files machen nur noch irgendwas! Die Pfeilbuttons in projektzeiterfassung.php führen jetzt plötzlich zur Login-Seite!
 
Zuletzt bearbeitet:
ja, das war ja jetz erstmal nur die holzhammer notlösungs methode ^^

jetzt sollten wir das ganze noch ebbes hübsch verpacken. den ganzen html code (also seiten start bis body und seiten ende ab /body) würd ich im übrigen aus den einzel files raushalten. hatte mir da auch schon was überlegt:
grundsätzliche strukturierung der ganzen geschichte:
- config.php erstellt 2 neue variablen: $protokoll und $site_title *vorschlag* ( und setzt sie auf leer = '';)
- formular.php greift ggf auf beide zu und ändert die. sinn ist es, dass die formular.php selbst noch KEINE ausgabe erzeugt, diese aber szs vorbereitet.
- in der index.php nach dem include von formular.php käme dann dein html zeugs hin. um index.php sauber zu halten, kannstes ja wieder auslagern. meinetwegen include('html_header.php'); oder so.
- als letzte zeile in der index.php käme dann der seitenabschluss. wenn wir dem auslagern treu bleiben wollen, dann zum bsp include('html_footer.php');

der inhalt der files wäre dann in etwa dieses hier (wenn du meine namensvorchläge verwendest):
html_header:
PHP:
    echo '<!doctype html>';
    echo '<html>';
    echo '  <head>';
    if($site_title == '') echo '    <title>Projektzeiterfassung</title>';
    else echo '    <title>Projektzeiterfassung - '.$site_title.'</title>';
    echo '    <meta charset="ISO-8859-1">';
    echo '    <link rel="stylesheet" type="text/css" href="style.css">';
    echo '  </head>';
    echo '  <body>';
    echo '    <div class="submit">';
    echo '      <form action="login.php" method="post">';
    if($protokoll != '') echo '        <p>'.$protokoll.'</p><br><hr>'; // kann man ja ggf noch schön mit css gestalten ^^
    echo '        <h1>'.$site_title.'</h1>';

html_footer beendet all das nun:
PHP:
    echo '      </form>';
    echo '    </div>';
    echo '  </body>';
    echo '</html>';
jut, was das soll, ist schon angedeudet. der header baut alles, was wir immer anzeigen. den seiten titel können wir also ggf in formular.php anpassen. zum bsp wenn btnRegForm gedrückt wurde, wird $site_title = "Registrierung"; gesetzt und schwupps ist der titel und die überschrift angepasst. wurden irgendwelche fehler erzeugt oder man will ne bestätigungsnachricht ausgeben, macht man bspw dann halt $protokoll.="Es wurden x Einträge in die DB gespeichert.<br>"; oder so. dann wird das ganz oben ausgegeben.

so, der footer ist dann für das abschließen all unseres krempels ausm header wieder zuständig. UND wir können hier lustig erweitern, sofern wir irgendwelchen krempel hinzufügen wollen, der IMMER am ende ausgegeben werden soll. zum bsp nen logout button ;P das könnte dann meinetwegen so aussehen:
abgeänderte html_footer:
PHP:
    if(isset($_SESSION['name'])) echo '        <input type="submit" name="logout" value="Ausloggen">';
    echo '      </form>';
    echo '    </div>';
    echo '  </body>';
    echo '</html>';
nun haben wir also (im eingeloggten status) immer einen logout button mit dem formschönen namen logout. in der formular.php behandeln wir ihn (ich würde wie gesagt empfehlen, den als letztes zu behandeln) dann in etwa so:
formular.php:
PHP:
<?php
    // ...
    if(isset($_POST['logout'])) {
      $_SESSION = array(); // session-array löschen (durch neu anlegen szs)
      session_destroy();
    }
?>
als letzten schritt müsste dann natürlich das session destroy aus der config raus.
 
Jetzt ist alles hinüber, ich kenne mich gar nicht mehr aus ...
 
Zuletzt bearbeitet:
Ich hab mich jetzt nicht durch die 43 Seiten gearbeitet, aber einfach mal in das Zip reingeschaut, ein paar erste Anmerkungen auf den ersten Blick hin:
- Die SQL-Queries sind offen für SQL-Injections (im Zweifelsfall den Begriff googeln). Man muss entweder mit mysql_real_escape_string/mysql_escape_string oder prepared queries oder irgendeiner anderer Form von Escaping arbeiten. Sonst kann das jedes Script Kiddie "hacken" und die Datenbank leeren.
- Genau so schlimm: Usereingaben einfach so im HTML-Code ausgeben! Sicher wirds mit einem htmlspecialchars() drum rum (z. B. bei den '.$username.' wurde erstellt, sollte besser '.htmlspecialchars($username).' wurde erstellt' sein
- mysql_query und Konsorten sind veraltet, man sollte mysqli_query oder (besser) PDOs verwenden, siehe auch PHP-Dokumentation. Die Funktionen werden in Zukunft entfernt werden - d. h. in neuen PHP-Versionen wird es einfach aufhören zu funktionieren
- meta-tags, insbesondere charset sollte vor dem title-tag stehen
- Muss es unbedingt ISO-8859-1 (und latin1 in der Datenbank) sein? Spricht etwas gegen UTF-8? Wie gesagt, habe mir die 43 Seiten hier nicht durchgelesen. Aber ich mag UTF-8. ;-)
- Das hier ist illegal: <input type="submit" value="<<" name="prevWeek" class="switch" - permanent werden unnötigerweise entities encodiert (z. B. ü), aber hier nicht?!? value muss natürlich "<<" lauten (oder einen Text wie "vorherige Woche" verwenden), das gleiche bei dem Button für die nächste Woche
- Ich finde Inline CSS bäh und würde das in eine externe Datei auslagern; das width-attribut von Tabellenspalten ist ja noch mehr Bäh, das kann erst Recht CSS sein
- Wozu um aller Welt wird hier ein leerer String per Concat angefügt: "montag".$a."" - das gleiche täte "montag".$a (genau so mit allen anderen Tagen)
- Verstehe nicht, warum der HTML-Code per PHP ausgegeben wird (z. B. in login.php), ist doch völlig unnötig
- "Ihr Username" und "Ihr Passwort" sollten ggf. mit label-Tags umschlossen sein, damit diese Labels den jeweiligen Formularfeldern zugeordnet werden können
- Mehrere <br>s hintereinander, die keinen semantischen Wert haben, sondern einfach nur Abstand erzeugen sollen, finde ich persönlich furchtbar, wozu gibts denn CSS?
- Die schließenden ?> am Ende der Dateien können jeweils weggelassen werden - ist auch sinnvoll, da ja hier teilweise mit Session Cookies gearbeitet wird. Ein versehentliches Leerzeichen nach dem ?> in config.php könnte zum Beispiel einen Fehler verursachen
- Die Idee von DarkMo header und footer auszulagern ist gut
- Ein paar Kommentare würden helfen. Wenn du den Code fertig stellst und in einem halben Jahr ist ne Änderung fällig musst du dich dann nicht wieder stundenlang einarbeiten

Folgendes ist mir dann aufgefallen, als ichs mal testweise auf meinen Server geschoben. Stell zum Testen bei dir auf jeden Fall ein, dass auch PHP Notices angezeigt werden. Dadurch fällt z. B. auf, dass
- $salt nie gesetzt wird - dadurch ist ein Salting natürlich sinnlos.
- $beschreibung nie gesetzt wird - soll vermutlich $_POST['beschreibung'.$a] sein
- ich würde allgemein empfehlen: Nenn die Formularfelder NICHT beschreibung1, beschreibung2, usw. sondern einfach beschreibung[] - Das macht alles so viel einfacher und übersichtlicher!

Nochwas, was kein Fehler per se ist, aber sehr irritierend: Unter dem Loginformular ist ja ein Button "Registrieren", also nahm ich an, um mich zu registrieren könnte ich meinen Benutzernamen und mein Passwort eingeben und dann jenen Button klicken. Keines Wegs, der Button führt erst zum Registrierungsformular, noch nichtmal mein eingegebener Benutzername wird in jenes übernommen.
 
Zuletzt bearbeitet:
ok, ich schreib mal der reihe nach auf, was ich gemacht hab:
Code:
- die beiden neuen dateien html_header.php und html_footer.php erstellt (inhalt wie oben)
- beide wie erwähnt in index.php eingepflegt

- config.php:
  - die kalender variablen (defaults) dort mit angelegt
  - wie gesagt die beiden neuen variablen angelegt
  - deine $add variable mit 1 initialisiert

- formular.php:
  - die [echo ]'s in [$protokoll .= ]'s verwandelt ^^
  - behandlung der registrieren form: erm, der button lautet doch btnReg und nicht registrieren? habs mal angepasst
  - gleich die nächste zeile (check, ob die eingaben ok sind) aufpoliert - du checkst btw nicht den usernamen -> ergänzt
  - oha, beim check, ob die paswörter übereinstimmen (eingabe und bestätigung) fragst du plötzlich den usernamen ab und prüfst NOCHMAL, ob pw leer war ^^ -> gestutzt
  - die protokollmeldung angepasst (hier ist das bestätigungs pw falsch, es geht NICHT um ne falsch ausgefüllte form ^^)
  - die meldung über den eingabefehler an der korrekten stelle eingebaut
  - $id in $check umbenannt - finde ich sinnvoller (und variablen namen sollten stets aussagekräftig sein)
  - diverse forms entfernt ;) das zerhaut dir nur wieder alles
  - die kalender-buttons usw mit aufgenommen
  - die add/rem buttons hier mit aufgenommen
    -> auch gleich in der funktion angepasst (addLine und remLine als auslöse-ereignisse...)
  - logout button behandlung hinzugefügt

- login.php:
  - auf die tabelle itself zurechtgestutzt (den rest haben wir ja nun in header und footer drin)
  - fehlendes </table> ergänzt ;P erm, ok. du baust das irgendwie ganz anders oO
  - gut, also: erstmal ne ordentliche nutzbringende tabelle gebaut (deine war a) fehlerhaft (kein tr tag) und b) sinnfrei ^^ - ne tabelle mit einer zelle? ><)
  - den button, der die registrier form aufruft umbenannt -> btnRegForm

- registrieren.php:
  - im endeffekt das selbe. btw hattest du bei login password als name und bei reggen passwort (d - t) - hattest du das dann überhaupt richtig abgefragt? nachher mal schauen :P
  - auch hier passworD verwendet als name
  - nen abbrechen button gebaut (sollte eigentlich zurück zu login führen, der name is eigentlich irrelevant)

- projektzeiterfassung.php:
  - die kalender variablen (defaults) hier entfernt
  - die kalender buttons usw rausgeschmissen
  - add remove buttons geschmissen
  -> formular.php ;)
  - auch hier wieder den header/footer krams geschmissen
  - scheiss die wand an, was haste denn hier für verrückte button konstruktionen drin? oO hab die mal umgebaut
    -> zeile hinzufügen von button zu input geändert, name addLine
    -> zeile löschen von button zu input geändert, name remLine

- auswerten.php:
  - auch wieder den kalender krams rausgeworfen
  - header/footer raus
  - wieder unnötige forms raus
    -> das mit dem export habsch erstmal unberührt gelassen

- auswerten2.php
  - auch wieder den config krams rausgeworfen (session start, db verbindung, kalender)
  - rest eigentlich wie bei auswerten.php
joa, hab jetzt an und für sich nich sehr viel am eigentlichen code (darstellung der tabellen mit den daten/inputs unverändert) geändert, hab mich eher erstmal um die grundstruktur gekümmert. also dass die buttons die richtigen namen haben, dass sie ordentlich angesprochen werden, dass alles dort behandelt wird, wo es sinn macht (aufgeräumter code usw)... schaus dir mal an (anhang). die änderungen hab ich ja komplett aufgeschrieben :) kannst ja mal schauen, ob es überhaupt funzt (sicher dir dein zeugs auf jeden fall!) und kannst dann ja die änderungen mal schritt für schritt durchgehen.
 

Anhänge

@Ben: größtenteils bekannt und bereits erwähnt. aber wir kämpfen gerade noch mit dem grundlegenden aufbau ^^ das value="<<" war auf meinem mist gewachsen ^^ hätt ich aber auch drauf kommen können ehrlich gesagt ><

jedenfalls kommt die "schönheits kur" am ende mal irgendwann. bisher is alles noch im dev mode szs und es soll überhaupt erstmal laufen. und er wird sicher nich seine eigene db hacken :P und dafür ist der code gut genug und es verwirrt nicht zusätzlich. natürlich am ende nochmal mit aufwand verbunden, das is klar.



edit: habs doch nochmal kurz getestet, mein lieber scholli. session_start muss wirklich gaaaaaanz am anfang kommen, da darf nichmal nen include befehl stehn... bis ich auf die idee kam. nu funzt es aber. hab noch paar fehler ausgemerzt (fehlende ; oder nen { zuviel ^^) und paar logiklücken geschlossen (seitentitel ordentlich anzeigen) und auch das << gefixt :P
 

Anhänge

Zuletzt bearbeitet:
@ DarkMo
Ich habe mir deine aktuellste Version mal angeschaut, aber da geht auch vieles nicht ...

- index.php führt sofort zu projektzeiterfassung.php
- beide Buttons in login.php machen nichts
- beide Buttons in registrieren.php machen nichts
- projektzeiterfassung.php liefert das hier:

Unbenannt.PNG

- auswerten.php liefert das hier:

Unbenannt.PNG
--------------

Mein Code wäre ja gestern Abend noch schön gelaufen ... bis ich eben die login.php wieder in zwei Teile aufgesplittet habe. Danach ging plötzlich gar nichts mehr. :(

Jedenfalls werden wir alt, wenn wir in deinem Code jetzt die zig Fehler suchen gehen. Ich schaue, dass ich meinen wieder auf den Stand bringen kann, als Login und Registrieren noch ein File waren. Dann hätten wir nämlich vorerst nur den einen Fehler, dass index.php zuerst zu projektzeiterfassung.php führt.

BTW, wegen dem ganzen Sicherheitszeug, das immer wieder erwähnt wird: Es erhalten genau 15 Leute aus dieser Abteilung hier Zugriff drauf und keiner davon sollte Interesse daran haben, irgendwas zu hacken. Es sind ziemlich belanglose Daten und die bisherigen Excel Tabellen waren auch für jeden einsehbar.

[EDIT]
Also ich bin jetzt wieder auf Stand #421.

Damit müsste ich es jetzt erstmal schaffen, dass beim Registrieren Daten in der DB landen, index.php zur login.php führt, und diese dann weiter zu projektzeiterfassung.php, anstatt sich selbst neu aufzurufen.

[EDIT2]
Es ist wirklich alles nur noch verpfuscht. Deinen Code habe ich noch weiter getestet und festgestellt, dass wirklich absolut gar nichts damit (korrekt) funktioniert, außer Zeile hinzufügen und Zeile löschen. Mein eigener hat aber auch so viele Fehler, dass ich gar nicht mehr weiß, wo ich noch ansetzen soll. :(

Ich habe jetzt diesen alten Code hier von vor einigen Seiten ausgegraben. Der kommt von allen Versuchen noch am ehesten dahin, was ich haben will: Anhang anzeigen db.7z

^^ Der Code hat "nur" noch folgende Probleme:
1) index.php ruft sofort projektzeiterfassung.php auf und nicht login.php
2) Keine Ausgabe von Daten in auswerten.php und auswerten2.php, aber da wissen wir ja mittlerweile, dass es am query scheitert. Da muss ich nochmal schauen, wie das mit dem läuft, das du ein paar Seiten später zusammengebastelt hast.

Kann mir bitte wer helfen, einfach "nur" genau DIESE 2 DINGE zu richten?
 
Zuletzt bearbeitet:
und er wird sicher nich seine eigene db hacken :P

Drei Gründe das trotzdem jetzt schon richtig zu machen:
1. Jemand anderes schafft es, sich Zugang auf die Seite zu verschaffen und hat böse Absichten. Dieser Person muss man es ja nicht unnötig leicht machen
2. Er möchte einen Usernamen für Bobby Tables anlegen (oder macht versehentlich etwas kaputt)
3. Er vergisst irgendwann, dass dieses Problem besteht, verwendet den Code in irgendeinem öffentlichen Projekt (oder macht dieses hier öffentlich) und dann passierts halt

edit: habs doch nochmal kurz getestet, mein lieber scholli. session_start muss wirklich gaaaaaanz am anfang kommen, da darf nichmal nen include befehl stehn...

Das Session Cookie muss im Response header gesetzt werden, also darf der Response Content nicht geschrieben werden, bevor die Session gestartet wird. Auch Leerzeichen sind Zeichen. Könnte wie gesagt mit den ?> zusammenhängen. Oder mit PHP-Fehlermeldungen.

EDIT: Den Query reparieren ist nicht schwierig. z.user muss u.name heißen (würde das zwar über die User-Id machen, aber gut). z.projekt muss z.taetprodid heißen. Dann kommt zumindest keine Fehlermeldung mehr. Es wird dennoch nichts ausgegeben, weil das Datum nie korrekt in die Datenbank geschrieben wird, siehe hier:
PHP:
$eintragen2 = mysql_query("INSERT INTO zeiten (userid, taetprodid, zeit) VALUES ('$userid', '$taetprodid', '$dauer')");
Da fehlt das datum einfach.

Die Formularfelder für die Zeitangabe heißen außerdem völlig anders, als das, was dann später geprüft wird (die Felder heißen sowas wie 1405936800_1, in formular.php wird aber nach Feldern namens montag1 etc. gesucht.)

Nach wie vor Fehlerhaft ist auch das Eintragen der Beschreibung:
PHP:
$eintragen1 = mysql_query("INSERT INTO projekte (taetigkeit,  produkt, userid, beschreibung, erstellt) VALUES ('".$_POST['taetigkeit'.$a]."', '".$_POST['product'.$a]."', '$userid', '$beschreibung', '$erstellt')");
muss heißen
PHP:
$eintragen1 = mysql_query("INSERT INTO projekte (taetigkeit,  produkt, userid, beschreibung, erstellt) VALUES ('".$_POST['taetigkeit'.$a]."', '".$_POST['product'.$a]."', '$userid', '".$_POST['beschreibung'.$a]."', '$erstellt')");

Noch eine Kleinigkeit: Das Datumsformat von $erstellt passt nicht ganz, da steht
PHP:
$erstellt = date('Y-m-d-h-i-s');
das sollte besser
PHP:
$erstellt = date('Y-m-d H:i:s');
sein. Wichtig ist das große H, damit es im 24h-Format gespeichert wird.
 
Zuletzt bearbeitet:
^^ Ich sitze eh gerade am Query-reparieren ... Vielen Dank, ich denke, das wird schonmal weiterhelfen. Was ich bis heute nicht verstanden habe, ist, wie ich denn nun wirklich 1405936800_x in die DB kriegen soll. Bei mir wird nach wie vor nur z. B. 2303 eingetragen. Aber vielleicht komme ich noch selber drauf. DarkMo hätte es ja schon erklärt gehabt. Allerdings müsste ich für seine Version wieder Code in meinen nun endlich funktionierenden einbauen, bei dem ich mir sicher bin, dass danach wieder nichts mehr geht?! Da bin ich mittlerweile sehr vorsichtig geworden.

Wie gesagt: Lieber ein funktionierendes "Chaos" (das ich aber verstehe), als die "perfekte" Struktur, die aber hinten und vorne gar nicht funktioniert (wie DarkMo's Code, als ich den getestet habe).

[EDIT]
Bis auf u.name hätte ich eh schon alles richtig gehabt:
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 u.name = '".$user."' AND u.id = z.userid AND pr.id = z.taetprodid AND pr.taetigkeit = t.id AND pr.produkt = p.id
          ORDER BY z.datum ASC;");
Das datum ist in meiner aktuellen Version auch längst (wieder) da:
PHP:
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')");
    }        
}
 
Zuletzt bearbeitet:
$_POST enthält alle Daten die per HTTP-POST (also dein Formular) gesendet werden. Die Schlüssel des Post-Arrays also das was hier zwischen den Anführungszeichen steht:
PHP:
$_POST['lustigerschluessel']
enstprechen den Namen deiner Formularfelder
PHP:
<input type="text" name="lustigerschluessel">

Du hast ja schon eine for-Struktur. Damit kannst du 1,2,3,4... ja durchgehen. Per Concat (Der .-Operator) wird diese Ziffer in einer Schleife angehängt:
PHP:
 for($i=1;$i<=$maximalerWert;$i++) { $key = '1405936800_'.$i; }
Key enthält nun in diesem Beispiel nacheinander 1405936800_1, 1405936800_2, 1405936800_3, usw....

Das was ich hier $maximalerWert nenne, heißt in deiner Datei $add

Soweit alles klar?

Es wird alles etwas einfacher, wenn du nicht 1405936800_1 sondern 1405936800[] verwendest, d. H. so:
PHP:
<input type="text" name="1405936800[]">

PHP macht dann aus allen Einträgen automatisch einen Array, sodass du anstatt for das in diesem Fall praktischere foreach benutzen kannst:
PHP:
foreach($_POST['1405936800'] as $value) {
  // $value enthält nun die Dauer
}

Das Formularfeld 1405936800 zu nennen, halte ich persönlich für extrem verwirrend und würde da DarkMos-Empfehlung folgen, es montag zu nennen.

Bzw. wenn das ganze montag, dienstag, usw. heißt:
PHP:
<input type="text" name="montag[]">

foreach($_POST['montag'] as $value) {
  // $value enthält jeweils die Dauer
}

Wie foreach funktioniert findest du in der PHP-Dokumentation. Ggf. wird es wichtig, dass die numerischen Keys bei 0 beginnen.

Hoffe das hilft erstmal weiter
 
Das was du hier (be)schreibst, steckt irgendwo in DarkMo's Code drinnen (du hast dir wahrscheinlich irgendeine Version von gestern Abend angeschaut?!), den ich aber weder verwenden kann, noch 100 %ig verstehe.

In MEINEM Code, mit dem ich hier arbeite, gibt's kein "key" und auch diese Zahl nicht, und ich wüsste auch beim besten Willen nicht, wo ich das reinbasteln sollte. :huh:

So schaut's bei mir gerade aus:
projektzeiterfassung.php
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.");
    
    $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--;
    }
    
    /*
    if (isset($_POST('Einträge editieren'))) {
        include('vorbeleg.php');
    } else {
    */
    
    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>';
    }
    
    echo '</body>';
    echo '</html>';
formular.php
PHP:
<?php      
    $user = $_SESSION['name'];
    $userid = $_SESSION['id'];
        
    $erstellt = date('Y-m-d H:i:s');    
    $add = $_POST['add'];

    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");
        $beschreibung = $_POST['beschreibung'.$a.'']; 
        
        $eintragen1 = mysql_query("INSERT INTO projekte (taetigkeit,  produkt, userid, beschreibung, erstellt) VALUES ('".$_POST['taetigkeit'.$a]."', '".$_POST['product'.$a]."', '$userid', '".$_POST['beschreibung'.$a]."', '$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')");
            }        
        }        
    }
auswerten.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'];
    $userid = $_SESSION['id'];    

    $kw = date('W', $wochenanfang);
    $jahr = date('Y', $wochenanfang);
    $monat = date('n', $wochenanfang);
    $tag = date('j', $wochenanfang);
    
    // in DB müssen lange Zahlen gespeichert werden! Nicht nur z. B. 2303!
    $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 u.name = '".$user."' AND u.id = z.userid AND pr.id = z.taetprodid AND pr.taetigkeit = t.id AND pr.produkt = p.id
          ORDER BY z.datum ASC;");
    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($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>';
    }
    
    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>';
 
Verstehe, hatte anderen Code vor Augen. Kannst du mir deinen nochmal zippen und hier reinstellen. Dann schau ich mir das nochmal an.
 
Ja, du hast vermutlich den gesehen, den DarkMo und ich übers WE gebastelt hatten. Da ging's im Prinzip drum, mein "Chaos" so umzuschreiben und aufzuteilen, dass es seinem System mit "einem Code über mehrer Files" entspricht. Aber mein Code war bereits viel zu komplex dafür. Ab dem Moment, wo ich dann meine login.php aufgesplittet hatte, ging dann gar nichts mehr, weil's alle Referenzen zerschossen hatte ...

Deswegen habe ich mir heute Früh einen "alten" aber weitestgehend funktionierenden Code von mir von vor einigen Seiten hier zusammengesucht, den jetzt aber trotzdem mit allen Tipps von DarkMo und dir optimiert (lediglich das mit salt habe ich noch nicht verstanden, aber lassen wir das vorerst). Damit sollte es ein halbwegs "sauberer" Code sein, aber eben nach meinem "System".

Anhang anzeigen db.7z

PS: Die vorbelegt.php bitte vorerst vergessen, auch wenn du schon erahnen kannst, was ich da vor habe. Aber das ist noch nicht fertig implementiert und erstmal nur ein grobes Konstrukt. ;)
 
Lass dir die PHP Notices anzeigen (siehe error_reporting). Dann siehst du z. B. das in projektzeiterfassung.php die Session nicht gesetzt ist, weil das session_start fehlt. session_start() darf auch nicht zweimal aufgerufen werden

Es gibt diverse kleine Fehlerchen (z. B. das maxlength="5"" in projektzeiterfassung.php), aber im großen und ganzen funktionierts, wenn die sessions funktionieren.

Mir ist unklar, wozu die Formularfelder im Tabellenkopf sind.
 
nurmal als ganz bescheuerte frage: WAS hast du denn bei dir laufen? oO bei mir läuft der code fehlerfrei >< vorallem unreferenzierte variable? sowas kennt php doch garnich xD is doch so ein punkt, wo sich alle drüber aufregen *dacht* in anderen sprachen musste explizit int variable; sagen, damit die variable bekannt ist (bei php kann man glaube - wegen der typlosigkeit - var $variable sagen, aber ich hab das NIE gebraucht oO). oder hat sich da seit php 5. irgendwas was geändert diesbezüglich? ich hab bei mir ääh - wo find ich das raus xD aha version 5.3.0

wie gesagt, ich hab keine ahnung, wo bei dir irgendwelches fehler herkommen. bei mir funzt das absolut flutschig, habs doch extra nochma getestet gehabt. und wie gesagt, an den eigentlichen geschichten hab ich nix gedreht (ordentliche anfragen, ordentliche abarbeitung der formulardaten, ordentliche aufbereitung in tabellenform...).


und wegen dem session_start, was ich in index php direkt als allererstes schreiben musste:
er hat am php von config.php gemosert, dass DAS nen header setzt oO da war kein leerzeichen oder irgendwas. einfach ein <? statt <?php hat (wie erwartet) nich gefunzt - da hat er das ganze file ignoriert. die php tags (<?php und ?>) wegzulassen endete in ner simplen ausgabe meines textes als html >< und nur das platzieren vor include config hphp brachte abhilfe oO


aber wie gesagt, wieso der code bei dir ned funzt is mir unbegreiflich.



edit: wenn ich mir deine fehlerchens so anschaue: fehlt da die config.php? er hat keine db verbindung, die ganzen variablen fehlen (obwohl das php mMn noch nie gestört hatte - was fehlt wurde einfach angelegt >< das war ja das geile an dem stück code ^^).


edit2:
http://php.net/manual/de/language.variables.scope.php
http://www.php.de/php-tipps-2010/72227-erledigt-php-notice-undefined-variable.html

sowas hab ich jetz alles mal gelesen - das MUSS gehn >< kA was du gemacht hast. der erste link sagt, dass es so funzt, wie ich sagte. der 2. zeigt nen bsp auf, wo sowas auftritt. in dem konkreten fall von wochenanfang, wochenende und kw aus deinem ersten bild ist das auch NICHT gegeben. sie haben explizit einen default wert bekommen. wie gesagt, es deuted irgendwie alles darauf hin, dass du irgendwas mit der config.php gemacht hast, dass die nicht aufgerufen/gefunden/what ever wird. darauf deuted allein schon die fehlende sql verbindung hin. es gibt keinen grund, wieso das nich funzen sollte *haare rauf*
 
Zuletzt bearbeitet:
@ DarkMo

Ich teste deinen Code jetzt gerade zuhause (heute Früh war's in der Firma). Also ...

1) index.php führt mich gleich mal hier hin. Zum Login komme ich nicht.

Capture.JPG

2) Klicke ich auf "Ausloggen", komme ich zum Login. Das ganze als Tabelle ist jetzt m. E. nicht wirklich schön, aber gut. Will ich mich als "test" einloggen, kriege ich das:

Capture1.JPG

^^ Login also nicht möglich. Okay, mal Registrieren probieren ...

3) Registrieren funktioniert, aber warum "Zurück zum Login", wenn ich eh schon da lande?

Capture2.JPG

4) Mit dem neuen Benutzer kann ich mich jetzt einloggen und lande wieder da:

Capture3.JPG

5) Zeile hinzufügen/entfernen funktioniert, eingegeben Daten landen aber bei "Bestätigen" nur teilweise in der DB. In "projekte" wird keine Beschreibung gespeichert und in "zeiten" wird gar nichts gespeichert.

6) Mal Ausgeben probieren ...

Capture4.JPG
-------------

Wie du siehst, bei mir läuft das mehr schlecht als recht. :(
Jedenfalls mache ich nicht mehr, als deinen db Ordner aus dem zip in htdocs einzufügen, in xampp Apache und PHP zu starten, und dann im Browser index.php aufzurufen.

[EDIT]
Ist alles da, auch die config.php ...

Capture.JPG
 
Zuletzt bearbeitet:
na jetzt funzt es doch auch xD wie ich sagte, hab ich mich erstmal nur darum gekümmert, dass all deine buttons alles ordentlich "verlinken". um die logik deiner db anfragen hab ich mich garnich gekümmert. auch den aufbau der tabellen hab ich nich angefasst (ausser eben login un reggen). btw, wieso sind alle tabellen auf width 100%?


wegen dem "zurück zu login": das is einfach nur, falls man sich verklickt hatte oder so ^^ find es einfach schön, wenn man solche möglichkeiten anbietet. und wie gesagt, mir gings erstmal darum, dass die grundstruktur, das fundament, erstmal ordentlich steht. um den aufbau, also die sql abfragen, ordentlich dargestellte tabellen usw, kann man sich im anschluss kümmern. das war nicht ziel meiner änderungen. mal bös gesagt: wenn das nich funzt, ist es deine schuld :P

aber jetzt wäre erstmal gewährleistet, dass du IMMER über die index.php gehst und die alles korrekt verknüpft, so dass du in jedem file alle benötigten daten hast. das alles gemacht ist usw.



edit: aso, und dass du erst ausloggen musstest hatten wir doch gestern schon: er löscht die doofe session ja bisher ned von allein. man muss manuell ausloggen. deine session bestand wohl noch von gestern, also galtest du als eingeloggt -> default seite für den eingeloggten zustand ist prj zeiterf php ;)
 
Zurück