본문 바로가기
공부/기타

[APM] 직원 월급 관리 웹서버 만들기 2 - PHP, HTML

by haejang 2020. 10. 31.
728x90
728x90

 

이전 글에 이어서 쓰겠다

2020/10/31 - [공부/기타] - [APM] 직원 월급 관리 웹서버 만들기 1 - DB, PHP, HTML

 

[APM] 직원 월급 관리 웹서버 만들기 1 - DB, PHP, HTML

직원 월급을 관리하는 웹 페이지를 만들어보도록 하겠다 윈도우에서 Bitnami로 APM을 깔아서 진행하는 것이며, 그 설치 과정은 아래 글에서 확인하자 2020/10/24 - [공부/기타] - [APM] 윈도우에 웹서버

honglab.tistory.com

 

4) print.php

DB 테이블에 있는 레코드들을 가져와 각각의 옆에 수정, 삭제 버튼을 만들어 줄 것이다

또한 테이블의 위엔 검색할 수 있는 form도 만들어 준다

<?php
	$conn=mysqli_connect('localhost','root','비밀번호','DB이름(awscop)');
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>AWSCOP</title>
</head>
<body>
	<div>
		<h1><a href="index.php">AWSCOP</a></h1>
	</div>
	<div>
		<p>이름으로 검색하기</p>
		<p>
			<form action="search.php" method="post">
				<input type="text" name="name" placeholder="이름">
				<input type="submit" value="검색">
			</form>
		</p>
		<table>
			<thead>
				<tr>
					<th>id</th><th>이름</th><th>직급</th><th>기본급</th><th>수당</th><th>세율</th><th>월급</th><th></th><th></th>
				</tr>
			</thead>
			<tbody>
	  		<?php
				$sql = "SELECT * FROM 월급관리";
				$result = mysqli_query($conn, $sql);
				while( $row = mysqli_fetch_array($result)) {
					$filtered = array(
						'id' => htmlspecialchars($row['id']),
						'이름' => htmlspecialchars($row['이름']),
						'직급' => htmlspecialchars($row['직급']),
						'기본급' => htmlspecialchars($row['기본급']),
						'수당' => htmlspecialchars($row['수당']),
						'세율' => htmlspecialchars($row['세율']),
						'월급' => htmlspecialchars($row['월급'])
					);
			?>
			<tr>
				<td><?= $filtered['id'] ?></td>
				<td><?= $filtered['이름'] ?></td>
				<td><?= $filtered['직급'] ?></td>
				<td><?= $filtered['기본급'] ?></td>
				<td><?= $filtered['수당'] ?></td>
				<td><?= $filtered['세율'] ?></td>
				<td><?= $filtered['월급'] ?></td>
				<td><a href="update.php?id=<?php echo $filtered['id'] ?>">수정</a></td>
				<td>
					<form action="delete.php" method="post" onsubmit="if(!confirm('정말 삭제하시겠습니까?')){return false;}">
						<input type="hidden" name="id" value="<?= $filtered['id'] ?>">
						<input type="submit" value="삭제">         
					</form>
				</td>
			</tr>
			<?php
				}
			?>
		</table>
	</div>
	<div>
		<h4>AWSCOP</h4>
		<p>TEL : 0212345678</p>
		<p>E-MAIL : aws123@gmail.com</p>
	</div>
</body>
</html>

저번처럼 conn에 DB와의 연결을 만들어둔다

 

먼저 검색하는 form은 submit 버튼을 누르면 search.php로 post방식으로 넘어가게 해준다

 

table 태그는 그냥 써도 되지만 나중에 꾸밀거를 생각해서 thead와 tbody로 나눠서 만들어줬다

tr은 한 행을 뜻하고 th는 한 열을 뜻한다

월급관리 테이블의 모든 데이터를 가져오는 sql문을 작성한 후, 해당 sql 실행 결과를 result로 저장해둔다

그 다음 mysql_fetch_array($result)로 각각의 행에 대해서 모든 데이터가 다 나올 때까지 그 밑의 코드들을 반복 실행한다(while)

DB의 데이터들은 htmlspecialchars 라는 함수를 통해 필터링하고(XSS공격 방지) 테이블에 입력된다

<?= ?> 사이에 변수를 쓰면 html 안에서 php변수를 간단히 나타낼 수 있다

 

그리고 각각의 레코드들 옆에는 update.php에 get 방식으로 id를 넘기는 수정 버튼이 있고

정말 삭제할건지 물은 다음에 delete.php에 post방식으로 id를 넘기는 삭제 버튼이 있다

 

 

원하는 검색, 수정, 삭제 버튼과 테이블의 데이터들이 잘 나오고 있는걸 확인할 수 있다

 

이제 검색을 해보겠다

 

5) search.php

print.php와 똑같이 가되, 데이터들만 검색해서 나온 값들만 나올 수 있도록 조치하겠다

