Надеюсь, вы поможете мне с этим, (опять же в некоторых случаях!)
У меня есть система входа в php, которая использует соединение с базой данных mysql, сначала пользователь заполняет форму входа:
Code: admin/index.php:
<link rel="stylesheet" href="/styles/style-new.css" type="text/css" />
<script type="text/javascript">
function formfocus() {
document.getElementById('myusername').focus();
}
window.onload = formfocus;
</script>
<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form action="/?module=admin&n=checklogin" method="post" enctype="multipart/form-data" name="form1" id="form1">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3"><strong>Administrator Login </strong></td>
</tr>
<tr>
<td width="78">Username</td>
<td width="6">:</td>
<td width="294"><input type="text" name="myusername" id="myusername" tabindex="1"></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input name="mypassword" type="password" id="mypassword" tabindex="2"></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> <button type="submit" name="Submit" tabindex="3">Login</button>
<img src="../images/ajax-loader.gif" width="16" height="16" style="display: none"/>
<script>
$("button").click(function () {
$("img").show("slow");
});
</script>
</td>
</tr>
</table>
</td>
</form>
</tr>
</table>
<p align="center">Clicked on the wrong link? <a href="javascript: history.go(-1)">Click Here</a></p>
</div>
Затем он отправляется для проверки checklogin.php:
Code: checklogin.php:
<?php
sleep(3)
?>
<link rel="stylesheet" href="../styles/style-new.css" type="text/css" />
<?php
session_start();
$host="localhost"; // Host name
$username="david_bpd"; // Mysql username
$password="documents123456"; // Mysql password
$db_name="david_bpd"; // Database name
$tbl_name="members"; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die(mysql_error());
mysql_select_db("$db_name")or die("cannot select DB");
// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql) or die(mysql_error());
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
$cdata = mysql_query("SELECT * FROM cuser");
$cdata = mysql_num_rows($cdata);
echo $cdata;
if($count==1){
//If a user is not already logged on
if($cdata == 1){
echo "<meta http-equiv='refresh' content='0;url=/?module=admin&n=Login_unavailable'>";
}
else {
//Register username
echo $myusername;
$_SESSION['myusername'] = $myusername;
var_dump($_SESSION['myusername']);
$_SESSION['myusername'] == $myusername;
$sql2="INSERT INTO cuser(myusername)VALUES('$myusername')";
$result2 = mysql_query($sql2) or die(mysql_error());
echo '<meta http-equiv="refresh" content="0;url=/?module=admin&n=Login_success">';
}
}
elseif($count==0) {
echo '<meta http-equiv="refresh" content="0;url=/?module=admin&n=Login_Unsuccessful">';
}
?>
<?php
mysql_close();
?>
Затем он перерегистрируетсяиспользуя admin/Login_name.php:
, который проверяет последнее имя доступа в базе данных mysql и регистрирует его снова
<?php
/* Mysql connection */
$tbl_name="cuser"; // Table name
$query = "SELECT MAX(`id`) AS 'max' FROM $tbl_name";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_assoc($result);
$max = $row['max'];
$query1 = "SELECT * FROM $tbl_name WHERE id= '$max'";
$result1 = mysql_query($query1) or die(mysql_error());
$row1 = mysql_fetch_row($result1);
//check username
$myusername=$row1[1];
//register username
$_SESSION['myusername'] = $myusername;
?>
Проблема, с которой я столкнулся, заключается в том, что мне нужно ограничить доступ к области администратора с помощью этого:
Code:
<?php
session_start ();
if ($_REQUEST ['module'] == 'admin' && $_REQUEST ['n'] != 'index' && $_REQUEST ['n'] != 'Login_Unsuccessful' && $_REQUEST ['n'] != 'checklogin' && $_REQUEST ['n'] != 'Logout' && $_REQUEST ['n'] != 'Login_name') {
include ("admin/Login_name.php");
// var_dump ( $myusername );
//echo $myusername;
//echo "<br />";
//echo "<br />";
if (isset ( $_SESSION ['myusername'] )) {
//var_dump($myusername);
//echo "SESSION IS SET";
if ($_SESSION ['myusername'] == $myusername) {
//echo "User should be allowed to be on page";
} else {
//echo"User not allowed";
echo '<meta http-equiv="refresh" content="0;url=/?module=admin&n=index">';
}
} else {
//var_dump(($_SESSION['myusername']));
//echo "SESSION IS NOT SET(username not registered)";
echo '<meta http-equiv="refresh" content="0;url=/?module=admin&n=index">';
}
}
?>
Проблема, которую я обнаружил, состоит в том, что, если администратор уже вошел в систему, человек, который еще не вошел в систему, может получить доступ к закрытым областям, но я не хочу, чтобы это произошло.
Я думаю, что это может иметь какое-то отношение к операторам if в последнем бите исходного кода, однако я не знаю.
Любые идеи?
Спасибо
PS Извините за длинный пост, единственный способ описать полностью!