레이블이 php 간단 일기장인 게시물을 표시합니다. 모든 게시물 표시
레이블이 php 간단 일기장인 게시물을 표시합니다. 모든 게시물 표시

2015년 1월 9일 금요일

php 간단 일기장 - 유효성 검증

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 유효성 검증

글 생성과 글 수정시 아무것도 없는 글은 일기로써 의미가 없다.
즉 한글자 이상의 글자가 입력되어야 한다.


이처럼 원래 만든 의도와는 다르게 작동되는 것을 막기 위해서
* 설계 의도에 맞도록 사용자가 입력했는가.
를 확인하는 것을 유효성 검증이라고 한다.

php 간단 일기장 - 유효성 검증 - 클라이언트 유효성 검증

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 유효성 검증 - 클라이언트 유효성 검증

사용자측에서 서버로 데이터를 보내기 전에 한번 검증한 후 보낸다.

클라이언트 유효성을 검사하기 위해서는 자바스크립트를 사용한다.

php 간단 일기장 - 유효성 검증 - 서버 유효성 검증

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 유효성 검증 - 서버 유효성 검증


클라이언트 사이드에서 유효성 검증을 했다고 해도 다른 방식으로 오염된 데이터가 넘어올 가능성은 얼마든지 있다.

가장 대표적인 방법으로는 클라이언트 브라우저에서 자바스크립트를 실행 안되도록 설정해두고 웹페이지에 오염된 데이터를 입력하는 것이다.
이럴 경우 클라이언트 검증을 거치지 않고 서버로 데이터가 전달된다.
따라서 클라이언트 검증 후에 서버에서 동일하게 유효성을 한번 더 검증할 필요가 있다.

php 간단 일기장 - 유효성 검증 - 서버 유효성 검증 - 글 생성 / 수정하기

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 유효성 검증 - 서버 유효성 검증 - 글 생성 / 수정하기

요구사항
  • 글 쓰기와 글 수정에서 Contents 는 1글자 이상 들어가야 한다.
  • 글 수정에서 diary_id 는 데이터베이스의 타입과 일치해야 하므로 숫자여야 한다.
 시나리오

    글 생성 / 수정시 contents가 1글자 이상인지 확인한다.
    따라서 이러한 논리는 생성 / 수정이 실제 처리되는 페이지에 추가되어야 한다.

    글 수정시 diary_id 가 숫자인지 확인해야 한다.

논리 변경 
기존논리

    (수정일 경우) diary_id 를 클라이언트에서 전송받아 $diary_id 라고 이름붙인다.
    contents 를 클라이언트에서 전송받아 $contents 라고 이름붙인다.
    데이터베이스에 연결해서 $contents 의 값을 데이터베이스에 넣는다.
    diarylist 로 이동한다.

변경논리

    (수정일 경우) diary_id 를 클라이언트에서 전송받아 $diary_id 라고 이름붙인다.
    (수정일 경우) $diary_id 의 타입을 구해서 $diary_id_type 이라는 이름을 붙인다.
    (수정일 경우) $diary_id_type 이 정수(integer) 타입인지 확인한다.

    (수정일 경우) $diary_id 가 정수가 아닐 경우 아래 논리를 실행하지 않고 바로 diarylist.php 로 이동한다.

    contents 를 클라이언트에서 전송받아 $contents 라고 이름붙인다.
    글자의 길이를 확인하고 0글자일 경우 데이터베이스에 넣지 않고 diarylist 로 이동한다.
    1글자 이상일 경우 데이터베이스에 연결해서 $contents 의 값을 데이터베이스에 넣는다.
    diarylist 로 이동한다.


글 생성 파일
writesubmit.php를 수정한다.

글 생성 검증 코드
 
생성시 클라이언트에서 전송받은 값을 $contents 라고 이름붙인 후에 아래 코드 추가
 
if (count($contents) == 0)
{
    header("Location: diarylist.php");    
}


글 수정 파일 
 editsubmit.php로 수정한다.
수정시 클라이언트에서 diary_id와 contents 를 전송받는다.
 각각 $diary_id , $contents 라고 이름붙인 다음 아래 코드를 추가한다.
$diary_id_type = gettype($diary_id);
if ($diary_id_type != 'integer')
{
    header("Location: diarylist.php");    
}
else if (count($contents) == 0)
{
    header("Location: diarylist.php");    
}