<?php
	$conn=mysqli_connect('localhost','root','비밀번호','DB이름(awscop)');
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>AWSCOP</title>
</head>
<body>
	<div>
		<h1><a href="index.php">AWSCOP</a></h1>
	</div>
	<div>
		<p>이름으로 검색하기</p>
		<p>
			<form action="search.php" method="post">
				<input type="text" name="name" placeholder="이름">
				<input type="submit" value="검색">
			</form>
		</p>
		<table>
			<thead>
				<tr>
					<th>id</th><th>이름</th><th>직급</th><th>기본급</th><th>수당</th><th>세율</th><th>월급</th><th></th><th></th>
				</tr>
			</thead>
			<tbody>
			<?php
				$filtered_name=mysqli_real_escape_string($conn,$_POST['name']);

				$sql = "SELECT * FROM 월급관리 WHERE 이름 LIKE '%{$filtered_name}%'";
				$result = mysqli_query($conn, $sql);
				while( $row = mysqli_fetch_array($result)) {
					$filtered = array(
						'id' => htmlspecialchars($row['id']),
						'이름' => htmlspecialchars($row['이름']),
						'직급' => htmlspecialchars($row['직급']),
						'기본급' => htmlspecialchars($row['기본급']),
						'수당' => htmlspecialchars($row['수당']),
						'세율' => htmlspecialchars($row['세율']),
						'월급' => htmlspecialchars($row['월급'])
					);
			?>
			<tr>
				<td><?= $filtered['id'] ?></td>
				<td><?= $filtered['이름'] ?></td>
				<td><?= $filtered['직급'] ?></td>
				<td><?= $filtered['기본급'] ?></td>
				<td><?= $filtered['수당'] ?></td>
				<td><?= $filtered['세율'] ?></td>
				<td><?= $filtered['월급'] ?></td>
				<td><a href="update.php?id=<?php echo $filtered['id'] ?>">수정</a></td>
				<td>
					<form action="delete.php" method="post" onsubmit="if(!confirm('정말 삭제하시겠습니까?')){return false;}">
						<input type="hidden" name="id" value="<?= $filtered['id'] ?>">
						<input type="submit" value="삭제">         
					</form>
				</td>
			</tr>
			<?php
				}
			?>
		</table>
	</div>
	<div>
		<h4>AWSCOP</h4>
		<p>TEL : 0212345678</p>
		<p>E-MAIL : aws123@gmail.com</p>
	</div>
</body>
</html>

딱 보면 알겠지만 print.php에서 post로 받은 이름 필터링해주고 sql만 바꿔준 것이다

한번 홍길동이라고 검색을 해보겠다

 

 

홍길동만 잘 나온다. 김 이라고 한글자만 써서 검색도 해보겠다

 

 

한글자만 써도 김이 포함된 김미영만 뜨는걸 확인할 수 있다

 

이제 다시 print.php로 돌아가서, update.php를 작성해보겠다

 

6) update.php

print에서 get방식으로 받아온 id를 가지고 sql을 돌려서 기존 값들을 form에 띄워둘 것이다

수정된 값들은 다시 post방식으로 update_process.php로 넘어가게 만들 것이다

<?php
	$conn=mysqli_connect('localhost','root','비밀번호','DB이름(awscop)');	

	settype($_GET['id'], 'integer');
	$a=$_GET['id'];
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>AWSCOP</title>
</head>
<body>
	<div>
		<h1><a href="index.php">AWSCOP</a></h1>
	</div>
	<div>
		<?php
			$sql="SELECT * FROM 월급관리 WHERE id=$a";
			$result=mysqli_query($conn, $sql);
			$row = mysqli_fetch_array($result);
			$filtered = array(
				'이름' => htmlspecialchars($row['이름']),
				'직급' => htmlspecialchars($row['직급']),
				'기본급' => htmlspecialchars($row['기본급']),
				'수당' => htmlspecialchars($row['수당'])
			);
		?>
		<form action="update_process.php?id=<?php echo $_GET['id'] ?>" method="post">
			<p><input type="text" name="name" placeholder="이름" value="<?= $filtered['이름'] ?>"></p>
			<p><input type="text" name="rank" placeholder="직급" value="<?= $filtered['직급'] ?>"></p>
			<p><input type="text" name="basic" placeholder="기본급" value="<?= $filtered['기본급'] ?>"></p>
			<p><input type="text" name="extra" placeholder="수당" value="<?= $filtered['수당'] ?>"></p>
			<p><input type="submit" value="수정"></p>
		</form>
	</div>
	<div>
		<h4>AWSCOP</h4>
		<p>TEL : 0212345678</p>
		<p>E-MAIL : aws123@gmail.com</p>
	</div>
</body>
</html>

get으로 받은 id를 integer형식으로 정해주고, 다른 변수에다 값을 저장해준다

id가 해당 값인 레코드를 출력하는 sql문을 작성해주고, 그 레코드의 값들을 필터링해준다

 

form 자체는 create.php와 똑같지만 value 속성을 추가해 내가 입력하기 전에 기본적으로 원래의 값들을 띄우게 해줬다

