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

  • Ersteller Ersteller boss3D
  • Erstellt am Erstellt am
Die "kleinen Fehlerchen" suche ich mir schon selbst zusammen, keine Sorge ... ;)
^^ Dazu gleich ne Frage: BenRo meinte, ich solle mir über das error_reporting Notices anzeigen lassen. Das passiert doch eh schon die ganze Zeit, ohne dass ich das jetzt noch was "aktivieren" müsste, oder?

"Zurück zum Login" halte ich immer noch irgendwie für sinnlos, weil das ja auf der Login-Seite angezeigt wird (das ist so, als würdest du im Warenkorb einen Button machen "Zum Warenkorb"). width 100 % wollte ich haben, damit sich die Tabellen unabhängig von der Display-Größe des Users immer schön über den ganzen Monitor erstrecken. Und in projektzeiterfassung.php hätte das ja auch gut ausgeschaut, aber in login.php und registrieren.php leider eben nicht, wie man an deinem Code sieht. Da fand ich meine Version schöner, aber vielleicht kann man das nochmal hinbasteln?! Oder hast du die ganze html-Ausgabe bereits so "automatisiert", dass alles nur noch als Tabelle dargestellt werden kann?

BTW: Dass es bei mir hier so "halbwegs" läuft, heißt leider nicht viel. Ich hatte ja in der Firma ein identes Setup, aber es ging gar nichts. Es war schon immer mehr Glück und Zufall als sonst was, ob irgendwas geht. Und leider lassen sich die ganzen Fehler auch nie wirklich reproduzieren. Oft reicht ein Seiten-Reload um ein Notice wegzubringen, dafür taucht ein anderes auf, etc. ... so geht das schon die ganze Zeit.
 
die darstellung is bums. es is nur wichtig, dass die inputs zw <form...> und </form> stehen ^^ wie die da angeordnet sind... aber du hattest halt diese einzellen-tabelle, daher hatte ich das einfach ausgebaut. btw musst du ja nicht generell jede tabelle so behandeln per css. ohne es angeschaut zu haben, hast bestimmt table { css-formatierung } gemacht oder? machste einfach ein table.class_name {...} draus und hängst an jede tabelle die dieser formatierung folgen soll ein class="class_name" an. also <table class="class_name"> bspw. bei login und php lässte das eben weg.

und btw: login und register sind 2 verschiedene seiten. so wie auch projektzeiterfassung und auswerten 2 verschiedene sind. daher find ichs schon sinnvoll, nicht nur von login zu reggen switchen zu können, sondern auch zurück.

wegen den notices: ich wüsst grad nichma, wie es geht *duck* aber dachte auch bisher, dass das alles angezeigt wird ><



jut, wegen den fehlern im "büro" - was haste denn dort für ein "system"? auch xammp wie bei dir @home oder läuft da was anderes? andere version, neuer, älter, was grundverschiedenes? wer weiß, wie ein anderes webserver programm die gleichen daten behandelt. auf jedenfall ist das ein nicht unwichtiger punkt. bringt ja nix, wenns @home läuft und dann auf arbeit nur rumspackt ^^



edit: aso, falls daran interesse besteht, hier nochmal meine css:
Code:
td.head_cap {
  background: #AFA;
  text-align: center;
  border: 1px solid #5A5;
  border-radius: 0.5em 0.5em 0 0;
}

td.head {
  background: #AFA;
  text-align: center;
  border: 1px solid #5A5;
}

td {
  border: 1px solid #888;
}

input.switch {
  background: none;
  border: none;
  color: #5A5;
}

input.switch:hover {
  background: none;
  border: none;
  color: #030;
  text-shadow: 0px 0px 15px #0F0;
}

button.switch {
  background: none;
  border: none;
  color: #5A5;
}

button.switch:hover {
  background: none;
  border: none;
  color: #030;
  text-shadow: 0px 0px 15px #0F0;
}

td.head_foot {
  background: #AFA;
  text-align: center;
  border: 1px solid #5A5;
  border-radius: 0 0 0.5em 0.5em;
}
 
Also den MAs "zuzumuten", sich zuerst ausloggen zu müssen, um sich einloggen zu können, halte ich für etwas viel verlangt ... Da sollten wir schon noch auf eine Lösung kommen, sodass man wirklich gleich zum Login kommt, ohne außer dem Seitenaufruf irgendwas machen zu müssen. Und nein, meine Session bestand nicht noch von gestern, ich habe das wirklich alles erst vor ~ 30 Minuten gestartet.

Beim "Zurück zum Login" Button reden wir immer noch aneinander vorbei. Ich glaube, du wolltest den auf der Registrieren-Seite haben, wo er auch tatsächlich Sinn gemacht hätte. In der Tat befindet er sich aber auf der Login-Seite (siehe mein Screenshot), wo er leider absolut keinen Sinn macht.

Ich habe im Büro, wie auch zuhause: Windows 7, xampp (idente Version), Firefox 30, notepad++. Dennoch kann ich nie davon ausgehen, dass was auch dort gehen wird, nur weil's hier läuft.

[EDIT]
Das wird ja alles noch "lustig", wenn wir das dann auf den Firmen-Webserver verfrachten müssen, wo definitiv kein xampp laufen wird ... dafür weiß Gott was sonst. Wenn dann nix läuft, Hallelujah!
 
hattest du dich gestern ausgeloggt? ich vermute eben, nicht. was weis ich denn, wie lange der den kram speichert ^^ als ich das ganze komplett neu gestartet hatte gestern zum testen, kam jedenfalls wie gewünscht erst der login. ohne logout -> kein login. da wir bisher nur eine variante des logouts drin haben (händisches ausloggen per button), wird sich da halt auch nich viel dran ändern. was wir noch machen können ist wie gesagt die geschichte mit dem zeitbasierten logout (timeout der sitzung quasi) und/oder ip-wechsel. gerade letzteres ist wieder ein sicherheits-dingen. wenn einer deine session übernimmt, dann wird er automatisch ausgeloggt (da seine ip nicht deiner entspricht). das übernehmen der session wäre also ohne kenntnis der logindaten sinnlos. weiß mich, wie wichtig dir das wäre, je nachdem könnten wir da mal was zusammen basteln *denk*

ach wegen dem zurück zum login - raffsch nid ^^ in login.php hab ich 2 buttons drin: einloggen (btnLog) und zur registration (btnRegForm). und in registrieren.php hab ich auch 2 drin: registrieren (btnReg) und abbrechen (name irrelevant). wo siehst du also das "zurück zum login?" ^^