php 간단 일기장 - 유효성 검증 - 클라이언트 유효성 검증 - 글 생성 / 수정하기

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 유효성 검증 - 클라이언트 유효성 검증 - 글 생성 / 수정하기

요구사항 
글 쓰기와 글 수정에서 Contents 는 1글자 이상 들어가야 한다.


시나리오
  • 글 생성 / 수정시 값을 서버로 보내기 위해서는 유저가 input submit 버튼을 눌러야 한다.
  • 버튼이 눌릴 때 Contents 가 1글자 이상인지 자바스크립트로 체크한다.
     
할일
  • Contents 의 길이를 체크해야 하기 때문에 자바스크립트에서 contents 를 식별할 수 있어야 한다. 따라서 contents 에 id 항목을 넣는다.
  • 실제로 Contents가 1글자 이상인지 체크하는 자바스크립트 함수를 만든다.
  • 버튼이 클릭될 때 자바스크립트 함수가 작동할 수 있도록 이벤트를 추가한다.


contents 에 id 붙이기
diaryedit.php
diarywrite.php
파일에서
<textarea name="contents" rows="3" cols="50">
부분을 
<textarea name="contents" id="contents" rows="3" cols="50">
처럼 바꾼다.
 
  
Contents 길이 체크 자바스크립트 함수 만들기
코드 
    <script type="text/javascript">
      function checkContentsLength()
      {
        var contents = document.getElementById('contents');
        var contentsValue = contents.value;
        if (contentsValue.length == 0) {
          alert('contents length is 0.');
          return false;
        }        
        else
        {
          return true;
        }
      }
    </script>
 
html 태그의 <head>와 </head> 사이에 넣는다.
 
작동설명 
  • html 문서 내에서 contents 라는 id 를 가진 태그를 가지고 와서 contents 라고 이름붙인다.
  • contents 태그에는 '값' 말고도 'id'나 'name', 혹은 rows 같은 여러가지 Attribute 들이 있다. 이 중에서 '값'을 가지고 오기 위해서는 contents.value 라고 써야 한다.
    contents 의 '값' 에 contentsValue 라는 이름을 붙인다.
  • 만약 contents 값의 글자수가 0 이면 경고를 띄우고 false를 반환한다.
  • 만약 contents 값의 글자수가 0이 아니면 true를 반환한다.

diaryedit.php
diarywrite.php
파일을 수정 후 저장한다.
  

2015년 1월 8일 목요일

php 간단 일기장 - 로그인 상태 체크

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 로그인 상태 체크


이 상태대로라면 주소만 알고 있으면 로그인 필요없이 아무나 들어올 수 있게 된다.
따라서 각 페이지마다 로그인되어 있는지 체크하고 로그인되어있지 않으면 로그인페이지로 이동하는 것이 필요하다.


로그인 처리시에
logincomplete 라는 쿠키값이 true 일 경우 로그인인 것으로 처리했다.
따라서 logincomplete 라는 값이 있고 그 값이 true인지 살펴본다.
맞다면 그냥 절차를 진행하고, 맞지 않다면 로그인 페이지로 이동한다.


코드
<?php

$islogined = false;
if (isset($_COOKIE['logincomplete']))
{
    if ($_COOKIE['logincomplete'] == 'true')
    {
        $islogined = true;
    }
}

if ($islogined == false)
{
    header("Location: loginform.php");
}

?>
 
chklogin.php 로 저장한다.
  

php 간단 일기장 - 로그인 페이지 include

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 로그인 페이지 include

chklogin.php 가 작동되는 것을 확인했다고 해서 모든 페이지에 Copy & Paste 하는 것은 비효율적이다.
또한 만약 로그인 조건이 바뀔 경우 모든 파일을 다 변경해야 하는 문제가 생긴다,

따라서 include 를 사용해서 같은 코드를 공유한다.
  • diarylist.php
  • diarywrite.php
  • writesubmit.php
  • diaryedit.php
  • editsubmit.php
  • deletesubmit.php
파일들을 열고, 각 파일의 1라인에

코드
<?php
include('chklogin.php');
?>

라는 내용을 추가한다.

이렇게 되면 각 페이지의 논리가 실행되기 전에 로그인이 먼저 체크된다.

2015년 1월 7일 수요일

php 간단 일기장 - 글 삭제하기 - 처리페이지 만들기

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 글 삭제하기 - 처리페이지 만들기

