사자자리
[PHP & MySQL] UPDATE 본문
1. index.php에 update 링크 생성하기
- id 값이 있을 때만 update 링크가 나오도록, if(isset($_GET['id'])) 안에 $update_link 변수를 설정한다.
<!--htdocs\index.php-->
<?php
//title을 목차로 만들기
$conn = mysqli_connect('localhost', 'root', '021103', 'opentutorials');
$sql = "SELECT * FROM topic";
$result = mysqli_query($conn, $sql);
$list = '';
while($row = mysqli_fetch_array($result)){
$escaped_title = htmlspecialchars($row['title']);
$list = $list."<li><a href=\"index.php?id={$row['id']}\">{$escaped_title}</a></li>";
}
//기본적인 상태
$article = array(
'title'=>'Welcome',
'description'=>'Hello, WEB'
);
$update_link = '';
//id값이 있을 때, 즉 목차를 클릭했을 때
if(isset($_GET['id'])){
$filtered_id = mysqli_real_escape_string($conn, $_GET['id']);
$sql = "SELECT * FROM topic WHERE id={$filtered_id}";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($result);
$article['title'] = htmlspecialchars($row['title']);
$article['description'] = htmlspecialchars($row['description']);
$update_link = '<a href="update.php?id='.$_GET['id'].'">update</a>';
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>WEB</title>
</head>
<body>
<h1><a href="index.php">WEB</a></h1>
<ol>
<?=$list?>
</ol>
<a href="create.php">create</a> <!--글쓰기 기능 링크-->
<?=$update_link?> <!--수정하기 기능 링크-->
<h2><?=$article['title']?></h2>
<?=$article['description']?>
</body>
</html>
2. update.php 파일 생성하기
- 수정할 title과 description을 입력하는 페이지
<!--htdocs\update.php-->
<?php
//title을 목차로 만들기
$conn = mysqli_connect('localhost', 'root', '021103', 'opentutorials');
$sql = "SELECT * FROM topic";
$result = mysqli_query($conn, $sql);
$list = '';
while($row = mysqli_fetch_array($result)){
$list = $list."<li><a href=\"index.php?id={$row['id']}\">{$row['title']}</a></li>";
}
//기본적인 상태
$article = array(
'title'=>'Welcome',
'description'=>'Hello, WEB'
);
$update_link = '';
//id값이 있을 때, 즉 목차를 클릭했을 때 update 표시하기
if(isset($_GET['id'])){
$filtered_id = mysqli_real_escape_string($conn, $_GET['id']);
$sql = "SELECT * FROM topic WHERE id={$filtered_id}";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($result);
$article['title'] = htmlspecialchars($row['title']);
$article['description'] = htmlspecialchars($row['description']);
$update_link = '<a href="update.php?id='.$_GET['id'].'">update</a>';
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>WEB</title>
</head>
<body>
<h1><a href="index.php">WEB</a></h1>
<ol>
<?=$list?>
</ol>
<a href="create.php">create</a> <!--글쓰기 기능 링크-->
<?=$update_link?> <!--수정하기 기능 링크-->
<h2>Update</h2>
<form action="process_update.php" method="post">
<input type="hidden" name="id" value="<?=$_GET['id']?>"> <!--수정할 id값이 필요하기 때문에 hidden으로 전달-->
<p><input type="text" name="title" placeholder="title" value="<?=$article['title']?>"></p>
<p><textarea name="description" placeholder="description"><?=$article['description']?></textarea></p>
<p><input type="submit"></p>
</form>
</body>
</html>
3. process_update.php 파일 생성하기
- update.php에서 수정한 내용을 반영하고, 성공했으면 BACT TO PAGE 링크를 띄운다.
- 사용자의 눈에 보이지 않게 hidden과 POST 방법을 사용한다.
<!--htdoc\process_update.php-->
<?php
$conn = mysqli_connect('localhost', 'root', '021103', 'opentutorials');
settype($_POST['id'], 'integer'); //$_POST['id'] 값 중 정수(integer)만 살린다.
$filtered = array(
'id'=>mysqli_real_escape_string($conn, $_POST['id']),
'title'=>mysqli_real_escape_string($conn, $_POST['title']),
'description'=>mysqli_real_escape_string($conn, $_POST['description'])
);
$sql="
UPDATE topic
SET title = '{$filtered['title']}', description = '{$filtered['description']}'
WHERE id = {$filtered['id']}
";
$result = mysqli_query($conn, $sql);
if($result === false){
echo "ERROR";
error_log(mysqli_query($conn));
}
else {
echo '성공했습니다. <a href="index.php?id='.$filtered['id'].'">BACK TO PAGE</a>';
}
?>
4. 실습
MariaDB [opentutorials]> SELECT * FROM topic;
+----+------------+-------------------------------+---------------------+
| id | title | description | created |
+----+------------+-------------------------------+---------------------+
| 4 | MySQL | MySQL but we're using MariaDB | 2022-08-01 23:23:34 |
| 5 | Oracle | Oracle is ... | 2022-08-01 23:24:00 |
| 6 | SQL Server | SQL Server is ... | 2022-08-01 23:24:17 |
| 7 | MongoDB | MongoDB is ... | 2022-08-01 23:24:31 |
| 8 | MariaDB | MariaDB is ... | 2022-08-02 21:34:31 |
+----+------------+-------------------------------+---------------------+
5 rows in set (0.001 sec)
'웹기초 > 생활코딩 WEB 3 - PHP & MySQL' 카테고리의 다른 글
[PHP & MySQL] 테이블 간의 연결 (0) | 2022.08.08 |
---|---|
[PHP & MySQL] DELETE (0) | 2022.08.07 |
[PHP & MySQL] 보안: Filtering & Escaping (0) | 2022.08.03 |
[PHP & MySQL] 테이블에서 데이터를 가져와서 PHP에서 활용하기 (0) | 2022.08.03 |
[PHP & MySQL] 웹페이지에 입력한 데이터를 테이블에 추가하기 (0) | 2022.08.03 |
Comments