edit: AAAAHSO. das is in der formular.php beim abrödeln der registrierung. du hattest da auch irgend was drin, das hatte ich umgetüdelt. gut, das is wirklich latte und kann weggelassen werden ^^
 
Ich habe deinen Code auf dem/meinem PC hier vor einer Dreiviertelstunde zum allerersten Mal ausgeführt. Da kann gar nichts gespeichert gewesen sein. Übrigens würde ich auch nicht davon ausgehen, dass sich MAs nach ihrer Benutzung der Website verlässlich ausloggen und diese nicht einfach nur schließen. Da sollten wir uns schon noch was überlegen. Nicht, dass dann der nächste MA Probleme kriegt ...

BTW: Jetzt klar? ;) Da hat's was:

Capture2.JPG

^^ "Zurück zum Login" auf Login bringt nichts!
 
hab den entsprechenden teil mal angepasst, sieht jetzt so aus:
(änderungen fett und grün markiert)
Code:
    if(isset($_POST['btnReg'])) {
        if(isset($_POST['username'], $_POST["password"], $_POST["password2"]) and trim($_POST["username"]) != "" and trim($_POST["password"]) != "" and trim($_POST["password2"]) != "") {
            $username = $_POST['username'];
            $passwort = $_POST['password'];
            $passwort2 = $_POST['password2'];
            if ($passwort != $passwort2) $protokoll .= '- die Bestätigung des Passworts stimmt nicht.<br>';
            else {
                $passwort = hash('sha512', ($passwort).$salt);
                if ($username == "test") $rechte = 0;
            else $rechte = 1;

                $check = mysql_query("SELECT * FROM user WHERE name='".$username."';");
                if(mysql_num_rows($check)) $protokoll .= '- Benutzername schon vorhanden.<br>';
                else {
                    $eintragen = mysql_query("INSERT INTO user (name,  passwort, rechte) VALUES ('$username', '$passwort', '$rechte')");
                    if($eintragen) $protokoll .= '- Benutzer <b>'.$username.'</b> wurde  erstellt.';
                    else [B][COLOR=blue]{[/B]
                      $protokoll .= '- Fehler: Der Benutzername war schon vorhanden.';
                      [B][COLOR=blue]$_POST['btnRegForm'] = true;
                      unset($_POST['btnReg']);
                      $site_title = "Registrieren";
                    }[/B]
                }
            }
        } else [COLOR=blue][B]{[/B]            $protokoll .= '- Eingabefehler. Bitte alle Felder korrekt ausfüllen.<br>';
            [COLOR=blue][B]$_POST['btnRegForm'] = true;
            unset($_POST['btnReg']);
            $site_title = "Registrieren";
        }[/B]    }
im erfolgsfalle landet man direkt wieder bei login, so wie das bisher "ausversehen" schon so war ^^ im fehlerfalle allerdings manipuliere ich (ungetestet - hoffentlich erfologreich ><) dann die post-dinger so, dass man wieder zur reggen-form kommt (und pass auch den seitentitel wieder an).
 
weschen dem login bla:
ich hab jetzt mal ne schnelle variante mit dem ipchange-autologout gebaut (hoff das funzt auch so simpel ^^).

änderungen an der config.php wie eben hervorgehoben:
Code:
<?php
    define('MYSQL_HOST', 'localhost');
    define('MYSQL_USER', 'root');
    define('MYSQL_PASS', 'root');
    define('DATABASE', 'projektzeiterfassung');
    
    [COLOR=blue][B]function logout() {
      $_SESSION = array(); // session-array löschen (durch neu anlegen szs)
      session_destroy();
    }[/B]    
    $protokoll = '';
    $site_title = 'Login';
    
    $user = "";
    $userid = 0;   
    $rechte = -1;   
    $ipadresse = $REMOTE_ADDR;

    if(isset($_SESSION['[B][COLOR=blue]id[/B]'])) {
      [B][COLOR=blue]if($_SESSION['id'] == $ipadresse) {[/B]
        $user = $_SESSION['name'];
        $userid = $_SESSION['id'];
        $rechte = $_SESSION['rechte'];

        $site_title = 'Projektzeiterfassung';
      [B][COLOR=blue]} else {
        logout();
      }[/B]
    }
        
    $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.");

    $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);
    
    $add = 1; // eine eingabezeile by default
?>
unsere logout funktionalität in eine funke ausgelagert, so dass wir den code ggf nur einmal ändern brauchen. dann gleich die ip der session abgefragt (is glaube nichmal nötig, aber fühlte sich irgendwie sicherer an xD) und noch ne innere if hinzugefügt, die eben prüft, ob die ip noch stimmt. wenn nicht, logout...

in der formular.php dann folgendes:
Code:
    // ...
    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;
            [B][COLOR=blue]$_SESSION['ip'] = $ipadresse;[/B]

            $site_title = 'Projektzeiterfassung';
        } else {
            $protokoll .= '- Benutzername und/oder Passwort waren falsch oder nicht registriert.<br>';
        }
    }

    // ...

    if(isset($_POST['logout'])) {
        [B][COLOR=blue]logout();[/B]
    }
    // ...
auch hier das logout gelumbe über die neue funke aufgerufen und eben beim login sichergestellt, dass auch die ip mitgesichert wird. sofern es nen netsplit gibt und sich die ip täglich ändert, dürfte das schonmal funtzen. is natürlich die frage, ob das bei nem vermuteten intranet dingens auch so geht ><



edit: wegen diesem salt error: den hab ich wohl gelöscht? find ihn jedenfalls ned mehr >< am besten das teil ($salt = "#sf$!\"ä\"$asd³s²a~§653 sa51d75qÖAa@üeX";) bei config.php mit angeben. oder spricht da was dagegen @mitleser ^^
 
Zuletzt bearbeitet:
Wann ist eigentlich Abgabefrist für das Meisterwerk? Oder schreibt ihr hier die unendliche Geschichte?
Ganz anderes Thema, was sagt eigentlich dein Arbeitgeber dazu, dass du den Source-Code veröffentlichst?

Vielleicht habe ich ja diesmal Chance auf eine Antwort. Ist auch ganz bestimmt nicht "pseudosarkastisch" gemeint. ;)
 
