我创建了一个页面计数器,并希望跟踪用户点击该页面的次数。
到目前为止,我可以跟踪他们点击该页面的次数,但我现在想要设置它,以便在一周后它将创建一个新条目。
我的mysql_query查找基于用户的名字,看到我正在跟踪多个用户。
这是我用于跟踪所选页面的用户的代码:
<?php
include"lib/settings.php";
date_default_timezone_set("America/Los_Angeles");
$track_users_clicks = $_SESSION['username'];
$todays_date = date("m/d/Y H:i:s a");
$query = "SELECT * FROM page_count WHERE `username`=".sql_val($track_users_clicks);
$result = mysql_query($query) or die("<b>A fatal MySQL error occured</b>.<br />Query: ".$query."<br />Error: (".mysql_errno().") ".mysql_error());
while ($row = mysql_fetch_assoc($result)) {
$username = $row['username'];
$counter_snippet = $row['counter_snippet'];
$date_time = $row['date_time'];
}//end while
if ($_SERVER['REMOTE_ADDR']){
$query_update = 'UPDATE page_count SET
`counter_snippet` = '.sql_val($counter_snippet + 1).',
`date_time` = '.sql_val($todays_date).'
WHERE `username` = '.sql_val($track_users_clicks);
$result = mysql_query($query_update) or die("<b>A fatal MySQL error occured</b>.<br />Query: ".$query_update."<br />Error: (".mysql_errno().") ".mysql_error());
}
?>
到目前为止,我已经提出了每周跟踪用户的信息:
<?php
include"lib/settings.php";
date_default_timezone_set("America/Los_Angeles");
//$track_users_clicks = $_SESSION['username'];
$todays_date = date("m/d/Y");
$begin_date = date("m/d/Y");
$end_date = date( "m/d/Y", strtotime($begin_date."+7 day" ) );
$user_log = "trevor.hanes" .$end_date;
$track_users_clicks = "trevor.hanes";
$query_begin = "SELECT * FROM date_time WHERE `username`=".sql_val($track_users_clicks);
$result = mysql_query($query_begin) or die("<b>A fatal MySQL error occured</b>.<br />Query: ".$query_begin."<br />Error: (".mysql_errno().") ".mysql_error());
while ($row = mysql_fetch_assoc($result)) {
$username = $row['username'];
$counter_snippet = $row['counter_snippet'];
$start_date = $row['start_date'];
//$end_date = $row['end_date'];
}
if ($todays_date >= $end_date){
$query_start = 'INSERT INTO date_time (
`username`,
`start_date`,
`end_date`,
`user_log`
) VALUES (
'.sql_val($track_users_clicks).',
'.sql_val($todays_date).',
'.sql_val($end_date).',
'.sql_val($user_log).'
)';
$result = mysql_query($query_start) or die("<b>A fatal MySQL error occured</b>.<br />Query: ".$query_start."<br />Error: (".mysql_errno().") ".mysql_error());
}
else
{
if ($_SERVER['REMOTE_ADDR']){
if ($end_date >= $todays_date){
$query_update = 'UPDATE date_time SET
`counter_snippet` = '.sql_val($counter_snippet + 1).'
WHERE `end_date` = '.sql_val($end_date);
$result = mysql_query($query_update) or die("<b>A fatal MySQL error occured</b>.<br />Query: ".$query_update."<br />Error: (".mysql_errno().") ".mysql_error());
}}}
echo $begin_date;
echo "<BR>";
echo $end_date;
echo "<BR>";
echo $user_log;
?>
所以我的问题是,一旦我在结束日期之前更改日期,它就会不断创建新的表条目。而不是为新周创建一个新的表条目,然后更新命中。
对我做错了什么的想法。
答案 0 :(得分:1)
首先要做的是:你需要使用准备好的陈述。准备好的语句可以防止恶意代码严重影响您的数据库。例如,如果您通过将以下文本输入$ _SESSION [&#39;用户名&#39;]来配置用户权限配置不佳,则可能会丢弃整个表:
; DROP TABLE page_count;
这看起来像是一个体面的PDO教程(在PHP中使用预准备语句的最常用方法):http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers
无论如何,要真正回答您的问题,请使用如下查询:
SELECT *, YEARWEEK(date_time) as week,
FROM page_count WHERE `username` = :USERNAME
GROUP BY week;
YEARWEEK的文档: http://www.techonthenet.com/mysql/functions/yearweek.php