2015-03-24 4 views
0

У меня есть таблица базы данных, в которой хранятся имя пользователя, пароль и другая информация пользователя, а также их имя и администратор. В настоящее время он установлен в Char, где A - для администратора, а U - для обычного пользователя.проверить, нет ли администратора или нет php

У меня есть следующий код, который проверяет, если пользователь существует:

<?php 
session_start(); // Starting Session 
include_once('config.php'); 

$error=''; // Variable To Store Error Message 
if (isset($_POST['submit'])) { 
if (empty($_POST['user']) || empty($_POST['pass'])) { 
$error = "Please complete both fields"; 
} 
else 
{ 
// Define $username and $password 
$user=$_POST['user']; 
$_SESSION['login_user']=$user; 
$pass=md5($_POST['pass']); 
// To protect MySQL injection for Security purpose 
$user = stripslashes($user); 
$pass = stripslashes($pass); 
$user = mysqli_real_escape_string($mysqli, $user); 
$pass = mysqli_real_escape_string($mysqli, $pass); 
// SQL query to fetch information of registered users and finds user match. 
$result = mysqli_query($mysqli, "SELECT * FROM users WHERE Username='$user' AND Password='$pass'"); 
if(mysqli_num_rows($result) == 1) { 
header("Location: home.php"); 
} else { 
$error = "Username or Password is invalid"; 
} 
mysqli_close($mysqli); // Closing mysqlinection 
} 
} 
?> 

<!doctype html> 
<html> 
<head> 
<link rel="stylesheet" type="text/css" href="style/style.css"> 
<script type="text/javascript" src="//code.jquery.com/jquery-2.1.3.min.js"></script> 
<title>Login</title> 

</head> 
<body> 

<div id = "logReg"> 
<span href="#" class="button" id="toggle-login">Log in</span> 
</div> 

<div id="login"> 
    <div id="triangle"></div> 
    <h1>Log in</h1> 
    <form action = "" id = "logregform" method = "POST"> 
    <p id = "err"> <?php if(isset($error)) {echo $error;} ?> </p> 
    <input id = "logtxt" type="text" placeholder="Username" name = "user" required/> 
    <input type="password" placeholder="Password" name = "pass" required/> 
    <input type="submit" value="Log in" name = "submit" /> 
    <br> 
    <br> 
    <p id ="bklg">Dont have an account? <a href="register.php">Sign up</a></p> 
    </form> 
</div> 

</html> 

Как бы я проверить, если ACCOUNT_TYPE есть А и если да направить пользователя на другую страницу, вместо обычного страницы home.php?

EDIT: Он отлично работает, однако администратор обыкновение войти Ive дал ему проверить имя пользователя 456 и пароль 456, когда я вписываю их в двух текстовых полей ничего не происходит, экран просто обновляется, и им обратно на. Войти страница:

новый код ниже:

 <?php 
session_start(); // Starting Session 
include_once('config.php'); 

$error=''; // Variable To Store Error Message 
if (isset($_POST['submit'])) { 
if (empty($_POST['user']) || empty($_POST['pass'])) { 
$error = "Please complete both fields"; 
} 
else 
{ 
// Define $username and $password 
$user=$_POST['user']; 
$pass=md5($_POST['pass']); 
// To protect MySQL injection for Security purpose 
$user = stripslashes($user); 
$pass = stripslashes($pass); 
$user = mysqli_real_escape_string($mysqli, $user); 
$pass = mysqli_real_escape_string($mysqli, $pass); 
// SQL query to fetch information of registered users and finds user match. 
$result = mysqli_query($mysqli, "SELECT * FROM users WHERE Username='$user' AND Password='$pass'"); 
if ($row = mysqli_fetch_array($result)) { 
    //set the session variables 
    $_SESSION['Username'] = $row['Username']; 
    $_SESSION['Account_Type'] = $row['Account_Type']; 

    if ($row['Account_Type'] === 'A') { 
     header ("location: adminHome.php"); 
     exit; 
    } else { 
     header ("location: home.php"); 
     exit; 
    } 
} else { 
    $error = "Username or Password is invalid"; 
} 
mysqli_close($mysqli); // Closing mysqlinection 
} 
} 
?> 

