여기서 조회수를 제한할 수 있는 세 가지의 방법이 있는데요,

쿠키와 세션, DB를 이용한 방법이 있습니다.


여기서 쿠키를 이용한 방법은 제가 사용했으니 세션과 DB에 대해서 먼저 설명하겠습니다.


세션은 서버에 저장되는 변수라고 생각하시면 되겠습니다.

서버의 한 장소에 데이터를 저장해놓고 필요할 때 찾아서 사용하는 방식이죠.

이런 방식을 사용하는 이유는 기본적인 HTML이나 JavaScript 만을 가지고는 사용자 자신이 누군지 서버에게 알려줄 수가 없기 때문입니다.

세션같은 것이 없다면 로그인을 하더라도 다음 페이지로 넘어가는 순간 풀려버리게 되는거죠.


여기서 세션을 사용하지 않은 이유는 세션은 위에 적었듯이 서버에 저장이 됩니다.

조회수가 프로그램상 정말 중요한 부분이라면 세션이나 DB를 사용해야겠지만,

일반적인 게시판에서는 조회수가 큰 작용을 하지 않기 때문에 쿠키를 이용했습니다.


DB의 경우도 서버에 저장되지만 조회수를 올렸던 사용자가 누구인지 알기 위해서는 ip, 조회수를 올렸던 시간, 글 번호 이 세 가지가 필요합니다.

게다가 계속 DB에 쌓이면 느려지니 삭제도 해줘야 하구요.


쿠키는 위의 두 방법과는 다르게 클라이언트(사용자)의 PC에 저장됩니다.
클라이언트에 저장되는 세션이라고 생각하시면 되겠습니다.


대신 쿠키는 사용자가 맘대로 접근을 할 수 있기 때문에 쿠키를 이용할 때는 보안과는 관련 없는 기능에 사용해야하죠.

그리고 쿠키를 지우게 되면 조회수가 한번 더 오르기 때문에 딱히 하든 안하든 차이가 없는 것 같지만,

조회수 같은 중요하지 않은 기능에 그런 시간을 투자할만한 사람은 적다고 생각됩니다.


이러한 이유로 쿠키를 이용했구요.

이 글을 보시는 분들은 원하는 방법으로 사용하시면 되겠습니다.


if(!empty($bNo) && empty($_COOKIE['board_free_' . $bNo])) {

$sql = 'update board_free set b_hit = b_hit + 1 where b_no = ' . $bNo;

$result = $db->query($sql); 

if(empty($result)) {

?>

<script>

alert('오류가 발생했습니다.');

history.back();

</script>

<?php 

} else {

setcookie('board_free_' . $bNo, TRUE, time() + (60 * 60 * 24), '/');

}

}


위의 코드를 설명해보자면, 만약 $bNo이 있고, $_COOKIE['board_free_' . $bNo(글 번호)]가 없을 때 update 쿼리를 전송합니다.

결과가 없다면 오류가 발생했다는 메시지를 출력하고 이전 화면으로 돌아갑니다.


결과가 성공이라면 setcookie 함수를 이용해서 'board_free_' . $bNo이라는 쿠키를 만듭니다.

여기서 사용된 setcookie의 매개변수는 setcookie('쿠키 명', '쿠키 값', '쿠키 유지시간', '경로') 순입니다.


쿠키 명은 말 그대로 쿠키를 사용할 때 쓰는 쿠키의 이름으로 배열에서 키 값과 동일한 역할이라고 보시면 되겠구요.

여기서 board_free_$bno이라는 이름으로 만든 이유는 free라는 이름을 가진 게시판의 글 번호를 나타낸겁니다.


쿠기 값도 배열의 값와 같다고 보시면 되겠습니다.

쿠키 유지시간은 쿠키가 얼마의 시간만큼 유지될 건지를 나타내는 건데요.

time()은 현재 시간을 나타내주고 거기에 + (60(초) * 60(분) * 24(시간))의 값을 더해줍니다.

60 * 60 * 24란 하루를 초로 나타낸 값입니다.

그러므로 하루 후에 다시 조회가 가능하게 되는거죠.


그리고 마지막으로 경로인데 만약 경로부분이 비어있다면 http://kurien.dothome.co.kr/board/에서 글을 조회했을 때는 /board/라는 경로에

쿠키가 생성되고 http://kurien.dothome.co.kr/project/board/에서 글을 조회했을 때는 /board/project/라는 경로에 쿠키가 생성됩니다.


그러므로 한 사람이 2의 조회수를 올릴 수 있게 되는거죠.

이 경로를 /로 고정 함으로써 하루 한번의 조회만 가능하게 했습니다.

http://blog.kurien.co.kr/529

Posted by 이상욱1
,

$result = $db->query($sql);


if($result){

$msg='정상적으로 글이 삭제 되었습니다.';

$replaceURL='./';

}else {

$msg='글을 삭제하지 못했습니다.';

?>

<script>

alert("<?php echo $msg?>");

history.back();

</script>


<?php 

exit;

}

