2016-10-19 2 views
0

Мне нужно перенаправить пользователей на разные страницы в зависимости от ролей, предоставленных им в базе данных. Только имя пользователя и пароль отправляются на страницу входа в систему. Я должен принести роль из базы данных, которая выглядит следующим образом:mysql перенаправляет пользователей на разные страницы в зависимости от роли php

username | password | role 
 
admin1  admin1  admin 
 
alex12  alex12  (nothing to normal users)

Вот код:

<?php 
 
\t session_start(); 
 
\t // conectare la baza de date 
 
\t $db = mysqli_connect("localhost", "root", "", "inregistrare"); 
 
\t if (isset($_POST['login_btn'])) { 
 
\t \t $username = mysqli_real_escape_string($db,$_POST['username']); 
 
\t \t $password = mysqli_real_escape_string($db,$_POST['password']); 
 
\t \t $password = md5($password); // parola cryptata 
 
\t \t $sql = "SELECT * FROM users WHERE username='$username' AND password='$password'"; 
 
\t \t $result = mysqli_query($db, $sql); 
 
\t \t if (mysqli_num_rows($result) == 1) { 
 
\t \t \t $_SESSION['message'] = "Te poti Conecta!"; 
 
\t \t \t $_SESSION['username'] = $username; 
 
\t \t \t header("location: clasa.php"); //spre o pagina 
 
\t \t \t 
 
\t \t }else{ 
 
\t \t \t $_SESSION['message'] = "Parola gresita!"; 
 
\t \t } 
 
\t } 
 
?> 
 

 

 
<head> 
 
\t <title>Conectare</title> 
 
\t <link rel="stylesheet" type="text/css" href="./css/index-style.css"> 
 
</head> 
 
<body> 
 
<?php 
 
\t if (isset($_SESSION['message'])) { 
 
\t \t echo "<div id='error_msg'>".$_SESSION['message']."</div>"; 
 
\t \t unset($_SESSION['message']); 
 
\t } 
 
?> 
 

 

 
<form method="post" action="clasa.php"> <!-- modifica si aici cand modifici mai sus la php--> 
 
\t <table align="center"> 
 
\t \t 
 
\t \t <tr> 
 
\t \t \t <th id="titlu" class="titlu" colspan="2">Conectare</th> 
 
\t \t </tr> 
 
\t \t <tr> 
 
\t \t \t <td class="border">Username:</td> 
 
\t \t \t <td class="border"><input type="text" name="username" class="text-input" size="20"></td> 
 
\t \t </tr> 
 

 
\t \t <tr> 
 
\t \t \t <td class="border">Password:</td> 
 
\t \t \t <td class="border"><input type="password" name="password" class="text-input" size="20"></td> 
 
\t \t </tr> 
 
\t \t <tr> 
 
\t \t \t <td class="spatiu"></td> 
 
\t \t \t <td class="spatiu"></td> 
 
\t \t </tr> 
 
\t \t <tr> 
 
\t \t \t <td><button class="register" type="submit" formaction="./register.php">Inregistrare</button></td> 
 
\t \t \t <td><button class="connect" type="submit" name="login_btn">Conectare</button></td> 
 
\t \t </tr> 
 
\t </table> 
 
</form> 
 
</body> 
 
</html>

+0

«if (mysqli_num_rows ($ result) == 1) {« это неправильный человек, если имя пользователя верное, система будет регистрировать пользователя в –

+0

$ password = md5 ($ password); // parola cryptata Это очень слабый метод шифрования, попробуйте password_hash() и password_verify() и используйте подготовленные операторы –

+0

«SELECT * FROM users» перестает быть ленивым –

ответ

1

Вы должны проверить роль пользователя. Вот пример того, как вы можете это проверить.

P.S adminfile.php и anotherfile.php - это то, где вы должны перенаправить пользователя и быть тем, что хотите.

if (mysqli_num_rows($result) == 1) { 
     $_SESSION['message'] = "Te poti Conecta!"; 
     $_SESSION['username'] = $username; 
     $user = mysql_fetch_assoc($result); 


     if($user['role'] == 'admin'){ 
      header("location: adminfile.php"); 
     }else{ 
      header("location: anotherfile.php"); 
     } 


    }else{ 
     $_SESSION['message'] = "Parola gresita!"; 
    } 
+0

works, thx man: D Я понимаю процесс сейчас и добавлю больше роли –

+0

Добро пожаловать! Но вы должны принять во внимание комментарии к вам о безопасности :) –

