Problem mit Loginsystem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Loginsystem

    hallo

    Ich bin ein neuling in PHP und habe ein das Tutorial von www.php-q.net bis zu einem bestimmten Punkt durchgearbeitet und weiß nicht mehr weiter.

    Vielleicht kennt das ja einer von euch, also das Tutorial und kann mit helfen...

    Ich bin momentan in dem abschnitt "Benutzer verwalten". Mein Problem:
    Wenn ich einen benutzer hinzufügen möchte, sagt er mir komischer weise 2 mal: " Sie haben keine Berechtigung, diesen Bereich zu betreten. Bitte wählen sie einen anderen Bereich aus". Darunter ist den ein Link wo steht: " Zurück zum Adminbereich". Ich hänge jetzt schon geschlagende 3 Tage daran fest und komme einfach nicht weiter.

    Diese... ja Fehlermeldung kommt zu stande, weil ich keine Rechte habe, obwohl ich in PHPMyAdmin unter "Recht" den zusatz "Admin" hinzugefügt habe, wie es dort auch steht. Eigentlich müsste es funktionieren, was es aber nicht tut.

    Es hätten eigentlich Einstellmöglichkeiten zum erstellen eines Neues Benutzers angezeigt werden sollen.

    admin_user.php
    PHP-Code:
    <?php
        $sql 
    "SELECT
                    Recht
                FROM
                    user_rights
                WHERE
                   UserID = '"
    .$_SESSION['ID']."';";
        
    $result mysql_query($sql) OR die(mysql_error());
        
    $rights = array();
        while(
    $row mysql_fetch_assoc($result)) {
            
    $rights[] = $row['Recht'];
        }

        if(!
    in_array("Admin"$rights)) {
            echo 
    "<p>\n";
            echo 
    "    Sie haben keine Berechtigung, diesen Bereich\n";
            echo 
    "    zu betreten. Bitte wählen sie einen anderen\n";
            echo 
    "    Bereich aus\n";
            echo 
    "</p>\n";
            echo 
    "<p>\n";
            echo 
    "    <a href=\"index.php?section=admin&amp;".SID."\">\n";
            echo 
    "        Zurück zum Adminbereich\n";
            echo 
    "    </a>\n";
            echo 
    "</p>\n";
        }
        
    $rights getRights();
        if(!
    in_array("Admin"$rights)) {
            
    no_rights();
        } else {
            switch(@
    $_GET['action']) {
                case 
    "add":
                    break;

                case 
    "edit":
                    break;

                case 
    "del":
                    break;

                default:
                    echo 
    "<p>\n";
                    echo 
    "    Bitte benutzen sie nur einen Link aus dem Adminmenu.\n";
                    echo 
    "    <a href=\"index.php?section=admin&amp;".SID."\">\n";
                    echo 
    "        Zurück zum Adminbereich\n";
                    echo 
    "    </a>\n";
                    echo 
    "</p>\n";
                    break;
            }
        }
        
    ?>

    und die functions.php sind wohl ausschlaggeben dafür

    PHP-Code:
    <?php
        error_reporting
    (E_ALL);
        
        function 
    login_right($id$pass)
        {
            
    $sql "SELECT
                        COUNT(*) as Anzahl
                    FROM
                        users
                    WHERE
                        ID = '"
    .$id."' AND
                        Password = MD5('"
    .$pass."');";
            
    $result mysql_query($sql) OR die(mysql_error());
            
    $row mysql_fetch_assoc($result);
            
    mysql_free_result($result);
            return 
    $row['Anzahl'];
        }
        
        function 
    no_rights()
        {
            echo 
    "<p class=\"error\">\n";
            echo 
    "    Sie haben keine Berechtigung, diesen Bereich\n";
            echo 
    "    zu betreten. Bitte wählen sie einen anderen\n";
            echo 
    "    Bereich aus\n";
            echo 
    "</p>\n";
            echo 
    "<p>\n";
            echo 
    "    <a href=\"index.php?section=admin&amp;".SID."\">\n";
            echo 
    "        Zurück zum Adminbereich\n";
            echo 
    "    </a>\n";
            echo 
    "</p>\n";
        }

        function 
    getRights($UID null)
        {
            if(isset(
    $UID)) {
                
    $sql "SELECT
                            Recht
                        FROM
                            user_rights
                        WHERE
                           UserID = '"
    .$UID."';";
            } else {
                
    $sql "SELECT
                            Recht
                        FROM
                            user_rights
                        WHERE
                           UserID = '"
    .$_SESSION['ID']."';";
            }
            
    $result mysql_query($sql) OR die(mysql_error());
            
    $rights = array();
            while(
    $row mysql_fetch_assoc($result)) {
                
    $rights[] = $row['Recht'];
            }
            return 
    $rights;
        }
    ?>

    Ich hoffe das meine Frage verständlich war

    mfg Sebastian

  • #2
    Moin,

    lass dir mal die variable $sql ausgeben.

    Wenn das alle Dateien sind, die für das Script nötig sind, dann frag ich mich, wo dort session_start(); steht?
    Denn wenn du Sessions benutzt, musst du die Sitzung erstmal eröffnen.
    Tipp: Setz session_start(); immer gaanz oben in die Datei!

    Sofern du die datei "test1.php" und "test2.php" hast und diese sich nicht irgendwie includieren oder keine dritte Datei existiert, die in beiden Dateien includiert wird, musst du in jede der beiden Dateien ganz oben session_start(); einfügen, sofern du per Session was übergeben willst.

    Hoffe, das war veständlich

    Kommentar


    • #3
      nein, es sind natürlich nicht alle dateien. Also

      MySQL-Datenbank
      CREATE TABLE users (
      ID TINYINT AUTO_INCREMENT PRIMARY KEY,
      Name VARCHAR(20),
      Password CHAR(32),
      Email VARCHAR(60)
      );

      // Bei "Passwort" in phpmyadmin md5 angeben und Passwort angeben
      // Name ausdenken und mittels phpmyadmin einfügen
      // bei Email genauso

      CREATE TABLE user_rights (
      UserID TINYINT,
      Recht VARCHAR(20)
      );

      SELECT
      Recht
      FROM
      user_rights
      WHERE
      UserID = '4'
      ORDER BY
      Recht ASC;

      // Bei Recht "Admin" hinschreiben Bin mit aber nicht sicher

      Das sind die sql datenbanken.

      Die Dateien
      Sind so eigentlich die wichtigsten Datien

      admin.php
      admin_menu.php
      admin_self.php
      functions.php
      variablen.php
      Die admin_user.php hab ich dort oben schon hingeschrieben

      Komplette Homepage -> download
      Zuletzt geändert von Thunder_mv; 15.01.2005, 13:35.

      Kommentar


      • #4
        Re: Problem mit Loginsystem

        Original geschrieben von Thunder_mv
        PHP-Code:
        <?php
               
        if(!in_array("Admin"$rights)) {
                echo 
        "<p>\n";
                echo 
        "    Sie haben keine Berechtigung, diesen Bereich\n";
                echo 
        "    zu betreten. Bitte wählen sie einen anderen\n";
                echo 
        "    Bereich aus\n";
                echo 
        "</p>\n";
                echo 
        "<p>\n";
                echo 
        "    <a href=\"index.php?section=admin&amp;".SID."\">\n";
                echo 
        "        Zurück zum Adminbereich\n";
                echo 
        "    </a>\n";
                echo 
        "</p>\n";
            }
            
        $rights getRights();
            if(!
        in_array("Admin"$rights)) {
                
        no_rights();
            } else {
               ....
            }
        ?>
        Das mit dem "2 mal" ist doch kein Wunder...du überprüfst oben und gibst aus und unten nochmal...ich würd die obere Überprüfung mal entfernen!!!

        Bist du sicher, dass du "Admin" und nicht "admin" oder so in der DB stehen hast?
        Ansonsten gibt mal
        PHP-Code:
        echo '<pre>' print_r($rightstrue) . '</pre>'
        unter der Schleife für deine Rechte ein und poste die Ausgabe.


        Außerdem würde ich das
        PHP-Code:
        function getRights($UID null)
            {
                if(isset(
        $UID)) { 
        in das umändern
        PHP-Code:
        function getRights($UID null)
            {
                if(!
        is_null($UID)) { 
        Außerdem verstehe ich auch nicht deinen SQL-Query in der admin_user.php du hast doch die Funktion get_rights() warum also einmal direkt im Code die Rechte holen und kurz danach durch die Geholten mit der Funktion überschreiben?

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Ausgaben tut er das:

          Array
          (
          )

          Wenn ich die Überprüfung entferne, gibt er gar nichts mehr aus, außer Array (). Ich habe jetzt "admin" in der Db stehen. aber er müsste denn nicht nur Array () ausgeben, sondern auch add_user.php, oder ?

          Kommentar


          • #6
            Original geschrieben von Thunder_mv
            Ausgaben tut er das:

            Array
            (
            )

            Wenn ich die Überprüfung entferne, gibt er gar nichts mehr aus, außer Array (). Ich habe jetzt "admin" in der Db stehen. aber er müsste denn nicht nur Array () ausgeben, sondern auch add_user.php, oder ?
            Du hast ein leeres Array ?

            Folge das SQL Statment liefert keine Ergebnismenge.....Dieses ausgeben und mit PMA prüfen....

            BTW: Es schwirren hier bei den Codeschnipsel bereits Usermanagments rum.......
            [color=blue]MfG Payne_of_Death[/color]

            [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
            [color=red]Merke:[/color]
            [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

            Murphy`s Importanst LAWS
            Jede Lösung bringt nur neue Probleme
            Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
            In jedem kleinen Problem steckt ein großes, das gern raus moechte.

            Kommentar

            Lädt...
            X