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

  • Ersteller Ersteller boss3D
  • Erstellt am Erstellt am
wegen dem timestamp: DOCH - als int ^^ was ist denn ein timestamp? es ist die anzahl der sekunden seit dem 1.1.70 - also eine zahl. ein int ;) genauer ein longint wohl ^^ wenn man in der db das ganze als rtimestamp oder dtae angibt, dann wurschtelt er da immer gleich ein datum draus - ich persönlich möchte aber den echten timestamp, also diese lange zahl da, haben. denn aus dieser zahl kann man bequem wieder daten machen, unsere wochen-"randwerte" sind timestamp zahlen und und und...
 
^^ Es ändert aber nichts am Problem, "datum" jetzt als INT in die DB zu speichern ...

Capture.JPG

Es löst das Problem nicht, ich kriege trotzdem keine Ausgabe. Das einzige, das passiert, ist, dass das Datum jetzt nur noch als bspw. "1607" in die DB gespeichert wird, aber nicht als deine lange Zahl. Und ich gehe jede Wette ein, sollte ich irgendwann endlich mal ne Ausgabe kriegen, dass ich dann dieses doofe 1607 angezeigt kriegen werde, wenn ich INT als Format lasse.
--------------

Jedenfalls läuft mir langsam die Zeit davon mit dieser ewigen Fehlersucherei! Ich kann dem Ganzen noch bis ~ SA Abend lassen, längstens. Kriege ich auch dann noch keine Ausgabe, muss ich dann am SO ganz schnell versuchen, den Arbeitsstand von vor ~ 15 Seiten wiederherzustellen und noch schnell eine ganz simple funktionierende Ausgabe hinzubasteln.

Ich habe mittlerweile gefühlte 100 Mal unsere Codes verglichen, aber ich sehe keinen Unterschied, der bei mir die Ausgabe verhindern könnte:
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.");
    
    $user = $_SESSION['name'];   
    $ergebnis = mysql_query("SELECT id FROM user WHERE name='".$user."'");
    $row = mysql_fetch_object($ergebnis);
    $userid = $row->id;
    
    $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="auswerten.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;"></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>';
?>
Ich weiß auch gar nicht mehr, wo ich noch suchen soll. :huh:

Ich sage lediglich in der Form action="auswerten.php", während du da action="index.php" hast, was aber bei uns beiden darauf hinauslaufen sollte, dass sich die Seite selbst aufruft. Und überhaupt sollte das nur beim Weiterschalten der KWs (das ja bei mir auch nach wie vor nicht geht) relevant sein, nicht aber bei der Ausgabe allgemein?!

Meine Vermutung bleibt, dass irgendwelche Daten(formate?) in der DB nicht mit irgendwelchen Abfragen im Code zusammenpassen, aber ich seh's trotzdem nicht.
 
Ich sage lediglich in der Form action="auswerten.php", während du da action="index.php" hast, was aber bei uns beiden darauf hinauslaufen sollte, dass sich die Seite selbst aufruft. Und überhaupt sollte das nur beim Weiterschalten der KWs (das ja bei mir auch nach wie vor nicht geht) relevant sein, nicht aber bei der Ausgabe allgemein?!
wegen den KW's durchschalten - was fehlt denn auch bei dir? ^^ wenn du einen der beiden button drückst, behandelt die seite das in keinster weise ;) da fehlt code.

und wegen dem "sich selbst aufrufen" - das ist eben die frage, ob das so einfach ist. bei mir steht zum bsp der aufruf "index.php" übers formular in zeit.php ;) zeit.php ist aber nur ausgelagerter code der index.php und somit haut das hin. ich erinnere an den aufbau der index.php, der die grundgliederung und abläufe des php scripts ganz grob umreißt und darstellt.
PHP:
 <?php
  // mysql verbindung aufbauen, session verwalten, varaiblen definieren... (zum bsp, ob man eingeloggt ist ^^)
  include('config.php');

  // empfangene formulardaten bearbeiten - auch das loginformular, was einen ggf einloggt
  include('formular.php');

  // die eigentliche seite
  if(!$login) {
    // login
    include('login.php');
  } else {
    // tabelle mit eintragungen und eingabeformular
    include('zeit.php');
  }
?>
dein $kw = date('W'); bspw steht bei mir in config.php - also ganz am anfang des scripts. die behandlung der buttons, steht dann in formular.php. und schlussendlich die ausgabe mit der tabellenzeile usw steht in zeit.php. das hat den ganz einfachen grund, dass die reienfolge entscheident ist. erst baue ich die default-werte/initialwerte, DANN ändere ich sie ggf ab (weil nen button gedrückt wurde, der das verlangt) und anschließend gebe ich sie aus.

wie schon öfter gesagt, ich habe ein paar verständnis schwierigkeiten mit deinem code. meine lösung besteht faktisch nur aus der einen index.php. der rest is ja einfach nur ausgelagert, aber praktisch kann man das alles als ein file sehen. es geht IMMER in die index.php zurück. falls dein grundaufbau ähnlich/gleich ist, und du jetzt aus der zeit.php (um bei meinen bezeichnungen zu bleiben - bei dir wärs diese auswetung.php wohl) direkt die zeit.php aufrufst... joa, dann fehlt dir ja die hälfte. wenn die auswahl.php allerdings kein ausgegliederter teil der index.php ist, sondern was völlig eigenständiges - kA auf anhieb, was das für auswirkungen hat. es könnte aber auch so sein, dass dein auswerten.php "nebenläufig" zu meinem zeit.php zu verstehen wäre oder so. also meinetwegen sowas in der art hier:
PHP:
 <?php
  // ...
  if(!$login) {
    // tabelle mit ausgabe der existierenden db daten
    include('eingabe.php');
  } else {
    // tabelle mit eingabeformular für neue db daten
    include('ausgabe.php');
  }
  // ...
?>

aber wie gesagt: hier kann ich nur raten, aber ich befürchte schlimmes ^^
 
Ich habe heute in der Arbeit schon versucht, für mich auch sowas wie deine index.php zu basteln, aber das geht bei mir gar nicht. Zum einen müsste ich meine Files so dermaßen zerpflügen, dass dann gar nichts mehr funktionieren würde, und zum anderen habe ich durch die vielen Buttons schon so viele Verweise zwischen den Files, dass ich auch hier gar nicht wüsste, wie ich das dann alles wieder zum Laufen kriegen sollte ...

Dass mir für das Umschalten der KWs Code fehlt, habe ich schon bemerkt, aber auch hier weiß ich nicht, was genau aus deinem Code ich bräuchte und wo ich das bei mir in meinem System einbauen sollte.

Wobei ich sage: Im schlimmsten Fall kann ich das Umschalten zwischen den KWs weglassen und einfach alle Daten eines MAs ausgeben lassen. Dann vielleicht über ein paar if-Bedingungen und Datums-Vergleiche filtern.

Was WIRKLICH WICHTIG wäre, ist eben die verdammte Ausgabe. Aber soweit durchschaue ich das dann nicht, wie deine Codes "ineinandergreifen", als dass ich das was mir fehlt, jetzt finden würde. Habe ja heute schon 8.5 Stunden lang gesucht ...
---------

Ich setze mich morgen in der Arbeit nochmal hin und versuche, meine Codes auch erstmal alle durch ein index.php File aufrufen zu lassen. Einfach mal nur schaffen, dass mein jetziger Stand wieder da ist. Dann kann ich mir vielleicht Schritt für Schritt überlegen, was wo aus Redundanzgründen nicht mehr nötig ist ... und vielleicht komme ich irgendwie soweit, dass ich dann was ähnliches habe wie du. Aber alleine schon, wie ich das bei mir ohne die Javascripte, nur über die php Files, realisieren soll, weiß ich noch gar nicht.
Und ich kann mir eben nur noch bis SA Zeit damit lassen. Ich hoffe, dass dann irgendwas funktionierendes steht!
 
Zuletzt bearbeitet:
Was bitte willst du haben ???

Soll ich dir erklären, wie meine Files zusammenhängen? :huh:

1) login.html aufrufen (im Hintergrund werkelt login.php)
2) Will sich User registrieren, kommt er über Button zu eintragen.html (im Hintergrund werkelt eintragen.php). Ansonsten bei erfolgreichem Login weiter zu projektzeiterfassung.php.
3) Auf projektzeiterfassung.php Eingabe aller Daten. Diese entweder nur in die DB speichern, macht formular.php, oder weiter zur Ausgabe = auswerten.php bei MA und auswerten2.php bei Admin.
4) Beim Auswerten kann Ergebnis nach Excel exportiert werden, wozu im Hintergrund export.php arbeitet.

^^ Soweit die "Logik" der Zusammenhänge ...

Anhang anzeigen db.7z
 
so, hab mal mit dem eben verlinkten prog so ein ablauf diagramm erstellt. rechtecke stellen die files dar. alles zwischen den rechtecken ist quasi, was dann so am code passiert. diese abgerundeten 4ecke sind halt so sachen im code. die rauten stellen quasi if's dar. hier zweigen sich die bearbeitungswege. brauchst halt glaube das programm, um das zu öffnen.

mit nem ablaufdiagramm kann man halt grafisch den "weg durch deinen code" darstellen. hab grad auch kA ob ich das meistergültig so richtig gemacht hab ^^ aber es zeigt eben anhand der pfeile, was wann wo passiert *glaub* ><

btw: wo is bei dir der "einstieg"? also welches file muss ich aufrufen, um zu starten? so wie es klingt login.html. frag mich nur erstmal - wieso ne statische html? :ugly:
 

Anhänge

btw: wo is bei dir der "einstieg"? also welches file muss ich aufrufen, um zu starten? so wie es klingt login.html. frag mich nur erstmal - wieso ne statische html? :ugly:
Ja, genau. login.html aufrufen, dann geht's, je nach deinen "Entscheidungen", von einer Seite zur nächsten ...

Was meinst du mit statischer html?
 
ah ok. ich sehe schon, wie das gelöst ist. "komisch" ^^

also ich bin jetzt soweit (nur die codes angeschaut, nicht im browser - kA wie das pw für den test-user ist ^^):
- login.html
-> hier die daten eingeben
-> beim absenden des formulars kommt man nun zur login.php
erste anmerkung...
SELECT name, passwort FROM user WHERE name LIKE '$username' LIMIT 1; <- erm ^^ also entweder heißt der so, oder er heißt nicht so. gut, deine umsetzung von like entspricht dem, was es eigentlich sein soll ^^ ungewollt wohl :P ich hol mal etwas weiter aus: mit like kann man strings vergleichen. also bspw steht in der db was von "bäcker" und "schnacken" und "cräcker" und "häcken" und "häckern" und er soll mir alles raussuchen, was ein "cker" am ende hat -> like '%cker'. das % ist hier ein wildcard oder wie man das nennt - nen platzhalter. sprich, anstelle von % kann noch sonstwas stehen. er findet nun also für unser bsp "bäcker" und "cräcker". bei "schnacken" und "häcken" endet es auf nen n statt nen r und bei "häckern" ist zwar unser gesuchtes drin, aber es endet eben nicht damit. suchen wir nun nach pff "äck" irgendwo im string, dann sagen wir like '%äck%' und er findet für uns "bäcker", "cräcker" und "häckern". da du bei deinem like keine wildcard(s) nutzt, sucht er also nach exakt dem usernamen - das like ist also völlig überflüssig. das ist aber auch richtig so. weil beim usernamen gibts kein "wünsch dir was" ^^ entweder die angabe stimmt oder eben nich. lustiges usernamen-bestandteile-raten is nich ;) ebenso kannst du das limit 1 weglassen. beim registrieren musst du dann eben sicherstellen, dass der username nich schon weg is.

