제품 등록을 하려다보니 관리자 작업을 먼저 해야겠다는 생각이 들었다. 테이블부터 만들어보자. 기존에 쓰던 members 테이블에 몇개의 컬럼을 추가했다.
CREATE TABLE `admins` (
`idx` int(11) NOT NULL AUTO_INCREMENT,
`userid` varchar(145) DEFAULT NULL,
`email` varchar(245) DEFAULT NULL,
`username` varchar(145) DEFAULT NULL,
`passwd` varchar(200) DEFAULT NULL,
`regdate` datetime DEFAULT current_timestamp(),
`level` tinyint(4) DEFAULT NULL,
`last_login` datetime DEFAULT NULL,
`end_login_date` datetime DEFAULT NULL,
PRIMARY KEY (`idx`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
INSERT INTO admins (userid,email,username,passwd,regdate,level) VALUES
('admin','admin@shop.com','관리자','ba3253876aed6bc22d4a6ff53d8406c6ad864195ed144ab5c87621b6c233b548baeae6956df346ec8c17f5ea10f35ee3cbc514797ed7ddd3145464e2a0bab413','2022-01-24 17:12:32.000',100);
위 데이터는 아이디는 admin이고 암호는 123456 이다.
level이라는 것이 관리자에선 중요하다. 모든 관리자가 모든 페이지에 들어가는게 아니끼 때문에 관리자도 권한이 필요하다. 어떤 관리자는 상품등록만 가능하고 어떤 관리자는 게시판만 사용하게 해야한다.
또 관리자가 아르바이트로 들어오는 경우도 있다. 이런 경우를 대비해서 로그인 기한도 정해주는 것이 좋다. 한가지 더 한다면 ip같은 것도 지정해서 특정 ip에서만 로그인 가능하게 하거나 할 수도 있는데 그건 하지 말자. 귀찮다.
페이지를 만들어보자.
/admin/login.php
<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/header.php";
?>
<body class="text-center">
<main class="form-signin">
<form style="padding:200px;" method="post" action="login_ok.php">
<h1 class="h3 mb-3 fw-normal">쇼핑몰 관리자 페이지</h1>
<div class="form-floating" style="margin-bottom:10px;">
<input type="text" name="userid" class="form-control" id="floatingInput" placeholder="name@example.com" required>
<label for="floatingInput">아이디를 입력하세요</label>
</div>
<div class="form-floating">
<input type="password" name="passwd" class="form-control" id="floatingPassword" placeholder="Password" required>
<label for="floatingPassword">비밀번호를 입력하세요.</label>
</div>
<button class="w-100 btn btn-lg btn-primary" style="margin-top:20px;" type="submit">로그인</button>
</form>
</main>
</body>
<?php
include $_SERVER["DOCUMENT_ROOT"]."/inc/footer.php";
?>
이번엔 로그인 처리를 해보자
/admin/login_ok.php
<?php session_start();
include $_SERVER["DOCUMENT_ROOT"]."/inc/dbcon.php";
ini_set( 'display_errors', '0' );
$userid=$_POST["userid"];
$passwd=$_POST["passwd"];
$passwd=hash('sha512',$passwd);
$query = "select * from admins where userid='".$userid."' and passwd='".$passwd."'";
$result = $mysqli->query($query) or die("query error => ".$mysqli->error);
$rs = $result->fetch_object();
if($rs){
$sql="update admins set last_login=now() where idx=".$rs->idx;
$result=$mysqli->query($sql) or die($mysqli->error);
$_SESSION['AUID']= $rs->userid;
$_SESSION['AUNAME']= $rs->username;
$_SESSION['ALEVEL']= $rs->level;
echo "<script>alert('어서오십시오.');location.href='/admin/product/product_list.php';</script>";
exit;
}else{
echo "<script>alert('아이디나 암호가 틀렸습니다. 다시한번 확인해주십시오.');history.back();</script>";
exit;
}
?>
product_list.php는 아직 안만들었다. 로그인하고 없는 페이지가 나오면 잘한것이다.
관리자 등록화면은 각자 만들어보자. 회원가입이랑 비슷하니 참고해서 만들어보자.