글 삭제는 특별한 화면이 필요 없이 삭제만 할 수 있으면 된다.
이때 일기장의 모든 페이지가 삭제되면 안되므로 페이지를 지정해 줄 필요가 있다.
따라서 삭제 처리페이지에서 필요한 값은 'diary_id'이다.

<?php
$diary_id = $_GET['diary_id'];
$db_host = "localhost"; 
$db_user = "php111";
$db_passwd = "php111"; 
$db_name = "phpdiary"; 

$conn = mysql_connect($db_host,$db_user,$db_passwd) or die ("데이터베이스 연결에 실패하였습니다!");

mysql_select_db($db_name, $conn); 

mysql_query("set names utf8");

$query = "delete from diary where diary_id=" . $diary_id;
$result = mysql_query($query);

header("Location: diarylist.php");

?>
 
deletesubmit.php 로 저장한다. 

2015년 1월 6일 화요일

php 간단 일기장 - 글 수정하기 - 화면 만들기

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 글 수정하기 - 화면 만들기

글 수정은 글쓰기와 비슷하지만 한가지 차이가 있다.
바로 기존에 썼던 글이 보여야 한다는 것이다.
따라서 기존에 썼던 글을 가져와서 보여줘야 한다.
그렇다면 여러개의 글 중에서 어떤 글을 보여줘야 할지 알 필요가 있다.
우리는 이미 diary_id 라는 이름으로 각 일기장 페이지를 구분했으므로 이것을 이용해서 보여주기로 한다.


따라서 editsubmit.php 로 전달할 내용은
[contents]
[diary_id]
이다.


글 수정 화면이 보이기 위한 과정
  • 웹브라우저 주소창에 GET 파라미터 중 diary_id 가 있는지 본다.
  • 만약에 diary_id가 GET 파라미터 안에 있다면
  • 데이터베이스에 접속한다.
  • diary 테이블에서 diary_id가 get 파라미터 diary_id 인 것들을 가지고 온다.
  • 만약 데이터베이스 쿼리 실행 결과 갯수가 1이라면 파라미터로 들어온 diary_id 와 데이터베이스의 데이터 중 diary_id가 일치하는 데이터가 있는 것이다.
  • 일치한다면 그 데이터의 contents를 보여준다.
  • 만약 diaryedit.php 에서 주소창 파라미터로 diary_id 가 전달되지 않았을 경우 editsubmit.php 에서도 diary_id 가 빈 값으로 나오게 된다.

글 수정 처리 페이지로 넘길 내용
글 수정 화면에서 수정 버튼이 클릭되었을 때 form 태그에 의해 editsubmit.php 로 이동한다.
이때 contents 만 editsubmit.php 로 전달되면 editsubmit.php 는 어떤 데이터를 수정해야 할 지 모르게 된다.
따라서 diary_id 도 같이 전달할 필요가 있다.

hidden 태그는 사용자에게 보이지는 않고 값을 가지고만 있는 html 태그이므로 hidden 태그에 diary_id 값을 넣어서 editsubmit.php 에 전달한다.

만약 diaryedit.php 에서 주소창 파라미터로 diary_id 가 전달되지 않았을 경우 editsubmit.php 에서도 diary_id 가 빈 값으로 나오게 된다.

<input type="hidden" name="diary_id" value="<?php echo $diary_id; ?>" />
 
 
코드
<!DOCTYPE html>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  </head>
  <body>
    <form action="editSubmit.php" target="_self"  method="post">
        <textarea name="contents" rows="3" cols="50"><?php

                $diary_id = '';
                if (isset($_GET['diary_id']))
                {
                    $diary_id = $_GET['diary_id'];
                    $db_host = "localhost"; 
                    $db_user = "php111";
                    $db_passwd = "php111"; 
                    $db_name = "phpdiary"; 

                    $conn = mysql_connect($db_host,$db_user,$db_passwd) or die ("데이터베이스 연결에 실패하였습니다!");

                    mysql_select_db($db_name, $conn); 

                    mysql_query("set names utf8");

                    $query = 'select * from diary where diary_id=' . $diary_id;
                    $result = mysql_query($query);

                    $total = mysql_affected_rows();

                    if ($total == 1)
                    {
                        mysql_data_seek($result,0);
                        $r = mysql_fetch_array($result);
                        echo $r['contents'];
                    }
                }
            ?></textarea>

        <br/>
        <input type="submit" value="수정" />        
        <input type="hidden" name="diary_id" value="<?php echo $diary_id; ?>" />
    </form>
  </body>
