본문 바로가기
JavaScript 시리즈☕

CRUD 이용해서 사용자 정보 저장 페이지 만들어보기

by @ENFJ 2022. 11. 20.

출력 결과

코드

<!doctype html>
<html lang="en">

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
	<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"
		integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
	<script>
		var searchData = {};
		var tempData;
		function getSend(urladdr, param) {
			var temp;
			$.ajax({
				type: 'post',
				headers: {
					"Content-Type": "application/json"
				},
				async: false,// ajax를 동기화(순서대로) 처리해야하는 경우 true로하거나 기술하지 않으면 비동기로 작동한다.
				url: urladdr,
				data: param,
				dataType: "json",
				success: function (result) {
					temp = result;
				},
			});
			return temp;
		}
		function getMulti(urladdr, formData) {
			var temp;
			$.ajax({
				type: 'post',
				enctype: 'multipart/form-data',
				data: formData,
				dataType: 'json',
				processData: false,
				contentType: false,
				async: false,// ajax를 동기화(순서대로) 처리해야하는 경우 true로하거나 기술하지 않으면 비동기로 작동한다.
				url: urladdr,
				success: function (result) {
					temp = result;
				},
			});
			return temp;
		}
		function searchRow() {
			var member = {};

			member["name"] = document.getElementById('name').value;

			var jsonString = JSON.stringify(member);
			console.log(jsonString);

			var revdata = getSend('/ajaxSelectMember.do', jsonString);
			console.log(revdata);
			searchData = revdata;
			console.log('searchData');
			console.log(searchData);
			var value = '';
			for (var i = 0; i < revdata.length; i++) {
				value +=
					'<tr>' +
					'<td scope="row"><input type="checkbox" id="chbx"><input type="button" value="삭제" onclick="delRow()"></td>' +
					'<td><input type="text" name="id" value="' + revdata[i]['id'] + '" disabled></td>' +
					'<td><input type="text" name="name" value="' + revdata[i]['name'] + '" ></td>' +
					'<td><input type="text" name="tel" value="' + revdata[i]['tel'] + '" ></td>' +
					'<td><input type="text" name="addr" value="' + revdata[i]['addr'] + '" ></td>' +
					'<td><input type="text" name="hp" value="' + revdata[i]['hp'] + '" ></td>' +
					'<td><form id="member"><input type="file" name="file" id="image" accept="image/*" onchange="setThumbnail(event)"></form></td>' +
					'<td><div id="image_container"></td>'
				
					'</tr>'

			}
			document.getElementById('memTable').innerHTML = value;

		}
		function insertRow(id, name, tel, addr, hp) {
			var member = {};

			member["id"] = id;
			member["name"] = name;
			member["tel"] = tel;
			member["addr"] = addr;
			member["hp"] = hp;

			var jsonString = JSON.stringify(member);
			console.log(jsonString);

			var revdata = getSend('/ajaxInsertMember.do', jsonString);
			console.log(revdata);




		}
		function insertRowFile(form, id) {
			var formData = new FormData(form);
			formData.append("id", id);
			console.log(formData);
			var revdata = getMulti('/ajaxInserFileMember.do', formData);
			console.log(revdata);
		}
		function updateRow(id, name, tel, addr, hp) {
			var member = {};

			member["id"] = id;
			member["name"] = name;
			member["tel"] = tel;
			member["addr"] = addr;
			member["hp"] = hp;

			var jsonString = JSON.stringify(member);
			console.log(jsonString);

			var revdata = getSend('/ajaxUpdateMember.do', jsonString);
			console.log(revdata);

		}
		//delete Row

		function deleteRow(id) {
			var member = {};

			member["id"] = id;

			var jsonString = JSON.stringify(member);
			console.log(jsonString);

			var revdata = getSend('/ajaxdeleteMember.do', jsonString);
			console.log(revdata);

		}

		function saveRow() {
			var form = $("#member");
			console.log(form);
			if (searchData != undefined || searchData != null || searchData.length > 0) {



				///////////////////////////////////////////

				console.log('save');
				var j = 0;
				$('#memTable tr').each(function () {
					var flag2 = false;
					console.log('1');
					var tr = $(this);
					var td = tr.children();
					for (var i = 0; i < searchData.length; i++) {
						//console.log('2');
						//if(td.eq(1).children().val() == searchData[i]['id']){
						//	console.log('3');
						//	flag2 = true;
						//	break;
						//}
						console.log(form[j]);
						console.log(j);
						console.log(td.eq(1).children().val());

					}
					console.log('4_1');
					//if(!flag2){
					//	console.log('4');
					//	insertRow(form[i]);
					//}
					insertRow(td.eq(1).children().val(), td.eq(2).children().val(), td.eq(3).children().val(), td.eq(4).children().val(), td.eq(5).children().val());
					if (form[j] != undefined) {
						insertRowFile(form[j], td.eq(1).children().val());
					}
					j++;
				});

			} else {
				//ifsearchData X tempData O Insert
			}
			//	searchRow();
		}
		function changeRow() {
			$('#memTable tr').each(function () {
				var tr = $(this);
				var td = tr.children();
				console.log(td.eq(1).children().val());
				console.log(td.eq(2).children().val());
				console.log(td.eq(3).children().val());
				console.log(td.eq(4).children().val());
				console.log(td.eq(5).children().val());
			});

		}


		function setThumbnail(event) {
            var reader = new FileReader();

            reader.onload = function (event) {
                var img = document.createElement("img");
                img.setAttribute("src", event.target.result);
                document.querySelector("div#image_container").appendChild(img);
            };

            reader.readAsDataURL(event.target.files[0]);
        }

		function addRow() {
			var insrtData = document.getElementById('memTable');
			var row = insrtData.insertRow(insrtData.rows.lenght);

			var cell1 = row.insertCell(0);
			var cell2 = row.insertCell(1);
			var cell3 = row.insertCell(2);
			var cell4 = row.insertCell(3);
			var cell5 = row.insertCell(4);
			var cell6 = row.insertCell(5);
			var cell7 = row.insertCell(6);
			var cell8 = row.insertCell(7);
			cell1.innerHTML = '<td scope="row"><input type="checkbox" id="chbx"><input type="button" value="삭제" onclick="delRow()"></td>';
			cell2.innerHTML = '<td><input type="text" name="id"></td>';
			cell3.innerHTML = '<td><input type="text" name="name"></td>';
			cell4.innerHTML = '<td><input type="text" name="tel"></td>';
			cell5.innerHTML = '<td><input type="text" name="addr"></td>';
			cell6.innerHTML = '<td><input type="text" name="hp"></td>';
			cell7.innerHTML = '<td><form id="member"><input type="file" name="file" id="image" accept="image/*" onchange="setThumbnail(event)"></form></td>';
			cell8.innerHTML = '<td><div id="image_container"></div>';
				// cell8.innerHTML = '<td><div id="image_container"></div>';
		}

		function delRow() {
			var insrtData = document.getElementById('memTable');
			for (var i = 1; i < insrtData.rows.length; i++) {
				var chbx = insrtData.rows[i].cells[0].childNodes[0].checked;

				if (chbx) {
					insrtData.deleteRow(i);
					i--;
				}
			}
		}

	</script>
	<title>Hello, world!</title>
</head>

<body>
	<input type="text" id="name" value="">
	<input type="button" value="조회" onclick="searchRow()">
	<input type="button" value="저장" onclick="saveRow()">
	<input type="button" value="수정" onclick="changeRow()">
	<input type="button" value="추가" onclick="addRow()">
	<table class="table table-dark">
		<thead>
			<tr>
				<th scope="col">#</th>
				<th scope="col">아이디</th>
				<th scope="col">이름</th>
				<th scope="col">전화번호</th>
				<th scope="col">주소</th>
				<th scope="col">휴대폰번호</th>
				<th scope="col">파일</th>
				<th scope="col">미리보기</th>
			</tr>
		</thead>
		<tbody id="memTable">
			<tr>

			</tr>
		</tbody>
	</table>

	<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"
		integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct"
		crossorigin="anonymous"></script>
</body>

</html>