btw! ach da isses. wieder nen andres file xD du machst mich fertig he. hab das registrieren schon vermisst. also wenn ich DAS hier sehe:
Code:
[COLOR=blue]<form action="login.php" method="post">
    <h1>Projektzeiterfassung</h1>
    <table><th>Login</th></table>
    <p>Ihr Username:</p>
        <input type="text" size="24" maxlength="50" name="username"><br>
    <p>Ihr Passwort:</p>
        <input type="password" size="24" maxlength="50" name="password"><br><br>
    <input type="submit" value="Einloggen">
</form>[COLOR=red]<br>[COLOR=seagreen]<form action="eintragen.html">
    <input type="submit" value="Registrieren">
</form>
hab ich eigentlich schon keine fragen mehr :P
zuerst zu dem rot markierten <br>: form ist ein block-element (siehe HTML 4 Block-level Elements als bsp). das heißt nix anderes, als dass nach ihnen automatisch ein zeilenumbruch erfolgt. du brauchst also nicht selber dafür sorgen (es sei denn, einer langt dir nicht ^^). inline wäre der gegenpart. dann zu der geschichte mit den 2 forms. du hast das bestimmt gemacht, um eine fallunterscheidung vorzunehmen? also quasi die frage "logged er sich grad ein, oder regged er sich?" zu beantworten. das ist wohl der falsche weg xD du fragst zu früh ;) was passiert hier? dein formular mit all den eingabefeldern (hier blau dargestellt) ist oben. dazu gehört der login button. bzw um es ganeuer zu sagen: EIN button mit dem value (der aufschrift, dem label, dem ding, das für das formular völlig irrelevant ist ^^) einloggen. drückst du diesen button, so wird dein blaues formular abgeschickt und an login.php geschickt. drckst du nun aber auf den anderen button mit dem value registrieren... dann wird die grüne form abgesendet - und da steht was drin? nix >< du wirst es also sicher schwer haben, dich zu registrieren oder? :P

jetzt zu der sache mit den buttons: wie unterscheidest du korrekt, welcher button gedrückt wurde? als erstes: bau mal deinen reg-button mit ins blaue rein und lösch die grüne form. BITTE ^^ jetzt wird in login-php immernoch geschnallt, dass da daten ankommen, weil EIN button gedrückt wurde. WELCHER lässt sich aber nicht rausfinden. dazu musst du folgendes ändern:
Code:
<input type="submit" [B]name="btnLog"[/B] value="Login">
<input type="submit" [B]name="btnReg"[/B] value="Registrieren">
gib den dingern NAMEN! ^^ diese namen kannst du dann abfragen - das hab ich aber auch schon erwähnt! wurde btnLog gedrückt, ist $_POST['btnLog'] gesetzt -> if(isset($_POST['btnLog'])) echo "der sack will sich einloggen!"; meintest du nich sogar, das haste verstanden? ^^ das sind absolute basics für die abarbeitung von formularen. das selbe funzt natürlich äquivalent fürs reggen. in login.php bearbeitest du BEIDES! und wenn du das stück für stück und konsequent weiter zusammen streichst, wirst du irgendwann von deinen "20" files ganz automatisch wegkommen ^^

algorithmus-vorschlag aus der hüfte für login.php:
Code:
- eine variable login anlegen und auf false setzen
- username und pw aus formular in variable speichern
- will er sich reggen?
    - prüfen: username schon vergeben?
        - nein
            - eintrag erstellen
            - variable login auf true setzen

- will er sich einloggen?
    - username und pw prüfen
    - wenn alles stimmt, variable login auf true setzen
jetzt noch fix die einordnung in meinen code:
- die login.variable wird in config.php angelegt und auf false gesetzt
- der algorythmus hier oben wird in formular.php abgearbeitet (also da, wo alle buttons und formulardaten ausgewertet werden)
- deine login.html wäre bei mir die login.php hier verzweigt sich mein code -> if($login)...
ist man nicht eingeloggt, bekommt man also das login-formular zu sehen, ansonsten eben die zeit.php, welche uns die tabelle usw baut.

btw ist dein login kein wirklicher login ;) du hast quasi nur eine kette von seiten gebaut. dein login ist im endeffekt nur ein "unterbrecher" in dieser kette. es hindert aber keinen daran, einfach direkt die projektzeiterfassung.php aufzurufen ;) der SINN des einloggens ist es, dass ich das einmal tute, die seite erneut laden kann und immernoch eingeloggt bin. in deinem aufbau gesprochen: rufe ich bei dir erneut die login.html auf, müsste ich bei einem echten login dieses formular garnicht mehr sehen können (ich bin ja schon eingeloggt). andererseits dürfte mir ein zutritt zur projektzeiterfassung.php keinen erfolg verschaffen - sprich, ich müsste hier ne leere seite oder nen fehler oder sowas sehen. aber wie gesagt: klammer das login gelumbe erstmal aus, das ist nämlich ne andere hausnummer >< (und bei dir faktisch nicht vorhanden). aber gut, ich hab das auch scho lang ned mehr gemacht, muss mich da selber erstmal wieder reindenken.

gut, mal weiter schauen. nu hab ich die ersten 2 files gesehn und noch nix zum eigentlichen prob sagen können, aber schon 10 andre enddeckt ^^

hm, ok, wenn das mit dem $_SESSION['name'] funzt, dann scheint das login doch zu klappen. dü müsstest dann aber eben immer dafür sorgen, dass das auch ne auswirkung hat. also irgendwo am anfang (bei mir wieder in der config.php) müsstest du sowas schreiben:
$login = false;
if(isset($_SESSION['name'])) $login = true;

