Скрипт за оценка на темата

Мнозина вероятно вече са виждали работата на скриптове на различни сайтове, които позволяват на посетителите да оценяват темите (материалите), които харесват. По искане на посетителите на нашия сайт решихме да създадем наш собствен прост и универсален скрипт, който да позволи на посетителите на сайта да оценят темите, налични на сайта.

Моля, обърнете внимание, че когато оценявате тема (или променяте оценката й), оценката се променя без презареждане на страницата, което спестява ресурси на сървъра и време на посетителите.

За пример вижте малкия пример по-долу:

Можете да щракнете и да се уверите, че оценките се променят при щракване и се запазват, когато страницата се презареди. Мисля, че няма да ви е трудно да подредите оценките както ви трябва, още повече че всеки има своите предпочитания в това отношение. Както може би сте забелязали, когато рейтингът е обърнат (ако посетителят промени решението си), сумата се променя с две точки наведнъж, т.к. първо, предишната оценка се анулира и след това се добавя нова.

А сега нека да преминем директно към самия скрипт, за да получите на вашия сайт възможността да оценява тези посетители. За да работи скриптът правилно, ще трябва да включите библиотеката jQuery (това е необходимо, за да оставяте оценки без презареждане на страницата):

Вие също ще трябва да направите малки промени в съществуващата MySQL база данни, а именно да добавите две нови полета към таблицата със съществуващи теми (в нашия пример нека се наричанишки):плюсиминус. В тези полета ще съхраняваме общата стойност на положителните и отрицателните оценки, дадени на определена тема.

Сега ще трябва да създадете PHP файл, нареченrating.php, който ще обработва получените оценки и ще ги въвежда в MySQL. Можете да изтеглите товафайл под връзкатаrating.rarили го създайте сами, като поставите следния код вътре:

php if (isset( $_POST [ "id" ]) and is_numeric ( $_POST [ "id" ])) $object = $_POST [ "id" ]; else $object = '' ; if (isset( $_POST [ "ocenka" ]) и ( $_POST [ "ocenka" ]== 0 или $_POST [ "ocenka" ]== 1 )) $ocenka = $_POST [ "ocenka" ]; друго $ocenka = '' ;

if ( $object != '' and $ocenka != '' ) $ip = $_SERVER [ 'REMOTE_ADDR' ]; $db = mysqli_connect ("localhost", "login", "password", "database name"); $res = mysqli_query ( $db , "SELECT count(id),value FROM rating WHERE theme_ > . $object . "' and ip=INET_ATON('" . $ip . "')" ); $number = mysqli_fetch_array ( $res );

if ( $number [ 0 ]== 0 ) $res = mysqli_query ( $db , "INSERT INTO rating (date,theme_id,ip,value) values ​​​​ ('" . time (). "','" . $object . "',INET_ATON('" . $ip . "'),'" . $ocenka . "')" ); if ( $ocenka == 0 ) $res = mysqli_query ( $db , "АКТУАЛИЗИРАНЕ на нишки SET minus=(minus+1) WHERE > . $object . "' LIMIT 1" ); else $res = mysqli_query ( $db , "АКТУАЛИЗИРАНЕ на нишки SET plus=(plus+1) WHERE > .$ обект. "'ГРАНИЦА 1" ); > elseif ( $number [ "value" ]!= $ocenka ) $res = mysqli_query ( $db , "UPDATE rating SET date='" . time (). "',value= '" . $ocenka . "' WHERE theme_ > . $object . "' and ip=INET_ATON('" . $ip . "')" ); if ( $ocenka == 0 ) $res = mysqli_query ( $db , "АКТУАЛИЗИРАНЕ на нишки SET minus=(minus+1), plus=(plus-1) WHERE > . $object . "' LIMIT 1" ); else $res = mysqli_query ( $db , "АКТУАЛИЗИРАНЕ на нишки SET plus=(plus+1), minus=(minus-1) WHERE > . $object . "' LIMIT 1" ); >

$res = mysqli_query ( $db , "SELECT plus,minus FROM threads WHERE > . $object . "' LIMIT 1" ); $rating = mysqli_fetch_array ( $res); echo ( $rating [ плюс ]- $rating [ минус ]); > ?>

След това във всички теми на сайта, които искате да оцените, трябва да добавите два кода. Първият код отпечатва първоначалната оценка на темата и съдържа формуляр за оценка:

php $обект = 111; //id на текущата тема

$db = mysqli_connect ("localhost", "login", "password", "database name"); $res = mysqli_query ( $db , "ИЗБЕРЕТЕ плюс, минус FROM нишки WHERE > . $object . "' LIMIT 1" ); $rating = mysqli_fetch_array ( $res );

echo '' ; echo ' ' .( $rating [ "плюс" ]- $rating [ "минус" ]). ' ' ; ехо '' ; ?>

Важният момент в този код е да присвоите на променливата$objectидентификатора (id) на темата, която ще бъде оценена. защото структурата на сайтовете е различна за всеки, тогава не добавихме MySQL заявка, за да я получим, т.к със сигурност някъде този идентификатор на тема вече е бил получен от базата данни MySQL по-рано.

Вторият код е необходим, за да предаде избраната оценка на файлаrating.phpи да получи общата оценка на темата, без да презарежда страницата:

тип скрипт = "text/javascript" > $( ".rating" ). click (function() jQuery . post ( "rating.php" ,< id : php echo $object ; ?>, ocenka :$( this . attr ( "alt" )>, refresh_rating ); >);

функция refresh_rating ( данни ) $( "#rating_threads" ). html (данни); >

Нека размерът на кода и описанието му не ви плашат, т.к скриптът е бърз и ще бъде много полезен за всички.