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,027

HOME > PHP > PHP Forum > สอบถามเรื่องนับนับจำนวนผู้เข้าชมตามตัวอย่างที่มีใน Web Thai Create



 

สอบถามเรื่องนับนับจำนวนผู้เข้าชมตามตัวอย่างที่มีใน Web Thai Create

 



Topic : 136058



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



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




จาก Link https://www.thaicreate.com/community/php-counter-day-yesterday-thismonth-lastmonth-year-lastyear.html

ผมได้ลองทำตามโดยเปลี่ยนจาก DB Mysql เป็น SQL Server ได้ตามนี้
Code (PHP)
<?php error_reporting(E_ERROR | E_PARSE); ?>
<?php
	//*** By Weerachai Nukitram ThaiCreate.Com ***//

	//*** Connect MySQL ***//
	include('connect.php');

	//*** Select วันที่ในตาราง Counter ว่าปัจจุบันเก็บของวันที่เท่าไหร่  ***//
	//*** ถ้าเป็นของเมื่อวานให้ทำการ Update Counter ไปยังตาราง daily และลบข้อมูล เพื่อเก็บของวันปัจจุบัน ***//
	$strSQL = "SELECT TOP 1 DATE FROM counter order by id_counter desc";
	$objQuery = sqlsrv_query($conn, $strSQL);
	$objResult = sqlsrv_fetch_array($objQuery);
	if($objResult["DATE"] != date("Y-m-d"))
	{	
		//*** บันทึกข้อมูลของเมื่อวานไปยังตาราง daily ***//
		$strSQL = " INSERT INTO daily (DATE,NUM) 
		SELECT '".date('Y-m-d',strtotime("-1 day"))."',COUNT(*) AS intYesterday 
		FROM  counter 
		WHERE 1 AND DATE = '".date('Y-m-d',strtotime("-1 day"))."'";

		//*** ลบข้อมูลของเมื่อวานในตาราง counter ***//
		$strSQL = " DELETE FROM counter WHERE DATE != '".date("Y-m-d")."' ";
		sqlsrv_query($conn, $strSQL);
	}
	//*** Insert Counter ปัจจุบัน ***//
	$strSQL = " INSERT INTO counter (DATE,IP) VALUES ('".date("Y-m-d")."','".$_SERVER["REMOTE_ADDR"]."') ";
	sqlsrv_query($conn, $strSQL);

	//******************** Get Counter ************************//

	// Today //
	$strSQL = " SELECT COUNT(DATE) AS CounterToday FROM counter WHERE DATE = '".date("Y-m-d")."' ";
	$objQuery = sqlsrv_query($conn, $strSQL);
	$objResult = sqlsrv_fetch_array($objQuery);
	$strToday = $objResult["CounterToday"];

	// Yesterday //
	$strSQL = " SELECT NUM FROM daily WHERE DATE = '".date('Y-m-d',strtotime("-1 day"))."' ";
	$objQuery = sqlsrv_query($conn, $strSQL);
	$objResult = sqlsrv_fetch_array($objQuery);
	$strYesterday = $objResult["NUM"];

	// This Month //
	$strSQL = " SELECT SUM(NUM) AS CountMonth FROM daily WHERE DATE_FORMAT(DATE,'%Y-%m')  = '".date('Y-m')."' ";
	$objQuery = sqlsrv_query($conn, $strSQL);
	$objResult = sqlsrv_fetch_array($objQuery);
	$strThisMonth = $objResult["CountMonth"];

	// Last Month //
	$strSQL = " SELECT SUM(NUM) AS CountMonth FROM daily WHERE DATE_FORMAT(DATE,'%Y-%m')  = '".date('Y-m',strtotime("-1 month"))."' ";
	$objQuery = sqlsrv_query($conn, $strSQL);
	$objResult = sqlsrv_fetch_array($objQuery);
	$strLastMonth = $objResult["CountMonth"];

	// This Year //
	$strSQL = " SELECT SUM(NUM) AS CountYear FROM daily WHERE DATE_FORMAT(DATE,'%Y')  = '".date('Y')."' ";
	$objQuery = sqlsrv_query($conn, $strSQL);
	$objResult = sqlsrv_fetch_array($objQuery);
	$strThisYear = $objResult["CountYear"];

	// Last Year //
	$strSQL = " SELECT SUM(NUM) AS CountYear FROM daily WHERE DATE_FORMAT(DATE,'%Y')  = '".date('Y',strtotime("-1 year"))."' ";
	$objQuery = sqlsrv_query($conn, $strSQL);
	$objResult = sqlsrv_fetch_array($objQuery);
	$strLastYear = $objResult["CountYear"];

	//*** Close MySQL ***//
	sqlsrv_close($conn);
?>

