건물주가 최근에 일이 없어서 개인정보 관리 시스템을 하나 만들었는데, 소백에게 약간의 계몽을 주기 바란다. 대신은 속마음을 털어놓지 말고, 기술 교류와 문명 비판을 환영한다.신발!
데이터베이스 구조도를 먼저 붙이다
양식에는 아이디, 아이디, 닉네임, 성별, 비밀번호, 등록시간, 개성서명, 프로필, 상세 등 총 9개의 필드가 있다.
개인 정보 관리의 파일 구조
파일 이름 묘사
reg.inc.php 등록 페이지
login.inc.php 로그인 페이지
func.inc.php 시스템 함수 라이브러리 스크립트 저장, 업로드 및 이미지 삭제 기능 선언
index.php 홈페이지파일,개인정보홈페이지
info.php 정보 파일 수정, 개인정보 수정 및 폼 업데이트
upload.php 프로필 업로드용 파일 업로드
image.class.php 그림 처리 함수
fileupload.class.php 파일 업로드 기능
1. 페이지를 등록하고, 아이디와 패스워드의 입력을 요구하며, jquery 코드로 프런트 데스크 검증을 실현하고, PHP로 백그라운드 검증을 실현합니다. 코드는 다음과 같습니다
<?php /** file:reg.inc.php 사용자 등록*/
date_default_timezone_set('prc');/*시간대 설정*/
@$username = htmlspecialchars($_POST['username']);
@$password = $_POST['pass'];
$password = MD5($password);
$regdate = date('Y-m-d H:i:s',time());
$pic_dir="default.png";
$url="login.inc.php";
if(isset($_POST['reg'])){
/*데이터를 추가하려면 먼저 연결하고 데이터베이스를 선택해야 합니다. conn.inc.php 파일이 포함되어 있습니다*/
include"conn.inc.php";
$sql_2="SELECT * FROM userdata WHERE username = '$username'";
/*INSERT 문장 실행*/
$result_2=mysql_query($sql_2,$link);
$rows=mysql_fetch_array($result_2);
mysql_free_result($result_2);
if($rows>0){
echo "<script type='text/javascript'>alert('사용자 이름이 이미 존재합니다');location='javascript:history.back()';</script>";
}else{
/*사용자가 POST를 통해 제출한 데이터 조합에 따라 데이터베이스의 SQL 문을 삽입합니다*/
if(strlen($username)>=5&&strlen($pass)>=6){
$sql = "INSERT INTO userdata(username,pass,regdate,pic) VALUES('".$username."','".$password."','".$regdate."','".$pic_dir."')";
$result=mysql_query($sql,$link);
echo "<script> alert('사용자 등록 성공!'); </script>";
echo "<meta http-equiv='Refresh' content='0;URL=$url'>";
}
}
}
?>
<html>
<head>
<title>로그인 시스템</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="css/login.css" />
<script src="js/jquery-3.1.0.js"></script>
<script src="js/check.js"></script>
</head>
<body>
<div class="content">
<!-- 로그인 패널 -->
<div class="panel">
<form action="reg.inc.php" method="post">
<div class="group">
<label for="username">아이디:</label>
<input id="username" class="required" type="text" name="username" placeholder="최소 5명의 아이디를 입력하세요" />
</div>
<div class="group">
<label for="pass">비밀번호:</label>
<input id="pass" type="password" class="required" name="pass" placeholder="비밀번호는 6자리보다 커야 합니다"/>
</div>
<div class="login">
<button type="submit" name="reg" id="send">등록확인</button>
</div>
</div>
<div class="register">
<a href="login.inc.php"><button type="button">첫 페이지로 돌아가기</button></a>
</div>
</form>
</div>
</body>
</html>
로그인 페이지, 백그라운드에서 사용자 이름과 비밀번호가 일치하는지 확인하고, 일치하면 로그인 상태 및 사용자 정보를 COOKIE로 기록한 후 홈 페이지로 이동합니다. 코드는 다음과 같습니다
<?php
/** file:login.inc.php 시스템의 마스터 제어 파일과 마스터 포털 파일에 로그인하기*/
/*Cookie를 삭제할 함수를 선언합니다. 클라이언트에서 설정한 Cookie를 삭제합니다*/
function clearCookies(){
//쿠키 식별명 인자를 하나만 지정해 주세요. 즉, 클라이언트에서 지정한 이름의 쿠키 자료를 삭제합니다
//생존공간이 기본적으로 비어있으면 생존기간이 브라우저와 같으며, 브라우저가 닫히면 쿠키가 삭제됩니다
setcookie('username');
setcookie('isLogin');
}
include "conn.inc.php";
@$username = htmlspecialchars($_POST['username']);
@$password = $_POST['pass'];
$password = MD5($password);
/*만약 사용자의 조작이 양식을 제출하는 것이라면 조건이 성립된다*/
if(isset($_POST['submit'])){
clearCookies();
$sql = "SELECT * FROM userdata WHERE username = '$username' and pass='$password'";
$res = mysql_query($sql,$link);
/*mysql_num_rowsselect문에서만 사용 가능*/
$rows=mysql_num_rows($res);
if($rows>0){
/*向Cookie에서 식별자를 설정합니다.username,값은 양식에 제출한 것으로, 기간은 1주일입니다*/
setcookie('username',$username,time()+60*60*24*7);
/*쿠키에 식별자를 isLogin으로 설정합니다,다른 페이지에서 로그인 여부를 확인하는 데 사용됩니다*/
setcookie('isLogin','1',time()+60*60*24*7);
/*쿠키가 성공적으로 설정되면 홈페이지로 이동*/
header("Location:index.php");//페이지 이동, 경로 보기
}else{
echo '<font color="red">잘못된 아이디 혹은 비밀번호입니다!</font>';
}
}else if(@$_GET["action"]=="logout"){
//종료 시 클라이언트에서 모든 설정 지우기Cookie
clearCookies();
}
?>
<html>
<head>
<title>로그인 시스템</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="css/login.css" />
</head>
<body>
<div class="content">
<!-- 로그인 패널 -->
<div class="panel">
<form action="login.inc.php" method="post">
<div class="group">
<label for="username">아이디:</label>
<input id="username" type="text" name="username" placeholder="계좌번호를 입력해주세요" />
</div>
<div class="group">
<label for="pass">비밀번호:</label>
<input id="pass" type="password" name="pass" placeholder="비밀번호를 입력해 주세요" />
</div>
<div class="login">
<button type="submit" name="submit">로그인</button>
</div>
</div>
<div class="register">
<a href="reg.inc.php"><button type="button">새 계정 만들기</button></a>
</div>
</form>
</div>
</body>
</html>
3. 홈페이지 화면에는 사용자의 프로필 사진 및 닉네임, 성별, 개인별 서명 등의 정보가 표시되며 코드는 다음과 같습니다
<?php /** file:index.php 로그인 시스템 첫 페이지*/
/*인증되지 않은 경우 로그인 페이지로 이동*/
if(!(isset($_COOKIE['isLogin'])&&$_COOKIE['isLogin']=='1')){
header("Location:login.inc.php");
exit;
}
$username=$_COOKIE['username'];
include "conn.inc.php";
/*각각 데이터베이스에서 가져오기nicknamesex,pic 값*/
$sql_1 = "SELECT pic FROM userdata WHERE username = '$username'";
$res_1 = mysql_query($sql_1,$link);
$pic = mysql_result($res_1,0);
$sql_2 = "SELECT nickname FROM userdata WHERE username = '$username'";
$res_2 = mysql_query($sql_2,$link);
$nickname = mysql_result($res_2,0);
$sql_3 = "SELECT sex FROM userdata WHERE username = '$username'";
$res_3 = mysql_query($sql_3,$link);
$sex = mysql_result($res_3,0);
if($sex==1)
{
$sex="남자";
}else if($sex==2)
{
$sex="여자";
}else if($sex==0)
{
$sex=="비밀로 하다";
}
$sql_4 = "SELECT message FROM userdata WHERE username = '$username'";
$res_4 = mysql_query($sql_4,$link);
$mess = mysql_result($res_4,0);
?>
<html>
<head>
<title>마이데이터</title>
<link rel="stylesheet" href="css/login.css" media="screen" />
<script src="js/jquery-3.1.0.js"></script>
<script src="js/show_time.js"></script>
</head>
<body>
<div class="content">
<div class="person">
<div class="showPic">
<a href="upload.php"><img src="upload/<?php echo $pic ?>" height="80px" width="80px" /></a>
</div>
<?php
/*从Cookie에서 사용자 이름 가져오기name*/
echo $_COOKIE['username'].'공간';
?>
<div id="clock"></div>
</div>
</div>
<div class="content">
<!-- 로그인 패널 -->
<div class="panel">
<form action="index.php" method="post" id="regForm">
<div class="group">
<label for="nickname">닉네임:</label>
<input type="text" name="nick" placeholder="<?php echo $nickname ?>" disabled=""/>
</div>
<div class="group">
<label for="sex">성별:</label>
<input type="text" name="sex" placeholder="<?php echo $sex ?>" disabled=""/>
</div>
<div class="group">
<label for="mess">개인 서명:</label>
<textarea name="mess" rows="4" cols="30" readonly=""><?php echo $mess ?></textarea>
</div>
<div class="login">
<a href="info.php"><button type="button">자료를 수정하다</button></a>
</div>
</div>
<div class="register">
<a href="login.inc.php?action=logout"><button type="button">탈퇴하다</button></a>
</div>
</form>
</div>
</body>
</html>
4.정보수정페이지,개인정보수정,양식데이터갱신,코드는 아래와 같습니다
<?php /** file:info.php 개인 정보 수정*/
/*인증되지 않은 경우 로그인 페이지로 이동*/
if(!(isset($_COOKIE['isLogin'])&&$_COOKIE['isLogin']=='1')){
header("Location:login.inc.php");
exit;
}
$username=$_COOKIE['username'];
$url="index.php";
include "conn.inc.php";
$sql = "SELECT pic FROM userdata WHERE username = '$username'";
$res = mysql_query($sql,$link);
$pic = mysql_result($res,0);
$sql_2 = "SELECT nickname FROM userdata WHERE username = '$username'";
$res_2 = mysql_query($sql_2,$link);
$show_nickname = mysql_result($res_2,0);
$sql_3 = "SELECT sex FROM userdata WHERE username = '$username'";
$res_3 = mysql_query($sql_3,$link);
$show_sex = mysql_result($res_3,0);
$sql_4 = "SELECT message FROM userdata WHERE username = '$username'";
$res_4 = mysql_query($sql_4,$link);
$show_mess = mysql_result($res_4,0);
@$nickname = htmlspecialchars($_POST['nickname']);
@$sex = $_POST['sex'];
@$mess = $_POST['mess'];
?>
<html>
<head>
<title>마이데이터</title>
<link rel="stylesheet" href="css/login.css" media="screen" />
<script src="js/jquery-3.1.0.js"></script>
</head>
<body>
<div class="content">
<div class="person">
<div class="showPic">
<a href="upload.php"><img src="upload/<?php echo $pic ?>" height="100px" width="100px" /></a>
</div>
<?php
/*부터cookie에서 사용자 이름 가져오기username*/
echo $_COOKIE['username'].'자료';
?>
<div id="clock"></div>
</div>
</div>
<div class="content">
<!-- 로그인 패널 -->
<div class="panel">
<form action="info.php" method="post" id="regForm">
<div class="group">
<label for="nickname">닉네임:</label>
<input type="text" name="nickname" value="<?php echo $show_nickname ?>" />
</div>
<div class="group">
<label for="sex" class="sex">성별:</label>
<div class="sex">
<input id="sex" type="radio" name="sex" value="1" />남자
<input id="sex" type="radio" name="sex" value="2"/>여자
<input id="sex" type="radio" name="sex" value="0" checked/>비밀로 하다
</div>
</div>
<div class="group">
<label for="mess">개인 서명:</label>
<textarea name="mess" rows="4" cols="30"><?php echo $show_mess ?></textarea>
</div>
<div class="login">
<button type="submit" name="mod">수정확인</button>
</div>
</div>
<div class="register">
<button type="reset">리셋</button>
<a href="index.php"><button type="button">되돌아가다</button></a>
</div>
</form>
</div>
<?php
if(isset($_POST['mod'])){
include"conn.inc.php";
/*사용자가 POST를 통해 제출한 데이터 조합에 따라 데이터베이스의 SQL 문을 삽입합니다*/
$sql_1 = "UPDATE userdata SET nickname='".$nickname."' WHERE username = '$username'";
$sql_2 = "UPDATE userdata SET sex='".$sex."' WHERE username = '$username'";
$sql_3 = "UPDATE userdata SET message='".$mess."' WHERE username = '$username'";
$result_1=mysql_query($sql_1,$link);
$result_2=mysql_query($sql_2,$link);
$result_3=mysql_query($sql_3,$link);
/*INSERT 문장이 성공적으로 실행되어 데이터시트 userdata에 영향을 준다면 삽입 성공*/
if($result_1||$result_2||$result_3){
echo "<script> alert('수정이 성공하다!'); </script>";
echo "<meta http-equiv='Refresh' content='0;URL=$url'>";
}else{
echo "<script> alert('수정 실패!'); </script>";
}
}?>
</body>
</html>
5. 프로필 사진 업로드 페이지, 개인 프로필 업로드, 로컬 프로필 저장, 데이터베이스 프로필 주소 저장, 코드:
<?php
/*인증되지 않은 경우 로그인 페이지로 이동*/
if(!(isset($_COOKIE['isLogin'])&&$_COOKIE['isLogin']=='1')){
header("Location:login.inc.php");
exit;
}
include "func.inc.php";
include "conn.inc.php";
$username=$_COOKIE['username'];
$sql = "SELECT pic FROM userdata WHERE username = '$username'";
$res = mysql_query($sql,$link);
$pic = mysql_result($res,0);
if(@$_GET['action']=="update"){
/*사용자가 이미지를 수정해야 할 경우, 새로 업로드한 이미지로 원래 이미지를 대체합니다*/
if($_FILES["pic"]["error"]=="0"){
/*
$_FILES['myFile']['error'] 이 파일은 관련 오류 코드를 업로드。['error'] 네PHP 4.2.0버전에 추가된。다음은 그 설명입니다:(그들은 PHP3.0 이후에 리터럴이 됩니다)
UPLOAD_ERR_OK
값:0; 오류 없음 파일 업로드 성공。
UPLOAD_ERR_INI_SIZE
값:1; 업로드한 파일이 초과되었습니다 php.ini 中 upload_max_filesize 옵션 제한 값。
UPLOAD_ERR_FORM_SIZE
값:2; 업로드 파일의 크기가 초과되었습니다 HTML 폼 중 MAX_FILE_SIZE 옵션에서 지정한 값。
UPLOAD_ERR_PARTIAL
값:3; 파일 일부만 업로드됨。
UPLOAD_ERR_NO_FILE
값:4; 업로드된 파일이 없습니다。
값:5; 업로드 파일 크기 0.
*/
$up=upload();
/*새로 업로드한 이미지가 있다면 업로드한 이미지 이름으로 데이터베이스 수정*/
if($up[0])
$pic=$up[1];
else
die($up[1]);
}else{
/**이미지가 업로드되지 않았다면 원래 이미지를 사용합니다*/
@$pic=$_POST["picname"];
}
include "conn.inc.php";
$sql_1="UPDATE userdata SET pic='{$pic}' WHERE username = '$username'";
/*update 문장 실행*/
$result=mysql_query($sql_1);
/*만약 문장이 성공적으로 실행되어 기록 행에 영향을 준다면, 수정이 성공했음을 나타냅니다*/
if($result&& mysql_affected_rows()>0){
/*새 그림을 수정한 후 디스크 공간을 차지하지 않도록 원래 그림을 지웁니다*/
if($up[0])
@delpic($_POST["pic"]);
echo "<script> alert('프로필 사진 업로드 성공!'); </script>";
}else{
echo "<script> alert('프로필 사진 업로드 실패!'); </script>";
}
}
?>
<html>
<head>
<title></title>
<link rel="stylesheet" href="css/login.css" media="screen" />
</head>
<body>
<div class="content">
<form enctype="multipart/form-data" action="upload.php?action=update" method="post">
<div class="person">
<div class="showPic">
<img src="upload/<?php echo @$pic ?>" height="150px" width="150px" />
</div>
<div class="box">
<input type="text" disabled="" class="i-text" value="<?php echo @$pic?>" />
<div class="btnbox">
<input type="file" name="pic" value="<?php echo @$pic?>" /><br />
</div>
<button type="submit" name="add" class="up">업로드</button>
<a href="index.php"><button type="button" class="back">홈 페이지로 돌아가기</button></a>
</div>
</div>
</form>
</div>
</body>
함수 라이브러리 파일
<?php
/*file:func.inc.php 함수 라이브러리 파일*/
include "fileupload.class.php";
include "image.class.php";
/*함수 선언upload()그림 처리 업로드*/
function upload(){
$path="./upload/";//그림 업로드 경로 설정
$up=new FileUpload($path);//파일 업로드 클래스 개체 만들기
if($up->upload('pic')){//그림 업로드
$filename=$up->getFileName();//업로드된 그림 이름 가져오기
$img=new Image($path);//이미지 처리 클래스 개체 만들기
$img -> thumb($filename,300,300,"");//업로드한 이미지를 모두 300x300 이내로 확대/축소
$img -> thumb($filename,80,80,"icon_");//아이콘 80x80 크기 조정, 접두사로 icon_ 사용
return array(true,$filename); //성공하면 성공 상태와 그림 이름을 되돌려줍니다
}else{
return array(false,$up->getErrorMsg());//실패하면, 실패 상태와 오류 메시지를 되돌려줍니다
}
}
function delpic($picname){
$path="./upload/";
@unlink($path,$picname);//원본 그림 삭제
@unlink($path.'icon_'.$picname);//아이콘 삭제
}
?>
7. 프로필 사진 업로드
내 코드 조각 보기:image.class.php
파일 업로드
8.내 코드 조각 보기:fileupload.class.php
'개발 꿀팁 > PHP' 카테고리의 다른 글
PHP 개발자가 Apache와 nginx를 취사선택하다 (0) | 2022.07.30 |
---|---|
PHP+Apache for 윈도우 설치 (0) | 2022.07.30 |
맥 아래 PHP 개발 환경 구축 (0) | 2022.07.29 |
PHP에서 잘 알려지지 않은 10개의 함수 (0) | 2022.07.29 |
Ajax+PHP 비동기식 프로필 사진 업로드 사례 (0) | 2022.07.29 |