kjh00n의 기록저장소
여러기능의 WEB 만들기 본문
WEB 구성
index.php
<!doctype html>
<html>
<head>
<title>Web Test Site</title>
<link rel="stylesheet" href="style_contents.css" type="text/css">
</head>
<body>
<iframe src="head.php" id="bodyFrame" name="body" width="100%" frameborder="0"></iframe>
<div id="main_contents" class="contents">
<?php
session_start();
if($_SESSION["user_id"]){
echo "<font color='#252525' size='8em'>환영합니다. ".$_SESSION["nickname"]."님</font>";
}
?>
<br>
<p>
<font color="#323232" size="4em">
웹 해킹을 공부하고 싶은데 연습할 곳이 없으시다구요?<br>
실제 사이트에 연습하다가는 <strong>!!철컹철컹!!</strong> 아시죠?<br>
이곳은 Web Hacking 연습을 위한 Test 사이트 입니다.<br>
이곳에서는 마음껏 연습하세요~!!^^<br>
</font>
</p>
</div>
</body>
</html>
head.php
<!doctype html>
<html>
<!-- head 부분 -->
<head>
<title>Web Test Site</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" >
<link rel="stylesheet" href="style_head.css" type="text/css">
</head>
<body>
<?php session_start(); ?>
<div id="area_header">
<h1>Web Test Site</h1>
</div>
<div id="area_menu">
<a href="index.php" target="_parent">홈</a>
| <a href="board/board_list.php" target="_parent">게시판</a>
<?php if(!$_SESSION["user_id"]): ?>
| <a href="member/login.php" target="_parent">로그인</a>
| <a href="member/register.php" target="_parent">회원가입</a>
<?php else: ?>
| <a href="member/info.php" target="_parent"><?=$_SESSION["nickname"]?>님 정보</a>
| <a href="member/nick.php" target="_parent">닉네임수정</a>
| <a href="member/logout.php" target="_parent">로그아웃</a>
<?php endif; ?>
</div>
</body>
</html>
dbconn.php
<?php
$conn=mysqli_connect("localhost","root","P@ssw0rd","WebTest");
mysqli_set_charset($conn,"utf8");
?>
CSS
style_content.css
@charset "utf-8";
/** 전체 스타일 **/
* { margin:0; padding:0; color:#323232;} /* 모든 태그 기본 margin/padding 0으로 초기화*/
a { text-decoration: none;} /* a 태그 밑줄 없애기 */
/** 하단 컨텐츠 부분 기본 스타일 **/
div.contents { height:100%; text-align:center; padding:15px; }
table { margin:auto; border: 0px; }
table td { text-align:left;}
table font { font-size:1em;}
table.grayColor th{ background-color:#c8c8c8;}
.center { text-align:center;}
/*메인화면 스타일*/
div#main_contents h1 {color:#FF8C00;}
div#main_contents font { font-weight:bold;}
div#main_contents strong {color:red;}
/*로그인화면 스타일*/
div#login_contents table td.input {
border: 1px solid;
text-align: center;
width: 100px;
}
/*버튼 스타일*/
.btn_default{display:inline-block;height:25px;padding:0px 10px;font-size:13px;
cursor:pointer;border:1px solid #9e9e9e;-webkit-user-select:none;-moz-user-select:none;
-ms-user-select:none;user-select:none;line-height:25px;vertical-align:middle;}
.btn_gray{ background-color:#868686; color:white;}
/* form 내부 select 태그 스타일 */
select{ height:22px; vertical-align:middle;}
style_head.css
@charset "utf-8";
/** 전체 스타일 **/
* { margin:0; padding:0;} /* 모든 태그 기본 margin/padding 0으로 초기화*/
a { text-decoration: none;} /* a 태그 밑줄 없애기 */
/** 상단 header 스타일 **/
div#area_header { text-align:center;margin:10px;}
div#area_header h1 { font-size:4em; color:#323232;}
/** 중간 메뉴바 스타일 **/
div#area_menu { height:28px; padding-top: 2px;background-color:#323232; text-align:center; color:white;}
div#area_menu a { color:white;}
div#area_menu a:hover { color:#FF8C00;}
member 폴더
login.php
<!doctype html>
<html>
<!-- head 부분 -->
<head>
<title>Web Test Site</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" >
<link rel="stylesheet" href="style_head.css" type="text/css">
</head>
<body>
<?php session_start(); ?>
<div id="area_header">
<h1>Web Test Site</h1>
</div>
<div id="area_menu">
<a href="index.php" target="_parent">홈</a>
| <a href="board/board_list.php" target="_parent">게시판</a>
<?php if(!$_SESSION["user_id"]): ?>
| <a href="member/login.php" target="_parent">로그인</a>
| <a href="member/register.php" target="_parent">회원가입</a>
<?php else: ?>
| <a href="member/info.php" target="_parent"><?=$_SESSION["nickname"]?>님 정보</a>
| <a href="member/nick.php" target="_parent">닉네임수정</a>
| <a href="member/logout.php" target="_parent">로그아웃</a>
<?php endif; ?>
</div>
</body>
</html>
login_check.php
<?php
session_start(); # 세션을 시작하는 함수
$conn=mysqli_connect("localhost","root","P@ssw0rd","WebTest");
mysqli_set_charset($conn,"utf8");
$id=$_POST["user_id"];
$pw=$_POST["user_pw"];
$strSQL="select * from member where u_id='".$id."' and u_pw='".$pw."';";
$rs=mysqli_query($conn,$strSQL);
$rs_arr=mysqli_fetch_array($rs);
if($rs_arr){
$_SESSION["user_id"]=$rs_arr["u_id"];
$_SESSION["nickname"]=$rs_arr["nickname"];
echo "<script>
alert('로그인 되었습니다.');
location.replace('../index.php');
</script>";
} else {
echo "<script>
alert('아이디 또는 패스워드가 일치하지 않습니다.');
history.back();
</script>";
}
?>
logout.php
<?php
session_start();
if ($_SESSION["user_id"]){
session_destroy();
echo "<script>
alert('로그아웃 되었습니다.');
location.replace('../index.php');
</script>";
} else {
echo "<script>
alert('로그인 후 이용해 주세요.');
history.back();
</script>";
}
?>
세션변수가 사용되었음
세션변수를 사용하려면 session_start();는 필수
register.php
<!doctype html>
<html>
<head>
<title>회원 가입</title>
<link rel="stylesheet" href="../style_contents.css" type="text/css">
<script>
function ck(){
var en = /[^(a-zA-Z0-9)]/;
if(en.test(document.mform.user_id.value)){
alert("ID는 영문/숫자만 가능합니다.");
mform.user_id.focus();
return false;
}
if(document.mform.user_id.value == "" || document.mform.user_id.value.length < 4 || document.mform.user_id.value.length > 12){
alert("ID를 다시 입력하세요.");
mform.user_id.focus();
return false;
}
if(document.mform.name.value == ""){
alert("이름을 입력하세요.");
mform.name.focus();
return false;
}
if(document.mform.user_pw1.value == "" || document.mform.user_pw1.value.length < 6 || document.mform.user_pw1.value.length > 20){
alert("비밀번호를 다시 입력하세요.");
mform.user_pw1.focus();
return false;
}
if(document.mform.user_pw1.value != document.mform.user_pw2.value){
alert("비밀번호가 일치하지 않습니다.");
mform.user_pw2.focus();
return false;
}
else{
document.mform.submit();
}
}
</script>
</head>
<body>
<iframe src="../head.php" id="bodyFrame" name="body" width="100%" frameborder="0"></iframe>
<div id="register_contents" class="contents">
<form name="mform" method="post" action="register_ok.php">
<table width="550" cellpadding="3" class="grayColor">
<tr>
<th colspan="2" style="background-color: #323232" >
<font style="color: white; font-size: 150%;" >회 원 등 록</font>
</th>
</tr>
<tr>
<th width="120px"><font>*ID</font></th>
<td>
<input type="text" name="user_id" size="15" maxlength="12">
<font style="color:red;">4~12(영문/숫자)</font>
</td>
</tr>
<tr>
<th><font>*이 름</font></th>
<td><input type="text" name="name" size="15" maxlength="10"></td>
</tr>
<tr>
<th><font>*비밀번호</font></th>
<td>
<input type="password" name="user_pw1" size="20" maxlength="20">
<font style="color:red;">6~20(영문/숫자/특수문자)</font>
</td>
</tr>
<tr>
<th><font>*비밀번호 확인</font></th>
<td><input type="password" name="user_pw2" size="20" minlength="6" maxlength="20"></td>
</tr>
<tr>
<th><font>나이</font></th>
<td><input type="number" name="age" size="30" min="0" max="150"></td>
</tr>
<tr>
<th><font>닉네임</font></th>
<td><input type="text" name="nick" size="30" maxlength="30"></td>
</tr>
<tr>
<th><font>EMAIL</font></th>
<td><input type="text" name="email" size="30" maxlength="30"></td>
</tr>
</table>
<p>
<font size=2>* 는 필수 입력 항목입니다.</font><br/><br/>
<input type="button" value="등록" onclick="ck();" class="btn_default btn_gray" >
<input type="reset" value="삭제" class="btn_default btn_gray" >
</p>
</form>
</div>
</body>
</html>
/[^(a-zA-Z0-9)]/는 알파벳 대소문자와 숫자가 아닌 문자를 찾는 정규 표현식입니다.
※특수기호는 범위가 없어서 다 적어야된다~ 쉗
register_ok.php
<?php
$conn=mysqli_connect("localhost","root","P@ssw0rd","WebTest");
mysqli_set_charset($conn,"utf8");
$id=$_POST["user_id"];
$name=$_POST["user_name"];
$pw1=$_POST["user_pw1"];
$pw2=$_POST["user_pw2"];
$age=$_POST["age"];
$nick=$_POST["nick"];
$email=$_POST["email"];
if(!$age) $age=0;
if(!$nick) $nick=$name;
$strSQL="select * from member where u_id='".$id."';";
$rs=mysqli_query($conn,$strSQL);
$rs_arr=mysqli_fetch_array($rs);
if($rs_arr){
echo "<script>
alert('이미 사용중인 ID 입니다.');
history.back();
</script>";
} else {
$strSQL="insert into member set u_id='$id', u_pw='$pw1', u_name='$name', age=$age, nickname='$nick', email='$email', reg_date=now();";
mysqli_query($conn,$strSQL);
echo "<script>
alert('회원가입이 완료되었습니다.');
location.replace('../index.php');
</script>";
}
?>
nick.php
<!DOCTYPE html>
<html lang="en">
<head>
<title>닉네임</title>
<link rel="stylesheet" href="../style_contents.css" type="text/css">
</head>
<body>
<iframe src="../head.php" id="bodyFrame" name="body" width="100%" frameborder="0"></iframe>
<div id="nick_contents" class="contents">
<?php
session_start();
if(!$_SESSION["user_id"]){
echo "<script>
alert('로그인이 필요합니다.');
location.replace('login.php');
</script>";
exit();
}
if($_GET["ch"]==1){
echo "<h5>성공적으로 변경되었습니다.</h5>";
}
else if($_GET["ch"]==2){
echo "<h5>변경에 실패했습니다.</h5>";
}
?>
<form action="nick_change.php">
<table cellpadding="10" style="border: 0px;">
<tr>
<th>닉네임 : </th>
<td><input type="text" name="nick" value=<?=$_SESSION["nickname"] ?>></td>
<td><input type="submit" value="변경" class="btn_default btn_gray"></td>
</tr>
</table>
</form>
</body>
</html>
nick_change.php
<?php
session_start();
$nick=$_GET["nick"];
if(!$nick){
echo "<script>
alert('닉네임을 입력하세요.');
history.back();
</script>";
exit();
}
$conn=mysqli_connect("localhost", "root", "P@ssw0rd", "WebTest");
mysqli_set_charset($conn, 'utf8');
$strSQL="update member set nickname='$nick' where u_id='$_SESSION[user_id]';";
$rs=mysqli_query($conn, $strSQL);
if($rs){
$_SESSION["nickname"]=$nick;
header("Location: nick.php?ch=1");
}
else{
header("Location: nick.php?ch=2");
}
?>
info.php
<!doctype html>
<html>
<head>
<title>회원 정보</title>
<link rel="stylesheet" href="../style_contents.css" type="text/css">
<script>
function ck()
{
if(!document.mform.user_pw1.value=="" && document.mform.user_pw1.value.length < 6 || document.mform.user_pw1.value.length > 20)
{
alert("비밀번호를 다시 입력하세요.");
mform.user_pw1.focus();
return false;
}
if(document.mform.user_pw1.value != document.mform.user_pw2.value)
{
alert("비밀번호가 일치하지 않습니다.");
mform.user_pw2.focus();
return false;
}
document.mform.submit();
}
</script>
</head>
<body>
<iframe src="../head.php" id="bodyFrame" name="body" width="100%" frameborder="0"></iframe>
<div id="info_contents" class="contents">
<?php
session_start();
if(!$_SESSION["user_id"]){
echo "<script>
alert('로그인 후 이용해 주세요.');
location.replace('login.php');
</script>";
exit();
}
$conn = mysqli_connect("localhost", "root", "P@ssw0rd", "WebTest");
mysqli_set_charset($conn, "utf8");
$strSQL = "select * from member where u_id='$_SESSION[user_id]';";
$rs = mysqli_query($conn, $strSQL);
$rs_arr = mysqli_fetch_array($rs);
if($_GET["ch"]==1){
echo "<h5>성공적으로 변경되었습니다.</h5>";
}
else if($_GET["ch"]==2){
echo "<h5>변경에 실패했습니다.</h5>";
}
?>
<form name='mform' method="post" action="info_change.php">
<table width="500" cellpadding="3" class="grayColor">
<tr>
<th colspan="2" style="background-color: #323232" >
<font style="color: white; font-size: 150%;" >회 원 정 보</font>
</th>
</tr>
<tr>
<th width="120px"><font>*ID</font></th>
<td><?=$rs_arr["u_id"]?></td>
</tr>
<tr>
<th><font>*이 름</font></th>
<td><?=$rs_arr["u_name"]?></td>
</tr>
<tr>
<th><font>*비밀번호</font></th>
<td>
<input type="password" name="user_pw1" size="20" maxlength="20">
<font style="color:red;">6~20(영문/숫자/특수문자)</font>
</td>
</tr>
<tr>
<th><font>*비밀번호 확인</font></th>
<td><input type="password" name="user_pw2" size="20" maxlength="20"></td>
</tr>
<tr>
<th><font>나이</font></th>
<td><input type="number" name="age" size="30" min="0" max="150" value=<?=$rs_arr["age"]?>></td>
</tr>
<tr>
<th><font>닉네임</font></th>
<td><input type="text" name="nick" size="30" maxlength="30" value=<?=$rs_arr["nickname"]?>></td>
</tr>
<tr>
<th><font>EMAIL</font></th>
<td><input type="text" name="email" size="30" maxlength="30" value=<?=$rs_arr["email"]?>></td>
</tr>
</table>
<p>
<font size=2>* 는 필수 입력 항목입니다.</font><br/><br/>
<input type="button" value="수정" onclick="ck();" class="btn_default btn_gray" >
<input type="reset" value="삭제" class="btn_default btn_gray" >
</p>
</form>
</div>
</body>
</html>
info_change.php
<?php
session_start();
$conn=mysqli_connect("localhost", "root", "P@ssw0rd", "WebTest");
mysqli_set_charset($conn, 'utf8');
$pw1=$_POST["user_pw1"];
$pw2=$_POST["user_pw2"];
$age=$_POST["age"];
$nick=$_POST["nick"];
$email=$_POST["email"];
if(!$nick) $nick=$_SESSION["nickname"];
$strSQL="update member set nickname='$nick', u_pw='$pw1'";
if($pw1) $strSQL .= ", u_pw='$pw1'";
if($age) $strSQL .= ", age=$age";
if($email) $strSQL .= ", email='$email'";
$strSQL .= " where u_id='$_SESSION[user_id]'";
$rs=mysqli_query($conn, $strSQL);
if($rs){
$_SESSION["nickname"]=$nick;
header("Location: info.php?ch=1");
} else {
header("Location: info.php?ch=2");
}
?>
board 폴더
board_write.php
<!doctype html>
<html>
<!-- head 부분 -->
<head>
<!-- 상단 title -->
<title>게시판</title>
<!-- CSS Style 지정 -->
<link rel="stylesheet" href="../style_contents.css" type="text/css">
<script>
function ck() {
if (document.wform.name.value == "") {
alert("이름을 입력하세요.");
wform.name.focus();
return false;
}
if (document.wform.pw.value == "") {
alert("비밀번호를 입력하세요.");
wform.pw.focus();
return false;
}
if (document.wform.sub.value == "") {
alert("제목을 입력하세요.");
wform.sub.focus();
return false;
}
if (document.wform.cont.value == "") {
alert("내용을 입력하세요.");
wform.cont.focus();
return false;
}
document.wform.submit();
}
function re() {
document.wform.reset();
}
</script>
</head>
<body>
<!-- 화면 상단 header 부분 -->
<iframe src="../head.php" id="bodyFrame" name="body" width="100%" frameborder="0"></iframe>
<!-- 화면 하단 body 부분 -->
<div id="board_contents" class="contents">
<?php
session_start();
if($_SESSION["user_id"]){
require "../dbconn.php";
$strSQL="select u_name,email from member where u_id='$_SESSION[user_id]'";
$rs=mysqli_query($conn,$strSQL);
$rs_arr=mysqli_fetch_array($rs);
$name=$rs_arr["u_name"];
$email=$rs_arr["email"];
}
?>
<form name="wform" method="post" action="board_write_ok.php" enctype="multipart/form-data">
<table width="600" class="grayColor">
<tr>
<th colspan="5" style="background-color: #323232" >
<font style="color: white; font-size: 150%;" >게 시 글 작 성</font>
</th>
</tr>
<tr>
<th width="100"><font>이 름</font></th>
<td><input type="text" name="name" size="11" value="<?=$name;?>"></td>
</tr>
<tr>
<th><font>비밀번호</font></th>
<td><input type="password" name="pw" size="12"></td>
</tr>
<tr>
<th><font>이메일</font></th>
<td colspan="3"><input type="text" name="email" size="40" value="<?=$email;?>"></td>
</tr>
<tr>
<th><font>제 목</font></th>
<td colspan="3"><input type="text" name="sub" size="40"></td>
</tr>
<tr>
<th><font>HTML적용</font></th>
<td colspan="3">
<input type="radio" name="tag" value="T" checked><font size="3">적용</font>
<input type="radio" name="tag" value="F"><font size="3">비적용</font>
</td>
</tr>
<tr>
<th><font>내 용</font></th>
<td colspan="3" align="center"><textarea name="cont" cols="60" rows="10" style="border: 0px;"></textarea></td>
</tr>
<tr>
<th><font>파일첨부</font></th>
<td colspan="3"><input type="file" name="att_file"><font size="2"> (최대 4MB)</font></td>
</tr>
</table>
</form>
<p align="center">
<input type="button" value="등록" onclick="ck();" class="btn_default btn_gray">
<input type="button" value="다시작성" onclick="re();" class="btn_default btn_gray">
<input type="button" value="목록" onclick="location.replace('board_list.php');" class="btn_default btn_gray">
</p>
</div>
</body>
</html>
board_write_ok.php
<?php
session_start();
$b_name=$_POST["name"];
$b_pw=$_POST["pw"];
$b_email=$_POST["email"];
$b_sub=$_POST["sub"];
$b_cont=$_POST["cont"];
$b_tag=$_POST["tag"];
$f_error=$_FILES["att_file"]["error"];
if($f_error==0){
$f_name=$_FILES["att_file"]["name"];
$f_path="upload/".$f_name;
$f_tmp=$_FILES["att_file"]["tmp_name"];
$f_size=$_FILES["att_file"]["size"];
// 파일 중복 방지 처리
$f_name_only1=substr($f_name,0,strrpos($f_name,'.')); //파일명 저장
$f_name_ext=substr($f_name,strrpos($f_name,'.')); //확장자명 저장
$f_name_only2=$f_name_only1;
for($i=1; is_file($f_path); $i++){
$f_name_only1=$f_name_only2.$i;
$f_path="./upload/".$f_name_only1.$f_name_ext;
}
$f_name=$f_name_only1.$f_name_ext;
} else if ($f_error!=4){
echo "<script>
alert('파일 업로드에 실패했습니다(에러코드:$f_error).');
history.back();
</script>";
exit;
}
// file error code 종류
// 0 : 성공
// 1 : php.ini (php 설정 파일) 의 최대 파일 업로드 사이즈보다 큰 경우 에러
// 2 : html form 태그에서 지정한 최대 파일 업로드 사이즈보다 큰 경우 에러
// 3 : 파일이 일부분만 전송되는 경우 에러
// 4 : 파일이 전송되지 않는 경우 에러
// 6 : 임시 폴더가 없는 경우 에러
// 7 : 저장 장치에 파일 생성, 쓰기가 실패하는 경우 에러
// 8 : 확장 모듈이 파일 업로드를 중지하는 경우 에러
require "../dbconn.php";
//$strSQL="insert into board set strName='$b_name', strPassword='$b_pw', strEmail='$b_email', strSubject='$b_sub', strContent='$b_cont', htmlTag='$b_tag', writeDate=now();";
$strSQL="insert into board set strName='$b_name', strPassword='$b_pw', strEmail='$b_email',";
$strSQL.="strSubject='$b_sub', strContent='$b_cont', htmlTag='$b_tag', writeDate=now()";
if($f_error==0){
if($f_size=="") $f_size=0; // 파일 사이즈가 없을 경우 0으로 처리
$strSQL.=", filename='$f_name', filesize='$f_size';";
$f_rs=move_uploaded_file($f_tmp, $f_path);
}
$rs=mysqli_query($conn,$strSQL);
if($rs){
echo "<script>
alert('글이 등록되었습니다.');
location.replace('../board/board_list.php');
</script>";
} else {
echo "<script>
alert('글 등록에 실패했습니다.');
history.back();
</script>";
}
?>
board_view.php
<!doctype html>
<html>
<!-- head 부분 -->
<head>
<title>게시판</title>
<link rel="stylesheet" href="../style_contents.css" type="text/css">
</head>
<body>
<iframe src="../head.php" id="bodyFrame" name="body" width="100%" frameborder="0"></iframe>
<div id="board_contents" class="contents">
<?php
session_start();
require "../dbconn.php";
$r_num=$_GET["num"];
$strSQL="update board set viewCount=viewCount+1 where strNumber=".$r_num.";";
mysqli_query($conn,$strSQL);
$strSQL="select * from board where strNumber=".$r_num.";";
$rs=mysqli_query($conn,$strSQL);
$rs_arr=mysqli_fetch_array($rs);
?>
<table width="600" border="1" cellpadding="2" class="grayColor">
<tr>
<th colspan="5" style="background-color: #323232" >
<font style="color: white; font-size: 150%;" >내용 보기</font>
</th>
</tr>
<tr>
<th width="15%"><font>이름</font></th>
<td width="35%"><font><?=$rs_arr["strName"];?></font></td>
<th width="15%"><font>등록일</font></th>
<td width="35%"><font><?=$rs_arr["writeDate"];?></font></td>
</tr>
<tr>
<th width="15%"><font>이메일</font></th>
<td width="35%"><font><?=$rs_arr["strEmail"];?></font></td>
<th width="15%"><font>조회</font></th>
<td width="35%"><font><?=$rs_arr["viewCount"];?></font></td>
</tr>
<tr>
<th width="15%"><font>제목</font></th>
<td colspan="3"><font><?=$rs_arr["strSubject"];?></font></td>
</tr>
<tr>
<th width="15%"><font>내용</font></th>
<td colspan="4" style="padding:15px 0;"><font><?=$rs_arr["strContent"];?></font></td>
</tr>
<tr>
<th width="15%"><font><b>첨부 파일</b></font></th>
<td colspan="3"><font>
<?php if($rs_arr["filename"]!="") { ?>
<a href="board_file_download.php?filename=<?=$rs_arr['filename'];?>"><?=$rs_arr["filename"];?>(<?=$rs_arr["filesize"];?>바이트)</a>
<?php } ?>
</font></td>
</tr>
</table>
<br/>
<p align="center">
<form method="post" action="board_delete_ok.php?num=<?=$r_num;?>">
<font>비밀번호</font>
<input type="password" name="b_pass" size="20">
<input type="submit" value="삭제" class="btn_default btn_gray">
<input type="button" value="목록" onclick="location.replace('board_list.php');" class="btn_default btn_gray">
</p>
</div>
</body>
</html>
board_list.php
<!DOCTYPE html>
<html>
<head>
<title>게시판</title>
<link rel="stylesheet" href="../style_contents.css" type="text/css">
</head>
<body>
<iframe src="../head.php" id="bodyFrame" name="body" width="100%" frameborder="0"></iframe>
<div id="board_contents" class="contents">
<table width="600" border="1">
<tr>
<th colspan="5" style="background-color: #323232">
<font style="color: white; font-size:150%;">게 시 판</font>
</th>
</tr>
<tr bgcolor="#c8c8c8">
<th width="7%">번호</th>
<th width="41%">제목</th>
<th width="15%">작성자</th>
<th width="30%">등록일</th>
<th width="7%">조회</th>
</tr>
<?php
$key="";
if($_GET["keyword"]){
$key=$_GET["keyword"];
$k_s=$_GET["key_s"];
switch($k_s) {
case 1:
$strSQL="SELECT * FROM board WHERE strSubject LIKE '%$key%' ORDER BY strNumber DESC";
break;
case 2:
$strSQL="SELECT * FROM board WHERE strContent LIKE '%$key%' ORDER BY strNumber DESC";
break;
case 3:
$strSQL="SELECT * FROM board WHERE strName LIKE '%$key%' ORDER BY strNumber DESC";
break;
default:
$strSQL="SELECT * FROM board ORDER BY strNumber DESC";
}
} else {
$strSQL="SELECT * FROM board ORDER BY strNumber DESC";
}
require "../dbconn.php";
$rs=mysqli_query($conn,$strSQL);
$rs_num=mysqli_num_rows($rs); //DB에 질의했을 때 행의 갯수를 출력
if($rs_num==0): ?>
<tr>
<td colspan="5" class="center"><strong>등록된 게시물이 없습니다.</strong></td>
</tr>
<?php else:
while($rs_arr=mysqli_fetch_array($rs)) {
$b_num=$rs_arr["strNumber"];
$b_name=$rs_arr["strName"];
$b_sub=$rs_arr["strSubject"];
$b_date=$rs_arr["writeDate"];
$b_no=$rs_arr["viewCount"];
?>
<tr>
<td width="7%"><?=$b_num?></td>
<td width="41%"><a href="board_view.php?num=<?=$b_num?>"><?=$b_sub?></a></td>
<td width="15%"><?=$b_name?></td>
<td width="30%"><?=$b_date?></td>
<td width="7%"><?=$b_no?></td>
</tr>
<?php
} endif;
?>
</table>
<br>
<p align="center">
<input type="button" class="btn_default btn_gray" value="글쓰기" onclick="location.replace('board_write.php');">
<br>
<br>
<?php
if($key) {
echo "[$key] 검색 결과입니다.";
} else {
echo "전체 글 검색 결과입니다.";
}
?>
<form action="board_list.php">
<select name="key_s">
<option value="1">제목</option>
<option value="2">내용</option>
<option value="3">작성자</option>
</select>
<input type="text" name="keyword">
<input type="submit" class="btn_default btn_gray" value="검색">
</form>
</p>
</div>
</body>
</html>
board_delete_ok.php
<?php
$num=$_GET["num"];
$pw=$_POST["b_pass"];
require "../dbconn.php";
$strSQL="SELECT * FROM board WHERE strNumber=$num AND strPassword='$pw'";
$rs=mysqli_query($conn,$strSQL);
$rs_arr=mysqli_fetch_array($rs);
if($rs_arr){
if(is_file("upload/$rs_arr[filename]")){
unlink("upload/$rs_arr[filename]");
}
$strSQL="DELETE FROM board WHERE strNumber=$num";
mysqli_query($conn,$strSQL);
echo "<script>
alert('게시물이 삭제되었습니다.');
location.replace('board_list.php');
</script>";
} else {
echo "<script>
alert('게시물을 삭제할 수 없습니다.');
history.back();
</script>";
}
?>
board_file_download.php
<?php
$file_name=urldecode($_GET['filename']);
$file_path="./upload/".$file_name;
$file_size=filesize($file_path);
header("Content-Type: application/x-octetstream");
header("Content-Disposition: attachment; filename=".urldecode($file_name));
header("Content-Transfer-Encoding: binary");
header("Content-Length: $file_size");
readfile($file_path);
?>
DB와 로그인페이지 연결
login_check.php
<?php
// ↓ 얘가 세션변수를 사용하고 싶을 때 필요함
session_start();
// DB 연결
$conn=mysqli_connect("localhost","root","P@ssw0rd","WebTest");
mysqli_set_charset($conn,"utf8");
// POST 방식으로 날아온 user_id, user_pw 값들을 id와 pw라는 변수에 대입
$id=$_POST["user_id"];
$pw=$_POST["user_pw"];
// DB 질의
// (""를 여러개 사용하면 구분이 헷갈리기 때문에 ''로 구분을 나눠준다)
// .은 php코드로써 . 앞에 있는 문자와 . 뒤에 있는 문자를 붙이겠다라는 의미
// 데이터가 날아갈 때 SQL문은 SELECT * FROM member WHERE u_id='root' AND u_pass='1234';가 된다
$strSQL="select * from member where u_id='".$id."' and u_pass='".$pw."';";
// 질의한 결과를 rs라는 변수에 저장하겠다
$rs=mysqli_query($conn,$strSQL);
// 데이터를 받아서 저장할 때 복수의 데이터를 fetch_arr이라는 배열에 저장하고 그 값을 rs_arr이라는 변수에 저장
$rs_arr=mysqli_fetch_array($rs);
// rs_arr에 입력한 값이 있거나 없을 때
// <script>는 자바 스크립트
// alert는 경고창을 띄우는 것, 그 이후에 메인페이지로 이동
// history.back은 이전 페이지로 돌아간다는 뜻
// user_id라는 세션변수에 rs_arr에 저장된 값중 u_id 값을 저장
if($rs_arr){
$_SESSION["user_id"]=$rs_arr["u_id"];
$_SESSION["nickname"]=$rs_arr["nickname"];
echo "<script>
alert('로그인 완료');
location.replace('../index.php');
</script>";
} else {
echo "<script>
alert('아이디 또는 비밀번호가 일치하지 않습니다.');
history.back();
</script>";
}
?>
※주의사항※
1.기본 php에는 mysqli_connect기능이 없어서 패키지를 다운받아야 된다.
2.php-mysqlnd라는 패키지 다운 (mysqli로 시작하는 함수 사용하려면 패키지 다운해야함)
3.적용하려면 systemctl restart httpd
4.변수라는 것은 그 페이지에서만 동작한다
Ex) a.php에 test라는 변수를 만들고 b.php에서 echo $test를 하면 출력되지 않는다
a.php의 test와 b.php의 test라는 변수는 서로 다른 것
5.페이지 안에 있는 변수를 지역변수라고 한다.
6.세션변수는 페이지에 상관 없이 사용할 수 있는 변수
(다른 페이지에 있는 변수를 불러올 수 있다)
세션변수를 사용하려면 session start();를 꼭 입력해야 한다
DB 설정
'어플리케이션 보안 운영' 카테고리의 다른 글
WEB Session Attack (0) | 2025.01.06 |
---|---|
WEB 인증 공격 (0) | 2025.01.03 |
데이터 검증 (0) | 2025.01.03 |
Information Gathering (정보 수집) (0) | 2025.01.02 |
WEB (0) | 2024.12.26 |