1. #1

    Registriert seit
    24.11.2011
    Beiträge
    207
    Thanked 113 Times in 71 Posts

    Standard User Status/Rank per PHP PDO auslesen

    Hallo,

    schon seit Tagen versuche ich, bei einem Login-Script das Datenbankfeld user_status auslesen zu lassen per PDO Methode aber ich bekomme es einfach nicht hin, habe im Internet geschaut und viele dort vorgeschlagenen Methoden ausprobiert (ins Script eingebaut) aber es funktioniert einfach nicht. Entweder kommen Fehlermeldungen oder man kann sich trotzdem einloggen, obwohl man nicht den nötigen status dafür hat... Dazu sei noch gesagt, ich programmiere erst seit kurzem mit PDO Methode, zuvor hab ich immer mit mysql / mysqli aber da PDO angeblich am sichersten sein soll(?) habe ich mich nun an PDO gewagt.

    Was genau will ich jetzt?
    Ich habe in der Datenbank ein Feld namens user_status angelegt, wo der Standardwert 0 ist (0 = Keine Berechtigung), (1 = Berechtigung). Nun soll wenn in der Datenbank in dem Feld 0 steht, eine Meldung (echo) erscheinen mit einem Text z.B. Du bist nicht berechtigt, dich hier einzuloggen! o.ä. Wenn jedoch 1 im Feld steht, soll keine Meldung erscheinen und man einfach ganz normal eingeloggt werden.

    Hier mal die Source, vllt kann mir jemand helfen, ich komm einfach nicht klar.
    [HIDE]
    class.user.php
    PHP-Code:
    <?php
    class USER
    {
        private 
    $db;
        
        function 
    __construct($DB_con)
        {
            
    $this->db $DB_con;
        }
        
        public function 
    register($fname,$lname,$uname,$umail,$upass)
        {
            try
            {
                
    $new_password password_hash($upassPASSWORD_DEFAULT);
                
                
    $stmt $this->db->prepare("INSERT INTO users(user_name,user_email,user_pass) 
                                                           VALUES(:uname, :umail, :upass)"
    );
                                                      
                
    $stmt->bindparam(":uname"$uname);
                
    $stmt->bindparam(":umail"$umail);
                
    $stmt->bindparam(":upass"$new_password);                                          
                    
                
    $stmt->execute();    
                
                return 
    $stmt;    
            }
            catch(
    PDOException $e)
            {
                echo 
    $e->getMessage();
            }                
        }
        
        public function 
    login($uname,$umail,$upass)
        {
            try
            {
                
    $stmt $this->db->prepare("SELECT * FROM users WHERE user_name=:uname OR user_email=:umail LIMIT 1");
                
    $stmt->execute(array(':uname'=>$uname':umail'=>$umail));
                
    $userRow=$stmt->fetch(PDO::FETCH_ASSOC);
                if(
    $stmt->rowCount() > 0)
                {
                    if(
    password_verify($upass$userRow['user_pass']))
                    {
                        
    $_SESSION['user_session'] = $userRow['user_id'];
                        return 
    true;
                    }
                    else
                    {
                        return 
    false;
                    }
                }
            }
            catch(
    PDOException $e)
            {
                echo 
    $e->getMessage();
            }
        }
        
        public function 
    is_loggedin()
        {
            if(isset(
    $_SESSION['user_session']))
            {
                return 
    true;
            }
        }
        
        public function 
    redirect($url)
        {
            
    header("Location: $url");
        }
        
        public function 
    logout()
        {
            
    session_destroy();
            unset(
    $_SESSION['user_session']);
            return 
    true;
        }
    }
    ?>
    index.php
    PHP-Code:
    <?php
    require_once 'config.php';

    if(
    $user->is_loggedin()!="")
    {
        
    $user->redirect('home.php');
    }

    if(isset(
    $_POST['btn-login']))
    {
        
    $uname $_POST['txt_uname_email'];
        
    $umail $_POST['txt_uname_email'];
        
    $upass $_POST['txt_password'];
            
        if(
    $user->login($uname,$umail,$upass))
        {
            
    $user->redirect('home.php');
        }
        else
        {
            
    $error "Wrong Details !";
        }    
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Login : cleartuts</title>
    <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" type="text/css"  />
    <link rel="stylesheet" href="style.css" type="text/css"  />
    </head>
    <body>
    <div class="container">
            <div class="form-container">
            <form method="post">
                <h2>Sign in.</h2><hr />
                <?php
                
    if(isset($error))
                {
                         
    ?>
                         <div class="alert alert-danger">
                            <i class="glyphicon glyphicon-warning-sign"></i> &nbsp; <?php echo $error?> !
                         </div>
                         <?php
                
    }
                
    ?>
                <div class="form-group">
                    <input type="text" class="form-control" name="txt_uname_email" placeholder="Username or E mail ID" required />
                </div>
                <div class="form-group">
                    <input type="password" class="form-control" name="txt_password" placeholder="Your Password" required />
                </div>
                <div class="clearfix"></div><hr />
                <div class="form-group">
                    <button type="submit" name="btn-login" class="btn btn-block btn-primary">
                        <i class="glyphicon glyphicon-log-in"></i>&nbsp;SIGN IN
                    </button>
                </div>
                <br />
                <label>Don't have account yet ! <a href="regi.php">Sign Up</a></label>
            </form>
           </div>
    </div>

    </body>
    </html>
    home.php
    PHP-Code:
    <?php
    include_once 'config.php';
    if(!
    $user->is_loggedin())
    {
        
    $user->redirect('index.php');
    }
    $user_id $_SESSION['user_session'];
    $stmt $DB_con->prepare("SELECT * FROM users WHERE user_id=:user_id");
    $stmt->execute(array(":user_id"=>$user_id));
    $userRow=$stmt->fetch(PDO::FETCH_ASSOC);
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" type="text/css"  />
    <link rel="stylesheet" href="style.css" type="text/css"  />
    <title>welcome - <?php print($userRow['user_email']); ?></title>
    </head>

    <body>

    <div class="header">
        <div class="left">
            <label>bla</label>
        </div>
        <div class="right">
            <label><a href="logout.php?logout=true"><i class="glyphicon glyphicon-log-out"></i> logout</a></label>
        </div>
    </div>
    <div class="content">
    welcome : <?php print($userRow['user_name']); ?>
    <br /><br />
    </div>
    </body>
    </html>
    [/hide]
    Geändert von Suchty (24.11.2015 um 22:11 Uhr)

    Kontakt:
    Kein Anschluss unter diesem Nick!

  2. #2
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.080
    Thanked 9.118 Times in 2.995 Posts
    Blog Entries
    5

    Standard AW: User Status/Rank per PHP PDO auslesen

    Offensichtlich fehlt der wichtigste Code, ich sehe nirgendwo das Feld user_status in einer Abfrage oder Ausgabe verwendet. Schreib dafür doch einfach mal ein paar Zeilen Testcode und lass dir das Ergebnis ausgeben. Im Prinzip kannst du dazu den aus der Login-Methode nehmen, scheint auf den ersten Blick gemäß PHP-Doku valide zu sein. Und mit der Aussage "Es kommen Fehlermeldungen" lässt sich denkbar wenig anfangen. Wenn du die nicht konkret im Wortlaut nennst kann dir keiner dabei helfen, deine Fehler zu finden geschweige denn nachvollziehen zu können.

    Nebenbei gesagt nutzt PDO intern auch nur Prepared Statements, kocht also in der Hinsicht mit dem gleichen Wasser wie MySQLi. Wobei sich mir auch nicht erschließt, was man an MySQLi noch sicherer machen will. Die Gefahr bei von Hand zusammengebastelten Datenbankabfragen ist immer der Entwickler, der das escapen vergisst. Prepared Statements schützen, in dem sie zum escapen zwingen. Dass man bis heute SQL-Injections findet, liegt also keineswegs an der Technologie - die ist seit etlichen Jahren da, zumal jeder halbwegs fähige Programmierer sich zur Not eine entsprechende Klasse selbst für z.B. die uralte MySQL-Erweiterung relativ einfach selbst schreiben kann. Viel mehr scheinen selbst große Firmen nicht in der Lage zu sein, dieses recht einfache Prinzip zu verstehen und entsprechend zu handeln. Teilweise verfährt man da auch nach dem Motto "Weiß doch keiner"


  3. The Following User Says Thank You to DMW007 For This Useful Post:

    Suchty (25.11.2015)

  4. #3

    Registriert seit
    24.11.2011
    Beiträge
    207
    Thanked 113 Times in 71 Posts

    Standard AW: User Status/Rank per PHP PDO auslesen

    Danke @DMW007

    Das dort nirgends user_status auftaucht ist korrekt, da ich einfach nicht zurecht kam, habe ich diesen wieder entfernt, ich kann aber mal erklären, was ich versucht habe:

    In der Datei class.user.php schrieb ich unter:

    [HIDE]
    PHP-Code:
    public function is_loggedin()
        {
            if(isset(
    $_SESSION['user_session']))
            {
                return 
    true;
            }
        } 
    dies hier

    PHP-Code:
    public function has_status()
        {
            if(isset(
    $_SESSION['user_status']))
            {
                return 
    true;
            }
        } 
    und in home.php und index.php schrieb ich das z. B.
    PHP-Code:
    if($user->has_status()!=="1")
    {
        
    $user->redirect('home.php');
    }

    if(
    $user->is_loggedin()!="")
    {
        
    $user->redirect('home.php');

    [/hide]

    und auch andere Methoden (weiß nich mehr) aber funktionierte einfach nicht.
    Geändert von Suchty (25.11.2015 um 19:53 Uhr)

    Kontakt:
    Kein Anschluss unter diesem Nick!

  5. #4

    Registriert seit
    24.11.2011
    Beiträge
    207
    Thanked 113 Times in 71 Posts

    Standard AW: User Status/Rank per PHP PDO auslesen

    Kleines Update:
    Hab es mittlerweile hinbekommen mit der Abfrage manchmal ist es die einfachste Lösung, auf die man einfach nicht kommt und wie ein Ochse vor dem Berg steht so auch in meinem Fall!

    Ich habe einfach in der class.user.php folgenden Abschnitt angepasst und siehe da, es hat geklaptt!
    [HIDE]
    PHP-Code:
    public function login($uname,$umail,$upass)
        {
            try
            {
                
    $stmt $this->db->prepare("SELECT * FROM users WHERE user_name=:uname OR user_email=:umail LIMIT 1");
                
    $stmt->execute(array(':uname'=>$uname':umail'=>$umail));
                
    $userRow=$stmt->fetch(PDO::FETCH_ASSOC);
                if(
    $stmt->rowCount() > 0)
                {
                    if(
    password_verify($upass$userRow['user_pass']) && $userRow['user_status'] == '1')
                    {
                        
    $_SESSION['user_session'] = $userRow['user_id'];
                        return 
    true;
                    }
                    else
                    {
                        return 
    false;
                    }
                }
            }
            catch(
    PDOException $e)
            {
                echo 
    $e->getMessage();
            }
        } 
    Ich habe in die if abfrage
    PHP-Code:
     if(password_verify($upass$userRow['user_pass'])) 
    einfach folgendes reingeschrieben
    PHP-Code:
    && $userRow['user_status'] == '1' 
    so das am ende dann da stand
    PHP-Code:
     if(password_verify($upass$userRow['user_pass']) && $userRow['user_status'] == '1'
    [/hide]

    Kontakt:
    Kein Anschluss unter diesem Nick!

  6. The Following User Says Thank You to Suchty For This Useful Post:

    Negok (26.11.2015)

Ähnliche Themen

  1. [FB] Foto & Status liken - Likelo
    Von ZarneXxX im Forum Tutorials
    Antworten: 47
    Letzter Beitrag: 03.06.2015, 11:01
  2. VB.Net Skype API - Chat User auslesen
    Von Gangstersheep im Forum .Net
    Antworten: 0
    Letzter Beitrag: 18.05.2013, 14:38
  3. Facebook-Status [Käfer]
    Von Jeffrey im Forum Internet und Technik
    Antworten: 8
    Letzter Beitrag: 24.04.2012, 14:34
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.