</html> 

위 내용을 diaryedit.php 로 저장한다.


php 간단 일기장 - 글 수정하기 - 처리페이지 만들기

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 글 수정하기 - 처리페이지 만들기

글 수정하기가 처리되는 과정.

diaryedit.php 파일에서 contents 와 diary_id를 editsubmit.php 로 전송한다.
  • editsubmit.php 에서 contents와 diary_id 를 post 방식으로 받는다.
  • contents 를 데이터 베이스에 저장하기 위해서
    데이터베이스를 열고
    update 쿼리를 실행하고
    데이터베이스를 닫는다.
  • 저장이 완료되면 목록 페이지 (diarylist.php) 로 이동한다.

<?php
$diary_id = $_POST['diary_id'];
$contents = $_POST['contents'];
$db_host = "localhost"; 
$db_user = "php111";
$db_passwd = "php111"; 
$db_name = "phpdiary"; 

$conn = mysql_connect($db_host,$db_user,$db_passwd) or die ("데이터베이스 연결에 실패하였습니다!");

mysql_select_db($db_name, $conn); 

mysql_query("set names utf8");

$query = "update diary set contents = '" . $contents . "' where diary_id=" . $diary_id;
$result = mysql_query($query);

header("Location: diarylist.php");

?>
 
 
editsubmit.php 로 저장한다. 

2015년 1월 5일 월요일

php 간단 일기장 - 글쓰기 - 화면 만들기

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 글쓰기 - 화면 만들기

화면을 만들 때는 항상 어떤 데이터를 form에 담아서 실제 처리할 페이지로 전달할 것인가..를 생각해야 한다.
글 쓰기 같은 경우 [내용] 을 전달해야 하므로 Form 태그 안에 content 라는 이름의 textarea 를 설정한다.


코드
<!DOCTYPE html>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  </head>
  <body>
    <form action="writesubmit.php" target="_self"  method="post">
        <textarea name="content" rows="3" cols="50">          
        </textarea>
        <br/>
        <input type="submit" value="저장" />
    </form>
  </body>
</html>
 
 
diarywrite.php 로 저장한다. 

php 간단 일기장 - 글 쓰기 - 처리페이지 만들기

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 글 쓰기 - 처리페이지 만들기


글 쓰기가 처리되는 과정.

diarywrite.php 파일에서 contents 를 writesubmit.php 로 전송한다.

writesubmit.php 에서 contents 를 받는다.
contents 를 데이터 베이스에 저장하기 위해서
데이터베이스를 열고
insert 쿼리를 실행하고
데이터베이스를 닫는다.
저장이 완료되면 목록 페이지 (diarylist.php) 로 이동한다.

코드

<?php
$contents = $_POST['contents'];

$db_host = "localhost";
$db_user = "php111";
$db_passwd = "php111";
$db_name = "phpdiary";

$conn = mysql_connect($db_host,$db_user,$db_passwd) or die ("데이터베이스 연결에 실패하였습니다!");

mysql_select_db($db_name, $conn);

mysql_query("set names utf8");

$query = "insert into diary (contents) values ('" . $contents . "')";
$result = mysql_query($query);

mysql_close();
header("Location: diarylist.php");

?>

2015년 1월 4일 일요일

php 간단 일기장 - 글 목록 - 삭제하기 링크 추가

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 글 목록 - 삭제하기 링크 추가

삭제페이지의 이름은 deletesubmit.php 라고 짓도록 하자.
이 때 파라미터는 diary_id 이다.

따라서 url의 형태는 deletesubmit.php?diary_id=[숫자]
가 된다.

코드
<a href="deletesubmit.php?diary_id=<?php echo $r['diary_id']; ?>">삭제</a>
 
 
 diarylist.php 를 수정해서 저장한다.
 

php 간단 일기장 - 글 목록 화면 만들기.

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 글 목록 화면 만들기.

먼저 어떻게 보일지 확인해보기 위해서 간단하게 html 만 작성한다.
각 영역은 div 안에 작성되어 있으며, div 안에 컨텐츠가 들어가게 된다.
<!DOCTYPE html>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  </head>
  <body>
    <div>
        이것은 첫번째 글입니다.
    </div>
    <div>
        이것은 두번째 글입니다.
    </div>
    <div>
        이것은 세번째 글입니다.
    </div>    
  </body>