so, nachtrag:
wegen dem fehlenden salt wird wohl unser login mit test/test nich geklappt haben. leider wird nun unser neu angelegter futzi nich mehr einloggbar sein (da ich jetz zumindest den salt wieder in config mit reingekritzelt hab). aber eben deine ursprünglichen sollten wieder gehn *denk*

gut, dann habsch nen fehler bei meinem ip-code gefunden: hab session id statt ip abgefragt >< hab jetzt das ganze nochmal um nen 5 minuten timeout erweitert (der hoffentlich funzort) ^^ aber das lässt sich ja eigentlich easy testen (runtersetzen auf testweise 2 secs, kurz warten zw klicks, dann sollte der logout kommen.

config.php sieht nun so aus (also der wichtige teil):
PHP:
    // ...
    $ipadresse = $REMOTE_ADDR;
    $now = getdate();
    $timeout = 5 * 60; // 5 minuten bis auto-logout

    if(isset($_SESSION['ip'])) {
      if($_SESSION['ip'] == $ipadresse) {
        if($_SESSION['last_on'] >= ($now[0] - $timeout)) {
          $user = $_SESSION['name'];
          $userid = $_SESSION['id'];
          $rechte = $_SESSION['rechte'];
          $_SESSION['last_on'] = $now[0];  // aktualisiere zeit

          $site_title = 'Projektzeiterfassung';
        } else {
          logout();
          $protokoll .= "- Die Sitzung wurde aufgrund eines Timeouts unterbrochen (zu lange keine Aktion durchgeführt). Bitte loggen Sie sich erneut ein.";
        }
      } else {
        logout();
        $protokoll .= "- Die Sitzung wurde aufgrund eines IP-Wechsels unterbrochen. Bitte loggen Sie sich erneut ein.";
      }
    }
    // ...
und formular.php beim einloggen das hier:
PHP:
    // ...
    if(isset($_POST['btnLog'])) {
        $username = $_POST['username'];
        $erg = mysql_query("SELECT * FROM user WHERE name='".$username."'");
        $row = mysql_fetch_object($erg);
        $password = hash('sha512', ($_POST['password']).$salt);
        if ($row->passwort == $password) {
            $_SESSION['name'] = $username;
            $_SESSION['id'] = $row->id;
            $_SESSION['rechte'] = $row->rechte;
            $_SESSION['ip'] = $ipadresse;
            $_SESSION['last_on'] = $now[0];
            
            $user = $username;
            $userid = $row->id;
            $rechte = $row->rechte;

            $site_title = 'Projektzeiterfassung';
        } else {
            $protokoll .= '- Benutzername und/oder Passwort waren falsch oder nicht registriert.<br>';
        }
    }
    // ...
*gespannt bin* hab extra die ip-meldung höher priorisiert, da ich das als wichtiger empfinde. wäre doof, wenn man nach 5mins und einer sec nich mehr die meldung bekommt, dass die ip geändert wurde (wegen hack bspw ^^). hoffe, ich hab jetz nich wieder irgendwelche fehler reingemehrt ><


edit: natürlich wieder ; vergessen xD



edit2:
ok, er wollte das nich so recht machen. hatte da eine vermutung: lokal aufm rechner wird dat mit der ip nix, was uns so einiges zerfummelt. vermutung richtig gewesen >< habs daher nun so abgeändert (nur config.php):
PHP:
    // ...
    $ipadresse = $REMOTE_ADDR;
    if($ipadresse == '') $ipadresse = "localhost";
    $now = getdate();
    $timeout = 5 * 60; // 5 minuten bis auto-logout

    if(isset($_SESSION['ip'])) {
      if($_SESSION['ip'] == $ipadresse) {
        if($timeout >= ($now[0] - $_SESSION['last_on'])) {
          $user = $_SESSION['name'];
          $userid = $_SESSION['id'];
          $rechte = $_SESSION['rechte'];
          $_SESSION['last_on'] = $now[0];  // aktualisiere zeit

          $site_title = 'Projektzeiterfassung';
        } else {
          logout();
          $protokoll .= "- Die Sitzung wurde aufgrund eines Timeouts unterbrochen (zu lange keine Aktion durchgeführt). Bitte loggen Sie sich erneut ein.<br>";
        }
      } else {
        logout();
        $protokoll .= "- Die Sitzung wurde aufgrund eines IP-Wechsels unterbrochen. Bitte loggen Sie sich erneut ein.<br>";
      }
    }
    // ...


ach und beim registrieren hab ich gesehn, das ich 2 fehlermeldungen übersehen hatte. da kam zwar ordnungsgemäß der fehler, aber man wurde wieder zu login geworfen und blieb nicht beim reggen. habs daher auch angepasst:
Code:
    // ...
    if(isset($_POST['btnReg'])) {
        if(isset($_POST['username'], $_POST["password"], $_POST["password2"]) and trim($_POST["username"]) != "" and trim($_POST["password"]) != "" and trim($_POST["password2"]) != "") {
            $username = $_POST['username'];
            $passwort = $_POST['password'];
            $passwort2 = $_POST['password2'];
            if ($passwort != $passwort2) [B][COLOR=blue]{[/B]
              $protokoll .= '- die Bestätigung des Passworts stimmt nicht.<br>';
              [COLOR=blue][B]$_POST['btnRegForm'] = true;
              unset($_POST['btnReg']);
              $site_title = "Registrieren";
            }[/B] else {
                $passwort = hash('sha512', ($passwort).$salt);
                if ($username == "test") $rechte = 0;
            else $rechte = 1;

                $check = mysql_query("SELECT * FROM user WHERE name='".$username."';");
                if(mysql_num_rows($check)) [B][COLOR=blue]{[/B]
                  $protokoll .= '- Benutzername schon vorhanden.<br>';
                  [COLOR=blue][B]$_POST['btnRegForm'] = true;
                  unset($_POST['btnReg']);
                  $site_title = "Registrieren";
                }[/B] else {
                    $eintragen = mysql_query("INSERT INTO user (name,  passwort, rechte) VALUES ('$username', '$passwort', '$rechte')");
                    if($eintragen) $protokoll .= '- Benutzer <b>'.$username.'</b> wurde  erstellt.';
                    else {
                      $protokoll .= '- Fehler: Der Benutzername war schon vorhanden.';
                      $_POST['btnRegForm'] = true;
                      unset($_POST['btnReg']);
                      $site_title = "Registrieren";
                    }
                }
            }
        } else {
            $protokoll .= '- Eingabefehler. Bitte alle Felder korrekt ausfüllen.<br>';
            $_POST['btnRegForm'] = true;
            unset($_POST['btnReg']);
            $site_title = "Registrieren";
        }
    }
    // ...
funzte bei mir soweit erstmal alles. gut, trotz salt in der config, konnt ich mich ned mit test/test einloggen >< aber wie erwartet war mein selbst erstellter login auch hinnev xD
 
Zuletzt bearbeitet:
Das ist wirklich irre ... hier in der Firma geht wieder gar nichts ... :ugly:

@ DarkMo
Ich habe zwar alle deine Änderungen noch gemacht, aber rauskommen tut gleich mal zu Beginn das hier:

*gelöst, siehe EDIT*

Wenn ich dann gleich login.php aufrufe und dort auf "Registrieren" klicke, passiert auch wieder gar nichts. Der Button macht nichts.
^^ Selbes Szenario, wenn ich manuell registrieren.php aufrufe und Daten eingebe. Da kann ich auf die Buttons klicken so oft ich will, passiert gar nichts.

Und projektzeiterfassung.php liefert letztendlich noch das:

Unbenannt.PNG

:what: Kann sein, dass es bei mir zuhause ginge (kann ich erst heute Abend testen), aber das würde auch nichts nützen, weil es ja HIER in der Firma laufen muss!

Ich schau mal, ob ich ein paar der Notices wegbringen kann, aber dass index.php und auch die Buttons gar nicht funktionieren, macht das ganze kompliziert.

[EDIT]
google sagt: Dein "REMOTE_ADDR" ist php4, jetzt heißt das "$_SERVER['REMOTE_ADDR']". Damit hätte ich schon mal diese beiden Notices weg ...

BTW: Die ganzen Fehlermeldungen kommen jetzt daher, weil ich "error_reporting(E_ALL);" ganz oben in config.php eingefügt habe.
Jedenfalls versuche ich gerade, erstmal alles nötige auf mysqli umzuschreiben um die deprecated warnings wegzukriegen. Dabei kriege ich aber immer wieder "query empty" Meldungen. Da scheinen noch einige Abfragen nicht mit der DB zusammenzupassen?!

Unbenannt.PNG

Was mir auch aufgefallen ist: Seit wann ist denn sowas hier ( "SELECT * FROM produkte;"; ) korrekte Syntax? Gehört ; hinter produkte nicht weg? Jedenfalls finde ich das so in keinem Tutorial.
 
Zuletzt bearbeitet:
wegen den nicht funktionierenden buttons:
klar geht das nich ;) die beiden einzelfiles haben ja nichmal nen form tag. der wird ja in html_header geöffnet und in html_footer geschlossen. wie gesagt, NUR über index.php aufrufen.

