2016-08-09 2 views
0

내가 PHP (새로운)을 배우려고하고 있는데 웹 사이트에 카운터 쿠키와 마지막 방문 사용이 게시물에서 발견 똑같은 달성하기 위해 노력하고 있습니다 :PHP 쿠키 및 방문 카운터

을 !

"그것은 처음 서버에서의 경고 :

하지만이 수치스러운 오류로 실행하고 해당 게시물에서 사용자는 달리 PHP cookie visit counter not working 헤더 정보를 수정할 수 없습니다 - 이미가 보낸 헤더 (출력시 시작 (...) on line 17

이것은 17 행입니다 : setcookie ('visitCount1');

지금 나는 이것이 일반적인 실현 및 SO 검색이 게시물을 발견 :

How to fix "Headers already sent" error in PHP

내가 반드시 숙지하고 이것이 발생하는 공백을 포함하고 지적 입력 할 수있는 이유를 가능한 이유를 갔다 내 HTML 코드를하기 전에 내 브라우저에서 언급 한 php 줄과 또한 끝 태그 "?>"제거하고 내 코드의 시작 부분에 ob_start() 넣고 시도했지만 여전히 동일한 오류 결과.

<?php 
 
$Month = 3600 + time(); 
 

 
date_default_timezone_set('EST'); 
 
setcookie('AboutVisit1', date("D M j G:i:s T Y"), $Month); 
 
?> 
 

 
<?php 
 
if(isset($_COOKIE['AboutVisit1'])) 
 
{ 
 
$last = $_COOKIE['AboutVisit1']; 
 
echo "Welcome back! <br> You last visited on ". $last . "<br>"; 
 

 

 
} 
 
if(isset($_COOKIE['visitCount1'])){ 
 

 

 
$cookie = ++$_COOKIE['visitCount1']; 
 

 

 
echo ("You have viewed this page" . $cookie . "times."); 
 
} 
 
else 
 
{ 
 
echo "It's your first time on the server!"; 
 
setcookie('visitCount1'); 
 
} 
 
?>

내 브라우저와 같은 WAMP 서버와 크롬 넷빈즈 8.1을 사용하고 있습니다 : 여기

은 (위의 게시물에서 촬영) 내가 실행하려고하고있는 코드입니다. 이 문제를 해결하기 위해 수행 할 수있는 다른 조치는 무엇입니까?

브라우저 나 netbeans에서 테스트하는 경우 쿠키 및 세션 기록을 볼 수 있습니까?

html 헤더와 본문을 포함해야합니까, 아니면 그냥 PHP 본문에 넣을 수 있습니까? PHP는 바이올린에

는 작동 (다소)와 나는이 (항상 같은 시간)을 얻을 :

다시 오신 것을 환영합니다! 8 월 9 일 (화)에 마지막으로 방문한 사람 15:43:00 (EST) 2016 서버에서 처음입니다.

+0

몇 가지 팁입니다. 'setcookie ('AboutVisit1', date ("DM j G : i : s TY"), $ Month);를보고, 당신이하는 것을보세요 - PHP를'?>'로 닫으면, 공백이 있다면'

답변

0

setcookie() 함수는 다른 것을 출력하기 전에 함수를 호출해야합니다. 따라서 코드에 무언가를 출력하는 부분이있어서 setcookie이 호출되기 전에 있습니다.

1

게시 한 코드에 공백이 포함되어 있습니다. 모양 :

setcookie('AboutVisit1', date("D M j G:i:s T Y"), $Month); 
?> 

<?php 

닫기와 열기 사이의 간격을 확인 하시겠습니까?

1

마지막으로 echo "It's your first time on the server!"; (또는 echo "Welcome back! <br> You last visited on ". $last . "<br>";)을 실행 한 후 setcookie('visitCount1');이 브라우저로 전송되는 중 메시지가 울리는 문제가 있습니다. 마지막 쿠키를 보내기 전에 에코 기능을 사용하지 마십시오.

편집 : 다른 사람들도 코드에 공백이 있음을 지적했습니다.

1

는 새로운 브랜드 감안할 때, 여기 당신이 게시 한 코드는 공백을 포함

<?php 

// if you are going to change the timezone, best to always make this first, so it effects everything in the script 
date_default_timezone_set('EST'); 

// 3600 seconds = 1 hour not Month 
// give your variables proper names it will help if you get into that habit from day one 
$one_hour = 3600; 
$expires = $one_hour + time(); 

// check if visit cookie exists and increment it, otherwise, this must be visit 1 
$count = isset($_COOKIE['visitCount1']) ? ++$_COOKIE['visitCount1'] : 1; 

// set cookies at the start, before outputting anything 
// i would also recommend setting the path, as that can catch you out if you have a deep directory structure,/will mean the cookie works for the whole site 
setcookie('AboutVisit1', date("D M j G:i:s T Y"), $expires, '/'); 
setcookie('visitCount1', $count, $expires, '/'); 

if(isset($_COOKIE['AboutVisit1'])) 
{ 
    $last_visit = $_COOKIE['AboutVisit1']; 
    // you don't need to use . to concatenate variables if you use double " 
    echo "Welcome back! <br> You last visited on $last_visit <br>"; 
} 

if(isset($_COOKIE['visitCount1'])){ 
    // you dont' need() when you do echo 
    // you don't need to use . to concatenate variables if you use double quotes " 
    echo "You have viewed this page $count times."; 
} else { 
    echo "It's your first time on the server!"; 
} 

// you don't need trailing ?> 
+0

좋아요, 사이트를 다시 방문하고 싶다면 내 방문수와 마지막 방문수가 표시되지 않습니다. 브라우저 또는 넷빈을 통해 어떻게해야합니까? – xan

+0

브라우저에서 쿠키를 확인하고 설정중인 내용을 확인하십시오. 해당 코드는 테스트되고 작동합니다. – bumperbox