관리 메뉴

FU11M00N

[ PHP, MYSQL ] php & mysql update문 본문

SUA 정보보안/php&mysql

[ PHP, MYSQL ] php & mysql update문

호IT 2021. 2. 14. 14:33

그림 출처 :https://opentutorials.org/course/3167

 

 

생활코딩의 이고잉 님의 강의를 기반으로 개인 공부용으로 정리한 포스팅입니다.

 

 

 


 

 

 

- 현재 테이블의 값

 

현재 컬럼이 3개 존재합니다.

이 값을 php파일로 수정해보겠습니다.

 

 

 

 

 

 

 

현재 index.php 파일은 topic의 테이블에있는 컬럼의 "title" 들을 뽑아와 리스트로 출력합니다.

 

기본적으로 index.php에는 update를 할수있는 링크가 없지만,

isset함수를 이용하여 id에 값이있다면 "title" 과 "description"의 값들과 "update" 링크도 생겨납니다.

 

 

 

update를 누르게되면  "title" 과 "description"를 누를수있는 text 창이 출력됩니다.

 

 

 

 

 

 

그럼 text 창에서 원하는 값으로 변경 후,

값을 확인해보면 성공적으로 값이 바뀐 값이 출력됩니다.

 

 

 

 

 

 

 

 

- index.php

<?php
  $conn = mysqli_connect(
  'localhost',
  'ID',
  'PASSWORD',
  'DB이름');

$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 = '';
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>

 

 

 

- update.php

<?php
  $conn = mysqli_connect(
  'localhost',
  'ID',
  'PASSWORD',
  'DB이름');

$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 = '';
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>
    <form action="process_update.php" method="POST">
      <input type="hidden" name="id" value="<?=$_GET['id']?>">
      <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>

- process_update.php

<?php
  $conn = mysqli_connect(
  'localhost',
  'ID',
  'PASSWORD',
  'DB이름');
settype($_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_log(mysqli_error($conn));
} else {
  echo '성공했습니다. <a href="index.php">돌아가기</a>';
}
?>

 

 

 

 

 

 

SUA 정보보안 멘토링에 참여하고 있습니다.

 

 

 

Comments