teddy пишет:Код, который указан ниже, позволяет пользователям лайкать ту или иную статью не более 1 раза
он позволяет лайкнуть одному пользователю только один раз подряд. Если после него лайкнет статью. другой пользователь - то первый может сделать это снова.
teddy пишет: mysql_query("SELECT `id` FROM `articles` WHERE `wholike`='$wholike'");
"UPDATE `articles` SET `likecounter`=`likecounter`+1,`wholike`='$wholike' WHERE `id`='$like'"
В likecounter Вы храните количество проголосовавших, но при этом в wholike Вы записываете только один единственный логин.
Самое простое решение - это просто дописывать логины проголосовавших в поле wholike, разделяя их каким-нибудь уникальным симовлом - например ;(точка с запятой)
Для это следует изменить строку №7 Вашего кода на:
при этом часть запроса WHERE `wholike`='$wholike' изменится на `wholike` LIKE '%;$wholike;%'", так как указанное поле будет содержать список имен (логинов) обрамленных знаком ; (например - ";логин1;;логин2;;логин3;")
в итоге массив $row будет содержать как номер статьи, так и список проголосовавших.
Далее строка №19 (Update)преобразуется в такой вид:
PHP:
скопировать код в буфер обмена
$wholike = $row['wholike'].';'.$wholike.';'; $likequery = "UPDATE `articles` SET `likecounter`=`likecounter`+1,`wholike`='$wholike' WHERE `id`='$like'";
то есть в переменной $wholike Вы накапливаете список всех логинов, разделяя их знаком ; и добавляя последнего проголосовавшего в конец списка.
Учтите, что показанные изменения приведены в соответствии с уровнем написания Вашего кода и не могут применяться на реальных рабочих проектах, а указанны лишь с целью подтолкнуть Вас на поиск решения задачи.
Более правильным способом, конечно, было бы хранение не имен, а ID пользователей лайкнувших статью в отдельной таблице. К примеру, она (таблица like_articles) может иметь три столбца:
- nomer -- поле-инкремент, порядковый номер записи в таблице
- id_article -- ID статьи
- id_user -- ID проголосовавшего пользователя
связь таблицы со статьями и таблицы с голосами осуществляется по полю с номером статьи.
При голосовании за статью идет поиск пары ключей (id_article, id_user) на предмет их наличия в таблице like_articles.
Если пара будет найдена - значит юзер уже голосовал, если нет - значит он делает это для указанной статьи первый раз. После чего Вам нужно сделать два запроса к Базе данных - добавить код юзвера и номер статьи в таблицу like_articles и увеличить количество голосов в таблице articles(Отредактировано автором: 22 Мая, 2013 - 09:16:43)
|