und weiterhin müsstest du dann irgendwie sowas schreiben, bevor dein eigentlicher code/irgendwelche ausgaben erfolgen:
if(!$login) echo "nicht eingeloggt, -> <link einloggen>";
else { /* dein bisheriger code */ }

wie du siehst, kommst du automatisch wieder genau zu meiner strukturierung zurück. jut, nu aber prjektzeiterfassung.php anschauen. arrrrr.... bitte nicht xD
PHP:
    $user = $_SESSION['name'];   
    $erg1 = mysql_query("SELECT id FROM user WHERE name='".$user."'");
    $row1 = mysql_fetch_object($erg1);
    $userid = $row1->id;
    $erg2 = mysql_query("SELECT rechte FROM user WHERE name='".$user."'");
    $row2 = mysql_fetch_object($erg2);
    $rechte = $row2->rechte;
wieso fragst du 2mal die selbe tabelle ab mit nur einer spalte? wieso nicht alle spalten mit einer abfrage? -> SELECT * FROM user WHERE name='".$user."'"
anderes wieso: wieso nich gleich die id gespeichert in der session anstelle des namens? oder einfach beides? sinnlose db-quälerei ;)
joa, dann folgt mein initialer "kalendercode", dann die ausgabe. die abfrage der buttons fehlt. wäre dieser code hier:
PHP:
  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);
müsste in zeile 22 rein. schon sollte die switcherei funtzen ^^ joar, kalenderzeile, tabellenkopf, nu mal schauen... jops, tätigkeiten und produkte aus db in nen array bauen, daraus dann die selects basteln. soweit sogut. add und das zeugs ist sicher fürs javascript lose hinzufügen von zeilen ne? ahja, da isses ja. oha. da beim div wirds wieder interesant. hab erstmal das ende der form gesucht... die ist oben bei der "kalender-zeile" am ende der inneren tabelle - copy-paste fehler? ^^ du hast dann noch weiter unten ein form ende. ah ok, eine erneute suche ergab interessantes :ugly:
du hast eine form, die zu formular.php führt. INNERHALB dieser form, hast du eine weitere, die wieder projektzeiterfassung aufruft. und unten bei den divs haste uch nochmal 2 oder 3. hier haste wieder genau das selbe problem, wie bei login. php. das funzt so ned. muss jetz erstma den rechner wechseln. hoffentlich bekomm ich den code da vorn ordentlich gelesen ^^

also bisher kannste daraus gut nen buch schreiben - wird nen krimi ^^
 
jut, weiter gehts. also mein vorschlag wieder: alles in EIN formular. diese zig formulare bringen dir GARNIX. ausser das nix mehr geht. hier nen kleiner link dazu: web standards - Is it valid to have a html form inside another html form? - Stack Overflow - is seltsamerweise garnich so leicht, dazu was zu finden oO aha, hier nochmal die bestätigung, dass ein button nur "seine" form absendet: multiple forms in one submit button

gut, also wie gesagt: alles in eine form, den buttons namen geben und sich selbst aufrufen (am besten eben nicht sich selbst, sondern die "einstiegs-seite" - immer wieder zurück zur einstiegsseite. bei dir also die login.html <. du erkennst das problem? ^^). dann vor "allem code" (also dort, wo ich meine formular.php angesiedelt hab) die behandlung der formulardaten betreiben. das ganze immer je nach gedrücktem button unterscheiden. das was du hier machst... das kann einfach nich funktionieren. du versuchst ein fahhrad zu bauen und hast rahmen und räder nicht miteinander verbunden ^^ das ding fährt so nicht. die räder kannste zwar meinetwegen einzaln rollen und den rahmen wenigstens noch durch die kante werfen, aber fahhradfahren wirste damit nicht können.

wie vermutet, dein ganzer code ist einfach nur schlimm, sry. du hast scheibbar völlig falsche vorstellungen. auch dein drang html und php unbedingt trennen zu wollen... wenn du das trennen willst, dann mach es eher so:
"fullphp" variante:
PHP:
<?php
  echo '<html>...</html>';
  echo '<body>';
  $var = 'world';
  echo 'hello '$var;
  echo '</body>';
?>
hier gibste die html dinger halt per echo aus - find ich persönlich jetzt nicht unlesbar. aber spätestens, wenn du dynamisch html-code erzeugst, wirst du eh so arbeiten müssen. aber falls es dir eben hilft, dann trenne es doch so auf. immernoch ein php file, aber dennoch ist php und html fein säuberlich getrennt:
PHP:
<html>...</html>
<body>
<?php
  $var = 'world';
  echo 'hello '$var;
?>
</body>
hier ist jetzt nur der phpcode wirklich auszuwertendes php. btw hab ich das glaube in meinem ersten posting geschrieben gehabt und du meinstes, diese basics sind bekannt :P wieso nutzt du es dann nicht? du baust dir nur probleme so.
 
Okay, vielen Dank für die Erklärung! Alles gelesen, das meiste verstanden ... ;)

Files, die ich schon habe, zusammenzufügen, ist das kleinste Problem. Schwieriger wird's, config.php so zu erstellen, dass es mit meinem Code zusammenpasst. Bin da gerade dabei.

Was ich allerdings NICHT verstanden habe:
a) Wieso soll dein Algorithmus-Vorschlag für login.php in formular.php abgearbeitet werden? Das hätte ich dich schon in login.php drinnen (jetzt erst recht, wo ich auch noch den Code von eintragen.php hinzugefügt habe):
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.");

    $salt = "#sf$!\"ä\"\$asd³s²a~§653 sa51d75qÖAa@üeX";
    $username = $_POST["username"];

    $abfrage = "SELECT name, passwort FROM user WHERE name='".$username."'";
    $ergebnis = mysql_query($abfrage);
    $row = mysql_fetch_object($ergebnis);
    
    echo '<link rel="stylesheet" type="text/css" href="style.css">';
    echo '<br><h1>Projektzeiterfassung</h1>';
    
    if (isset($_POST['btnLog'])) {    
        $password = hash('sha512', ($_POST["password"]).$salt);
        if ($row->passwort == $password) {
            $_SESSION["name"] = $username;
            header("Location: http://localhost/db/projektzeiterfassung.php");
        } else {            
            echo '<br><div class="submit"><form action="login.html">Benutzername und/oder Passwort waren falsch.<br><br><input type="submit" value="Login"></form></div>';
        }
    } elseif (isset($_POST['btnReg'])) {
        if (isset($_POST["passwort"] and $_POST["passwort"] != "" and isset($_POST["passwort2"]) and $_POST["passwort2"] != "") {
            $passwort = $_POST["passwort"];
            $passwort2 = $_POST["passwort2"];
        }
        if ($username == "test") {
            $rechte = 0;
        } else {
            $rechte = 1;
        }
        echo '<table><th>Registrierung</th></table>';
        if ($passwort != $passwort2 OR $username == "" OR $passwort == "") {    
            echo '<br><div class="submit"><form action="eintragen.html">Eingabefehler. Bitte alle Felder korrekt ausfüllen.<br><br><input type="submit" value="Zurück"></form></div>';
            exit;
        }
        $passwort = hash('sha512', ($passwort).$salt);

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

        if ($menge == 0) {
            $eintragen = mysql_query("INSERT INTO user (name, passwort, rechte) VALUES ('$username', '$passwort', '$rechte')");
            if ($eintragen == true) {                
                echo '<br><div class="submit"><form action="login.html">Benutzer <b>'.$username.'</b> wurde erstellt.<br><br><input type="submit" value="Login"></form></div>';  
            } else {        
                echo '<br><div class="submit"><form action="eintragen.html">Fehler beim Speichern des Benutzernamens.<br><br><input type="submit" value="Zurück"></form></div>';
            }
        } else {
            echo '<br><div class="submit"><form action="eintragen.html">Benutzername schon vorhanden.<br><br><input type="submit" value="Zurück"></form></div>';
        }
    }
?>
formular.php hätte ich mir für die Abfragen von projektzeiterfassung.php aufgehoben.

b) Wieso soll ich in projektzeiterfassung.php alle Spalten mit einer Abfrage abfragen, wenn ich doch nur 2 haben will? Und nachdem ich weiter unten im Code auch nur jeweils einen Wert brauche, "muss" ich den Inhalt der beiden Spalten doch in unterschiedliche Variablen speichern?!

c) Deinen Kalender-Code habe ich in projektzeiterfassung.php bei Zeile 22 eingefügt, aber er schaltet immer noch nicht die KWs durch. Stattdessen wird formular.php aufgerufen, weil ich's ja so in form action angegeben habe. Was müsste ich da noch ändern? Oder hattest du eigentlich gemeint, der Kalendercode solle in formular.php rein?

d) Was grundlegendes: Websiten sind für mich prinzipiell html-Dokumente. Ist das überhaupt "normal", dass wir ausschließlich mit php-Files arbeiten, die halt ein bisschen html-Code enthalten? Sollte es nicht eher umgekehrt sein, dass wir eigentlich nur html-Files haben, die php-Code (neben html) beinhalten? Jedenfalls gefällt mir deine "fullphp" Variante eindeutig besser.

Ich versuche, das jetzt mal alles hinzubasteln. Hoffe, ich schaff's bis zum WE ...

login.php
hätte ich eben schon so halbwegs fertig, siehe Code oben. Lediglich für { if (isset($_POST["passwort"] and $_POST["passwort"] != "" and isset($_POST["passwort2"]) and $_POST["passwort2"] != "") { } kriege ich noch "Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead)". Da habe ich mir noch nicht zu helfen gewusst. Ohne die issets kämen index-Fehler.

PS: Passwort für User "test" (= Admin) ist "test", für User "hallo" (= MA) eben "hallo".

[EDIT]
Ich habe jetzt versucht, login.php so hinzubasteln, dass ich login.html, eintragen.html und eintragen.php nicht mehr brauche, und login.php sich "um sich selbst kümmert". Damit hätte ich gleich 3 Files weggespart und formular.php könnte sich weiterhin nur um projektzeiterfassung.php kümmern.
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.");
    
    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 passwort FROM user WHERE name='".$username."'");
        $row = mysql_fetch_object($erg);
        $password = hash('sha512', ($_POST['password']).$salt);
        if ($row->passwort == $password) {
            $_SESSION["name"] = $username;
            header("Location: http://localhost/db/projektzeiterfassung.php");
        } else {            
            echo '<br><div class="submit"><form action="login.php">Benutzername und/oder Passwort waren falsch.<br><br><input type="submit" value="Login"></form></div>';
        }
        echo '</body>
            </html>';
    } 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" value="Registrieren">
            </form></div>
            </body>
            </html>';
        $username = $_POST['username'];            
        @$passwort = $_POST['passwort'];
        @$passwort2 = $_POST['passwort2'];
        if ($username == "test") {
            $rechte = 0;
        } else {
            $rechte = 1;
        }
        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;
        }
        $passwort = hash('sha512', ($passwort).$salt);

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

        if ($id == 0) {
            $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="login.php">Fehler beim Speichern des Benutzernamens.<br><br><input type="submit" value="Zurück"></form></div>';
            }
        } else {
            echo '<br><div class="submit"><form action="login.php">Benutzername schon vorhanden.<br><br><input type="submit" value="Zurück"></form></div>';
        }
    }