+0

ok, thx again man: D –

0

Использование mysqli_fetch_row

$result = mysqli_query($db, $sql); 
while ($row = mysqli_fetch_row($result)) { 
    printf ("%s (%s)\n", $row[0], $row[1]); 
} 
0

Я вижу, что вы уже получили ответ от @ leli.1337 Но я думал, что я должен дать вам тот же самый пример более обеспеченных способом, чем тот, у вас есть выше, сильфонные Я использую PDO подготовлен для предотвращения внедрения SQL-запросов, а также нет необходимости сохранять сообщение об успешном сообщении/ошибке в переменной сеанса.

Bellow - мой код.

<?php 
session_start(); 
// conectare la baza de date 
$host_name = "localhost"; 
$u_name = "root"; 
$u_pass = ""; 
try { 
     $db = new PDO("mysql:host=$host_name;dbname=inregistrare", $u_name, $u_pass); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 
catch (PDOException $ex) { 
     error_log($ex); 

} 
$loginMessage = ""; //will fill this at a later stage. 

if (isset($_POST['login_btn'])) { 

     $username = UserInput($_POST['username']); 
     $password = UserInput($_POST['password']); 

     try { 


       $stmt = $db->prepare("SELECT username,password, role FROM users where username = ? "); 
       $stmt->bindValue(1, $username); 
       $stmt->execute(); 

       $result = $stmt->fetchall(PDO::FETCH_ASSOC); 
       if (count($result) > 1) { // username corerct 

         foreach ($result as $row) { // now lets validate password 
           if (password_verify($password, $row['password'])) { 
             $loginMessage   = "<p style=\"color:green;\">Te poti Conecta!</p>"; //We don't really need to store the success on a session. 
             $_SESSION['username'] = $row['username']; 

             if ($row['role'] === "admin") { 
               //admin user 
               header("location:admin.php"); 
             } elseif ($row['role'] === "") { 
               header("location: clasa.php"); //spre o pagina 
             } 

           } else { 
             // password incorrect 
             $loginMessage = "<p style=\"color:#f00\">Parola gresita!</p>"; 

           } 
         } 


       } 

     } 
     catch (PDOException $e) { 

       error_log($e); 
     } 


} 
function UserInput($data) 
{ 

     $data = trim($data); 
     $data = stripslashes($data); 
     $data = htmlspecialchars($data); 
     return $data; 
} 
?> 
<head> 
    <title>Conectare</title> 
    <link rel="stylesheet" type="text/css" href="./css/index-style.css"> 
</head> 
<body> 
<?php 
    echo $loginMessage; 
?> 
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
    <table align="center"> 

     <tr> 
      <th id="titlu" class="titlu" colspan="2">Conectare</th> 
     </tr> 
     <tr> 
      <td class="border">Username:</td> 
      <td class="border"><input type="text" name="username" class="text-input" size="20"></td> 
     </tr> 

     <tr> 
      <td class="border">Password:</td> 
      <td class="border"><input type="password" name="password" class="text-input" size="20"></td> 
     </tr> 
     <tr> 
      <td class="spatiu"></td> 
      <td class="spatiu"></td> 
     </tr> 
     <tr> 
      <td><button class="register" type="submit" formaction="./register.php">Inregistrare</button></td> 
      <td><button class="connect" type="submit" name="login_btn">Conectare</button></td> 
     </tr> 
    </table> 
</form> 
</body> 
</html> 

Как вы можете видеть, я использую password_verify(), чтобы проверить хэш пароля вместо md5 вы использовали так, на странице register.php вам нужно будет хэш пароля, как это:

$password = $_POST['password']; 
// Now lets hash the password 
$hash = password_hash($password, PASSWORD_DEFAULT); 

вместо: $password= md5($_POST['password'];

Так что в вашей базе данных вы будете хранить значение $ хэш

спасибо, надеюсь, вы найдете это мо полезно.

+0

wow, thx man, i.m собираюсь узнать больше о безопасности в следующий уик-энд –

+0

Вы приветствуете человека. –