관리 메뉴

FU11M00N

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

SUA 정보보안/php&mysql

[ PHP, MYSQL ] php & mysql delete문

호IT 2021. 2. 14. 15:06

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

 

 

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

 

 

 


 

 

- 현재 테이블의 값

 

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

이 값을 php파일로 삭제해보겠습니다.

 

 

 

- 기능 소개

 

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

 

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

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

 

 

 

create나 update의 경우 하이퍼링크를 통해 기능을 구현하도록했었습니다.

 

하지만 delete의 경우 하이퍼링크로 기능을 구현하게되면,

그 링크를 내가 아닌 누군가가 눌렀을때 삭제가 되는 위험이있습니다.

 

그러하여 delete는 form 태그를 활용하여 기능을 구현하겠습니다.

 

 

"fu11m00n" 링크를 클릭시 "delete" 를 할수있는 링크가 생겨납니다.

 

 

"delete" 버튼을 클릭시 아까 클릭했던 "fu11m00n" 의 값이 데이터베이스에서 삭제됩니다.

 

 

 

 

- 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 = '';
$delete_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>';
  $delete_link = '
    <form action="process_delete.php" method="post">
      <input type="hidden" name="id" value="'.$_GET['id'].'">
      <input type="submit" value="delete">
    </form>
  ';
}

?>
<!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?>
    <?=$delete_link?>
    <h2><?=$article['title']?></h2>
    <?=$article['description']?>
  </body>
</html>

- process_delete.php

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

settype($_POST['id'], 'integer');
$filtered = array(
  'id'=>mysqli_real_escape_string($conn, $_POST['id'])
);

$sql = "
  DELETE
    FROM topic
    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