Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > counter สถิตินับคนเข้าเว็บมันนับแค่ ip เดียวต่อวันช่วยดูหน่อยครับ



 

counter สถิตินับคนเข้าเว็บมันนับแค่ ip เดียวต่อวันช่วยดูหน่อยครับ

 



Topic : 120400



โพสกระทู้ ( 88 )
บทความ ( 0 )



สถานะออฟไลน์




counter มันนับแค่ ip เดียวต่อวัน ผมเอาลงมาได้เว็บ 7 วันแล้ว สถิติก็มีแค่ 7 คนคือ 1วันต่อคนเท่านั้นเอง ผมลงสถิติของเว็บนอก histats.com ไว้เปรียบเทียบด้วย ซึ่งของ histats มันประมาณ 30 คน/วันครับ ช่วยดูหน่อยครับ

เอาโค้ดมาจาก https://www.thaicreate.com/php/forum/097888.html (ในหัวข้อตอบ No.2)

DB

Code (SQL)
CREATE TABLE `tb_counter` (
  `date_visit` varchar(30) NOT NULL,
  `ip_visit` varchar(30) NOT NULL,
  `agent_visit` varchar(30) NOT NULL,
  `count_visit` int(12) NOT NULL default '1'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;



Code (PHP)
//Check IP on DATE//
date_default_timezone_set("Asia/Bangkok");
$date = date("Y-m-d");
$ip = $_SERVER["REMOTE_ADDR"];
$agent = getenv("HTTP_USER_AGENT");

$sql_ctime ="SELECT * FROM tb_counter WHERE date_visit ='$date'";
$result_ctime = mysql_query($sql_ctime);
$row_ctime = mysql_fetch_array($result_ctime);
	if ($row_ctime <= 0) {
		$sql_counter = "INSERT INTO tb_counter (date_visit, ip_visit, agent_visit, count_visit) VALUES('$date', '$ip', '$agent', '1')";
		mysql_query($sql_counter);
	}




Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2015-12-09 10:43:09 By : Meen2007 View : 3472 Reply : 16
 

 

No. 1



โพสกระทู้ ( 1,150 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

คุณก็ไม่ต้องไป select

ให้ insert ไปอย่างเดียว

เพราะ select มันเจอ มากกว่า 0 มันก็ไม่เข้าเงื่อนไข insert






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-09 10:59:27 By : progamer2000
 


 

No. 2



โพสกระทู้ ( 88 )
บทความ ( 0 )



สถานะออฟไลน์


ต้องแก้ออกมาเป็นยังไงครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-09 11:53:32 By : Meen2007
 

 

No. 3



โพสกระทู้ ( 88 )
บทความ ( 0 )



สถานะออฟไลน์


ผมลองเอาออกเหลือเพียงเท่านี้

Code (PHP)
		$sql_counter = "INSERT INTO tb_counter (date_visit, ip_visit, agent_visit, count_visit) VALUES('$date', '$ip', '$agent', '1')";
		mysql_query($sql_counter);



ปรากฏว่า คลิกรีเฟรชครั้งหนึ่งมันก็นับไปครั้งหนึ่งตลอด คือมันนับซ้ำนั่นเอง ต้องทำแบบใดครับ

(นับซ้ำตัวเลขเพิ่มขึ้นเฉพาะตรงช่องรวม Total visit: ) ส่วนช่อง Today : เพิ่มขึ้นเป็น 2 คน
เข้าไปดูในฐานข้อมูล มีเรคคอร์ด วันที่ กับ ไอพี ของผมซ้ำๆกัน ตามจำนวนรีเฟรช


ประวัติการแก้ไข
2015-12-09 12:31:12
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-09 12:09:09 By : Meen2007
 


 

No. 4

Guest


ตรง select น่าจะต้องเพิ่มเงื่อนไข AND ip_visit = '$ip' รึเปล่าครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-09 12:50:52 By : eiei
 


 

No. 5

Guest


Code (PHP)
date_default_timezone_set("Asia/Bangkok");
$date = date("Y-m-d");
$ip = $_SERVER["REMOTE_ADDR"];
$agent = getenv("HTTP_USER_AGENT");

$sql_ctime ="SELECT * FROM tb_counter WHERE date_visit ='$date' AND ip_visit = '$ip'";
$result_ctime = mysql_query($sql_ctime);
$row_ctime = mysql_fetch_array($result_ctime);
	if ($row_ctime <= 0) {
		$sql_counter = "INSERT INTO tb_counter (date_visit, ip_visit, agent_visit, count_visit) VALUES('$date', '$ip', '$agent', '1')";
		mysql_query($sql_counter);
	}else{
                $sql_counter = "update tb_counter set count_visit = count_visit + 1 where date_visit ='$date' AND ip_visit = '$ip'";
                mysql_query($sql_counter);
        } 


มั้งงงงง!
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-09 13:01:14 By : eiei
 


 

No. 6



โพสกระทู้ ( 88 )
บทความ ( 0 )



สถานะออฟไลน์


มันบวกไปครั้งละ 7 เลยครับ ทุกๆรีเฟรช

Code (PHP)
date_default_timezone_set("Asia/Bangkok");
$date = date("Y-m-d");
$ip = $_SERVER["REMOTE_ADDR"];
$agent = getenv("HTTP_USER_AGENT");

$sql_ctime ="SELECT * FROM tb_counter WHERE date_visit ='$date' AND ip_visit = '$ip'";
$result_ctime = mysql_query($sql_ctime);
$row_ctime = mysql_fetch_array($result_ctime);
	if ($row_ctime <= 0) {
		$sql_counter = "INSERT INTO tb_counter (date_visit, ip_visit, agent_visit, count_visit) VALUES('$date', '$ip', '$agent', '1')";
		mysql_query($sql_counter);
	}else{
                $sql_counter = "update tb_counter set count_visit = count_visit + 1 where date_visit ='$date' AND ip_visit = '$ip'";
                mysql_query($sql_counter);
        } 


มันบวกเพิ่มเฉพาะตรง This month: กับ Total visit: ครั้งละ 7 ทุกๆรีเฟรช ส่วน Today: 2 คนเท่าเดิม
*แต่ในฐานข้อมูลไม่มีอะไรเพิ่มเลยเท่าเดิม


ประวัติการแก้ไข
2015-12-09 13:25:14
2015-12-09 13:27:04
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-09 13:22:18 By : Meen2007
 


 

No. 7

Guest


echo ตัวไหนมาอ่ะครับ ใช่ $row_ctime['count_visit'] รึเปล่า
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-09 13:29:47 By : eiei
 


 

No. 8



โพสกระทู้ ( 88 )
บทความ ( 0 )



สถานะออฟไลน์


ของเดิมผมตามนี้ครับ

Code (PHP)
<?php

//Page View//
$sql = "SELECT * FROM tb_pageview";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$view = $row[view];
//Update Pageview//
	$view_new = $view +1;
	$sqlview = "UPDATE tb_pageview SET view='$view_new'";
	$resultview = mysql_query($sqlview);
	$pageview = str_pad($view,12);

//Check IP on DATE//
date_default_timezone_set("Asia/Bangkok");
$date = date("Y-m-d");
$ip = $_SERVER["REMOTE_ADDR"];
$agent = getenv("HTTP_USER_AGENT");

$sql_ctime ="SELECT * FROM tb_counter WHERE date_visit ='$date'";
$result_ctime = mysql_query($sql_ctime);
$row_ctime = mysql_fetch_array($result_ctime);
	if ($row_ctime <= 0) {
		$sql_counter = "INSERT INTO tb_counter (date_visit, ip_visit, agent_visit, count_visit) VALUES('$date', '$ip', '$agent', '1')";
		mysql_query($sql_counter);
	}

//Today Page//
$today = date("Y-m-d");
$sql = "SELECT count(DISTINCT(ip_visit)) AS visit FROM tb_counter WHERE date_visit = '$today'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$visit = $row[visit];
$today = str_pad($visit,12);

//Yesterday Page//
$yestday = date("Y-m-d",strtotime("-1 day"));
$sql = "SELECT SUM(count_visit) AS visit FROM tb_counter WHERE date_visit = '$yestday'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$visit = $row[visit];
$yesterday = str_pad($visit,12);

//Thismonth Page//
$thismon = date("Y-m");
$sql = "SELECT SUM(count_visit) AS visit FROM tb_counter WHERE DATE_FORMAT(date_visit, '%Y-%m') = '$thismon'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$visit = $row[visit];
$thismonth = str_pad($visit,12);

//Lastmonth Page//
$lastmon = date("Y-m",strtotime("-1 month"));
$sql = "SELECT SUM(count_visit) AS visit FROM tb_counter WHERE DATE_FORMAT(date_visit, '%Y-%m') = '$lastmon'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$visit = $row[visit];
$lastmonth = str_pad($visit,12);

//Total Visit//
$sql = "SELECT SUM(count_visit) AS visit FROM tb_counter";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$visit = $row[visit];
$total = str_pad($visit,12);

//Close MySQL//
mysql_close();

?>



<div class="counter_stat">สถิติเว็บไชต์ 

<table width="" border="0" cellspacing="0" cellpadding="0">
  <tbody>
    <tr>
      <td class="vstats-vlweek"></td>
      <td class="countext">Page view:</td>
      <td class="stat"><?=$pageview;?></td>
    </tr>
    <tr>
      <td class="vstats-vtoday"></td>
      <td class="countext">Today:</td>
      <td class="stat"><?=$today;?></td>
    </tr>
    <tr>
      <td class="vstats-vyesterday"></td>
      <td class="countext">Yesterday:</td>
      <td class="stat"><?=$yesterday;?></td>
    </tr>
    <tr>
      <td class="vstats-vxmonth"></td>
      <td class="countext">This month:</td>
      <td class="stat"><?=$thismonth;?></td>
    </tr>
    <tr>
      <td class="vstats-vlmonth"></td>
      <td class="countext">Last month:</td>
      <td class="stat"><?=$lastmonth;?></td>
    </tr>
    <tr>
      <td class="vstats-vall"></td>
      <td class="countext">Total visit:</td>
      <td class="total_visit"><?=$total;?></td>
    </tr>
  </tbody>
</table>    
</div>    



แก้ไขเพิ่มเติมนิดนึง คือที่บอกว่า...แต่ในฐานข้อมูลไม่มีอะไรเพิ่มเลยเท่าเดิม มันเพิ่ม เข้ามาเป็นเลข 5 ห้าตัวสุดท้ายเป็น IP ของผมคนเดียว ตามรูป ปกติ count_visit จะเป็นครั้งละ1 แต่พอเปลี่ยนเป้นโค้ดของท่าน มันก้เปลี่ยนเป้นเลข5ครับผม




ประวัติการแก้ไข
2015-12-09 13:38:15
2015-12-09 13:38:45
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-09 13:37:30 By : Meen2007
 


 

No. 9



โพสกระทู้ ( 88 )
บทความ ( 0 )



สถานะออฟไลน์


มีท่านใดทราบใหมครับ ว่าต้องแก้แบบใด ให้มันนับ IP หลายๆ IP ลงเรคคอร์ดใหม่เสมอๆ ที่เป็นอยู่คือมันไม่ยอมลงเรคคอร์ดใหม่ มันลงครั้งเดียว แล้วเลิกเลย มันก็ได้เพียงวันละ 1 คนเท่านั้น
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-09 17:43:34 By : Meen2007
 


 

No. 10



โพสกระทู้ ( 1,636 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

กำหนด uniquekey ให้กับ date_visit, ip_visit ห้ามซ้ำวัน + ip

แล้ว insert โดยไม่ต้องตรวจเช็คอะไรทั้งสิ้น
error ก็ไม่ต้องสนใจโดยใส่ @ หน้าคำสั่งคิวรี่ @mysql_query( '....' );

ถ้ามันซ้ำมันจะไม่เข้าให้ เอวังด้วยประการฉะนี้

Code (PHP)
date_default_timezone_set("Asia/Bangkok");
$date = date("Y-m-d");
$ip = $_SERVER["REMOTE_ADDR"];
$agent = getenv("HTTP_USER_AGENT");

$sql_counter = "INSERT INTO tb_counter (date_visit, ip_visit, agent_visit, count_visit) VALUES('$date', '$ip', '$agent', '1')";
@mysql_query($sql_counter);




ประวัติการแก้ไข
2015-12-09 20:07:18
2015-12-09 20:07:45
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-09 20:05:20 By : NewbiePHP
 


 

No. 11



โพสกระทู้ ( 88 )
บทความ ( 0 )



สถานะออฟไลน์


ถ้า unique key ให้กับ date_visit มันก็ได้แค่วันเดียว คนเดียว ส่วนคนอื่นๆ มาในวันเดียวกันหลายๆคนก็ไม่อาจลงได้ ผมเข้าใจถูกใหมครับ
ส่วน uniquekey ให้กับ ip_visit ห้ามซ้ำ IP ผมทดลองข้ามวันดู หลังเที่ยงคืนไปแล้ว ผมเข้าเว็บใหม่มันก็ไม่นับให้ผมเป็นคนเข้าเว็บในวันใหม่ สรุปคือ unique key ให้กับ ip_visit มันได้แค่ครั้งเดียวจริงๆ เหมือนกับวันที่ เคยใช้ IP นี่เข้าแล้ว วันอื่นๆมาเข้าอีก มันก็ห้ามซ้ำ มันก็ไม่เก็บเข้าเรคคอร์ด เงิบครับ มันจะไม่นับคนที่เคยเข้ามาแล้วอีกเลย


ประวัติการแก้ไข
2015-12-10 00:26:08
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-09 23:17:00 By : Meen2007
 


 

No. 12



โพสกระทู้ ( 1,636 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

unique key เดียว แต่รวม 2 field ครับ ไม่ใช่ 2 unique key ครับ
เวลากำหนด มันจะมีให้เรา add field ที่ 2 3 4 ลงไปครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-10 16:32:17 By : NewbiePHP
 


 

No. 13

Guest


Code (PHP)
$sql_ctime ="SELECT * FROM tb_counter WHERE date_visit ='$date' AND ip_visit = '$ip'";
$result_ctime = mysql_query($sql_ctime);
$row_ctime = mysql_fetch_array($result_ctime);
if ($row_ctime <= 0) {
$sql_counter = "INSERT INTO tb_counter (date_visit, ip_visit, agent_visit, count_visit) VALUES('$date', '$ip', '$agent', '1')";
mysql_query($sql_counter);
}

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-10 17:55:45 By : noMerzy
 


 

No. 14



โพสกระทู้ ( 88 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณ ทุกคำตอบครับ ขอทดลองดู สัก 1วัน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-10 18:24:13 By : Meen2007
 


 

No. 15



โพสกระทู้ ( 1,636 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ควรใช้ cookie unique_timestamp เข้าไปด้วย
set_cookie('machine_id', time().rand(0,100000), time()+(3650*24*60*60));
เขาอยากจะรีเซท cookie เป็นคนใหม่ก็ชั่งเขา คงไม่ทุกคนหรอกที่ทำ

แต่ถ้าอยากเก็บ เป็น ip มันจะเห็น router เป็นบ้านหลังเดียว
หลัง rounter เป็นหลายห้อง แต่ บ้านเลขที่เดียว (ip)

หรือจะทำรวมกันทั้งหมดเพื่อดูสถิติการใช้อย่างอื่นด้วยก็แล้วแต่ความต้องการ
ส่วนการทำ unique key
[visit_date + visit_ip + visit_machine] 3 field นี้เป็น unique key เดียว
จะเป็นการเอา 3 field มาต่อกันทำเป็น index ชนิดซ้ำกันไม่ได้

ดังนั้นถ้า
2015-10-01,127.0.0.1,14444444
2015-10-02,127.0.0.1,14444444
2015-10-01,127.0.0.2,14444444
2015-10-02,127.0.0.2,14444444
ทั้ง 4 ตัวนี้สามารถ insert เข้าได้หมด

ส่วนวิธีการคิวรี่
Code (PHP)
$sql = "replace into table 
select d, ip, ck, ag, sum(s)  
from (
   select '$date' as d, '$ip' as ip, '$_COOKIE[machine_id] as mc,  '$agent' as ag, 1 as s 
   union all 
   select * from table where visit_date='$date' and visit_ip='$ip' and visit_machine='$_COOKIE[machine_id]'
) as t
";


เมื่อใช้วิธีการนี้ ก็ผ่านขั้นตอนการร้องขอข้อมูล-และส่งกลับ จาก database ไป 1 รอบ 2 ขั้นตอน

คำสั่ง replace จำทำการลบข้อมูลที่มี unique key เหมือนกัน
แล้วถึงค่อย insert ข้อมูลเข้าไปใหม่


ประวัติการแก้ไข
2015-12-11 08:56:22
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-11 08:53:44 By : NewbiePHP
 


 

No. 16



โพสกระทู้ ( 88 )
บทความ ( 0 )



สถานะออฟไลน์


เยี่ยมครับ ขอบคุณมากครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-12 00:45:22 By : Meen2007
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : counter สถิตินับคนเข้าเว็บมันนับแค่ ip เดียวต่อวันช่วยดูหน่อยครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่