2014-09-09 2 views
0

Я пробовал несколько методов, но я могу получить его только для подсчета. Я думаю, что что-то не так с моей базой данных? Когда я сброшу свою базу данных coloumn «count» на 0 и обновит страницу, она будет равна 1, но после этого больше не будет.php и mysql hit counter, считая только один раз

<?php 
function update_count() { 
    $query = "SELECT `count` FROM `hits`"; 
    if($query_run = mysql_query($query)) { 
     $count++; 
     echo $count; 
     $query_count = "UPDATE `hits` set `count`='$count'"; 
     mysql_query($query_count); 
    } 
} 
update_count(); 
?> 
+0

Что вы пытаетесь сделать? – Jenz

+1

Вы проверяете, успешно ли выполнялся запрос, вы не возвращаете никаких данных из запроса, поэтому '$ count' ничего не оценивает – Luke

+0

его счетчик хитов, я хочу, чтобы он добавлял 1 каждый раз, когда кто-то вводит мой сайт или обновляется – kensil

ответ

3

Это потому, что при обновлении страницы $count теряется, вам нужно повторно из базы данных:

$query = "SELECT `count` as cnt FROM `hits`"; 
$results = mysql_query($query); 
$count = mysql_fetch_array($result); // take only the first row. 
print_r($count['cnt']); 

Простая записка, mysql_* функции устарели использование mysqli_* или prepared statements.

+1

Спасибо, я думаю, я понял, я добавил $ count = mysql_result ($ query_run, 0, 'count'); до count ++, так что он знает предыдущее значение? я прав? – kensil

+1

Добро пожаловать. –

2

Когда вы обновляете свою страницу (или запускаете свой скрипт снова), нет «прямой» памяти предыдущего выполнения. Ваше значение $count теряется, когда скрипт заканчивается. (И даже если вы звонили update_count несколько раз в свой код, $count установлен только в пределах вашей функции)

Если вы хотите достичь чего-то подобного, вам нужно будет как-то сохранить этот счет: в cookie, в базе данных или (но, вероятно, наихудший способ) непосредственно в файле.

+0

Спасибо за ответ – kensil

1

Вы не назначаете счет в своей базе данных переменной, а просто увеличиваете новую переменную (которая должна вызывать ошибку - Примечание: неопределенная переменная: count ... - вы проверили ошибку?), присваивая значение вашей базы данных. Следовательно, почему вы всегда получаете 1 - вы создаете новое значение 0 и добавляете 1 к нему каждый раз, когда вы обновляете.

Вам потребуется -

$row = mysql_fetch_row($result); 
$count = $row[0]; 
$count++; 

Примечание Я рекомендовал бы вам не использовать счет в качестве имени поля в базе данных, как это зарезервированное слово в MySQL, так и PHP. Это может вызвать непредвиденные ошибки/выход. Try having a look at this thread.

Попробуйте это (assuming you have PDO and your connection declared), как уже указывалось, логика, с которой вы работаете, ошибочна в ваших запросах.

function updateCount() { 

# Update count 
$queryUpdate = $db->prepare('UPDATE hits SET hitcount = hitcount + 1'); 
$queryUpdate->execute(); 

# Get the updated count value 
$queryCount = $dbo->('SELECT hitcount FROM hits'); 
$queryCount->execute(); 

    # Check that a result is returned and assign result 
    if ($result = $queryCount->fetch(PDO::FETCH_OBJ) { 
    return $result->hitcount; 
    } 

} 

# Echo returned value 
$value = updateCount(); 
echo $value; 
+1

Спасибо за ответ – kensil

+0

Если у вас есть время, посмотрите в mysqli, как указано выше, верхним ответом или, желательно, PDO. Это того стоит, и писать и читать легче. – iamgory