?>


<script >

alert ( "<?php echo $msg?>" );

location . replace ( "<?php echo $replaceURL?>" );

</script>

Posted by 이상욱1
,

히든으로 값 보낼때

PHP 2015. 7. 30. 09:31

<?php

if(isset($bNo)) {

echo '<input type="hidden" name="bno" value="' . $bNo . '">';

}

?>

Posted by 이상욱1
,

php 에서 jsp <%= > 와 같은 뜻 은 <?php echo >와 같다 

'PHP' 카테고리의 다른 글

삭제하고 그 프로젝트 루트로 돌아가는 문법  (0) 2015.08.03
히든으로 값 보낼때  (0) 2015.07.30
php mysql 과 관련된 두개의 객체 mysqli pdo  (0) 2015.07.29
my sql insert_id()  (0) 2015.07.29
mysql sequence_num 주기  (0) 2015.07.29
Posted by 이상욱1
,


mysql 에 대한 객체가 두개 있다 서로 다른 함수를 쓰기 때문에 초반 php로 계시판을 짜거나 하는 부분에 혼란스러울수 있다 

아래 부분은  pdo로 접속하고선 mysqli 에서 쓰는 fetch_assoc()를 써서 에러가 낫던 부분이다 




'PHP' 카테고리의 다른 글

히든으로 값 보낼때  (0) 2015.07.30
php 에서 jsp <%= > 와 같은 뜻 은  (0) 2015.07.30
my sql insert_id()  (0) 2015.07.29
mysql sequence_num 주기  (0) 2015.07.29
오라클의 sysdate 를 mysql 에서  (0) 2015.07.29
Posted by 이상욱1
,

my sql insert_id()

PHP 2015. 7. 29. 13:18

mysql_insert_id()

가장 최근의 insert된 auto_increment 값을 반환한다.

마지막으로 insert 한 auto_increment값을 추출하지만 자동증가값이 아니면 0이 반환된다.

이거 있는 줄 모르고, 따로 생성해서 해야하는 경우도 있었는데 참 편리한 함수다 ^^



http://simples.kr/?mid=ITTalk&category=7592&document_srl=7610



즉 

$sql = 'insert into board_free (b_no, b_title, b_content, b_date, b_hit, b_id, b_password) 

values(null, "' . $bTitle . '", "' . $bContent . '", "' . $date . '",

0,"' . $bID . '", password("' . $bPassword . '"))';