<!doctype html> 
<html> 
<head> 
<link rel="stylesheet" type="text/css" href="style/style.css"> 
<script type="text/javascript" src="//code.jquery.com/jquery-2.1.3.min.js"></script> 
<title>Login</title> 

</head> 
<body> 

<div id = "logReg"> 
<span href="#" class="button" id="toggle-login">Log in</span> 
</div> 

<div id="login"> 
    <div id="triangle"></div> 
    <h1>Log in</h1> 
    <form action = "" id = "logregform" method = "POST"> 
    <p id = "err"> <?php if(isset($error)) {echo $error;} ?> </p> 
    <input id = "logtxt" type="text" placeholder="Username" name = "user" required/> 
    <input type="password" placeholder="Password" name = "pass" required/> 
    <input type="submit" value="Log in" name = "submit" /> 
    <br> 
    <br> 
    <p id ="bklg">Dont have an account? <a href="register.php">Sign up</a></p> 
    </form> 
</div> 
<script> 

$('#toggle-login').click(function(){ 
    $('#login').slideToggle('fast'); 
}); 
</script> 
</html> 
+0

'if ($ row ['column'] ==" something ") {...}' –

+0

Я бы поставил это после оператора sql select или после инструкции if перед перенаправлением пользователя? – Spud91

+0

http://stackoverflow.com/a/29127818/ просто добавьте 'i' и разместите его после' if (mysqli_num_rows ($ result) == 1) {' –

ответ

0
$row = mysqli_fetch_array($result); 
if ($row['Account_Type'] === 'A') { 

} elseif ($row['Account_Type'] === 'U') { 

} else { 

} 
+0

То же самое: '(!) Примечание: Неопределенный индекс: Account_Type в C: \ wamp \ www \ index.php в строке 25' – Spud91

+0

Account_Type - это имя столбца в таблице? – Jaime

+0

Yup. эта ошибка была отсортирована.Ive отредактировал мой оригинальный пост. все еще не работает 100% – Spud91

0

Вы собираетесь об этом неправильный путь. Каждая страница, требующая аутентификации пользователя, должна проверяться в самом начале, если пользователь аутентифицирован и на каком уровне. Способ сделать это - использовать сеанс.

Прямо сейчас вы устанавливаете переменную сеанса, прежде чем вы даже проверите правильность комбинации пользователя и пароля, чтобы вы эффективно регистрировались в любом, кто вводит имя пользователя.

Вы должны хранить переменные в сессии только после успешной регистрации и, как упоминалось вам нужно получить строку из набора результатов для получения информации о пользователе:

// Personally I would use a prepared statement here 
$result = mysqli_query($mysqli, "SELECT * FROM users WHERE Username='$user' AND Password='$pass'"); 
if ($row = mysqli_fetch_array($result)) { 
    // Now you can set the session variables 
    $_SESSION['Username'] = $row['Username']; 
    $_SESSION['Account_Type'] = $row['Account_Type']; 
    // Add any additional user information to the session that you might need later on 

    if ($row['Account_Type'] === 'A') { 
     header ("location: adminHome.php"); 
     exit; 
    } else { 
     header ("location: home.php"); 
     exit; 
    } 
} else { 
    $error = "Username or Password is invalid"; 
} 

Теперь на каждой странице, где пользователь требуется вы можете сделать:

session_start(); 
if (isset($_SESSION['Username'])) 
{ 
    // valid user, additional checks for user type? 
} 
else 
{ 
    // not a valid/logged in user 
} 

Примечание:

+0

Ive изменил исходный код, но я все равно получаю ту же проблему, когда администратор пытается войти во все, что я получаю, это обновление страницы. имя пользователя и пароль для администратора были установлены на 456 для целей тестирования, но, похоже, это не работает. Обычный пользователь может войти в систему отлично – Spud91

+0

@ Spud91 Так избавитесь от перенаправления и добавьте переменные var_dump() 'ваших переменных в разных местах, чтобы увидеть, где это происходит. – jeroen

+0

Не знаете, как это сделать Var_Dumps. и все еще не позволяя мне войти в систему как администратор. Я набираю имя пользователя и пароль. нажмите кнопку «Отправить». и он мгновенно говорит: «Имя пользователя или пароль недействительны» – Spud91

Смежные вопросы