<table width="183" border="1" cellspacing = "0" cellpadding = "5">
  <tr>
    <td colspan="2"><div align="center">Statistics</div></td>
  </tr>
  <tr>
    <td width="98">Today</td>
    <td width="75"><div align="center"><?php echo number_format($strToday,0);?></div></td>
  </tr>
  <tr>
    <td>Yesterday</td>
    <td><div align="center"><?php echo number_format($strYesterday,0);?></div></td>
  </tr>
  <tr>
    <td>This Month </td>
    <td><div align="center"><?php echo number_format($strThisMonth,0);?></div></td>
  </tr>
  <tr>
    <td>Last Month </td>
    <td><div align="center"><?php echo number_format($strLastMonth,0);?></div></td>
  </tr>
  <tr>
    <td>This Year </td>
    <td><div align="center"><?php echo number_format($strThisYear,0);?></div></td>
  </tr>
  <tr>
    <td>Last Year </td>
    <td><div align="center"><?php echo number_format($strLastYear,0);?></div></td>
  </tr>
</table>


ผมปรากฏคือ มันนับจำนวนวันที่เป็น Today แต่พอเปลี่ยนวัน มันลบ Today ออก แต่ตรง Yesterday ลงมา มันไม่มีข้อมูลเลย
Code (PHP)
$strSQL = " INSERT INTO daily (DATE,NUM) 
		SELECT '".date('Y-m-d',strtotime("-1 day"))."',COUNT(*) AS intYesterday 
		FROM  counter 
		WHERE 1 AND DATE = '".date('Y-m-d',strtotime("-1 day"))."'";


เหมือนว่าบรรทัดข้างบนนี้นี้มันไม่ทำงาน และมันก็ไม่ขึ้น ERROR ฟ้องอะไรเลย ... เลยอยากจะถามว่าผมควรแก้ไขตรงไหนครับ

อีกอย่างที่อยากถามคือ ผมไม่เข้าใจตรง
Code (PHP)
WHERE 1 AND DATE = '".date('Y-m-d',strtotime("-1 day"))

ตรงเลข 1 คืออะไร มากจาไหน
ขอบคุณครับ



Tag : PHP, Ms SQL Server 2016









ประวัติการแก้ไข
2021-04-08 16:01:02
2021-04-08 16:02:13
2021-04-08 16:08:29
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2021-04-08 15:59:36 By : yutthanagorn View : 627 Reply : 2
 

 

No. 1



โพสกระทู้ ( 4,720 )
บทความ ( 8 )



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


ตอบเฉพาะเลข 1

เลข 1 ใน WHERE คือความหมายเหมือนกับ true

อย่างเช่น WHERE 1 AND ... ก็จะได้ความหมายประมาณว่า ถ้าเป็นจริงและ... ซึ่งมันไม่มีอะไรมางัดมาตรวจว่าอะไรคือจริง ดังนั้น WHERE 1 อีกนัยหนึ่งคือผ่านตลอด ไม่มีอะไร เอาไว้เฉยๆ

ปกติการเขียนแบบนี้จะเอาไว้เพื่อไม่ต้องใช้ if ตรวจสอบอะไรมากมายวุ่นวาย
ยกตัวอย่าง ถ้าหากมีหลายเงื่อนไขใน SQL มันจะต้องใช้ if ตรวจสอบประมาณนี้

Code (PHP)
$sql = 'SELECT * FROM `table`';

if (isset($_POST['name']) OR isset($_POST['age'])) {
    $sql .= ' WHERE';
}

if (isset($_POST['name'])) {
    $sql .= ' `name` = \'' . $_POST['name'] . '\'';
}

if (isset($_POST['name']) && isset($_POST['age'])) {
    $sql .= ' AND';
}

if (isset($_POST['age'])) {
    $sql .= ' `age` = \'' . $_POST['age'] . '\'';
}
// ข้างบนตัวอย่างไม่ดีเพราะไม่ได้ escape ป้องกัน sql injection อย่าเอาอย่าง แค่ยกมาให้ดูเฉยๆ



ในขณะที่ถ้าเอา WHERE 1 มาใช้จะเหลือแค่นี้
Code (PHP)
$sql = 'SELECT * FROM `table` WHERE 1';

if (isset($_POST['name'])) {
    $sql .= ' AND `name` = \'' . $_POST['name'] . '\'';
}

if (isset($_POST['age'])) {
    $sql .= ' AND `age` = \'' . $_POST['age'] . '\'';
}
// ข้างบนตัวอย่างไม่ดีเพราะไม่ได้ escape ป้องกัน sql injection อย่าเอาอย่าง แค่ยกมาให้ดูเฉยๆ


นี่แค่ 2 เงื่อนไข ซึ่งในความจริงบางงาน WHERE condition มีหลักสิบก็มีมาแล้ว ก็ลองคิดดูว่าจะต้อง if ยาวเหยียดขนาดไหน

อันนี้คงเข้าใจ WHERE 1 บ้างแล้ว








ประวัติการแก้ไข
2021-04-09 16:03:27
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-04-09 16:02:10 By : mr.v
 


 

No. 2



โพสกระทู้ ( 4,720 )
บทความ ( 8 )



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


อีกอย่างหนึ่ง คำว่า date เป็นคำสงวน https://dev.mysql.com/doc/refman/8.0/en/keywords.html

การใช้คอลัมน์ที่มีชื่อว่า date, DATE ควรจะต้องครอบด้วย backtick

ตัวอย่าง `date`
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-04-09 16:07:34 By : mr.v
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถามเรื่องนับนับจำนวนผู้เข้าชมตามตัวอย่างที่มีใน Web Thai Create
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ 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 02
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 อัตราราคา คลิกที่นี่