wegen ip: aha, gut zu wissen. aber das offenbart genau das, was ich befürchtet hab: du hast wohl auf arbeit ne neuere version von php laufen und die zickt mit dem "alten" code rum *vermut* aber wie du richtig erkannt hast: das muss gefixt werden. was mir am ehesten kopfzerbrechen bereitet is die meldung, dass variablen undefiniert sein sollen (kannst ja mal probieren, ob ein var davor was ändert - also da, wo ne variable erstmalig genannt wird (meist also wohl config)). und eben, dass er nichmal ne db ausgewählt hat. mit bissl glück langts, wenn du das mit dem mysqli gelumbe hinbekommst, aber ich wüsst hat len, was das mit den anderen variablen zu tun haben soll :/


ach und wegen dem ; im sql sting: das ist sehr interessant, dass das in tutorials fehlt >< das ding ist an und für sich pflicht. damit gibt man dem dbms bekannt, dass hier die anfrage endet. schau dir mal deine .sql datei an. hier werden viele viele anfragen nacheinander gebaut. ohne ; wüsste das teil nu garnich, wo eine anfrage ended und die andere anfängt. bei einer einzelnen anfrage kann mans notfalls auch weglassen, ohne das was passiert (wie bei unseren aufrufen eigentlich immer), dennoch gehört das teil eigentlich dran.
 
Ja, dass ich deine Codeteile NUR über index.php aufrufen sollte, hatte ich schnell kapiert ... ;)

Allerdings führt mich auch index.php sofort wieder zu projektzeiterfassung.php, ohne jemals einen Login zu sehen. DAS ist ja wieder das doofe an der Geschichte.

Das Fehlerbeheben geht eh flott dahin, sobald man mysqli einigermaßen zu durchschauen beginnt. Z. B. ist es optional, den DB-Namen im Verbindungsaufbau anzugeben, soweit so gut, allerdings wird dann nie eine DB-Verbindung zustande kommen. K. A. wie die sich das Logik-mäßig vorstellen. Jedenfalls hat's bei mir gleich wieder geklappt, nachdem ich auch noch DATABASE in den Verbindungsaufbau reingeschrieben hatte.

Wegen dem ; --> Zeig mir ein Tutorial, wo das so angegeben wird. Sonst kann ich dir gerne sofort mind. 3 zeigen, wo ein ; erst nach ("SELECT ..."); kommt, also am Zeilenende. Mag natürlich sein, dass du recht hast, nur ist das über google nicht rauszufinden.
----------

Jedenfalls kämpfe ich derzeit mit folgendem Problem:

Unbenannt.PNG

BTW: Ich habe, wie gesagt, hier auf der Arbeit die exakt selbe xampp Version wie auch zuhause. Ergo selbe PHP Version! Warum geht's dann hier nicht, zuhause aber schon (wobei ich aber deinen aktuellsten Code zuhause noch nicht testen konnte)? :huh:

[EDIT]
Hab's schon. So muss es aussehen:
PHP:
$taetigkeiten = array();
$res_t = mysqli_query($mysqli, "SELECT * FROM taetigkeiten") or die ("Get Taetigkeiten failed.<br>".mysql_error());
if (mysqli_num_rows($res_t))
    while ($row_t = mysqli_fetch_assoc($res_t)) {
        $taetigkeiten[count($taetigkeiten)] = $row_t;
    }

$products = array();
$res_p = mysqli_query($mysqli, "SELECT * FROM produkte") or die ("Get Produkte failed.<br>".mysql_error());
if (mysqli_num_rows($res_p))
    while ($row_p = mysqli_fetch_assoc($res_p)) {
        $products[count($products)] = $row_p;
    }
Interessanterweise will er mir scheinbar eh den Login anzeigen, landet aber trotzdem auf projektzeiterfassung.php?! :what:

Unbenannt.PNG

