목차
[바로가기] SQL 기본 문법
[바로가기] PHP 기본 문법
1. CRUD 결과물 미리보기
[목차로 이동]
* 웹브라우저로 데이터베이스에 학생들의 프로그래밍 성적을 입력하고 수정, 삭제할 수 있다.
2. DB 구조 / 사용한 명령어
[목차로 이동]
CREATE DATABASE grade;
USE grade;
CREATE TABLE gradeinfo (
id INT(11) NOT NULL AUTO_INCREMENT,
name varchar(10) NOT NULL,
python INT(3) NOT NULL,
java INT(3) NOT NULL,
c INT(3) NOt NULL,
PRIMARY KEY(id)
);
INSERT INTO gradeInfo(name, python, java, c) VALUES('사나','92','90','99');
INSERT INTO gradeInfo(name, python, java, c) VALUES('미나','88','82','81');
INSERT INTO gradeInfo(name, python, java, c) VALUES('모모','77','72','71');
3. php와 MySQL 연동
[목차로 이동]
<?php
$link = mysqli_connect('localhost:3306', 'root', '*******', 'grade');
$sql = "SELECT * FROM gradeinfo";
$result = mysqli_query($link, $sql);
?>
* mysqli_connect('ip', 'user', 'password', 'database')로 데이터베이스와 php가 연결된다.
* 전체 내용을 조회할 수 있는 sql쿼리문을 $sql 변수에 담아 mysqli_query에 mysqli_connet와 함께 넣어준다.
* php와 데이터베이스가 연결되고 $sql에 담긴 sql쿼리문이 실행 됨
4. Create 구현
[목차로 이동]
* read.php에서 이름과 성적을 입력하고 submit을 누르면 form태그에 있는 값들이 post형식으로 ?name=''&python=''&java=''&c=''로 process_create.php에 전달된다.
* process_create.php에서 url로 파라미터들을 post형식으로 전달받으면 배열형식으로 바꿔주고(노란박스) sql쿼리문을 만들어서 데이터베이스에 명령을 내려주고 read.php로 다시 돌아간다. create 기능 구현 끝
//process_create.php
<?php
$link = mysqli_connect('localhost:3306', 'root', '************', 'grade');
$filtered = array(
'name'=>mysqli_real_escape_string($link, $_POST['name']),
'python'=>mysqli_real_escape_string($link, $_POST['python']),
'java'=>mysqli_real_escape_string($link, $_POST['java']),
'c'=>mysqli_real_escape_string($link, $_POST['c'])
);
$sql ="
INSERT INTO gradeinfo
(name, python, java, c)
VALUES (
'{$filtered['name']}',
'{$filtered['python']}',
'{$filtered['java']}',
'{$filtered['c']}'
)
";
$result = mysqli_query($link, $sql);
if($result === false){
echo '저장하는 과정에서 문제가 생겼습니다.';
} else {
header('Location: ../read.php');
}
?>
5. Read 구현
[목차로 이동]
* while( ) { .. } 문으로 해당 데이터베이스에 있는 모든 자원을 출력할 건데,
데이터베이스의 정보를 mysqli_fetch_array를 통해 배열의 형태로 가져온다.
while문의 조건이 한번 실행될 때마다 데이터베이스에 있는 테이블을 한 행씩 가져오고 테이블의 행을 모두 가져오면 while문의 조건은 NULL이 되며, 반복문이 종료된다.
* 테이블에서 한 행씩 가져온 자원을 각각 id, name, python, java, c에 연관배열의 형태로 정의해준다.
( $filtered = array(...); )
( id는 유저에게는 보여줄 필요가 없으므로 따로 출력을 하진 않고, '수정', '삭제' 기능 구현에서 사용함 )
* <?=$filtered['name']?> 을 통해 각 자원을 출력해주면 read 기능 구현 끝
//read.php
<?php
$link = mysqli_connect('localhost:3306', 'root', '********', 'grade');
$sql = "SELECT * FROM gradeInfo";
$result = mysqli_query($link, $sql);
?>
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>PHP_MySQL 연동</title>
<script type="text/javascript">
function update(id, name, python, java, c){
document.getElementById("update_id").value = id;
document.getElementById("update_name").value = name;
document.getElementById("update_python").value = python;
document.getElementById("update_java").value = java;
document.getElementById("update_c").value = c;
}
</script>
</head>
<body>
<div>
<table border="1" style="margin : 0 auto;">
<tr style="background-color:#D8D8D8; text-align : center;">
<td style="width : 70px;">이름</td>
<td style="width : 70px;">파이썬</td>
<td style="width : 70px;">자바</td>
<td style="width : 70px;">C/C#</td>
<td style="width : 50px;">수정</td>
<td style="width : 50px;">삭제</td>
</tr>
<?php
while ($row = mysqli_fetch_array($result)) {
$filtered = array(
'id' => htmlspecialchars($row['id']),
'name' => htmlspecialchars($row['name']),
'python' => htmlspecialchars($row['python']),
'java' => htmlspecialchars($row['java']),
'c' => htmlspecialchars($row['c'])
);?>
<tr style="text-align : center;">
<td><?=$filtered['name']?></td>
<td><?=$filtered['python']?></td>
<td><?=$filtered['java']?></td>
<td><?=$filtered['c']?></td>
<td>
<input type="button" name="" value="수정"
onclick="update('<?=$filtered['id']?>', '<?=$filtered['name']?>',
'<?=$filtered['python']?>', '<?=$filtered['java']?>', '<?=$filtered['c']?>')" >
</td>
<td>
<form class="" action="./process/process_delete.php" method="post">
<input type="hidden" name="id" value="<?=$filtered['id']?>">
<input type="submit" value="삭제">
</form>
</td>
</tr>
<?php
}
?>
</table>
</div> <!-- table div-->
<table style="margin : 0 auto;">
<tr>
<td>
<div style="border : 1px solid black; width : 150px; height : 180px;">
<form action="./process/process_create.php" method="post">
<table border="1" style="margin : 0 auto;">
<caption>성적입력</caption>
<tr>
<td>이름</td>
<td ><input style="width : 50px" type="text" name="name"></td>
</tr>
<tr>
<td>파이썬</td>
<td><input style="width : 50px" type="text" name="python"></td>
</tr>
<tr>
<td>자바</td>
<td><input style="width : 50px" type="text" name="java"></td>
</tr>
<tr>
<td>C/C#</td>
<td><input style="width : 50px" type="text" name="c"></td>
</tr>
</table>
<div style="text-align : center;">
<input type="submit" value="성적입력">
</div>
</form> <!-- form -->
</div> <!-- grade create div-->
</td> <!-- grade create td-->
<td>
<div style="border : 1px solid black; width : 150px; height : 180px;">
<form class="" action="./process/process_update.php" method="post">
<table border="1" style="margin : 0 auto;">
<caption>성적수정</caption>
<input type="hidden" name="id" id="update_id" value="">
<tr>
<td>이름</td>
<td ><input style="width : 50px" type="text" name="name" id="update_name" value=""></td>
</tr>
<tr>
<td>파이썬</td>
<td><input style="width : 50px" type="text" name="python" id="update_python" value=""></td>
</tr>
<tr>
<td>자바</td>
<td><input style="width : 50px" type="text" name="java" id="update_java" value=""></td>
</tr>
<tr>
<td>C/C#</td>
<td><input style="width : 50px" type="text" name="c" id="update_c" value=""></td>
</tr>
</table>
<div style="text-align : center;">
<input type="submit" value="성적수정">
</div>
</form> <!-- form -->
</div> <!-- grade update div -->
</td> <!-- grade update td -->
</tr>
</table><!-- create update table -->
</body>
</html>
6. Update 구현
[목차로 이동]
* '수정버튼'을 누르면 해당 행의 정보들이 '성적수정' 칸으로 복사되고, '성적수정 버튼'을 누르면 최종적으로 데이터베이스에 수정된 값들이 전달된다.
* '수정' 버튼을 누르면 자바스크립트로 구현한 update 함수에 id, name, python, java, c에 해당하는 값들을 파라미터로 전달해 준다.
* update함수에 전달된 파라미터들을 '성적입력' 칸으로 복사된다.
* 복사된 행을 원하는 값으로 수정하고 '성적수정'을 누르면 form태그에 있는 값들이 post형식으로 ?name=''&python=''&java=''&c=''로 process_update.php에 전달된다.
** id는 사용자에게 노출될 필요는 없지만 데이터베이스에서 행을 수정할 때 필요하므로 hidden으로 숨겨주고 form태그 안에 넣어준다. 따라서 submit버튼을 누르면 process_update.php에 전달됨.
* process_update로 전달된 파라미터들을 sql쿼리문으로 만들어서 데이터베이스에 전달하고 read.php로 돌아가면 update기능 구현 끝
//process_update.php
<?php
$link = mysqli_connect('localhost:3306', 'root', '**********', 'grade');
$filtered = array(
'id' => mysqli_real_escape_string($link, $_POST['id']),
'name' => mysqli_real_escape_string($link, $_POST['name']),
'python' => mysqli_real_escape_string($link, $_POST['python']),
'java' => mysqli_real_escape_string($link, $_POST['java']),
'c' => mysqli_real_escape_string($link, $_POST['c'])
);
$sql ="
UPDATE gradeinfo
SET
name='{$filtered['name']}',
python='{$filtered['python']}',
java='{$filtered['java']}',
c='{$filtered['c']}'
WHERE
id='{$filtered['id']}';
";
$result = mysqli_query($link, $sql);
if (result === false) {
echo "저장하는 과정에서 문제가 생겼습니다.";
} else {
header('Location: ../read.php');
}
?>
7. Delete 구현
[목차로 이동]
* process_delete.php로 id 값만 전달해 주면되므로, form태그안에 hidden으로 감춰준다. 따라서 submit를 누르면 process_delete.php로 id값이 post형식으로 전달됨
* process_delete.php로 전달된 id는 sql쿼리 문을 만들 때 사용되며, 데이터베이스에 전달됨. delete 기능 구현 끝
//process_delete.php
<?php
$link = mysqli_connect('localhost:3306', 'root', '*********', 'grade');
$filtered = array(
'id'=>mysqli_real_escape_string($link, $_POST['id'])
);
$sql ="
DELETE FROM gradeInfo
WHERE id = {$filtered['id']};
";
$result = mysqli_query($link, $sql);
if ($result===false) {
echo '저장하는 과정에서 문제가 발생했습니다.';
} else {
header('Location: ../read.php');
}
?>
'# WEB > PHP' 카테고리의 다른 글
[PHP] 테이블 행마다 색을 자동으로 바꾸는 코드_for/if (0) | 2021.01.02 |
---|---|
[PHP] PHP와 MySQL 연동_mysqli API (0) | 2020.12.29 |
[PHP] PHP 세부설정_에러표시/수정사항/타임존/포트설정 (0) | 2020.12.20 |
[PHP] 파일로 구현한 CRUD (0) | 2020.12.13 |
[PHP] PHP 기본 (0) | 2020.12.09 |