?>
Nur eines kriege ich ums Verrecken nicht hin: Ich will, dass zuerst grundsätzlich der html-Code vom Login angezeigt wird. Und wenn der User dann auf "Registrieren" kickt, soll STATT dem Login html-Code der html-Code zum Registrieren angezeigt werden. Also wär's doch logisch, den Login Code dann anzuzeigen, wenn der "Registrieren" Button noch NICHT gedrückt wurde (ergo !isset). Aber anscheinend gelten Buttons defaultmäßig als "set"?! Jedenfalls führt mein Code sofort zum html-Code von Registrieren. Und wenn ich gleich am Beginn des Codes sage, unset($_POST['btnReg']); ... , dann tut sich wieder nicht, wenn ich auf den "Registrieren" Button klicke.

^^ Blickt da einer durch?
 
Zuletzt bearbeitet:
großen Respekt an DarkMo, ich wäre schon vor 20 Seiten davongelaufen :D

Ich bin dafür der TE spendiert DarkMo einen Kasten Bier mindestens ;)
 
Zu dem Grundlegenden. Ja es ist durchaus normal das wir "nur" mit PHP Dokumenten arbeiten. Denn der Großteil der Webseiten arbeitet genau so eigentlich nur mit PHP Dateien. Der Browser wird dir aber

Das du dann tatsächlich html Dokumente ausgegeben hast liegt i.d.R. nur am CMS.

Erstens benutzen eigentlich alle großen Projekte Templates, zweitens wird häufig auf Page Caching zurückgegriffen.

Ein Tamplate ist eine Datei die nur die Optik vorgibt. also z.B.

Nennen wir die Datei Template.html
HTML:
<html>
<head>
</head>
<body>

<h1>{*-ÜBERSCHRIFT-*}</h1>

<table><tr><td>{*-INHALT-*}</td><td>{*-NAVIGATION-*}</td></tr></table>


{*-FUßZEILE-*}

</body>
</html>

Hierbei dient {*- Als Zeichenkette die den Beginn eines Platzhalters und -*} als Zeichenkette die das Ende eines Platzhalters beschreibt.

Deine PHP Datei heißt projekt.php

Dann arbeitest du anstelle von echo ""; beim erstellen deines HTML Codes im PHP Dokument halt mit Variablen. Im Ergebnis hast du dann also am ende deines PHP Dokumentes statt ausgegebenem CODE die Variablen "$inhalt" "$navigation" "$fußzeile" "$überschrift".

Zusätzlich hast du eine PHP Funktion die die Datei Template.html öffnet und nach den o.g. Platzhaltern sucht und diese durch den Inhalt der jeweiligen Variable ersetzt.

Das Ergebnis dieses Prozesses wird dann als projekt.html ausgegeben. Jetzt kannst du zusätzlich noch festlegen, das er diese Datei auf dem Server Speichert. In Projekt.php kannst du noch festlegen, das wenn die Datei nicht älter als eine Stunde ist er direkt auf Projekt.html weiterleitet.

Im Ergebnis würde dann also einmal pro Stunde der PHP Code ausgeführt und ansonsten der statische HTML Code ausgegeben.

Wenn ich das mit Login und registrieren richtig verstehe gibt es nur zwei zustände? Also eben Zeige Login an oder Zeige Registrieren an. ?

Dein Code kann natürlich nicht funktionieren. Denn du hast im LOGIN Formular den SUBMIT Login und den SUBMIT Registrieren.

Ergo sobald du einen von beiden drückst ist die Bedingung if(isset($_POST[btnLog]) ja automatisch immer TRUE(Du sendest das Formular mit beiden Buttons ja ab), zu elseif kannst du also gar nicht kommen.

1. Die Lösung wäre also entweder du arbeitest mit eine Button und JavaScript der über GET einen Link übergibt, wie ich es dir bereits mehrfach gezeigt habe. also z.B. Dateiname.php?inc=1
2. Oder du nimmst einen Link der nur so aussieht wie ein Button und machst es wie in Variante 1. nur ohne JavaScript.
3. Du benutzt ein zweites Formular

Dann brauchst du nur die eine Abfrage if(isset( $_GET['inc'])){REGISTRIEREN ANZEIGEN}else{LOGIN ANZEIGEN}

Bei mehr als zwei Zuständen wäre es eben if($_GET['inc'] == 1){REGISTRIEREN ANZEIGEN}elseif{$_GET['inc']==2}{IRGENDWAS ANDERES}else{LOGIN ANZEIGEN}
 
Zuletzt bearbeitet:
Okay, danke. Noch eine kleine Frage, weil ich dieses Problem so ziemlich bei jedem Arbeitsschritt durch's ganze Projekt hindurch immer wieder gehabt habe: Wenn ich Notices kriege, die ja eigentlich keine wirklichen Fehler sind, ist es "schlimm" oder "schlechter Stil", diese durch "@" im Code zu unterbinden?

Siehe bspw. in meinem zweiten Code oben vor den Passwort-Variablen in elseif. Ohne die "@" kämen index-Fehler. Diese wiederum könnte ich mit isset wegbringen, allerdings käme dann der Fatal Error.
-------------

Ach ja, und wie ist das nun bei den Buttons? Sind die standardmäßig "set", wie ich vermute? Warum wird mir in meinem Code immer der html-Teil von Registrieren ausgegeben, auch wenn der "Registrieren" Button noch gar nicht geklickt wurde?

[EDIT]
Irgendwie hat das meine Frage jetzt gar nicht beantwortet. Wieso wird sofort der html-Code für Registrieren angezeigt, selbst wenn ich noch gar keinen Button gedrückt habe???

Außerdem, wenn "Login" gedrückt wurde, interessiert Registrieren eh keinen mehr, da ist es dann schon egal, dass beide Buttons "set" sind. Aber wenn ich gleich nach dem Seitenaufruf "Registrieren" klicke, müsste er es schon ins elseif schaffen?!
 
Zuletzt bearbeitet:
Die Lösung mit den NOTICE ist relativ Simpel:

Es gibt nur zwei Möglichkeiten diese Loszuwerden

1. Möglichkeit: sauber programmieren
2. Möglichkeit: nimm das error_reporting ganz raus bzw Unterdrück es.

Die Frage ob es schlechter Stil ist sollte damit wohl beantwortet sein ;) Welcher COde zeigt denn jetzt registrieren an?
 
