[Open Source] ExceptionBase.NET 2.0 - Exceptions abfangen und in ein übersichtliches Webinterface eintragen

    • Release

    Es gibt 67 Antworten in diesem Thema. Der letzte Beitrag () ist von Fury.

      Hab mal beides aktiviert.

      Die Fehler
      Notice: Undefined index: appid in C:\xampp\htdocs\incs\listAppTable.php on line 12

      und
      Notice: Undefined index: appid in C:\xampp\htdocs\incs\listAppTable.php on line 14


      bleiben gleich.

      Das mit den HyperLinks ist verschwunden, aber wenn ich auf die Test-App klicke, steht stattdessen folgendes dort:
      Zurück | (
      Notice: Undefined index: sort in C:\xampp\htdocs\index.php on line 45
      Unsortiert
      Notice: Undefined index: sort in C:\xampp\htdocs\index.php on line 45
      |
      Notice: Undefined index: sort in C:\xampp\htdocs\index.php on line 46
      Sortiert
      Notice: Undefined index: sort in C:\xampp\htdocs\index.php on line 46
      ) | (
      Notice: Undefined index: fixed in C:\xampp\htdocs\index.php on line 47
      Ungelöst
      Notice: Undefined index: fixed in C:\xampp\htdocs\index.php on line 47
      |
      Notice: Undefined index: fixed in C:\xampp\htdocs\index.php on line 48
      Gelöst
      Notice: Undefined index: fixed in C:\xampp\htdocs\index.php on line 48
      )


      und über den Spalten mit den Fehlern steht:
      Notice: Undefined index: sort in C:\xampp\htdocs\index.php on line 62


      Edit: Das ersetzen der Tags, führt zu dem selben Ergebnis.

      Das sollte vl noch behoben werden bzw. entweder so eingestellt, dass es mit den Standard-Settings funktioniert oder beschrieben was man aktivieren muss, damit es richtig funktioniert.

      Edit2:
      Wäre es nicht sinnvoller, einen Hash aus der Exception zu berechnen und den auch in die Datenbank zu schreiben. Diesen dann abgleichen, bevor eine neue Exception eingetragen wird. somit kommt die selbe exception nicht zweimal vor.

      Ist vor allem dann hilfreich, wenn viele leute das programm nutzen und alle den selben fehler haben....

      Ein paar Kleinigkeiten sind mir noch im VB-Code aufgefallen, aber das ist nichts schlimmes...
      SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

      Weil einfach, einfach zu einfach ist! :D

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BiedermannS“ ()

      Hallo BiedermannS,
      mich würde mal interessieren, was passiert, wenn du eine test.php mit dem Code

      PHP-Quellcode

      1. <?php echo $_GET["id"]; ?>

      anlegst und diese dann mit der URL "test.php?id=123" o.ä. aufrufst. Es sieht ja ein bisschen so aus, als ob PHP mit den GET-Variablen nicht wirklich klarkommt. Ich werde mir den Code heute Abend nochmal ansehen und die GET Variablen durch SESSION Variablen ersetzen, dann sind auch die URLs etwas schöner :)

      Viele Grüße
      leolabs
      Bei der Test.php funktioniert es einwandfrei, außer es wird keine id angegeben ist, dann kommt
      Notice: Undefined index: id in C:\xampp\htdocs\test.php on line 1


      Aber ich hab die Lösung bereits parat. Egal ob Session oder GET-Variable, du solltest vorher prüfen, ob diese überhaupt erst mal vorhanden ist.

      Also in der login.php statt:

      Quellcode

      1. if ($_SESSION["login"]){header('Location: http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/index.php");}


      einfach

      Quellcode

      1. if (isset($_SESSION['login'])){
      2. if ($_SESSION["login"]){header('Location: http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/index.php");}}


      In der ListAppTable.php

      Quellcode

      1. if (isset($_SESSION['appid'])){if($_GET["appid"] == $row->ID) echo "<b>";}
      2. echo "<li><a href=\"?appid=" . $row->ID . "\">" . $row->Name . " (" . $count . ")</a></li>\n";
      3. if (isset($_SESSION['appid'])){if($_GET["appid"] == $row->ID) echo "</b>";}


      index.php und listExceptionsUnsorted.php muss ich mir erst genauer ansehen.

      Edit: es wäre auch noch schön, wenn man den Status der Fehler direkt im Web-Interface bearbeiten könnte.
      SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

      Weil einfach, einfach zu einfach ist! :D
      Hallo BiedermannS,
      danke für den Tipp, das werde ich heute mal in den Code übernehmen. Den Status von Fehlern kannst du ändern, indem du in der Detailansicht auf das kleine rote Kästchen klickst, das wird dann grün und der Fehler wird als erledigt abgespeichert :)

      Viele Grüße
      leolabs
      Leider funktioniert das ändern des Status bei mir nicht. Es kommt auch keine Fehlermeldung, es tut sich einfach nichts.

      Da wäre vl eine DropdownBox angebracht, damit man mehr als einen Status wählen kann (open - responded - resolved usw...)

      Was noch nett wäre, wenn man die Bugs einem User zuweisen kann, und natürlich das Install-Script. :)


      Wenn du Anregungen brauchst (für das Install-Script oder andere Features), dann sieh dir mal Mantis an. Ist Open-Source und komplett in PHP geschrieben. Link

      Grüße BiedermannS
      SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

      Weil einfach, einfach zu einfach ist! :D
      Hallo BiedermannS,
      danke für deinen Vorschlag. Das mit dem Status ist eine gute Idee, mal sehen, wie ich das eingebaut bekomme. Ich denke auch mal, man kann in der Seite einiges per AJAX regeln, wie z.B. das Ändern vom Status, das nehme ich mir auch mal vor.

      Also, TODO für die nächste Version:
      • Existenz von GET-Variablen vor der Verwendung überprüfen
      • Error Reporting von Warnings ausschalten, Fehler sollten weiterhin angezeigt werden
      • Content per AJAX laden, Status per Dropdown-Menü ändern
      • Installations-Script für eine einfachere Installation einrichten
      • (Primary Key in der Datenbank anlegen, damit MySQL beim Import nicht meckert)
      • Möglichkeit, User und Programme im Interface anzulegen und zu bearbeiten
      • Link zum Betriebssystem in Detailseiten, sodass man unter der Versionsnummer etwas verstehen kann ;)
      • Möglichkeit, Tabellen dynamisch zu sortieren (dafür gibt's ja schöne jQuery-Skripts)

      Viele Grüße
      leolabs
      Wann wird denn die Todo-list ca. abgearbeitet sein?
      Mfg: Gather
      Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


      Hallo Gather,
      ich muss mich in den nächsten Tagen wieder etwas auf die Schule vorbereiten, da wir direkt in der ersten Woche nach den Ferien 2 Klausuren schreiben. Deshalb muss das Projekt da etwas warten. Aber ich denke, am Wochenende kann ich einige der Punkte fertigstellen. Wenn sich jemand dazu bereiterklären würde, einen der Punkte fertigzustellen und mir den Code zu schicken, sodass ich ihn unter Namensnennung in das Projekt einfügen kann, wäre das natürlich sehr hilfreich :)

      Viele Grüße
      leolabs
      P.S @BiedermannS:

      BiedermannS schrieb:

      Wäre es nicht sinnvoller, einen Hash aus der Exception zu berechnen und den auch in die Datenbank zu schreiben. Diesen dann abgleichen, bevor eine neue Exception eingetragen wird. somit kommt die selbe exception nicht zweimal vor.

      Ist vor allem dann hilfreich, wenn viele leute das programm nutzen und alle den selben fehler haben....

      Du kannst dir die Fehler im Interface sortiert anzeigen lassen, dann werden alle Fehler mit der selben ExceptionMessage gruppiert. Das Problem besteht nur darin, dass sich diese ExceptionMessages teilweise leicht voneinander unterscheiden können (z.B. wenn ein Pfad mit im Spiel ist). Das mit dem Hash wird auch daher schwierig, dass jeder Benutzer zu seinem Fehler eine eigene Beschreibung einsenden kann. Diese sollte immer mit in die Datenbank übernommen werden, egal ob es den Fehler schon gibt oder nicht :)

      Viele Grüße
      leolabs

      leolabs schrieb:

      Error Reporting von Warnings ausschalten, Fehler sollten weiterhin angezeigt werden

      Ist das nicht eine Einstellung in der php.ini?

      Wenn ja, solltest du dir zumindest einen Testserver herrichten, der aus einer Standard XAMPP-Installation besteht und darauf das Web-Interface testen.

      Am besten wäre, wenn das Web-Interface, ohne umkonfigurieren, direkt auf einer standard XAMPP-Installation fuktioniert. Wenn das aus gegebenen Gründen nicht möglich ist, dann muss zumindest in der Installationsanleitung stehen was man alles ändern muss, damit ein fehlerhafter Betrieb zu erwarten ist.
      SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

      Weil einfach, einfach zu einfach ist! :D
      Hallo BiedermannS,
      das mit dem Server ist eine gute Idee, das werde ich dann so machen :)

      Zu den Fehlermeldungen, die INI-Einstellungen lassen sich in PHP overriden. Mit

      PHP-Quellcode

      1. ini_set('display_errors', 'On');
      2. error_reporting(E_ALL);
      kann man z.B. PHP sagen, dass alle Fehler (inkl. Warnungen) ausgegeben werden sollen, unabhängig davon, was in der php.ini steht.

      Viele Grüße
      leolabs
      Hallo,
      ich habe die Webkomponente nachdem ich den Fehler mit dem Importieren bei MySQL "behoben" habe, bei mir auf meinem Webspace "installiert".
      Nun habe ich mit den 2 Dateien wie im Tutorial gezeigt einen User und ein Projekt angelegt.

      Möchte ich mich aber nun Einloggen, gibt er nur das aus "Der Benutzername oder das Passwort sind inkorrekt."
      Was laut PHP-Skript bedeutet das dieses if nicht zutrifft:

      PHP-Quellcode

      1. if($row->PasswordHash == crypt($password, $crypto))


      Ich habe aber zu 100% nicht das Passwort falsch geschrieben da ich den String zum erstellen des Benutzers im Editor habe und daraus das Passwort kopiert habe und das mehrmals.

      Edit:
      Habe die login.php jetzt mal abgeändert das er bei der abfrage nicht die crypt funktion benutzt.

      PHP-Quellcode

      1. if($row->PasswordHash == $password)

      Und das Passwort in der Datenbank im klartext gespeichert (nur zum test), nun kann ich mich ohne problem einloggen.
      Bedeutet ja das die crypt-funktion probleme macht oder ?

      Edit2:
      Ich kann mich garnicht einloggen in dem sinne sondern kann alles eingeben was ich möchte und trotzdem werde ich eingeloggt.

      Endgültiges Edit:

      Habe nun den "Fehler" im Script gefunden...

      PHP-Quellcode

      1. $username = mysql_real_escape_string($_POST['username']);
      2. $password = mysql_real_escape_string($_POST['password']);


      Sobald ich "mysql_real_escape_string" aus den beiden zeilen entferne, funktioniert es.
      Ich sehe in diesem Skript nichtmal einen sinn darin diese funktion zu nutzen.
      Da ja nur die Spalte mit dem entsprechenden Usernamen aufgerufen wird und das eingegebene Passwort das dann gecryptet wird mit dem aus der Spalte verglichen wird.
      Also eh keine Chance für eine Injection ist.

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „SebastianSchaffrath“ ()

      Hallo SebastianSchaffrath,
      vielen Dank für deinen ausführlichen Fehlerbericht. Ich werde den Fehler so schnell wie möglich in der öffentlichen Version beheben. Ich bin leider noch nicht soo erfahren im Umgang mit PHP, deshalb wusste ich das noch nicht, aber man lernt ja immer wieder etwas dazu :)

      Viele Grüße
      leolabs
      Um es nochmal genauer zu erklären.
      Durch die in diesem Fall hier angewendete mysql_real_escape_string funktion wurde der Inhalt von $_POST username und password, nicht an die beiden variablen übergeben.
      Die Variablen blieben also trotz eingabe leer. Wenn ich also nun die crypt funktion entferne und er versucht die MySQL Datenbank aufzurufen mit der Variable username die bekanntlich leer ist kommt auch ein leeres resultat zurück. Wird das dann mit der variable password verglichen die ebenfalls leer ist, ist der vergleich ja richtig da beides leer ist ist es also wahr.
      Das gleiche gilt ja dann was passiert ist mit dem crypt, er versucht etwas ohne inhalt zu verschlüsseln, da kommt aber trotzdem ein wert raus und der entspricht nicht dem leeren wert aus der Datenbank.

      Hoffe ich habe das selbst so richtig verstanden :D
      hey

      von der beschreibung her genau das was ich immer gesucht habe. Nur kann ich leider nicht die Datenbank Tabelle "users" anlegen, da er mir immer ein Fehler ausschreibt.
      Wäre super, wenn du das noch fixen könntest.
      Des Weiteren würde es bestimmt einigen helfe, eine install.php zu schreiben die das script automatisch per klicks installiert ^^

      naja wünsche ein schönes wochenende

      gruß
      hey

      also die .sql datei aus dem installationsordner geöffnet und erst mal den datenbank namen eingetragen in welcher die tabellen eingetragen werden sollen.
      Dann phpmyadmin geöffnet und über importieren die datei in die datenbank importiert.
      Dann kommt dieser Fehler:

      Quellcode

      1. SQL-Befehl:
      2. --
      3. -- Tabellenstruktur für Tabelle `users`
      4. --
      5. CREATE TABLE IF NOT EXISTS `users` (
      6. `ID` int( 2 ) NOT NULL AUTO_INCREMENT ,
      7. `Username` varchar( 50 ) NOT NULL ,
      8. `PasswordHash` varchar( 256 ) NOT NULL ,
      9. `Mail` varchar( 200 ) NOT NULL
      10. ) ENGINE = MYISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT =0;
      11. MySQL meldet:
      12. #1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key


      es wurden alle Tabellen angelegt, außer die users Tabelle
      Ich hoffe hiermit konnte ich dir weiterhelfen. Wenn noch was fehlt einfach melden.

      Gruß
      hey

      ok tabellen wurden nun angelegt
      habe alle Dateien bearbeitet und hochgeladen nun kommen 3 fehler:

      Quellcode

      1. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/web252/html/projekte/programme/bugtracker/index.php:1) in /var/www/web252/html/projekte/programme/bugtracker/incs/checkLogin.php on line 2
      2. Warning: Cannot modify header information - headers already sent by (output started at /var/www/web252/html/projekte/programme/bugtracker/index.php:1) in /var/www/web252/html/projekte/programme/bugtracker/incs/checkLogin.php on line 5
      3. Warning: Cannot modify header information - headers already sent by (output started at /var/www/web252/html/projekte/programme/bugtracker/index.php:1) in /var/www/web252/html/projekte/programme/bugtracker/incs/database.php on line 3


      Weiß nicht ob das schon im Thread erwähnt wurde:
      Ein Adminbereich wäre super, wo man -
      - die Programm hinzufügen kann
      - User Hinzufügen kann
      - evtl. noch Userränke (zum Beispiel: Supporter, Programm Admin und so weiter)

      Gruß