한번 홍길동 레코드의 수정 버튼을 눌러보겠다

 

 

url을 보면 update.php?id=1로 되어있는걸 보고 get방식으로 id가 잘 들어오는걸 확인할 수 있다

또한 form에 id가 1인 레코드의 이름, 직급, 기본급, 수당이 잘 적혀있는것도 확인 가능하다

아직 update_process.php 파일을 만들지 않았으니 수정 버튼을 누르진 말자

 

7) update_process.php

update.php에서 post로 받은 값들을 가지고 DB를 업데이트 해야한다

create_process.php와 비슷하게 가면 된다

<?php
	$conn=mysqli_connect('localhost','root','비밀번호','DB이름(awscop)');

	settype($_GET['id'], 'integer');

	$basic=$_POST['basic'];
	$extra=$_POST['extra'];

	if ($basic <= 2000000){
		$tax=0.01;
	}
	elseif ($basic <= 4000000) {
		$tax=0.02;
	}
	else {
		$tax=0.03;
	}

	$salary=($basic+$extra)*(1-$tax);

	$filtered=array(
		'id' => mysqli_real_escape_string($conn, $_GET['id']),
		'name' => mysqli_real_escape_string($conn, $_POST['name']),
		'rank' => mysqli_real_escape_string($conn, $_POST['rank']),
	);

	$sql="
		UPDATE 월급관리
		SET 이름='{$filtered['name']}',직급='{$filtered['rank']}',기본급=$basic,수당=$extra,세율=$tax,월급=$salary
		WHERE id='{$filtered['id']}';
		"
	;

?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>AWSCOP</title>
</head>
<body>
	<div>
		<h1><a href="index.php">AWSCOP</a></h1>
	</div>
	<div>
		<?php
			$result=mysqli_query($conn, $sql);
			if($result === false) {
				echo '글 수정 오류가 발생하였습니다. 관리자에게 문의하세요.';
				echo error_log(mysqli_error($conn));
			} else {
				header('Location: print.php');
			}
		?>
	</div>
	<div>
		<h4>AWSCOP</h4>
		<p>TEL : 0212345678</p>
		<p>E-MAIL : aws123@gmail.com</p>
	</div>
</body>
</html>

create_process.php와 똑같은데 sql문과 본문만 조금 다른걸 알 수 있다

본문의 Location:print.php는 리디렉션 페이지를 정해주는 것으로 수정이 정상적으로 이루어지면 바로 print.php로 돌아가게 했다

홍길동의 직급을 대리로 바꿔서 수정을 눌러보겠다

 

 

정상적으로 수정되어 print.php로 돌아왔다

 

8) delete.php

print.php에서 삭제 버튼을 누르면 정말 삭제할건지 묻는 창이 뜬다

거기서 yes를 누르면 post로 받은 id값을 이용해 해당 레코드를 삭제하는 sql문을 작성하면 된다

<?php
	$conn=mysqli_connect('localhost','root','비밀번호','DB이름(awscop)');

	settype($_POST['id'], 'integer');
	$filtered = array(
		'id' => mysqli_real_escape_string($conn, $_POST['id'])
	);

	$sql = "
		DELETE FROM 월급관리 WHERE id = '{$filtered['id']}'
		";

	$result = mysqli_multi_query($conn, $sql);
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>AWSCOP</title>
</head>
<body>
	<div>
		<h1><a href="index.php">AWSCOP</a></h1>
	</div>
	<div>
		<?php
			if($result === false) {
				echo '삭제하는 과정에서 오류가 발생하였습니다. 관리자에게 문의하세요.';
				echo error_log(mysqli_error($conn));
			} else {
				header('Location: print.php');
			}
		?>
	</div>
	<div>
		<h4>AWSCOP</h4>
		<p>TEL : 0212345678</p>
		<p>E-MAIL : aws123@gmail.com</p>
	</div>
</body>
</html>

위에서 했던것들이랑 비슷해서 더이상 설명할게 없다

한번 홍길동을 삭제해보겠다

 

팝업창이 뜬다. 확인을 누르면

 

 

print.php로 리디렉션되었지만 홍길동 레코드가 보이지 않는걸 확인할 수 있다

 

 

이것으로 필요한 기능들은 전부 구현했다

CSS로 꾸미는건 다음 글을 보자

2020/11/01 - [공부/기타] - [APM] 직원 월급 관리 웹서버 만들기 3 - HTML, CSS

 

[APM] 직원 월급 관리 웹서버 만들기 3 - HTML, CSS

이전 글에 이어서 쓰겠다 2020/10/31 - [공부/기타] - [APM] 직원 월급 관리 웹서버 만들기 2 - PHP, HTML [APM] 직원 월급 관리 웹서버 만들기 2 - PHP, HTML 이전 글에 이어서 쓰겠다 2020/10/31 - [공부/기타]..

honglab.tistory.com

728x90
728x90

댓글