WEB2 - PHP

PHP에서 글수정 기능 구현하기

수업소개

PHP를 이용해서 기존의 글을 수정하는 방법을 알려드립니다.

 

 

변경사항

index.php

<?php
function print_title(){
  if(isset($_GET['id'])){
    echo $_GET['id'];
  } else {
    echo "Welcome";
  }
}
function print_description(){
  if(isset($_GET['id'])){
    echo file_get_contents("data/".$_GET['id']);
  } else {
    echo "Hello, PHP";
  }
}
function print_list(){
  $list = scandir('./data');
  $i = 0;
  while($i < count($list)){
    if($list[$i] != '.') {
      if($list[$i] != '..') {
        echo "<li><a href=\"index.php?id=$list[$i]\">$list[$i]</a></li>\n";
      }
    }
    $i = $i + 1;
  }
}
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>
      <?php
      print_title();
      ?>
    </title>
  </head>
  <body>
    <h1><a href="index.php">WEB</a></h1>
    <ol>
      <?php
      print_list();
      ?>
    </ol>
    <a href="create.php">create</a>
    <?php if(isset($_GET['id'])) { ?>
      <a href="update.php?id=<?=$_GET['id']?>">update</a>
    <?php } ?>
    <h2>
      <?php
      print_title();
      ?>
    </h2>
    <?php
    print_description();
     ?>
  </body>
</html>

 

update.php

<?php
function print_title(){
  if(isset($_GET['id'])){
    echo $_GET['id'];
  } else {
    echo "Welcome";
  }
}
function print_description(){
  if(isset($_GET['id'])){
    echo file_get_contents("data/".$_GET['id']);
  } else {
    echo "Hello, PHP";
  }
}
function print_list(){
  $list = scandir('./data');
  $i = 0;
  while($i < count($list)){
    if($list[$i] != '.') {
      if($list[$i] != '..') {
        echo "<li><a href=\"index.php?id=$list[$i]\">$list[$i]</a></li>\n";
      }
    }
    $i = $i + 1;
  }
}
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>
      <?php
      print_title();
      ?>
    </title>
  </head>
  <body>
    <h1><a href="index.php">WEB</a></h1>
    <ol>
      <?php
      print_list();
      ?>
    </ol>
    <a href="create.php">create</a>
    <?php if(isset($_GET['id'])) { ?>
      <a href="update.php?id=<?=$_GET['id']?>">update</a>
    <?php } ?>
    <h2>
     <form action="update_process.php" method="post">
       <input type="hidden" name="old_title" value="<?=$_GET['id']?>">
       <p>
         <input type="text" name="title" placeholder="Title" value="<?php print_title(); ?>">
       </p>
       <p>
         <textarea name="description" placeholder="Description"><?php print_description(); ?></textarea>
       </p>
       <p>
         <input type="submit">
       </p>
     </form>
  </body>
</html>

 

update_process.php

<?php
rename('data/'.$_POST['old_title'], 'data/'.$_POST['title']);
file_put_contents('data/'.$_POST['title'], $_POST['description']);
header('Location: /index.php?id='.$_POST['title']);
?>

 

댓글

댓글 본문
작성자
비밀번호
  1. 이희재
    update_process.php 에서
    $_GET['id'] 를 쓸 수 없는게

    <form action="~.php"></form>으로 인해 넘어간 ~.php 에선 어디까지 정보를 쓸수있냐??
    form 문 안에서 name 된것만 쓸 수 있는 것 같다.
    ~.php 전의 .php 문서의 form 문에서는 알 수 있는 id를
    ~.php 에선 알 수 없다.

    그래서 어쩔 수 없이
    <input type="hidden" name="old_title" value="<?=$_GET['id']?>">
    이런 식으로 id 값을 새로운 name 의 old_title 로 넘겨서 사용한다.


    일단 이렇게 혼잣말 하듯이 이해를 한 상태인데
    이게 확실한 건지 잘 모르겠습니다.
  2. 요정
    감사요^^ 도움이 되었습니다~
    대화보기
    • Gihoon Pomme Ryu
      완료. 고맙습니다.
    • <a>태그는 html 문법을 따르고, php에서는 에러가 나기 때문에 php 태그에서 빼야 출력합니다.
      따라서 전체 코드 중 html 문법의 코드를 제외한 부분만 php 문법의 코드로 wrapping 한 것으로 생각됩니다.
      대화보기
      • 로버트한
        감사함을 드립니다.^^
      • kong Snag Cheol
        강의 감사 드려요. //
      • 어거스틴
        _process.php 부분에서 리디렉션이 안될때

        쏘스코드 중 header('Location: /index.php?id='.$_POST['title']); 이 부분을
        아래처럼 빠꿔주시면 잘됩니다

        $host = $_SERVER['HTTP_HOST'];
        $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
        $extra = 'index.php';
        header("Location: http://$host$uri/$extra");
        exit;
      • 제갈량
        update_process.php파일에서
        header안에 있는 "Location:~~"이 부분이
        콜론 다음에 공백이 있으면 에러가 나네요.
        참고하시길 바랍니다.
        create_process.php 파일도 마찬가지구요.
      • 저는 xampp로 아파치를 실행시키는데요. Error: Apache shutdown unexpectedly. 이런에러로인해
        서버포트를 localhost:8080으로 바꿧는데요.( https://www.youtube.com......NXk 이 영상을보면서요.)
        header('Location: /index.php?id='.$_POST['title']); 이렇게 하면
        오류가 뜨는것도 아니고 페이지가 정상적으로 뜨는것도 아닌 그냥 localhost:8080/dashboard/ xampp홈페이지가 뜨는데요ㅠㅠ
        이런거는 어디 물어볼곳도 없고해서 질문올려봐요..
        대화보기
        • 마샤
          질문 있습니다.

          <?php if(isset($_GET['id'])){ ?>
          <a href="update.php">update</a>
          <?php } ?>

          위 코드에서 <?php >?를 쓰고 a태그를 쓰고 다시 <?php ?>를 쓰는 이유가 있나요?

          아래와 같이 쓰면 작동이 안 돼 위처럼 쓰는 건 알겠습니다.

          <?php if(isset($_GET['id'])){
          <a href="update.php">update</a>
          } ?>

          다만 특별한 이유가 있는 건지, 제가 모르는 php 속성이 있는 건지 알고 싶습니다. 고맙습니다.
        • 헬리사우드
          header함수로 meta태그에 들어갈 내용을 집어넣는건가요?
        • Mingi Son
          강의 감사합니다!
        • Kyoungil Lee
          자칫 놓칠뻔했지만 잘 들었습니다 감사합니다
        버전 관리
        egoing
        현재 버전
        선택 버전
        graphittie 자세히 보기