[EDIT2]
Soweit das ganze jetzt mal in mysqli: Anhang anzeigen db.7z

^^ Folgende Probleme hat der Code (zumindest hier am Firmen-Rechner):

a) Bei aufruf von index.php lande ich scheinbar beim Login, wobei mir da aber offenbar nur dieser Header, allerdings mit dem Code aus projektzeiterfassung.php, angezeigt wird?! Beim echten Login lande ich erst nach "Ausloggen" (oder wenn die Zeit abgelaufen ist, wobei mir da 5 Minuten arg knapp vorkommen).
b) Dabei habe ich noch was interessantes festgestellt:
Warning: session_destroy(): Trying to destroy uninitialized session in C:\xampp\htdocs\db\formular.php on line 138
Anscheinend wird also unsere Session gar nie gestartet?! Obwohl sie ganz zu Beginn von index.php steht?!
c) Wenn ich in auswerten.php (und vermutlich auch auswerten2.php) auf "<<" oder ">>" klicke, führt das zurück zu projektzeiterfassung.php. Korrekterweise sollten aber ebenfalls die KWs durchgeschaltet werden. K. A. was es da noch hat ???
d) Mein Export-Button führt derzeit auch nur zurück zu projektzeiterfassung.php, aber das ist ja noch klar, weil wir den Button bis jetzt in formular.php nicht bedacht haben. Den baue ich jetzt gleich mal rein.
e) Bei "Bestätigen" landen nur Einträge in der Tabelle projekte, nicht aber in zeiten. Irgendwo hierin muss der Fehler liegen:
PHP:
if (isset($_POST['confirm'])) {
    for ($a = 1; $a <= $add; $a++) {
        $stunden = array("montag".$a."", "dienstag".$a."",  "mittwoch".$a."", "donnerstag".$a."", "freitag".$a."", "samstag".$a."", "sonntag".$a."");
        $data = array("mo", "di", "mi", "do", "fr", "sa", "so");
    
        $eintragen1 = mysqli_query($mysqli, "INSERT INTO projekte (taetigkeit,  produkt, userid, beschreibung, erstellt) VALUES ('".$_POST['taetigkeit'.$a]."', '".$_POST['product'.$a]."', '$userid', '".$_POST['beschreibung'.$a]."', '$erstellt')");  
        $taetprodid = mysqli_insert_id($mysqli);
        
        for ($b = 0; $b < 7; $b++) {
            if (isset($_POST[$stunden[$b]]) and $_POST[$stunden[$b]] != "") {
                $dauer = $_POST[$stunden[$b]];
                $tag = $_POST[$data[$b]];                                
                $eintragen2 = mysqli_query($mysqli, "INSERT INTO zeiten (userid, taetprodid, zeit, datum) VALUES ('$userid', '$taetprodid', '$dauer', '$tag')");
            }
        }
    }
}
Wobei ich mir bei dem data-array eh nicht mehr ganz sicher bin. Früher hatten wir ja die 7 echos mit "mo", "di", ... , aber das haben wir ja längst in projektzeiterfassung.php durch diese Schleife ersetzt:
PHP:
for ($i = 0; $i < 7; $i++) {
    $ts = $wochenanfang + ($i * 60 * 60 * 24);
    echo ' <td><input type="text" name="'.$ts.'_'.$a.'" maxlength="6" size="4"></td>';
}
 
Zuletzt bearbeitet:
Wegen dem ; --> Zeig mir ein Tutorial, wo das so angegeben wird. Sonst kann ich dir gerne sofort mind. 3 zeigen, wo ein ; erst nach ("SELECT ..."); kommt, also am Zeilenende. Mag natürlich sein, dass du recht hast, nur ist das über google nicht rauszufinden.
kann dir als quelle nur meinen sql-prof nennen :P bei dem hab ich grundlagen sql und 2 vertiefungen geschrieben und jeweils gut bestanden ^^ ich mag sql *g* also wie gesagt, bei einer einzelnen machts scheinbar nichts aus, vllt ist mysql da auch nicht so penetrant wie oracle's sql, aber ich habs mir halt gleich angewöhnt, eine sql anfrage immer mit ; zu beenden :ka:


generell lese ich raus, dass die verbindung nun wieder steht? wie siehts mit diesen undefined gerödel aus? und wenns gelöst ist: wie? ^^ würde mich echt brennend interessieren, was er da zu mosern hat.

Interessanterweise will er mir scheinbar eh den Login anzeigen, landet aber trotzdem auf projektzeiterfassung.php?!
das hatte ich bei mir auch schon. er merkt sich irgendwie nich, auf welcher seite man war. aber gut, im eingeloggten zustand müsste er dennoch prjzeiterf. anzeigen und nicht login. kam aber gestern nich mehr zum rumexperimentieren. ich habe früher bei meinen dingern da immer mit nem get-parameter gearbeitet. weil das wid auch das problem sein, dass er dich zu prj-zurückwirft, wenn du in auswerten was klickst.

zu deiner liste...
a) wäre ja quasi gerade das angesprochene, dass hier meine logik noch nich ganz hinhaut (er zeigt login als überschrift an). den timeout kannste ganz easy in config anpassen. da steht atm 5*60, machste halt 10*60 oder sonstwas draus ^^
b) ist interessant oO
c) wieder wie in a) schon angesprochen - meine lösungsidee auf die schnelle wäre das mit diesem get parameter. oder man versuchts mit nem weiteren hiddenfield oder so. kA wie es alles machbar ist. mal schauen. jedenfalls müssen wir irgendwie mitgeben, von wo aus wir etwas gesendet haben und das dann beim neuaufruf übernehmen. nur buttondrückerei zum wechseln zu anderen "seiten" darf diesen wert dann übermalen ^^ ist so dir grundidee.
e) it grundsätzlich recht simpel. da du ja nun nach meinem vorschlag statt mo/montag... den timestamp nutzt, wird er bei deiner inneren schleife nix mehr finden. ABER es sollte recht easy ummodelbar sein. du müsstest nur wieder ts mit reinbringen (statt i*... eben b* schreiben, da dein index der for schleife hier b ist) und deine abfragen leicht ändern. aus post stunden b wärde dann zum bsp post ts_b werden (wieder kurzschreibweise ^^ hoff du weist was ich mein). und das datum selbst (also deine tag variable) wäre einfach ts.