1) Ich rufe im Browser "localhost/db/login.php" auf ... So, was passiert?
Mir wird der html-Code von Registrieren angezeigt, obwohl ich aber defaultmäßig den von Login sehen will. Bis jetzt wurde noch KEIN Button geklickt (trotzdem scheinen diese bereits "set" zu sein?!).

Eine "Teillösung" wäre es nun, ganz oben im Code "unset($_POST['btnReg']);" zu sagen, dann wird mir korrekt der Login html-Code angezeigt und der Login funktioniert auch. Der "Registrieren" Button hingegen zeigt keine Wirkung. Eh klar, den haben wir ja "unset", also wird das elseif nie erreicht.

^^ Ich glaube jedenfalls, dass sich das relativ simple durch ein bisschen "Umschachteln" der if-Inhalte und vielleicht ein unset an der richtigen Stelle lösen lässt?! Ganz ohne Javascript, Links und sonstiges Zeugs. Und wie gesagt: Wenn erstmal "Login" gedrückt wurde, interessiert's keinen mehr, ob nun beide Buttons "set" sind, weil dann eh kein Registrieren für den User benötigt wird.

Kurz gesagt: Mein Code verhält sich so, als wäre der "Registrieren" Button sofort bei Aufruf der Seite im Browser "set" ohne überhaupt angeklickt worden zu sein. Wenn ich den Zustand ändern kann, dann würde der Code, denke ich, sofort das richtige machen?! (Eigentlich hätte ich das ja mit dem "unset" gleich zu Code-Beginn versucht, weil ich dachte, ein tatsächliches Anklicken des Buttons würde den dann eh wieder "setten", aber das scheint ja dann nicht mehr zu passieren)

2) "Sauber programmieren" ist gut, wenn ich nicht mal weiß, was denn in meinem Code überhaupt zu diesen Notices führt. Und was meinst du mit "error_reporting rausnehmen"? Wo hätte ich denn eines in meinem Code drinnen?
 
Zuletzt bearbeitet:
Das Error Reporting steht Default auf ON man kann es aber auf OFF Setzen. Für das Programmieren schaltet man es normalerweise auf ON aber im Echteinsatz auf OFF. Denn der User soll die Meldung ja nicht sehen falls es doch mal zu einem Fehler kommt, sonst gibst du Ja Infos über den Aufbau deines Codes und mögliche Schwachstellen für einen Angriff preis.

Natürlich passiert nichts.Denn sobald du auf einen der Buttons klickst wird ja die Seite Neu geladen. $_POST['btnReg'] wird dabei gesetzt. Wenn du jetzt aber als erstes Im Code ein unset($_POST['btnReg']) schreibst, dann löscht du die Variable. Bei der If Abfrage kann dan btnReg logischerweise auch nachdem du es angeklickt hast nie existieren, denn nach dem Klick hast du es ja selber wieder gelöscht.
 
hehehe, meiner geht grad zur neige, würde passen :P


mal abarbeiten:
a) äh ok, stimmt, du hast ja selber ne formular.php ^^ ich bezog mich auf meine (die steht nach der config.php und arbeitet alle formulardaten ab).
b) hier beziehste dich auf mein rumgemoser an den 2 select anweisungen? also select id from und select rechte from? du fragst 2mal nacheinander die selbe tabelle ab, holst dabei aber immer nur einen bestimmten wert. stell dir nen pizzalieferservice vor, der zu dir nen döner und ne pizza liefern soll und der kerl fährt ernsthaft 2mal :P verstanden? ein select * from reicht völlig. da holt er beide daten mit einem ritt und du kannst genauso drauf zugreifen:
PHP:
    $user = $_SESSION['name'];   
    $erg = mysql_query("SELECT * FROM user WHERE name='".$user."'");
    $row = mysql_fetch_object($erg);
    $userid = $row->id;
    $rechte = $row->rechte;
fertig is der lack. EINE anfrgae, BEIDE werte. aber wie ich bereits sagte, kannst du sogar noch diese anfrage wegrationalisieren. wenn du dich einloggst, machst du folgendes:
PHP:
    if ($row->passwort == $password) {
        $_SESSION["name"] = $username;
        header("Location: http://localhost/db/projektzeiterfassung.php");
      }
erweiter das doch einfach wie folgt:
PHP:
    if ($row->passwort == $password) {
        $_SESSION["name"] = $username;
        $_SESSION["id"] = $row->id;
        $_SESSION["rechte"] = $row->rechte;
        header("Location: http://localhost/db/projektzeiterfassung.php");
      }
dann kürzt sich der obere code aus projektzeiterfassung nämlich auf das hier zusammen:
PHP:
    $userid = $_SESSION["id"];
    $rechte = $_SESSION["rechte"];

c) ja er muss natürlich wieder projektzeiterfassung aufrufen, damit das klappt ;)

