power-girl0-0

[ PHP & MySQL ] 글 수정 본문

언어/PHP

[ PHP & MySQL ] 글 수정

power-girl0-0 2021. 3. 29. 22:26
728x90

생활코딩 PHP & MySQL을 참고하여 공부하였습니다.

스스로 공부한 것을 정리하고 복습하기 위한 목적으로 작성하였습니다.

( 출처 :  https://opentutorials.org/course/743inf.run/pBzy opentutorials.org/course/3167)


이전 강좌에서 진행하였던 main.php 소스코드를 가지고 실습을 진행해보자.

 

먼저, create옆에 update라는 하이퍼 링크를 만들어보자.

<a href="update.php?id=<?=$GET['id']?>">update</a>

그렇지만, id가 없다며 에러가 발생한다.

따라서, id가 있을 때만 update가 보이도록 다시 작성해보자.

  $update = '';
  if(isset($_GET['id'])) {
    $sql = "SELECT * FROM topic WHERE id={$_GET['id']}";
    $result = mysqli_query($conn, $sql);
    $row = mysqli_fetch_array($result);
    $article['title'] = $row['title'];
    $article['description'] = $row['description'];

    $update = ' <a href="update.php?id='.$GET['id'].'">update</a>';
  }

이전 글에서 사용하였던 isset이 들은 조건문에 해당 소스코드를 입력해준다.

위 소스코드와 같이 실행하면, id가 있는 경우에만 update링크를 출력시킬 수 있다.


그럼 이제 update.php페이지를 생성해보자.

해당 코드는 이전 글에서 실습했던 create.php코드와 비슷하므로, 해당 코드를 이용하여 페이지를 생성하였다.

 

update.php는 수정 글이기 때문에 title과 description에 해당하는 글의 내용이 입력되어 있어야 한다.

따라서, 위 article이라는 변수를 이용하여 글의 내용을 추가할 수 있다. 이는 아래와 같다.

<form action="process_update.php" method="POST">
      <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>

input 타입에 article의 배열을 이용해서 value에 넣어주면 글 내용이 입력된 것을 확인할 수 있다.

 


이제 여기서 form을 입력했을 때, process_create.php로 이동하면 안된다.

update를 처리하는 페이지로 이동해야 된다.

 

이를 process_update.php라는 페이지로 생성해보자.

 

update를 하기 위해서, ' 누구를 업데이트 할 것인가? '에 대한 정보가 필요하다.

그래서 아래와 같이 form에 hidden 타입으로 id값을 넘겨주었다.

<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>

이제 process_update.php라는 update처리하는 페이지를 생성해보자.

해당 페이지는 process_create.php페이지와 소스코드가 비슷하므로, copy하여 수정하였다.

 

process_create.php소스코드에서 sql문만 update문으로 바꿔주면 된다.

코드는 아래와 같다.

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']}
";

여기서 id값은 정수로 되어있기 때문에, settype( )이라는 함수를 이용해서 변수의 자료형을 설정하였다.


이제 실행해보자.

변경전 hello인 title을 nice to meet you로 바꿔보았다.

성공했습니다.라는 메시지가 출력되었으니, main.php페이지를 살펴보자.

위와 같이, 수정된 것을 확인할 수 있다.

 


process_update.php 전체 소스코드

<?php
  $conn = mysqli_connect(
    'localhost',
    'root',
    'db 비밀번호',
    'opentutorials');

  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="main.php">돌아가기</a>';
  }
?>
728x90

'언어 > PHP' 카테고리의 다른 글

[ PHP & MySQL ] 글 삭제  (0) 2021.03.29
[ PHP & MySQL ] PHP & MySQL 보안  (0) 2021.03.29
[ PHP & MySQL ] 글 읽기  (0) 2021.03.29
[ PHP & MySQL ] SELECT  (0) 2021.03.29
[ PHP & MySQL ] 글 생성  (0) 2021.03.28
Comments