2009-10-14 3 views
0

Мне было интересно, как я могу изменить свой код, чтобы он мог подсчитывать просмотры страниц для каждой страницы при наличии нескольких страниц и отображать правильные просмотры страниц для каждой страницы.Счетчик страниц с использованием PHP и MySQL?

Вот мой код php ниже.

//Adds one to the counter 
$mysqli = new mysqli("localhost", "root", "", "sitename"); 
$dbc = mysqli_query($mysqli,"UPDATE counter SET counter = counter + 1"); 

//Retreives the current count 
$count = mysqli_fetch_row(mysqli_query($mysqli,"SELECT counter FROM counter")); 

if (!$dbc) 
{ 
    // There was an error...do something about it here... 
    print mysqli_error(); 
} 

И вот мой код MySQL.

CREATE TABLE `counter` (`counter` INT(20) NOT NULL); 
INSERT INTO counter VALUES (0); 

Это был мой альтернативный стол раньше.

CREATE TABLE `counter` (
    `id` int(11) NOT NULL auto_increment, 
    `ip` varchar(15) NOT NULL default '', 
    `page` varchar(100) NOT NULL default '', 
    PRIMARY KEY (`id`), 
KEY `ip` (`ip`,`page`) 
) 

Это был мой старый счетчик страниц, который я пытаюсь совместить с моим новым счетчиком страниц.

//Get the viewer's IP Address and the page he/she is viewing 
$ip = $_SERVER['REMOTE_ADDR']; 
$page = $_SERVER['PHP_SELF']; 

//Check that the IP is not already listed for the current page 
$viewer_check_query = "SELECT * FROM counter WHERE ip = '$ip' AND page = '$page'"; 
$viewer_check_result = mysql_query($viewer_check_query); 
$viewer_check_numrows = mysql_num_rows($viewer_check_result); 
    //If numrows is equal to zero, then the user is new 
    if($viewer_check_numrows == 0){ 
     //Add the new entry 
     $viewer_new_query = "INSERT INTO counter (ip, page) VALUES 
     ('$ip', '$page')"; 
     $viewer_new_result = mysql_query($viewer_new_query); 
    } 

//Get the total number of viewers for this page 
$viewer_total_query = "SELECT * FROM counter WHERE page = '$page'"; 
$viewer_total_result = mysql_query($viewer_total_query); 
$viewer_total_numrows = mysql_num_rows($viewer_total_result); 
+2

домашнее задание? что вы пробовали, каков ваш план действий, ваша идея, как это решить? – markus

+0

какую еще информацию вам нужно сделать? где бы вы его сохранили? как бы вы его сохранили, как запросить его? – markus

+0

не размещайте здесь код, внесите изменения в свой вопрос! – markus

ответ

1

Вам необходимо добавить поле «путь», которое будет содержать путь к вашей странице.

CREATE TABLE `counter` (`counter` INT(20) NOT NULL, 
      `path` VARCHAR(255) IS NOT NULL); 

И в вашем запросе вы создаете новый пустой счетчик, если он еще не существует. И вы увеличиваете его, если он уже существует.

$mysqli = new mysqli("localhost", "root", "", "sitename"); 

// We get the counter the current URL 
$counter = mysqli_query($mysqli, "SELECT counter 
            FROM counter 
            WHERE `path` = '" . $_SERVER['REQUEST_URI'] . "'"; 
if ($counter === NULL) 
{ 
    // If the counter does not exists yet, we create it 
    mysqli_query($mysqli, "INSERT INTO counter 
          VALUES (0, '" . $_SERVER['REQUEST_URI'] . "')"; 
} 

// And we increment the counter 
mysqli_query($mysqli, "UPDATE counter 
         SET counter = counter + 1 
         WHERE path = '" . $_SERVER['REQUEST_URI'] . "'"); 
+0

Опасайтесь, вы, должно быть, писали JS в последние часы. Вы объединяетесь с + вместо. – markus

+0

не хватило бы просто написать 'SET counter ++' – markus

+0

Более того, он писал на языке, который использует логический оператор конкатенации. ;) –

3

Я бы не рекомендовал вам обновлять базу данных «вживую». Но скорее используйте mod_log_mysql или проанализируйте файл журнала Apache «в автономном режиме».

Почему нет? Вы можете удивиться, если у вас будет много посетителей, загрузка страницы будет остановлена ​​до тех пор, пока база данных не будет обновлена. Или, если в базе данных загружена большая нагрузка, обновление остановит загрузку веб-страницы.

И еще один совет, использовать JQuery или JavaScript, чтобы написать специальный «LogEvent» в журнале апача, так что вы не будете регистрировать все искатели и т.д. Я использую следующий код:

function logger() { 
    var currenturl = location.href; 
    $.get("/logthis", { url: currenturl }); 
} 
$(document).ready(function(){ 
    logger(); 
}); 
Смежные вопросы