티스토리 뷰

(2021.09.05 본인 네이버 블로그에서 작성한 글 옮겨옴)

 

블로그 쓰기 딱 좋은 새벽 2시 43분입니다.

왕 올만에 쓰는 졸업작품 카테고리네요.

오늘 해볼것은 주짱이 만든 파일업로드에 숟가락만 얻은

마이페이지에서 파일 업로드하기 입니다.

대부분의 코드는 주언이 작성했고

저는 거기에 몇가지만 추가했으니 오늘 포스팅 지분은

주언 80% 나 20% 정도 될 것 같습니다 ^~^

[출처] 주원


우선 주언이 만든 것은 간략하게 다음과 같습니다.

마이페이지에서 아이디/비번 입력 후, 파일을 선택하여 업로드 합니다.

업로드 되었답니다.

업로드된 파일을 볼 수 있는 file_list.php에 가서 확인해보면

저는 여기에 숟가락 얻을 생각입니다.

원래는 회원가입할 당시에 인증 자료를 업로드 하도록 하려고 했으나 .....

안되더라고요.

그래서 로그인 후, 마이페이지로 이동해서 파일을 업로드 하자! 라고 생각을 바꿨습니다.

마이페이지 만든 주언 최고최고 >_<

암튼 그래서 저는 주언이 만든 코드에 조금 살만 더 추가해주었습니다.

먼저 테이블을 다시 생성해주었습니다.

create table upload_file(

fno int not null auto_increment,

file_id varchar(255) not null,

fname_orig varchar(255) not null,

fname_save varchar(255) not null,

cname varchar(255) not null,

c_gov varchar(255) not null,

ctime varchar(255) not null,

time timestamp not null default now(),

primary key(fno)

);

그 후,

아이디와 비밀번호 입력 후, 파일과 자격증에 대한 간략한 정보를 적을 수 있도록 했고

제출할 수 있게끔 했습니다.

제출하면 upload_process.php로 값이 모두 넘어갑니다.

여기에서도 테이블에 컬럼이 추가된 만큼 몇개만 더 추가로 적어주고,

비밀번호에 대한 코드를 좀 추가했습니다.

upload_process.php

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8"/>
<link rel="stylesheet" type="text/css" href="./css/style.css">
<title>파일 업로드</title>
</head>
<body>
  <div class="wrapper">
			<a href="./home.php"><img src="로고1.png"></a>
		</div>
		<ul class="nav">
			<li><a href="./home.php">홈</a></li>
			<li><a href="./소개.php">소개</a></li>
			<li><a href="./등록.php">등록 및 조회</a>
						<ul class="sub">
							<li><a href="등록.php">기본정보/정비내역 등록</a></li>
							<li><a href="조회.php">이력 조회</a></li>
						</ul>
			</li>
			<li><a href="./주행거리입력.php">주행거리 입력</a></li>
		</ul>
  <div class="home1">
    <div class="section">
      <!--
      create table upload_file(
        fno int not null auto_increment,
        file_id varchar(255) not null,
        name_orig varchar(255) not null,
        name_save varchar(255) not null,
        verify int not null default 0,
        reg_time timestamp not null default now(),
        primary key(fno)
      );
	  
	  create table upload_file(
        fno int not null auto_increment,
        file_id varchar(255) not null,
        fname_orig varchar(255) not null,
        fname_save varchar(255) not null,
        cname varchar(255) not null,
        c_gov varchar(255) not null,
        ctime varchar(255) not null, 
        time timestamp not null default now(),
        primary key(fno)
 );
      -->

      <?php
        $db_conn = mysqli_connect("localhost", "an", "1202", "car_db");
		
	
	$id=$_POST['userID'];
	$pw = mysqli_real_escape_string($db_conn, $_POST['userPW']);
	$sql = "SELECT password
          FROM member
		  WHERE mb_id = '$id'
        ";
				 
$result = mysqli_query($db_conn, $sql);
if (mysqli_num_rows($result) > 0)
{
   while($row = mysqli_fetch_assoc($result))
   {
               $hash = $row['password'];

               
      if(password_verify($pw, $hash) == $pw) 
	  {
		  
        if(isset($_FILES['upfile']) && $_FILES['upfile']['name'] != "") 
		{
          $file = $_FILES['upfile'];
          $upload_directory = 'data/';
          $ext_str = "hwp,xls,doc,xlsx,docx,pdf,jpg,gif,png,txt,ppt,pptx";
          $allowed_extensions = explode(',', $ext_str);

          $max_file_size = 5242880;
          $ext = substr($file['name'], strrpos($file['name'], '.') + 1);

          // 확장자 체크
          if(!in_array($ext, $allowed_extensions)) {
            echo "업로드할 수 없는 확장자 입니다.";
          }

          // 파일 크기 체크
          if($file['size'] >= $max_file_size) {
            echo "5MB 까지만 업로드 가능합니다.";
          }

          $path = md5(microtime()) . '.' . $ext;
          if(move_uploaded_file($file['tmp_name'], $upload_directory.$path)) 
		  {
            $query = "INSERT INTO upload_file(file_id, fname_orig, fname_save, cname, c_gov, ctime, time, mid) VALUES(?,?,?,?,?,?,now(),?)";
            $file_id = md5(uniqid(rand(), true));
            $fname_orig = $file['name'];
            $fname_save = $path;
			$cname = $_POST["cert_name"];
		    $c_gov = $_POST["cert_gov"];
			$ctime = $_POST["year"].'/'.$_POST["month"].'/'.$_POST["day"];
			$mid = $id;

            $stmt = mysqli_prepare($db_conn, $query);
            $bind = mysqli_stmt_bind_param($stmt, "ssssss", $file_id, $fname_orig, $fname_save, $cname, $c_gov, $ctime);
            $exec = mysqli_stmt_execute($stmt);
			
            mysqli_stmt_close($stmt);

            echo "<script>alert('파일이 업로드 되었습니다.');</script>";
            echo "<script>location.href='file_list.php'</script>";
          }
        }
		}
		else{
			echo "<script>alert('비밀번호가 일치하지 않습니다.');</script>";
          echo "<script>location.href='mypage.php'</script>";
		}
}
}
		else {
          echo "<script>alert('파일이 업로드에 실패하였습니다.');</script>";
          echo "<script>location.href='upload.php'</script>";
        }

        mysqli_close($db_conn);
        ?>
</div>
</div>

<footer>
  <p>중고차 사기 방지를 위한 <b>블록체인 기반</b> 자동차 정비이력 시스템 </p>
</footer>
</body>
</html>

 

제출 시, 아이디와 비번이 회원가입때와 다르면 제출은 되지 않습니다.

예를 들어볼까요

test8이 비밀번호 1111로 회원가입을 합니다.

그 후, 위쪽 상단에 만든 마이페이지로 이동해서 인증자료를 업로드 하려고 합니다.

이때, test8은 비밀번호를 1111이 아닌 0000으로 입력하고 제출 해보겠습니다.

 

결과는?

비밀번호가 일치하지 않다네요.

그럼 이번에는 비밀번호를 1111로 하고 제출해보겠습니다.

결과는??!

굿.

제대로 올라갔네요.

그런데 말입니다.

여기서 문제가 생겼습니다.

1. 내가 업로드한 파일만 보고싶은데 모두가 올린 파일이 다 보임. (file_list.php)

2. 내가 로그인한 아이디와 다른 아이디를 입력해도 비밀번호만 맞으면 업로드 됌.

고쳐오겠습니다......

오늘의 포스팅은 파일업로드 담당 주언에게 무한의 감사 ♥

 

댓글