</html>
 
 
diarylist.php 로 저장한다. 

php 간단 일기장 - 글 목록 DB에서 가져와서 보여주기

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 글 목록 DB에서 가져와서 보여주기

데이터베이스에서글 목록을 가져와서 보여준다.

코드
<!DOCTYPE html>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  </head>
  <body>

<?php
$db_host = "localhost"; 
$db_user = "php111";
$db_passwd = "php111"; 
$db_name = "phpdiary"; 

$conn = mysql_connect($db_host,$db_user,$db_passwd) or die ("데이터베이스 연결에 실패하였습니다!");

mysql_select_db($db_name, $conn); 

mysql_query("set names utf8");

$query = 'select * from diary';
$result = mysql_query($query);

$total = mysql_affected_rows();


for ($i=0;$i<$total;$i++)
{
    mysql_data_seek($result,$i);
    $r = mysql_fetch_array($result);
    ?>
    <div>
    <?php
      echo $r['contents'];
    ?>
    </div>
    <?php
}

mysql_close();

?>    
  </body>
</html>
 
 
코드설명
 
처음부터 <?php 가 나올때까지는 정적인 html 이다.
<?php 부터 ?> 까지는 php가 다루는 영역이다.
이 외에는 html 페이지이다. 

 
글 목록 보기 - html 과 데이터베이스 부분을 합쳐놓으면 이렇게 된다.
글 내용을 보는 부분만 php 로 쓰여지고, 나머지 부분은 html 형식의 정적 페이지이다.

페이지의 구성.
  • html의 기본 구조인 doctype html head body가 정적인 페이지를 보여준다.
  • <?php로 php를 연다
  • php에서 데이터베이스에 접속하여 질의 결과를 가지고 온다.
  • php 에서 반복문을 시작한다.
  • ?> 로 php 를 닫는다.
  • html로 정적인 div 여는 태그를 보여준다. 이 과정은 반복문 횟수만큼 반복된다.
  • <?php로 php를 연다
  • contents를 화면에 보여준다. 이 과정은 반복문 횟수만큼 반복된다.
  • ?> 로 php 를 닫는다.
  • html로 정적인 div 닫는 태그를 보여준다. 이 과정은 반복문 횟수만큼 반복된다.
  • <?php로 php를 연다
  • 반복문 블럭을 닫는다.
  • 보여주는 영역이 끝났으므로 데이터베이스와의 연결을 종료한다.
  • ?> 로 php 를 닫는다.
  • body와 html을 닫는 부분 또한 정적인 페이지가 된다.

 위 내용대로 diarylist.php 파일을 수정한다.

php 간단 일기장 - 글 목록 - 쓰기 링크 추가

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 글 삭제하기 - 쓰기 링크 추가

글 쓰기는 중요하므로 가장 위에 넣도록 하자.

  <body>
    <a href="diarywrite.php">글쓰기</a>
 
a 태그 영역을 추가한다.
 
diarylist.php 를 수정해서 저장한다. 

php 간단 일기장 - 글 목록 - 수정하기 링크 추가

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 글 목록 - 수정하기 링크 추가

수정페이지의 이름은 diaryedit.php 라고 짓도록 하자.
diarylist.php 에서 diaryedit.php 로 전달할 파라미터는 diary_id 이다.
따라서 url의 형태는 diaryedit.php?diary_id=[숫자]
가 된다.

php 간단 일기장 - 글 목록 화면의 전체 코드

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - 글 목록 화면의 전체 코드


코드
<!DOCTYPE html>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  </head>
  <body>
  <a href="diarywrite.php">글쓰기</a> 
<?php
$db_host = "localhost"; 
$db_user = "php111";
$db_passwd = "php111"; 
$db_name = "phpdiary"; 

$conn = mysql_connect($db_host,$db_user,$db_passwd) or die ("데이터베이스 연결에 실패하였습니다!");

mysql_select_db($db_name, $conn); 

mysql_query("set names utf8");

$query = 'select * from diary';
$result = mysql_query($query);

$total = mysql_affected_rows();


for ($i=0;$i<$total;$i++)
{
    mysql_data_seek($result,$i);
    $r = mysql_fetch_array($result);
    ?>
    <div>
    <?php
      echo $r['contents'];
    ?>
      <a href="diaryedit.php?diary_id=<?php echo $r['diary_id']; ?>">수정</a>
      <a href="deletesubmit.php?diary_id=<?php echo $r['diary_id']; ?>">삭제</a>  
    </div>
    <?php
}

