ถามการนับ view ของกระทู้ เพื่อไม่ให้คน refresh หน่อยครับ
ผมว่าน่าจะใช้วิธีเซตคุกกี้ให้กับกระทู้ครับ
สร้างคุกกี้ชื่อ viewboard ให้ใส่ค่าว่า abcd มีระยะเวลาเข้าดู 2 นาที
Code (PHP)
<?php
setcookie("viewboard", "abcd", time()+120);
?>
เวลาเรียก
Code (PHP)
<?php
if (isset($_COOKIE["viewboard"]))
ให้เพิ่มค่า
else
ไม่ต้องเพิ่ม view
?>
Date :
2010-01-23 19:23:25
By :
deawx
ขอบคุณครับเดี๋ยวลองเอาไปใช้ดูก่อนนะครับ เเล้วจะมาเล่าให้ฟัง
thx คุณ deawx
Date :
2010-01-24 03:32:48
By :
eikzon
ใช้ไม่ได้ครับวีธีนี้ ลองแล้ว รีแล้วยังนับอยู่เลย
Code (PHP)
if (isset($_COOKIE["viewboard"]))){
$viewq=$rsq['view_ques'];
$viewq++;
$sql1="UPDATE question SET view_ques='$viewq' WHERE id_ques='$_GET[id_ques]'";
$query1=mysql_query($sql1);
}else{
}
หรือว่าผมทำผิดหรือเปล่า
ประวัติการแก้ไข 2011-07-12 15:37:54 2011-07-12 15:38:40 2011-07-12 15:39:22
Date :
2011-07-12 15:36:33
By :
ckcr
ใส่ เครื่องหมาย ! หน้า isset ครับ
แล้วให้ setcookie เมื่อเพิ่มค่าแล้ว
Code (PHP)
if (!isset($_COOKIE["viewboard"]))){
$viewq=$rsq['view_ques'];
$viewq++;
$sql1="UPDATE question SET view_ques='$viewq' WHERE id_ques='$_GET[id_ques]'";
$query1=mysql_query($sql1);
setcookie("viewboard", "abcd", time()+120);
} else {
}
ประวัติการแก้ไข 2011-07-13 01:17:10
Date :
2011-07-13 01:15:59
By :
tomrambo
Code (PHP)
<? setcookie("viewboard", "abcd", time()+120);?>
if (!isset($_COOKIE["viewboard"])){
$viewq=$rsq['view_ques'];
$viewq++;
$sql1="UPDATE question SET view_ques='$viewq' WHERE id_ques='$_GET[id_ques]'";
$query1=mysql_query($sql1);
}else{}
?>
ลองแล้วครับ ยัง คร่าวนี้ไม่เพิ่มเลย ครับ แต่ผม ลอง echo ค่า$_COOKIE["viewboard"] มันไม่แสดงค่าเลยครับ
ลองอ่านเงื่อนไขดู ถ้าไม่มี $_COOKIE["viewboard"] ให้ เพิ่ม แต่ เอา
setcookie("viewboard", "abcd", time()+120); ไว่ล่างก็แบบนี้ครับ
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\myWebboard\include\function.php:46) in C:\AppServ\www\myWebboard\view_ques.php on line xx
ประวัติการแก้ไข 2011-07-13 10:04:02
Date :
2011-07-13 09:55:44
By :
ckcr
ได้ละครับ ต้องใส่ ob_start();
แต่ติดนิดนึ่ง คือ คลิกเข้าไปดูครั้งแรก ทำไมมันไม่เพิ่มเลย งง
แต่พอรี ตามเวลา มันถึงเพิ่มให้
แต่คลิกเข้าครั้งงแรกไม่เพิ่ม
Code (PHP)
<?
ob_start();?>
if (!isset($_COOKIE["viewboard"])){
$viewq=$rsq['view_ques'];
$viewq++;
$sql1="UPDATE question SET view_ques='$viewq' WHERE id_ques='$_GET[id_ques]'";
$query1=mysql_query($sql1);
setcookie("viewboard", "abcd", time()+5);
}else{}
?>
ประวัติการแก้ไข 2011-07-13 10:12:39
Date :
2011-07-13 10:11:28
By :
ckcr
เพิ่ม ob_start() ไว้บนสุด กับ ob_end_flush() ไว้ล่างสุด ของเผจครับ
Code (PHP)
ob_start(); //ไว้บนสุดของเผจ
if (!isset($_COOKIE["viewboard"])){
$viewq=$rsq['view_ques'];
$viewq++;
$sql1="UPDATE question SET view_ques='$viewq' WHERE id_ques='$_GET[id_ques]'";
$query1=mysql_query($sql1);
setcookie("viewboard", "abcd", time()+120);
} else {
}
ob_end_flush(); //ไว้ล่างสุดของเผจ
ประวัติการแก้ไข 2011-07-13 10:22:59
Date :
2011-07-13 10:14:29
By :
tomrambo
อ้อ มันทำงาน แบบนี้ ครับ
คลิกเข้าไปมัน ไม่ได้เ พิ่มทันที นะครับ
มันรอเวลาครบเวลาที่กำหนดถึงจะเพิ่มครับ
ผมเข้าใจถูเปล่า
แต่จากโค้ด คลิกเข้ามา มันน่าเพิ่มเลยนะครับผมว่า งงนิดนึ่ง
เพิ่มแล้ว สร้าง$_COOKIE มา เวลาผ่านไป 2นาที ทำลาย$_COOKIE ถึงเพิ่มใหม่
Date :
2011-07-13 10:22:46
By :
ckcr
งั้นลองแบบนี้ครับ
Code (PHP)
ob_start(); //ไว้บนสุดของเผจ
if ($_COOKIE["viewboard"]!="abcd"){
$sql1="UPDATE question SET view_ques=view_ques+1 WHERE id_ques='$_GET[id_ques]'";
$query1=mysql_query($sql1);
setcookie("viewboard", "abcd", time()+5);
} else {
}
ob_end_flush(); //ไว้ล่างสุดของเผจ
ประวัติการแก้ไข 2011-07-13 10:30:56 2011-07-13 10:32:06
Date :
2011-07-13 10:29:56
By :
tomrambo
ไม่มันเข้า เงื่อนไขเลยครับ
แปลกทำไม ผม echo ค่า $_COOKIEไม่ขึ้นเลย
Date :
2011-07-13 10:57:58
By :
ckcr
เอ...แต่ผมลองทำที่เครื่องผม ไม่มีปัญหาน่ะครับ
สรุป มันเข้าเงื่อนไขเลย หรือ ไม่เข้าเงื่อนไขเลยครับ งงที่พิมพ์มาน่ะครับ
ยังไงลองเคลีย cookei ดูนะครับ แล้วลองใหม่ ลองเซ็ตเวลาสัก 30 วิ
ถ้ายังไม่ได้ลองนำหน้านั้นทั้งหน้ามาดูโค๊ด หน่อยครับ
Date :
2011-07-13 11:13:50
By :
tomrambo
Code (PHP)
<? ob_start(); ?>
<? include "include/config.php";?>
<? include "include/function.php";?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
<title>WEBboard</title>
</head>
<?php
$sql="select * from question where id_ques='$_GET[id_ques]'";
$query=mysql_query($sql);
$rsq=mysql_fetch_array($query);
if ($_COOKIE["viewboard"]!="abcd"){
$sql1="UPDATE question SET view_ques=view_ques+1 WHERE id_ques='$_GET[id_ques]'";
$query1=mysql_query($sql1);
//$sql1="UPDATE question SET view_ques='$viewq' WHERE id_ques='$_GET[id_ques]'";
//$query1=mysql_query($sql1);
echo $sql1;
setcookie("viewboard","abcd", time()+30);
}else{}
?>
<? //////////////////////////////////////////////////////////////////////////////////
if($_POST['send'] == 'ok') {
$_detail_aus=autolink($_POST['detail_aus']);
if($_POST['detail_aus']=="" )
{
$msn="กรุณาพิมพ์รายละเอียดคำตอบด้วย";
}elseif($_POST['name_ans']==""){
$msn="กรุณาพิมพ์ชื่อผู้ตอบด้วย";
}
else
{
if ($_FILES['img_aus']['name'] != "")
{
$path = "img_webboard" ;
if(!is_dir($path)){
mkdir($path,0777) ; }
$Upload_name=$_FILES['img_aus']['name'];
$Upload_Type=$_FILES['img_aus']['type'];
if (($Upload_Type == "image/gif")
|| ($Upload_Type == "image/pjpeg") || ($Upload_Type == "image/jpeg")
&& ($_FILES["img_aus"]["size"] < 50000))
{
$Path_Upload_server=$_FILES['img_aus']['tmp_name']; //ที่เก็บไฟล์ tmp บน server
$rand = rand(1111,9999); // random ? 1-9 ?
$new_name=$rand.$Upload_name;
$name_img_aus="$path/$new_name";
copy("$Path_Upload_server","$name_img_aus");
$sql="INSERT INTO answer (name_ans,detail_aus,id_ques,time_aus,img_aus)
VALUES('$_POST[name_ans]','".nl2br($_detail_aus)."','$_GET[id_ques]',now(),'$name_img_aus')";
$query=mysql_query($sql);
if (!$query)
{
die('Error: ' . mysql_error());
}
//exit();
$ok="ok";
$msnok= "<font color=#000>กรุณารอสักครู่....</font>"; ;
echo "<META HTTP-EQUIV=Refresh Content=0;URL='view_ques.php?id_ques=$_GET[id_ques]'>";
}
else
{
$msn="ไฟล์ไม่ถูกต้อง หรือ ขนาดไฟลืรูปเกิน 50k";
}
}
else{
$sql="INSERT INTO answer (name_ans,detail_aus,time_aus,id_ques)values('$_POST[name_ans]','".nl2br($_detail_aus)."',now(),'$_GET[id_ques]')";
$query=mysql_query($sql);
if (!$query)
{
die('Error: ' . mysql_error());
}
// echo $detail_aus;
//echo $sql;
//exit();
//$ok="ok";
//$msnok= "<font color=#000>กรุณารอสักครู่....</font>";
echo "<META HTTP-EQUIV=Refresh Content=0;URL='view_ques.php?id_ques=$_GET[id_ques]'>";
}
}
}
?>
<body>
<!--ส่วนพื้นที่ทั้ง หมดของเว็บ -->
<div id="allbody">
<div id="inallbody">
<!--ส่วนบนเว็บ haeder -->
<? include "include/haeder.php";?>
<div id="content">
<?///////////////////////////////////////////////////////////////////////
if ($msn!=""){?>
<center><span style="color:red; font-size=15px;"> <?=$msn?>
</span></center>
<?
}
else
{
?>
<table>
<tr>
<th > เรื่อง
<?=$rsq['name_ques']?>
</th>
</tr>
<tr>
<td class="datapost">
<div style="display:block; border:0px solid #09C;word-wrap:break-word; ">
<?php if(is_file($rsq['img_ques'])){ ?>
<img src="<?=$rsq['img_ques'] ?>" width="150" height="120">
<?php } else { }?>
<p><?=$rsq['detail_ques'] ?> </p>
</div>
</td>
</tr>
<tr>
<td class="bule" > ผู้ตั้งคำถาม
<?=$rsq['name'] ?>
เวลา
<?=$rsq['time_ques'] ?> ip <?= substr($rsq['ip_ques'],0,strrpos($rsq['ip_ques'],".")).".xxx"; ?> viwe <?=$rsq['view_ques']?></td>
</tr>
</table>
<?
////////////////////////////////////////////////////////////////////////////////
$sql="SELECT * FROM answer WHERE id_ques='$_GET[id_ques]' ORDER BY id_ans DESC ";
$query=mysql_query($sql);
$numrow=mysql_num_rows($query);
?>
<? if($numrow!=0){ ?>
<p>All Comments:<?=$numrow ?> Pages:</p>
<? $i=1;
while($rs=mysql_fetch_array($query)){?>
<?
if($i%2==1){
$calss="";
}else{
$calss="bule";
}
//echo $rs['img_aus'];
//echo $_GET[id_ques]; ?>
<hr/>
<table style="border:0; ">
<tr style=" background:#ff8040;">
<td width="819">เรื่อง
<?=$rsq['name_ques'] ?></td>
<td width="69" >
<? if($_SESSION['admin']!='admin'){
?>
แจ้งลบ
<?
}else{
?>
ลบ
<?
}
?>
</td>
</tr>
<tr>
<td colspan="2" >
<div class="posta" >
<?php if(is_file($rs['img_aus'])){ ?>
<img src="<?=$rs['img_aus'] ?>" width="150" height="120">
<?php } else { }?>
<p><?=$rs['detail_aus'] ?> </p>
</div></td>
</tr>
<tr>
<td colspan="2" style=" background:#ffd5bf;">ผู้ตอบ
<?=$rs['name_ans']." "?>
เวลา
<?=$rs['time_aus'] ?></td>
</tr>
</table>
<? }?>
<? }else{
}}
//////////////////////////////////////////////////////////////////////////
?>
<hr/>
<form action="" method="post" enctype="multipart/form-data" name="myform">
<table style="width:300px; ">
<tr>
<td colspan="2" class="bule">
<textarea name="detail_aus" id="detail_aus" cols="120" rows="10" style="overflow:hidden; "><?=nl2br($_POST[detail_aus])?></textarea></td>
</tr>
<tr>
<td colspan="2" class="bule">
<table style="border:0px; width:700px; ">
<tr>
<td width="121">รูปประกอบ </td>
<td width="761"><input type="file" name="img_aus" id="fileField"></td>
</tr>
<tr>
<td>ชื่อผู้ตอบ </td>
<td><input type="text" name="name_ans" id="textfield" value="<?=$_POST[name_ans]?>"></td>
</tr>
</table></td>
</tr>
<tr>
<td class="bule">
<input name="send" type="hidden" id="send" value="ok"></td>
<td class="bule"><input type="submit" name="button" id="button" value="Submit"> <input type="reset" name="button2" id="button2" value="Reset"></td>
</tr>
</table>
</form>
</div>
<? include "include/footter.php";?>
</div>
</div>
</body>
</html>
<? ob_end_flush()?>
Date :
2011-07-13 11:42:48
By :
ckcr
ทดสอบตามลิงค์ที่ให้มาแล้วครับ ปกติดีครับ ไม่มีปัญหา แต่ผมว่า
การเซ็ต cookei ควรจะเป็น value แต่ละหัวข้อดีกว่านะครับ เพราะบางคนเปิด หัวข้อนี้ปุ๊บ แล้วปิด
แล้วไปเปิดหัวข้อใหม่ ในขณะที่ อายุของ cookei ยังไม่หมด มันก็จะหลายเป็นว่าไม่ทำการเพิ่มค่าในหัวข้อนั้นๆครับ
Date :
2011-07-13 12:08:00
By :
tomrambo
ตรงนี้ปัญหาที่ผมบอกครับ
เพราะบางคนเปิด หัวข้อนี้ปุ๊บ แล้วปิดเลยไม่เพิ่ม
การเซ็ต cookei ควรจะเป็น value แต่ละหัวข้อดีกว่านะครับ ตรงยกตัวได้ไหมครับ
ใส่ value ตรงไหน นึกภาพไม่ออกครับ
ผมเข้าใจพี่แล้ว คือ ทำให้ค่า ชื่อ ของ cookei แต่ละข้อหัวไม่เหมือนกัน
ขอบคุณครับ เจ๋งมาก
ประวัติการแก้ไข 2011-07-13 16:11:05 2011-07-13 16:13:13 2011-07-13 16:27:51 2011-07-13 16:50:08
Date :
2011-07-13 16:02:36
By :
ckcr
ถ้าไม่อยากใช้ Cookies ลองใช้ Session ก็ได้ครับ
Date :
2011-07-16 19:58:02
By :
webmaster
cookie เขียนลงแล้ว ต้อง refresh ก่อนถึงจะดึงค่ามาใช่ได้เลย ไม่เหมือน session
Date :
2011-07-16 21:02:40
By :
PlaKriM
ใช่ครับ Cookie ถูกเขียนไว้ที่ Browser จะต้อง refresh อีกครั้งก่อนถึงจะได้ค่ากลับมา
Date :
2011-07-16 21:09:34
By :
webmaster
แล้วถ้าเป็น session ต้องเขียนไงครับลอง ยกตัว อย่างให้ดูหน่อยครับ
แนวทางเขียนคร่าวๆหน่อยครับ ผมจะลองมาเปรียบเทียบแตกต่างดูครับ
Date :
2011-07-17 12:43:28
By :
ckcr
ประมาณนี้น่ะครับ
session_start(); // ไว้บรรทัดบนสุด
if ($_SESSION['id_board']!=$_GET['id_ques']){
$sql1="UPDATE question SET view_ques=view_ques+1 WHERE id_ques='$_GET[id_ques]'";
$query1=mysql_query($sql1);
$_SESSION['id_board'] = $_GET['id_ques'];
}
ประวัติการแก้ไข 2011-07-17 13:42:56
Date :
2011-07-17 13:42:26
By :
tomrambo
เป็น $_SESSION['s'] จะกำหนด เวลาได้ไหมครับ
Date :
2011-07-17 15:39:16
By :
ckcr
ได้ครับ เขียนเป็น function เอาครับ
function setSessionTime($_timeSecond){
if(!isset($_SESSION['ses_time_life'])){
$_SESSION['ses_time_life']=time();
}
if(isset($_SESSION['ses_time_life']) && time()-$_SESSION['ses_time_life']>$_timeSecond){
if(count($_SESSION)>0){
foreach($_SESSION as $key=>$value){
unset($$key);
unset($_SESSION[$key]);
}
}
}
}
setSessionTime(30); // กำหนดอายุของ SESSION ค่าเป็นวินาที
ประวัติการแก้ไข 2011-07-17 18:26:41
Date :
2011-07-17 16:42:42
By :
tomrambo
ขอบคุณครับ
Date :
2011-07-17 17:53:59
By :
ckcr
สุดยอดครับ
อ่านเมื่อวันที่ 29 ส.ค. 2555
ได้ผลจิงๆ
Date :
2012-08-29 10:00:41
By :
sambrazil
ขอบคุณมากเลยคะ ทำอยู่นาน
Date :
2012-12-07 15:33:08
By :
เด็กอนุบาล
ขอบคุณครับได้ของเล่นเอาไปติดเว็บอีกแล้ว
Date :
2012-12-08 12:32:08
By :
oxWillxo
ขอบคุณครับยังใช้ได้อยู่ครับ
Date :
2018-07-14 04:42:59
By :
lchampl123
Load balance : Server 02