台灣最大程式設計社群網站
線上人數
1356
 
會員總數:246276
討論主題:189811
歡迎您免費加入會員
討論區列表 >> PHP >> 判斷ip,同ip當天只算一筆問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
判斷ip,同ip當天只算一筆問題
價值 : 40 QP  點閱數:1046 回應數:10
樓主

Li41
初學者
51 44
774 81
發送站內信

捐贈 VP 給 Li41
我的需求為

判斷瀏覽者IP,同一個IP當天內只會算一筆

程式檢查也沒問題,但為什麼同一個IP當天還是會寫入好幾筆(有些正常,有些不正常)



不正常的資料如下:

124.155.163.143 2012-04-26 03:14:05
124.155.163.143 2012-04-26 03:14:21
124.155.163.143 2012-04-26 03:14:26
124.155.163.143 2012-04-26 03:14:42
124.155.163.143 2012-04-26 03:14:44
124.155.163.143 2012-04-26 03:14:47
124.155.163.143 2012-04-26 03:14:49
124.155.163.143 2012-04-26 03:14:50
124.155.163.143 2012-04-26 03:14:55
124.155.163.143 2012-04-26 03:14:56
124.155.163.143 2012-04-26 03:14:59
124.155.163.143 2012-04-26 03:15:10

本篇文章發表於2012-04-26 14:05
1樓
回應

鯨魚
檢舉此回應
ip='$ip' 是這裡的問題 ip永遠不會等於'$ip'
本篇文章回覆於2012-04-26 14:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

Li41
捐贈 VP 給 Li41 檢舉此回應
$ip = get_ip();

ip='$ip' 這是沒問題的喔

不相信你可以試看看
本篇文章回覆於2012-04-26 14:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

Kuann
檢舉此回應
看起來沒甚麼問題,試試看把判斷資料的部分改成這樣



我有遇過明明有資料,但是用 mysql_num_rows 卻怎麼抓都是 0 的情形過。
本篇文章回覆於2012-04-26 15:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

Li41
捐贈 VP 給 Li41 檢舉此回應
好的,感謝Kuann,我再試看看
本篇文章回覆於2012-04-26 15:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
最有價值解答

那顆爛蔥
捐贈 VP 給 那顆爛蔥 檢舉此回應
你有確定,php的時間,跟mysql的時間是一樣的?
mysql_query("SELECT id FROM flow WHERE ip='$ip' AND YEAR(ts)=$Y AND MONTH(ts)=$M AND DAY(ts)=$D")
要query之前,有沒有確認過,到底時間有沒有正確??

這四個東西都echo出來瞧瞧
本篇文章回覆於2012-04-26 16:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
不錯的參考

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
TO:#1
那個有用雙引號包起來的。所以其$ip其實是會代入變數的。

to:Li41

一般來說單純記錄更新的記錄。我會用replace的方式來處理。可以省下一次的數量查尋。
不過我也有注意到你只要記錄第一次的記錄。所以replace的方式並非是適合的。

所以給你提幾個重點(上面有人有提到了,不過我會再重覆一下)

1.php的時間與mysql的時間要注意,由於你的資料時間是用mysql的時間為主,但是是拿php的時間做比對。如果發生php與mysql時間不同步的情況就很有可能會發生問題。一般最大的問題可能是時區。可以的話最好是存php時間用php時間做比對是最好的,不用去擔心這個問題。

2.如果比對的時間是年月日的話,其實mysql內有date()這個函數可以用。會將時間欄位轉換成xxxx-00-00的格式。這樣你在php就可以直接使用date("Y-m-d")一次來解決。不用再切分y m d

基本上,比較可能性的問題,因該還是時區不同的問題。所以注意一下會比較好。可以試著儲存一筆後與php的時間比較查看看。

本篇文章回覆於2012-04-26 19:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

Li41
捐贈 VP 給 Li41 檢舉此回應
感謝 那顆爛蔥 及 浩瀚星空 兩位大大的回覆

今天問題還是存在,但發現異常的資料都是外國的IP

那確定真的是時區的問題

但不解的是,php和mysql是怎麼抓時間的呢? 不是依server端主機上的時間嗎
本篇文章回覆於2012-04-27 09:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
不錯的參考

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
php有所謂的時區設定。
在未設定的情況下會依gmt+0時區為主
很多人都不知道。常常會在+0時區的情況下,去修改主機時間。

如果碰上php的設計埵陸洃嶽仱洈滷〞p。就會常常發生問題。

在linux內也有時區的設定。依照主機在不同地區可能其預設時區是不一樣。(這得看主機商是否有幫你做這些處理)

最常見的情況是~~~主機預設是+0時區,但時間調整到+8時區的時間。如果這時php未設定時區的話。就常常會發生少了8小時的情況。

另外~~~mysql內的時間函數是依據主機時區為主。但php的時間函數是依據php設定的時區為主。
看起來很像是跟伺服器時間,實際上在php內來說,會自動幫你做時區調整。
所以如果像你上面那個程式。如果兩者的時區沒統一的情況,就會發生這樣的問題。
本篇文章回覆於2012-04-27 09:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

Li41
捐贈 VP 給 Li41 檢舉此回應
了解了,感謝^^
本篇文章回覆於2012-04-27 09:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

那顆爛蔥
捐贈 VP 給 那顆爛蔥 檢舉此回應
這種常見的問題,都出在APPSERV這類的東西上...
php.ini務必加上時區
date.timezone = asia/taipei
本篇文章回覆於2012-04-27 13:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.