mysql_close();

?>    
  </body>
</html>
 
 
diarylist.php 로 저장한다. 

2015년 1월 3일 토요일

php 간단 일기장 - php 에서 데이터베이스와 연결 끊기

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 - php 에서 데이터베이스와 연결 끊기

데이터베이스에 명령을 내리고 나서 결과까지 가지고 오고 나면 데이터베이스와 볼 일은 끝났다. 볼 일이 끝나면 명시적으로 연결을 끊어줘서 이제 볼 일이 끝났다는 것을 알려주게 된다.

<?php
mysql_close();
 ?>
 

php 간단 일기장 -php 에서 데이터베이스의 결과값 가져오기

이 문서는 지속적으로 갱신되는 내용을 다룹니다.
최신 버전의 문서는 언제든지 http://crealnet.blogspot.kr에서 얻을 수 있습니다.
문서가 업데이트 될 때마다 이메일로 받아보고 싶으시다면 http://crealnet.blogspot.kr/p/pdf.html 를 사용해 주세요.
기타 추가적으로 필요하신 사항은 http://crealnet.blogspot.kr/p/blog-page.html에서 연락주시면 됩니다.
읽어주셔서 감사합니다!


php 간단 일기장 -php 에서 데이터베이스의 결과값 가져오기

<?php
$query = 'select * from diary';
$result = mysql_query($query);
$total = mysql_affected_rows();

for ($i=0;$i<$total;$i++)
{
    mysql_data_seek($result,$i);
    $r = mysql_fetch_array($result);
}
?>



데이터베이스에 '쿼리' 로 명령을 내리고 나면 , 데이터베이스는 명령을 실행한 결과를 돌려준다.
결과는 $result 변수 안에 들어가게 된다.
이때 실행한 결과인 $result 변수는 Resource 타입이다.

주의해야 할 점은, 데이터베이스는 기본적으로 집합을 다룬다는 것이다.
즉 diary 테이블에서 모든 내용을 가져와 라고 명령했을 때, 특정한 조건이 없으므로 데이터베이스는 diary 테이블에 있는 모든 페이지의 정보를 돌려준다.
따라서 결과는 여러 페이지가 될 수 있다.

$result 값 예시.

    diary_id      contents                 write_date
       1              [첫번째 데이터]     2014.03.26
       2              [두번째 데이터]     2014.03.27


$total = mysql_affected_rows();
는 이렇게 데이터베이스가 돌려준 페이지가 몇 장인지 알려주는 함수이다.
아래 예시에 따르면 $total 은 2가 된다.


for ($i=0;$i<$total;$i++)
데이터베이스가 돌려준 결과의 갯수만큼 반복한다.


mysql_data_seek($result,$i);
$result 에는 데이터베이스에서 실행한 결과가 Resource 타입으로 들어간다. 이 Resource 안에는 여러개의 데이터가 있을 수 있으며, mysql_data_seek 명령어는 여러개의 데이터 중 하나의 데이터를 선택하라는 명령어이다.
반복문 안에 명령어가 있기 때문에 $i 는 페이지의 장 수만큼 변한다.

    첫번째 반복에서는 결과값 중 첫번째 결과값을 선택하게 된다.
    두번째 반복에서는 결과값 중 두번째 결과값을 선택하게 된다.


$r = mysql_fetch_array($result);
mysql_fetch_array 는 선택한 결과값을 배열로 변환하라는 함수다.


첫번째 반복일 때 $r의 값.
diary_id : 1
contents : 첫번째 데이터
write_date : 2014.03.26
1 : 1
2 : 첫번째 데이터
3 : 2014.03.26


두번째 반복일 때
diary_id : 2
contents : 두번째 데이터
write_date : 2014.03.27
1 : 2
2 : 두번째 데이터
3 : 2014.03.27


$r 의 값은 연관배열이다. 주목해야 할 점은 연관배열의 키가 '숫자', 그리고 '컬럼 이름' 이라는 것이다.
첫번째 데이터의 경우 $r의 값은
키 = 키 = 값
diary_id = 1 = 1
contents = 2 = 첫번째 데이터
write_date = 3 = 2014.03.26

형태를 띈다.