PHP:
        for ($b = 0; $b < 7; $b++) {
            $ts = $wochenanfang + ($b * 60 * 60 * 24);
            if (isset($_POST[$ts.'_.'$b]) and $_POST[$ts.'_.'$b] != "") {
                $dauer = $_POST[$ts.'_.'$b];
                $tag = $_POST[$ts];                                
                $eintragen2 = mysqli_query($mysqli, "INSERT INTO zeiten (userid, taetprodid, zeit, datum) VALUES ('$userid', '$taetprodid', '$dauer', '$tag')");
            }
        }
 
Bei der Verbindung war das Problem, dass du in mysql stehen hattest:
PHP:
$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.");
In mysqli ist die zweite Zeile nicht nötig, aber ich hatte anfangs vergessen, dafür DATABASE als vierten Parameter in der ersten Zeile einzufügen. Also wusste er erstmal nicht, zu welcher DB denn die Verbindung hergestellt werden sollte. So stimmt's jetzt und funktioniert einwandfrei:
PHP:
$mysqli = new mysqli(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, DATABASE);
if ($mysqli->connect_errno) {
    echo "Verbindung zur Datenbank konnte nicht hergestellt werden: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
"undefined" kriege ich auch keine mehr. Ich habe generell ALLE Errors, Warnings und Notices bis auf eines weggekriegt. Eben das mit dem "session_destroy()" in formular.php ist geblieben. Bei $salt war das Problem, dass das einfach gar nirgends im Code stand. Ich hab's einfach schnell aus nem alten Code rauskopiert und bei uns jetzt in config.php eingefügt, schon hat's gepasst. ;)

Den Unterschied zwischen $_GET und $_POST hatten wir ja schon ein paar Mal, aber ich lese mir das trotzdem gerade nochmal durch. Noch sehe ich aber nicht, inwiefern das bei uns hier das Problem a) lösen soll.
b) Jo, das mit der Session ist immer noch ne komische Geschichte. :huh:
c) Das witzige ist ja, ich hatte das ja schon mal laufen, in einem meiner früheren "Chaos-Codes". Und in projektzeiterfassung.php machen diese beiden Buttons ja auch genau das richtige. Ich suche deshalb schon die ganze Zeit einen Unterschied im Code zu auswerten.php. Eigentlich habe ich die nämlich ursprünglich als copy-paste erstellt. Irgendwas kleines muss sich durch unsere Rumbastlerei gerade so viel geändert haben, dass die Buttons jetzt nicht mehr das richtige machen. Oder vielleicht liegt's auch daran, wie wir auswerten.php in index.php aufrufen?!
d) Da ist mein Versuch relativ schnell gescheitert ...
PHP:
if (isset($_POST['export'])) {
    include('export.php');
}
^^ Das in formular.php eingefügt funktioniert jedenfalls nicht. Muss ich weiterüberlegen.
e) Ja, dass es jetzt über $ts läuft, hatte ich schon vermutet und angedeutet. Wir haben ja kein "mo", "di", etc. mehr. Ich schaue mir das gleich mal an. BTW: Sind die einfachen Hochkomma bei dir richtig gesetzt? Sollte nicht das rechte links vom Punkt stehen?

[EDIT]
Ui, da hat's was ...

Die Hochkomma müssen so ausschauen:
PHP:
for ($b = 0; $b < 7; $b++) {
     $ts = $wochenanfang + ($b * 60 * 60 * 24);
     if (isset($_POST[$ts.'_'.$b]) and $_POST[$ts.'_'.$b] != "") {
         $dauer = $_POST[$ts.'_'.$b];
         $tag = $_POST[$ts];                                
         $eintragen2 = mysqli_query($mysqli, "INSERT INTO zeiten (userid, taetprodid, zeit, datum) VALUES ('$userid', '$taetprodid', '$dauer', '$tag')");
     }
}
Allerdings kriege ich folgende Meldung (und lande beim Login :what:):

Unbenannt.PNG

In Spalte "datum" in zeiten wird nur "0" eingetragen.

[EDIT2]
Es ist echt nur kurios: Auf dieser Seite ist dann Firefox eingefroren und ich konnte nur noch über den Taskmanager beenden. Dann Firefox neugestartet und index.php aufgerufen, schon lande ich endlich mal beim Login ... ABER: Ich kann mich nicht als "test" einloggen. Da kriege ich nur:

Unbenannt.PNG

:ugly:

Habe jetzt "test" neu erstellt, Login scheint zu klappen. Jetzt schaut aber auch der PW-hash ganz anders aus. Vermutlich wird der erst jetzt richtig berechnet. Nach "Bestätigen" bleiben wir jetzt auch korrekterweise auf projektzeiterfassung.php, aber der Offset-Fehler bleibt ...
 
Zuletzt bearbeitet:
Ich fürchte ich habe bzgl error_reporting und Notices Verwirrung gestiftet, das tut mir Leid.

Warum sollte man die Anzeige der Notices aktivieren?
Ganz einfach, man erkennt sehr viele kleine Fehler schneller, z. B. Tippfehler von Variablen (wobei das allerdings auch jeder gute PHP-Editor / IDE erkennt):
PHP:
$meinButon = 'Klicken';
print($meinButton);

Ist es ein Fehler, eine Variable nicht zu initialisieren?
Nein. Sonst würde auch keine Notice angezeigt, sondern ein Error. Das kann man gut finden, oder schlecht, aber folgender Code ist korrektes (wenn auch unsinniges) PHP.
PHP:
<?php
print($a * 4); // Ich muss mal eben die Ziffer 0 ausgeben...

Sollte man es trotzdem tun?
Meiner Meinung nach ja. Auch das offizielle PHP-Handbuch empfiehlt das.
Gerade wenn, wie hier, Dateien per include eingebunden werden und man Variablen an anderer Stelle weiter verwendet. Dann ist der Code weniger verwirrend und man entdeckt oben erwähnte Tippfehler schneller usw.
Initialisierung ist in PHP nichts anderes, als einen Wert zuzuweisen also $foo = 'bar';

EDIT:
Dann zum Thema ?>
Der schließende PHP-Tag, also ?>, ist nicht notwendig, er kann weggelassen werden. Das habe ich mir nicht ausgedacht, sagen auch andere, siehe hier:
http://www.sitepoint.com/should-you-close-your-php-code-tags/

Warum sollte man ihn weglassen?
Ganz einfach: Wenn man keinen guten Editor / IDE hat, dann kann es passieren, dass man nicht merkt, dass man versehentlich nach dem ?> noch ein Leerzeichen stehen hat
PHP:
?>
Sieht doch identisch aus wie ?> ohne Leerzeichen dahinter, oder? Ist es aber nicht. Ein Leerzeichen ist output, genau so wie ein A oder ein X.

