2013-05-26 2 views
0

Так что я пытаюсь сделать счетчик попаданий уникальным для каждого имени пользователя.MYSQL Hit Counter

Я пытаюсь сделать так, чтобы, если имя пользователя не находится в базе данных, оно вставляет имя пользователя в поле с именем пользователя и вставляет 1 как количество кликов в вещь, называемую кликом.

Если имя пользователя уже существует, я хочу, чтобы оно было добавлено к существующему значению кликов. Я пытаюсь сделать регистр нечувствительным. Однако это не работает!

$query = mysql_query("SELECT * FROM clicks WHERE username='$ytusernamecheck'"); 

    $numrows = mysql_num_rows($query); 

    if ($numrows < 0) 
    { 
     mysql_query("INSERT INTO clicks (username, clicks) 
             VALUES ('$ytusernamecheck', 1)"); 
     echo $numrows; 

    } 
    else{} 
+0

Что именно _ «не работает» _? Пожалуйста, будьте более конкретными. – Kai

ответ

0

Возможно, вам следует создать уникальный индекс на username и вместо этого использовать this;

-- first do: CREATE UNIQUE INDEX ix_clicks ON clicks(username); 

INSERT INTO clicks VALUES ('username', 1) 
    ON DUPLICATE KEY UPDATE clicks = clicks + 1; 

Он будет делать вставку/обновление за одну операцию без дополнительного запроса к базе данных.

An SQLfiddle to test with.

1

Есть две ошибки в этой строке:

if ($numrows = '') 
  1. Вы назначаете (=), не сравнивая значения (== или ===).
  2. mysql_num_rows() возвращает целое число, а не пустую строку.

Ваш конечный результат должен выглядеть следующим образом:

if ($numrows === 0) 

FYI, you shouldn't use mysql_* functions in new code. Они больше не поддерживаются and are officially deprecated. См. red box? Узнайте о prepared statements вместо этого, и используйте PDO или MySQLi - this article поможет вам решить, какой. Если вы выберете PDO, here is a good tutorial.

+1

Извините, я могу быть слепым. где у него есть ($ numrows = '') – Drew

+1

Они отредактировали свой пост после того, как я отправил свой ответ. Это раздражает, когда они это делают. –

+0

любой, кто хочет сказать, что было сделано редактирование относительно определенного вербального слова, когда оно не получило от меня всплеск! поэтому +1 как правильный ответ – Drew

0

Почему бы не установить уникальный ключ на поле имя пользователя и использовать это вместо

mysql_query("INSERT INTO clicks (username, clicks) VALUES ('$ytusernamecheck', 1) 
on duplicate key update clicks=clicks+1"); 

только один SQL заявление, чтобы выполнить этот путь