d) jop. php wird auf dem server ausgewertet. mit dem dynamischen php script erstellt der server ein statisches html dokument, was er dann sendet. zwischen server und browser wird NIE etwas anderes wie statisches html hin und hergeschickt! die auswertung des php codes erfolgt auf dem server. daher braucht man für änderungen auf clientseite eben javascript. jedesmal, wenn du die form abschickst, dann wird die ganze seite neu zusammen gezimmert. er fängt wieder komplett von vorne an. du bist wieder nicht eingeloggt (daher musst du ja die session prüfen - die soll den loginstatus "retten") und er fängt wieder von punkt 1 deines scripts an. und hier ist eben der große knackpunkt bei dir: er fängt eben NICHT wieder an punkt 1 an (das wäre die login.html gewesen) sondern irgendwo mittendrin, schon 3 schritte weiter.

dein fehler mit den issets: kontrolliere mal die klammern :P


und am ende das noch. schau dir mal die kleinste logik deines files an, ich versuchs mal runterzubrechen - nur die schleifen, ohne viel code:
PHP:
<?php
    // session starten
    // sql verbindung
    // html-header...

    if (!isset($_POST['btnReg'])) {
       // formular zum reggen
       // sendet an login.php
       // button = btnReg
    }

    if (isset($_POST['btnLog'])) {
       // auswertung der daten und einloggen
       // das html dokument wird hier abgeschlossen
    } elseif (isset($_POST['btnReg'])) {
       // formular zum reggen
       // sendet an login.php
       // button = hat keinen namen
       // das html dokument wird hier abgeschlossen
       
       // dann rechtezuweisung (sehe ich als workaround an, lass ich daher mal gelten)
       // korrekter wäre sowas hier:
         /*
         der erste registrierte user bekommt per default das recht 0, alle anderen 1
         somit kann auch nur der erste user anderen rechte zuweisen (bräuchte man ne weitere seite für)
         haben auch andere das recht 0, können die das natürlich dann auch verwalten
         -> ob das jetzt in der form sinnvoll ist... aber es ginge erstmal grundlegend ^^
         */
         
       // ausgaben im fehlerfalle, obwohl schon </html> kam :P
    }
?>
du kommst also rein, und es wird garnichts angezeigt. warum? es wird nur etwas angezeigt, wenn du einen button gedrückt hast. wenn du die seite frisch aufrufst, dann ist da aber kein button als gedrückt markiert. somit wird nichts angezeigt, auch keine buttons zum drücken, um beim nächsten seiten-generieren doch was anzuzeigen. hast hier also schon einen konzeptionellen fehler drin. zudem ist die html struktur in deiner form... ungut. bau es doch in etwa so auf: am anfang den "html kopf" (bis <body>) und ganz am ende, als allerletztes die seite abschließen (</body></html>). dazwischen dann deine schleifen und ausgaben usw. genauso solltest du auch mit der form arbeiten. entweder kommt anfang UND ende rein, in ne schleife oder if... oder eben beides raus. aber nicht anfang draussen machen und ende drinne. da verwirrst du dich nur selber. wie könnte der grundaufbau also nun in etwa aussehen? ich versuchs mal so zu basteln, dass reggen und login 2 verschiedene formulare sind. im grunde würde hier eins für beides reichen, da man beim reggen einfach keine zusätzlichen infos angibt. also egal ob reggen oder login, man gibt nur username und pw ein. ABER!, wenn wirs jetzt trennen, kannste später das reggen formular easy ausbauen (name, vorname, MA-nummer... kA ^^).
PHP:
<?php
  // wie gesagt, zuerst einmal sagen wir, das wir NICHT eingeloggt sind:
  $login = false;

  // jetzt schauen wir, ob das stimmt:
  if(isset($_SESSION['name'])) {
    // wir sichern die session-variablen, kann man wohl als optional ansehen
    $login = true;
  }

  // nun gehts los...
  // schnell noch den html-krams bis body meiseln...

  // hier nochmal kurzer einschnitt: wir müssen checken, ob wir nicht nen button zum registrieren oder einloggen gedrückt hatten:
  if(isset($_POST['btnReg'])) {
    // checken, obs den usernamen schon gibt (bzw obs überhaupt scho user gibt -> wenn nicht, rechte = 0, sonst = 1)
    // wenn nicht, per insert anlegen
    // das $_SESSION-array mit unseren daten füllen
    // - um die id rauszufinden, kannst du den befehl http://php.net/manual/de/function.mysql-insert-id.php nutzen :)
    // - für die rechte eben wie oben gesagt: isses der erste user gewesen, recht = 0, alle anderen bekommen erstmal 1
    // login auf true setzen
    $login = true;
  }

  // hier jetzt für den fall, dass wir uns einloggen wollten
  if(isset($_POST['btnLog'])) {
    // checken, ob die eingaben stimmen (also obs nen user mit diesem pw gibt bla)
    // wenn ja, das $_SESSION-array mit unseren daten füllen
    // login auf true setzen
    $login = true;
  }

  // dann noch fix die form bauen, die uns wieder auf diese seite zurück wirft
  // hier wird jetzt entschieden, ob wir zugang zur eigentlichen seite erhalten...
  if($login)
    include('eigentliche_seite.php');
  
  // ...oder ob wir uns doch erst noch einloggen müssen
  else {
    // falls wir gesagt haben, wir wollen uns registrieren (wir haben einen button mit namen "btnRegForm" gedrückt), dann gib uns das registrierungs-formular aus:
    if(isset($_POST['btnRegForm'])) {
      // meisel uns das formular (ohne form tags, die haben wir ja schon) zum registrieren mit einem button namens "btnReg"

    // oder haben wir noch garnichts gedrückt?
    } else {
      // meisel uns das formular (ohne form tags, die haben wir ja schon) zum einloggen mit einem button namens "btnLog"
      // ebenfalls bauen wir hier einen button namens "btnRegForm" ;) als value eventuell "zur Regsitrierung" oder so
    }
  }

  // die form abschließen
  // und die html-seite abschließen
?>
du siehst, es läuft irgendwo auf diesen aufbau hinaus, den ich schon 10mal gepostet hab ^^
 
Zurück