Warum ist das Leerzeichen da schlimm?
Ich könnte jetzt lang und breit erklären, aber in aller Kürze: Es kann (in diesem Fall) Probleme mit cookies/sessions verursachen und weitreichende Folgen haben. Allgemein können keine header gesendet werden, wenn bereits begonnen wurde, die response zu senden.
Bei weiterem Interesse siehe bei Google unter anderem: "closing php tag", "header already sent", "php output buffering", "http response header", hängt letztlich alles zusammen.

Noch ein EDIT:
Gerade erst gesehen, dass dazu sogar was in der offiziellen Doku steht:

Der schließende Tag eines PHP-Blocks am Ende einer Datei ist optional, und in einigen Fällen ist das Weglassen hilfreich, wenn Sie include oder require verwenden, so dass ungewollte Whitespaces nicht am Ende einer Datei auftreten und Sie noch im Stande sind, später weitere Header an die Response hinzuzufügen. Es ist ebenfalls praktisch, wenn Sie Output Buffering verwenden und keine ungewollten Whitespaces am Ende eines durch die eingebundenen Dateien erzeugten Parts sehen wollen.
Von hier: http://php.net/manual/de/language.basic-syntax.instruction-separation.php

Noch was ganz anderes:
Einerseits ist Sicherheit wohl wurscht (Zitat DarkMo "und er wird sicher nich seine eigene db hacken"), andererseits wird mit einem salted hash gearbeitet? Paradox. Aber egal. Es ist euch vielleicht schon klar, aber falls nicht weise ich darauf hin: Natürlich bringt der salted hash SO nichts. Erstens muss salt für jeden User anders aussehen (einfach den salt selbst in der User-Tabelle speichern), zweitens wenn man einen fixen salt verwendet (den man sich wie gesagt auch sparen kann, ist genau so sicher wie kein Salt), dann sollte der natürlich geändert werden, bevor das System live geht, denn nun wissen zumindest alle im Forum schonmal den Salt, sowie das Hashingverfahren.
 
Zuletzt bearbeitet:
Mal ne erfreuliche Nachricht: Ich habe soeben den Code zuhause gestartet und bin sofort am Login gelandet ... :)
In der Firma dürfte wirklich das Problem sein, dass durch das stundenlange Arbeiten und immer nur Seite-reloaden im Firefox Sessions nie korrekt (falls überhaupt) beendet werden und das ganze dadurch Zustände erhält, die für uns wie Fehlverhalten ausschauen.

Wie das dann aber im "Produktiveinsatz" ausschauen wird, wenn das Zeug erst wieder 24/7 läuft, weiß ich nicht. Hoffentlich kommt dann trotzdem jeder MA bei Seitenaufruf zum Login. Oder vielleicht sollten wir uns zur Sicherheit wirklich noch einen Auto-Logout überlegen?! Damit bloß kein MA "unwissentlich" unter dem Namen seines Vorbenutzers Daten einträgt.
------------

@ BenRo
Danke für die Ausführung, aber ich hatte dir das mit dem optionalen ?> auch schon nach dem erstmaligen Erwähnen geglaubt. ;)
Ich hab's BTW hier nachgelesen, aber es besagt im Grunde eh das selbe wie deine Quelle.

Zur Sicherheit: "Live" im Sinne von "aus dem Internet aufrufbar" wird das ganze eh nie gehen. Das kommt auf den Firmen-Webserver (vorrausgesetzt, wir schaffen das; sonst wird's wohl irgendeine xampp-Lsg) und wird dann genau für die ~15 MAs aus meiner Abteilung aufrufbar. Es wird ja auch keine echte Adresse geben, sondern vermutlich wird das dann irgendwie so ausschauen: xxx.xx.xxx.xx/index.php (wobei die x für die [hoffentlich statische] IP des Servers stehen). Zumindest so wie ich mir das bis jetzt vorstelle.

Und wie gesagt: Die Excel-Tabellen, in die die MAs bisher ihre Daten eingetragen haben, waren/sind für jeden einseh- und editierbar. Und wenn die sich bis jetzt nichts gegenseitig manipuliert haben, dann gehe ich nicht davon aus, dass sich da einer hinsetzen und die DB zu hacken probieren wird. ;)
Außerdem sind's wirklich relativ belanglose Daten.

Dass der Salt so relativ umsonst ist, habe ich mir auch selbst schon gedacht. Im Moment würde er nur dadurch wirken, dass ihn (vermutlich) noch kein MA kennt und somit keiner weiß, was noch am PW dranhängt, damit diese Hashes entstehen. Für den praktischen Einsatz wär's dann aber natürlich besser, wenn der Salt per Zufallszahlengenerator oder sonst wie dynamisch erzeugt würde. Wenn am Ende Zeit bleibt, schaue ich mir das gerne an.
------------

Im Moment wäre jedenfalls das wichtigste Problem, dass ich keine Ausgabe kriege, was aber sicher noch damit zusammenhängt, dass für "datum" nur "0" in der DB landet. Der Fehler wird irgendwo hier in der inneren for-Schleife liegen:
PHP:
if (isset($_POST['confirm'])) {
        for ($a = 1; $a <= $add; $a++) {
            $stunden = array("montag".$a."", "dienstag".$a."", "mittwoch".$a."", "donnerstag".$a."", "freitag".$a."", "samstag".$a."", "sonntag".$a."");
    
            $eintragen1 = mysqli_query($mysqli, "INSERT INTO projekte (taetigkeit,  produkt, userid, beschreibung, erstellt) VALUES ('".$_POST['taetigkeit'.$a]."', '".$_POST['product'.$a]."', '$userid', '".$_POST['beschreibung'.$a]."', '$erstellt')");  
            $taetprodid = mysqli_insert_id($mysqli);
        
            for ($b = 0; $b < 7; $b++) {
                $ts = $wochenanfang + ($b * 60 * 60 * 24);
                if (isset($_POST[$ts.'_'.$b]) and $_POST[$ts.'_'.$b] != "") {
                    $dauer = $_POST[$ts.'_'.$b];
                    $tag = $_POST[$ts];                                
                    $eintragen2 = mysqli_query($mysqli, "INSERT INTO zeiten (userid, taetprodid, zeit, datum) VALUES ('$userid', '$taetprodid', '$dauer', '$tag')");
                }
            }
        }
    }