if($result) { // query가 정상실행 되었다면,
$msg = "정상적으로 글이 등록되었습니다.";
$bNo = $db->insert_id;


이렇게 해서 넣을때 null 로 해서 넣어 주는데 해당 값을 가지고 오기 위해서 $bNo = $db->insert_id; 이런식으로 가지고온다 


Posted by 이상욱1
,

mysql sequence_num 주기

PHP 2015. 7. 29. 13:07


db에서 테이블을 만들 때 primary auto_increment 값을 줬던 column은 값을 입력할 때 null만을 입력해도 자동으로 입력됩니다.



$sql = 'insert into board_free (b_no, b_title, b_content, b_date, b_hit, b_id,       b_password) values (null, . . . .)



해당 테이블 생성해준것 


create table board_free (

b_no int unsigned not null primary key auto_increment,

b_title varchar(100) not null,

b_content text not null,

b_date datetime not null,

b_hit int unsigned not null default 0,

b_id varchar(20) not null,

b_password varchar(100) not null

);

'PHP' 카테고리의 다른 글

php mysql 과 관련된 두개의 객체 mysqli pdo  (0) 2015.07.29
my sql insert_id()  (0) 2015.07.29
오라클의 sysdate 를 mysql 에서  (0) 2015.07.29
자바와 php 의 배열 문법적인 차이  (0) 2015.07.29
array_slice  (0) 2015.07.29
Posted by 이상욱1
,

http://okky.kr/article/38934


sysdate를 mysql에서는??


오라클의 sysdate가 있는데 mysql은 무엇으로 대체를 해야 하나요?

date()를 넣었더니 연도-월-일까지만 들어가지던데요....오라클 sysdate는 시간분초까지 되던데..sysdate와 같은 게 mysql에는 없나요?


'PHP' 카테고리의 다른 글

my sql insert_id()  (0) 2015.07.29
mysql sequence_num 주기  (0) 2015.07.29
자바와 php 의 배열 문법적인 차이  (0) 2015.07.29
array_slice  (0) 2015.07.29
php와 자바의 array 기본적인 쓰임 차이  (0) 2015.07.29
Posted by 이상욱1
,

http://php.net/manual/kr/function.arsort.php

이전에도 말했다 싶이 php는 인덱스를 마치 해쉬의 키처럼 스트링 값을 인덱스로 줄수있다 그러므로 

아래와 같은 코드가 가능하다  필자는 아래를 보고선 맨처음 이중 배열인가 했다 

  $aPageParam = array(

            'shop_no' => $aParam['shop_no'],

            'view_cnt' => $aParam['view_cnt'],

            'srh_start_dt' => $aParam['srh_start_dt'],

            'srh_end_dt' => $aParam['srh_end_dt']

        );  ---  인덱스를 정해주고 값을 넣어주는 모습이다 자바에서는 상상도 못하는 문법 


$fruits = array("d" => "lemon""a" => "orange""b" => "banana""c" => "apple");



arsort

(PHP 4, PHP 5)

arsort — 배열을 내림차순 정렬하고 인덱스의 상관관계를 유지

설명 ¶

bool arsort ( array &$array [, int $sort_flags ] )

이 함수는 배열 인덱스가 그 배열의 원소와 상관관계를 유지할수 있도록 배열을 정렬한다.

이 함수는 주로 실제 원소의 정렬이 중요한 연관 배열을 정렬할 때 이용한다.

인수 ¶

array

입력 배열.

sort_flags

선택적인 sort_flags 인수로 정렬 방법을 바꿀 수 있습니다. 자세한 내용은 sort()를 참고하십시오.

반환값 ¶

성공 시 TRUE를, 실패 시 FALSE를 반환합니다.

예제 ¶

Example #1 arsort() 예제

<?php
$fruits 
= array("d" => "lemon""a" => "orange""b" => "banana""c" => "apple");
arsort($fruits);
foreach (
$fruits as $key => $val) {
    echo 
"$key = $val\n";
}
?>

위 예제의 출력:

a = orange
d = lemon
b = banana
c = apple

fruits는 알파벳 내림 차순으로 정렬되었고, 각 원소와 연관된 인덱스가 유지되었다.

  • asort() - 배열을 정렬하고 인덱스 상관 관계를 유지
  • rsort() - 역순으로 배열 정렬
  • ksort() - 키에 의한 배열 정렬
  • sort() - 배열 정렬


'PHP' 카테고리의 다른 글

mysql sequence_num 주기  (0) 2015.07.29
오라클의 sysdate 를 mysql 에서  (0) 2015.07.29
array_slice  (0) 2015.07.29
php와 자바의 array 기본적인 쓰임 차이  (0) 2015.07.29
substr 문자열자르기  (0) 2015.07.28
Posted by 이상욱1
,

array_slice

PHP 2015. 7. 29. 09:43

http://php.net/manual/kr/function.array-slice.php

array_slice

(PHP 4, PHP 5)

array_slice — 배열의 일부를 추출

설명 ¶

array array_slice ( array $array , int $offset [, int $length [, bool $preserve_keys ]] )

array_slice()는 offset 과 length 인수에 따라 array로부터 일련의 배열 원소를 반환한다.

인수 ¶

array

입력 배열.

offset

offset이 음수가 아니면, 일련의 값은 array의 그 offset 수부터 시작할것이다. offset이 음수이면, 일련의 값은 array의 끝에서부터 그 수만큼 떨어진 곳에서부터 시작한다.

length

length가 주어지고 양수이면, 일련의 값은 그 수만큼의 배열 원소가 될것이다. length가 주어지고 음수이면, 배열의 끝에서부터 그 수만큼의 배열원소가 될것이다. 이 인수가 생략되면, 일련의 값은 offset에서부터 array 끝까지의 모든 원소를 가지게 된다.

preserve_keys

array_slice()는 기본값으로 배열 인덱스를 초기화하여 다시 정렬합니다. preserve_keys를 TRUE로 설정하여 이 동작을 바꿀 수 있습니다.

반환값 ¶

조각을 반환합니다.

변경점 ¶

버전설명
5.0.2선택적인 preserve_keys 인수 추가.

예제 ¶

Example #1 array_slice() 예제

<?php
$input 
= array ("a""b""c""d""e");

$output array_slice ($input2);      // returns "c", "d", and "e"
$output array_slice ($input, -21);  // returns "d"
$output array_slice ($input03);   // returns "a", "b", and "c"

// 배열 키의 차이에 주의
print_r(array_slice($input2, -1));
print_r(array_slice($input2, -1true));
?>

위 예제의 출력:

Array
(
    [0] => c
    [1] => d
)
Array
(
    [2] => c
    [3] => d
)

참고 ¶

매개변수가 3개일때와 2개일때가 다르게 쓰인다를 주목해야한다 

3개일때는 $output array_slice ($input03); 와 같이 $input 의 0부터 ~ 3까지  return 하지만 

2개일때는 $output array_slice ($input2); 2번째까지 잘려진 값을 return 한다 

'PHP' 카테고리의 다른 글

오라클의 sysdate 를 mysql 에서  (0) 2015.07.29
자바와 php 의 배열 문법적인 차이  (0) 2015.07.29
php와 자바의 array 기본적인 쓰임 차이  (0) 2015.07.29
substr 문자열자르기  (0) 2015.07.28
str_replace 문자열치환  (0) 2015.07.28
Posted by 이상욱1
,