Счетчик не увеличивается в PHP / MySQL - PullRequest
5 голосов
/ 17 октября 2011

Мне нужно создать счетчик для раздела участника (подсчитать, сколько раз пользователь вошел в систему).

У меня есть следующий скрипт (counter.php):

<?php
    $conn = mysql_connect("localhost", "myuser", "mypass");
    mysql_select_db("test");

    $sql = "SELECT views FROM members WHERE mid = " . $_GET['mid'];     
    $result = mysql_query($sql); 
    if (!$result)
        {
        mail(ADMIN, 'Cannot Get: ' . mysql_error(), mysql_error());  
        }
    while ($row = mysql_fetch_assoc($result)) 
        {
        $count = $row['views']++; 
        }
    $query = "UPDATE members SET views = '$count' WHERE mid = " . $_GET['mid']; 
    mysql_query($query); 
    mysql_close($conn);

    // show the logo using header() and readfile(); // that part work
?>

DB:

CREATE TABLE `members` (
  `mid` int(11) NOT NULL AUTO_INCREMENT,
  `views` int(11) DEFAULT '0',
  /* etc...*/
  PRIMARY KEY (`mid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Теперь, что я делаю в своем файле .htaccess:

RewriteEngine On
RewriteRule ^img/logo([0-9]+).jpg$ /counter.php?mid=$1 [L]

но по какой-то причине мой счетчик не считается правильно. Чего мне не хватает?

Ответы [ 3 ]

12 голосов
/ 17 октября 2011

Возможно, вы могли бы просто упростить это и сделать следующее:

$query = "UPDATE members SET views = views + 1 WHERE mid = " . $_GET['mid']; 
mysql_query($query); 

if (mysql_affected_rows() == 0) {
   mail(ADMIN, 'Cannot Get: ' . mysql_error(), mysql_error());
}

mysql_close($conn);

Нет необходимости выполнять первоначальную проверку.

5 голосов
/ 17 октября 2011

используйте этот

$count = $row['views'] + 1;

или

$count = ++$row['views'];

или

$query = "UPDATE members SET views = views + 1 WHERE mid = " . $_GET['mid'];

синтаксис:

$x = 1;
$count = $x++;
// $count = 1

$x = 1;
$count = ++$x;
// $count = 2
2 голосов
/ 17 октября 2011

Проблема в строке

$count = $row['views']++; 

Это на самом деле говорит:
- Присвойте значение просмотра $ count
- Приращение просмотров.

Но вы хотите:

$count = ++$row['views']; 

В котором говорится:
- Инкрементные представления.
- Назначить (увеличенное) значение представления для $ count

Небольшая разница.: ~)

...