用于计算查看次数最多的页面的PHP脚本无法正常工作

时间:2013-03-03 23:17:05

标签: php mysql

我正在尝试将一个简单的脚本实现到一个网站中,以计算大多数访问过的页面并将前10个列表作​​为输出。作为一个业余爱好者(在php / mysql中)我无法弄清楚为什么在执行代码时字段没有填充适当的数据。

以下是代码:

$pagename = $_SERVER['PHP_SELF']; 
$sql = "UPDATED visits SET hits=hits+1 WHERE pagename='$pagename' LIMIT 1"; 
$res = mysql_query($sql); 
if(!$res) { 

} 

错误处理不显示任何错误,但表仍为空。我错过了什么? (我试图通过以mysql的root用户身份启动会话来执行此操作,因此所有权限都存在,并且我创建了字段:pagename,hits。)。 我试过使用其他代码:

*$sql = "CREATE TABLE 'yourDatabaseName'.'count' ('id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 'count' INT NOT NULL, 'page_id' INT NOT NULL) ENGINE = MyISAM;";
mysql_query($sql) or die('<p>Error, the count table was not created.</p>');
$query = "INSERT INTO count (page_id) VALUE ('$thePageID')";
mysql_query($query) or die('<p>Error, the Page ID was not entered into the table field.</p>');
$data = mysql_query("SELECT * FROM count WHERE page_id='$thePageID'")
or die(mysql_error('Could not find the page id in the count table.'));
while($info = mysql_fetch_array( $data ))
{
$count=$info['id'];
$count = $count + 1;
}
$querytwo = "UPDATE 'count' SET 'count' = '$count' WHERE 'page_id' ='$thePageID'";
mysql_query($querytwo) or die('Error, the count was not updated');*

并且page_id / id字段将被更新,但不是“count”字段(错误处理在这种情况下返回错误tho'..)。我确定我在这里遗漏了一些简单的东西,因为这两个脚本的问题基本相同..

3 个答案:

答案 0 :(得分:1)

更新仅更新现有行。在更新可以增加计数之前,您需要首先添加具有给定页面名称且首先计数为0的行。

或者,试试这个SQL:

$sql = "INSERT INTO visits (pagename, hits) VALUES ('$pagename', 0) ON DUPLICATE KEY UPDATE hits=hits+1";"

另请注意,您的SQL查询应显示为“UPDATE”而不是“UPDATED”:)

答案 1 :(得分:0)

首先想到......应该这样:

$sql = "UPDATED visits SET hits=hits+1 WHERE pagename='$pagename' LIMIT 1"; 

$sql = 'UPDATE visits SET hits=hits+1 WHERE pagename=' . mysql_real_escape_string($pagename) . ' LIMIT 1';

失败的原因是由于UPDATE(D)语句,我也修改了您的查询,因此您的$ pagename无法“注入”,请参阅:http://en.wikipedia.org/wiki/SQL_injection

您可能还想考虑使用mysqli,因为在最新版本的PHP中不推荐使用mysql。

答案 2 :(得分:0)

在UPDATE拼写错误之外,当然与第二个例子不同,

我也关心你在表格列名中的内容。我猜你有像index.php这样的东西。如果是这种情况,并且您碰巧从sub/index.php访问了文件,则$_SERVER['PHP_SELF'];会生成/sub/index.php,因此会根据您的WHERE CLAUSE返回false。所以试着回声

echo $_SERVER['PHP_SELF'];

查看结果并确保数据库具有相同的值,目录和文件名。因为我看不到你在那里有什么,我也猜测你在那里也有文件扩展名,没有额外的字符。

如果您修复了错误的UPDATE拼写,并验证您的数据库中的内容与回显$ _SERVER ['PHP_SELF']的内容相匹配;你的第一个代码应该更好。