Suchty (25.11.2015)
-
24.11.2015, 21:28 #1
- Registriert seit
- 24.11.2011
- Beiträge
- 207
Thanked 114 Times in 71 PostsUser 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($upass, PASSWORD_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;
}
}
?>
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> <?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> SIGN IN
</button>
</div>
<br />
<label>Don't have account yet ! <a href="regi.php">Sign Up</a></label>
</form>
</div>
</div>
</body>
</html>
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>Geändert von Suchty (24.11.2015 um 22:11 Uhr)
Kontakt:
Kein Anschluss unter diesem Nick!
-
24.11.2015, 22:48 #2
- Registriert seit
- 15.11.2011
- Beiträge
- 7.822
- Blog Entries
- 5
Thanked 9.355 Times in 3.195 PostsAW: 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"
-
The Following User Says Thank You to DMW007 For This Useful Post:
-
25.11.2015, 00:27 #3
- Registriert seit
- 24.11.2011
- Beiträge
- 207
Thanked 114 Times in 71 PostsAW: 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;
}
}
PHP-Code:public function has_status()
{
if(isset($_SESSION['user_status']))
{
return true;
}
}
PHP-Code:if($user->has_status()!=="1")
{
$user->redirect('home.php');
}
if($user->is_loggedin()!="")
{
$user->redirect('home.php');
}
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!
-
25.11.2015, 19:53 #4
- Registriert seit
- 24.11.2011
- Beiträge
- 207
Thanked 114 Times in 71 PostsAW: User Status/Rank per PHP PDO auslesen
Kleines Update:
Hab es mittlerweile hinbekommen mit der Abfragemanchmal 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();
}
}
PHP-Code:if(password_verify($upass, $userRow['user_pass']))
PHP-Code:&& $userRow['user_status'] == '1'
PHP-Code:if(password_verify($upass, $userRow['user_pass']) && $userRow['user_status'] == '1')
Kontakt:
Kein Anschluss unter diesem Nick!
-
The Following User Says Thank You to Suchty For This Useful Post:
Negok (26.11.2015)
Ähnliche Themen
-
[FB] Foto & Status liken - Likelo
Von ZarneXxX im Forum TutorialsAntworten: 47Letzter Beitrag: 03.06.2015, 11:01 -
VB.Net Skype API - Chat User auslesen
Von Gangstersheep im Forum .NetAntworten: 0Letzter Beitrag: 18.05.2013, 14:38 -
Facebook-Status [Käfer]
Von Jeffrey im Forum Internet und TechnikAntworten: 8Letzter Beitrag: 24.04.2012, 14:34
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.