Hier kriege ich ja den Offset-Fehler, den ich zwar lösen könnte, indem ich einfach nur bei $ts alles zwischen = und ; nochmal in Klammern setze, aber dann wird gleich in der ganzen "zeiten" Tabelle kein Eintrag erstellt, lediglich in "projekte".
 
Zuletzt bearbeitet:
Schleife: Ich kanns grad nicht testen, aber sollte leicht zu lösen sein:

Ändere $tag = $_POST[$ts] in
PHP:
$tag = $ts;

$ts enthält ja bereits den jeweiligen Tag.



Salt:

Also, entweder du hast Angst, dass die MAs kriminelle Energie genug haben, um sich als jemand anderes einzuloggen, dann solltest du aber auch die SQL-Queries per escaping schützen oder prepared statements verwenden.

Oder du hast keine Angst, dass die MAs kriminelle Energie haben, dann brauchst du auch keinen salt und kannst dir Entwicklungszeit und potenzielle Fehlerquelle einsparen.
 
zuerst, weil mir grad die schuppen von den augen fallen: ich hab dir den falschen index vorgeschlagen ^^ häng mal nich b an ts an sondern a xD und jop, ich hatte mit dem ' nen dreher drin, haste richtig erkannt und behoben :)

so, jetz nochmal stück für stück...
jut, dass die ganzen warnungen wech sind ist gut. frag mich halt, wieso das überhaupt kam, weil die ganzen dinger waren definitiv defined. hatten ja alle defaultwerte bekommen, dazu stehen sie ja in der config.php. das mit dem salt hatte ich dir ja auch schon gesagt (überlesen? ^^) und dass du deinen test nich mehr einloggen kannst ist auch klar - dank salt ändert sich ja der hash. btw thx benro, ich hatte schon vermutet, dass das in der art und weise recht sinnbefreit ist und meine idee ging auch in die richtung, die du erwähnt hattest.

wegen deiner zweifel bezüglich punkt a): die logik dieses überschriften textes ist wie folgt: initialisiert wird er mit "login". einfach aus dem grund, weil das normalerweise der einstiegspunkt ist. drückt man jetz irgendeinen button, dann wird geschaut, ob dieser button zu einer anderen seite führt (wie zum bsp btnRegForm, der zur form zum reggen führt) und hier wird ggf der titel angepasst. das funzt soweit auch. jetzt haben wir uns aber eingeloggt und sind bei projzeiterfassung (BITTE mach den drecks namen kürzer xD ich nenn das teil ab jetzt nur noch zeit.php) und drücken hier nen kalenderbutton. wieder startet index und initialisiert den titel mit login, aber der kalenderbutton ist eben keiner, der einfluss auf den seitentitel nimmt, somit wird der auch nicht geändert und es steht schlicht und ergreifen login drüber.

so, einfachste lösung: hau diese überschrift einfach aus html_header.php raus (letzte zeile glaube) und bau sie hardcoded in deine einzeldateien ein (login, reggen, zeit, auswerten 1+2). wenn du gut bist, haste aber schon den nächsten punkt erkannt: genausowenig, wie der kalenderwechselbutton den titel beeinflusst, genausowenig beeinflusst er auch die "wegfindung" in deiner index.php. drückst du in auswerten.php den kalenderbutton, dann ist dein login-status true und du kommst ins else wo es zur entscheidung kommt (showdown! ^^) welches file gezeigt wird. und es ist wie gesagt der kalenderbutton gedrückt und nicht der "wechsel zu auswerten" button. daher wird auch hier der else teil gewählt und du landest bei zeit.php (u know ^^).

deswegen müssen wir uns irgendwie merken, wo wir waren. dazu gibts mMn 2 möglichkeiten: entweder aufm POST-weg *schenkelklopf* mittels eines hiddenfields (wie dein add-wert) oder per get-parameter (ich hatte ihn section genannt. also index.php?section=login bspw. vorteil vom post-weg ist, dass der link nicht "verschandelt" wird (falls du das unästhetisch findest) und per hiddenfield wert sollte das prima funktionieren. vorteil des get-weges allerdings wäre, dass du mit nem normalen link (wieso auch immer) direkt eine seite ansprechen könntest, ohne einen button drücken zu müssen. hmm, bsp wäre der btnRegForm button. den könnte man dann auch als link realisieren, da er eh keine formular-felder senden soll (wenn wir nicht benro's vorschlag aufgreifen, dass ein beim einloggen schon eingegebener username hier gleich übernommen werden soll). einfach ein a href="index.php?section=register" und fertsch isses. per css kann man das ding auch aussehen lassen wie nen button (bzw es halt an den button-stil anpassen) und es fällt garnich auf.

würde halt wieder ein paar umbaumaßnahmen nötig machen - aber in beiden fällen. wobei ich fast zu get tendieren würde. aber ich überlass die entscheidung dir. gut, das wäre dann ja quasi auch schon c) gewesen ^^ e) hattest wie gesagt recht. habsch die wechstaben verbuchselt :D

dann ben: wie gesagt, das mit dem salt war für mich interessant, das mein tipp ins blaue richtig war ^^ und das mit dem optionalen ?> war mir bisher unbekannt - wieder was gelernt :) wegen thema sicherheit: es ist einfach ein sekundäres problem. primär muss das ding erstmal laufen. lass es mich so formulieren: derzeit wöllte es einfach keiner hacken :ugly: also müssen wir es erstmal hacker-attraktiv machen und dann mit ner hunderschaft absichern ! xD aber auch wenn es nur sekundär ist, ist nie verkehrt sich damit mal auseinanderzusetzen *denk* is auch ein thema, das für mich noch sehr interessant ist, da ich damit bisher kaum in berührung gekommen bin und nur md5 kenn.

letzter post: dürfte hoffentlich auch geklärt sein (mit den ersten sätzen).


edit: ja stimmt ben, einfach tag = ts ist richtig *wald bäume...* xD
 
zuerst, weil mir grad die schuppen von den augen fallen: ich hab dir den falschen index vorgeschlagen ^^ häng mal nich b an ts an sondern a
Absolut korrekt. Ist mir nicht aufgefallen. In Zukunft aussagekräftige Variablennamen nehmen. $a und $b ist Mist. Und ein guter PHP-Editor/IDE macht Autovervollständigen, sodass man längere Variablennamen auch nicht ausschreiben muss.
 
Zurück