-1

我正在尝试在网站中实现一个简单的脚本,以计算访问次数最多的页面并将前 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 字段将被更新,但不是“计数”字段(在这种情况下,错误处理会返回一个错误'..)。我确定我在这里遗漏了一些简单的东西,因为这两个脚本基本上是相同的问题..

4

3 回答 3

1

更新仅更新现有行。您需要先添加具有给定页面名称和计数为 0 的行,然后更新才能增加计数。

或者,试试这个 SQL:

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

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

于 2013-03-03T23:26:29.393 回答
0

在您错误拼写 UPDATE 之外,这当然与您的第二个示例不同,

我还关心您在表格列 pagename 中的内容。我猜你有类似 index.php 的东西。如果是这种情况,并且您碰巧从中访问文件sub/index.php$_SERVER['PHP_SELF'];则会产生/sub/index.php因此基于您的WHERE CLAUSE. 所以尝试回显

echo $_SERVER['PHP_SELF'];

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

如果您修复了错误的 UPDATE 拼写并验证您的数据库中的内容是否与您从回显 $_SERVER['PHP_SELF']; 中获得的内容相匹配。您的第一个代码应该可以更好地工作。

于 2013-03-03T23:33:06.860 回答
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,因为 mysql 在最新版本的 PHP 中已被弃用。

于 2013-03-03T23:23:48.827 回答