티스토리 뷰
웹사이트에 파일 올리기 기능을 구현해서 실제 사용하는 예를 기록하기 위함입니다.
업무용 웹사이트를 구현해서 사용해 보고 싶은 분들에게 도움이 되길 희망하며 글을 적습니다.
도면 첨부 버튼을 누르면 처리하는 과정 및 첨부삭제를 누르면 삭제하는 루틴까지 일련의 과정을 설명해 볼게요.
우선 버튼을 보시면 아시겠지만, 부트스트랩을 썼으니 선언이 필요합니다.
<!-- 최초화면에서 보여주는 상단메뉴 -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" >
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.1/font/bootstrap-icons.css">
부트스트랩 5.0 이상이 아니면 제이쿼리도 먼저 선언해 줘야 하니... 그걸 포함하면 아래와 같겠네요.
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" >
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.1/font/bootstrap-icons.css">
<link rel="stylesheet" type="text/css" href="../css/common.css">
위의 형태대로 하려면 간단히 html도 들어가야 하겠죠?
<label for="pdf_file" class="btn btn-primary btn-sm"> 도면 첨부 (pdf파일)</label>
<input id="pdf_file" type="file" name="pdf_file" style="display:none;" accept=".pdf" />
<button id=delattachedfileBtn type="button" class="btn btn-outline-danger btn-sm" >
첨부삭제 </button>
<input type="text" id="pdffile_name" name="pdffile_name" value="<?=$pdffile_name?>" size="40" >
화면에 나타날 내용을 전부 된 것 같습니다.
이제 서버쪽이나 자바스크립트 쪽에서 처리하는 부분에 대한 기술을 해야겠죠.
파일선택을 눌러 파일을 선택하면 화면에 보여주는 input부분 자바스크립트 코드
$("#pdf_file").change(function(){
//input file 태그.
var file = document.getElementById('pdf_file');
//파일 경로.
var filePath = file.value;
//전체경로를 \ 나눔.
var filePathSplit = filePath.split('\\');
//전체경로를 \로 나눈 길이.
var filePathLength = filePathSplit.length;
//마지막 경로를 .으로 나눔.
var fileNameSplit = filePathSplit[filePathLength-1].split('.');
//파일명 : .으로 나눈 앞부분
var fileName = fileNameSplit[0];
//파일 확장자 : .으로 나눈 뒷부분
var fileExt = fileNameSplit[1];
//파일 크기
var fileSize = file.files[0].size;
$("#pdffile_name").val(fileName);
$("#copied_file").val('');
});
서버로 저장하는 버튼으로 인해
폼전송으로
<form name="board_form" id="board_form" onkeydown="return captureReturnKey(event)" method="post" action="insert.php>" enctype="multipart/form-data">
submit하면 php 코드를 아래와 같이 작성합니다.
// submit으로 전달된 자료 처리 구문
// 첨부파일에 대한 처리방법 SQL에 넣을때는 보이는 파일명과 실제 저장될 파일명 구분해서 저장함.
$copied_file = $_REQUEST["copied_file"];
$pdffile_name = $_REQUEST["pdffile_name"];
if($copied_file=='' && $pdffile_name!='' )
{
// pdf파일 대한 정보
$pdffile_name = $_FILES['pdf_file']['name'];
$files = $_FILES["pdf_file"]; //첨부파일
$upload_dir = './attachedfile/'; // sub폴더 물리적 저장위치
if (isset($_FILES)) {
$name = $_FILES["pdf_file"]["name"];
$type = $_FILES["pdf_file"]["type"];
$size = $_FILES["pdf_file"]["size"];
$tmp_name = $_FILES["pdf_file"]["tmp_name"];
$error = $_FILES["pdf_file"]["error"];
// 서버에 저장할때는 한글로 저장하면 깨지는 현상이 있으니 임시 이름을 지어서 저장한다.
// 확장자 pdf파일
$file_ext = "pdf";
$new_file_name = date("Y_m_d_H_i_s");
$copied_file_name = $new_file_name.".".$file_ext;
//서버에 임시로 저장된 파일은 스크립트가 종료되면 사라지므로 파일을 이동해야함.
$upload_result = move_uploaded_file($tmp_name, $upload_dir . $copied_file_name);
if($upload_result){
$result = "파일 업로드 성공 경로 - " . $upload_dir;
$copied_file = $copied_file_name;
}
}
}
// 자신의 서버 열기관련 구문을 넣으세요.
require_once("../lib/mydb.php");
$pdo = db_connect();
// 수정일 경우
if ($mode=="modify"){
try{
$pdo->beginTransaction();
$sql = "update (본인의 서버 필드 기술) set ";
$sql .=" pdffile_name=?, copied_file=? ";
$sql .= " where num=? LIMIT 1" ;
$stmh = $pdo->prepare($sql);
$stmh->bindValue(158, $pdffile_name, PDO::PARAM_STR);
$stmh->bindValue(159, $copied_file, PDO::PARAM_STR);
$stmh->bindValue(163, $num, PDO::PARAM_STR);
$stmh->execute();
$pdo->commit();
} catch (PDOException $Exception) {
$pdo->rollBack();
print "오류: ".$Exception->getMessage();
}
}
그럼 삭제버튼의 동작은?
$("#delattachedfileBtn").click(function(){
$("#pdffile_name").val('');
$("#copied_file").val('');
});
값을 초기화 해서 넘겨준다.
실제 실행해서 작동해 보니 등록/삭제가 잘 되었습니다.
pdf파일 첨부 로직은 여러가지인데 한가지만 보신거라 생각하시면 좋겠습니다. 다양한 좋은 코드들이 많으니, 자신이 가장 쓰기 좋은 코드로 만들어 보세요~
'IT tech Coding > php' 카테고리의 다른 글
php 주소창 문구 변경하는 코드 (0) | 2023.02.28 |
---|---|
php mail함수 본문 한글 안깨지게 코딩하는 법 (0) | 2023.02.26 |
[php] 오늘 날짜 또는 특정일 기준 5일전 날짜가 설정한 일자의 범위에 있는지 확인하는 소스코드 (0) | 2022.12.21 |
php+javascript 이미지파일 다중 업로드 만들기 서버저장 동작구현 (0) | 2022.11.11 |
[php] namespace와 use 사용에 헷갈릴때 봐야 할 자료 (1) | 2022.10.08 |
- Total
- Today
- Yesterday
- General error: 2031
- coalesce는 한국어로 "코얼레스크" 또는 "코얼리스"
- #InstallForge
- 파이썬코드줄바꿈방법
- 1. #웹개발 2. #로트번호 3. #성적서보기 4. #ajax 5. #jquery 6. #php 7. #프론트엔드 8. #백엔드 9. #부트스트랩 10. #웹기능구현
- 구글드라이브API
- 티스토리챌린지
- 오토핫키가이드
- Bootstrap 5
- 엑셀셀보호
- 코딩튜토리얼
- #프로그램설치
- chatGPT3.5파이썬버전
- #파이썬패키징
- 테크에능한여성
- 프로그래머생활
- 스크립트작성기초
- 효율적코딩방법
- json파일편하게보는법
- sql문장 날짜계산
- 코딩효율성
- 도면자동생성
- 캐드자동작도
- 엑셀보호
- isset을 적용해야 하는 이유
- ajax오류메시지
- 뫄프로그래밍
- json파일형태보기
- 엑셀입력보호
- 오블완
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |